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

Change-Id: Iaddebd733ccc713ab80ea21a7b287ab14d837df5
diff --git a/.appveyor.yml b/.appveyor.yml
index d5c7225..07e269b 100644
--- a/.appveyor.yml
+++ b/.appveyor.yml
@@ -7,7 +7,7 @@
 os: Visual Studio 2013
 
 platform:
-  - Any CPU
+  - x64
 
 configuration:
   - Debug
@@ -17,6 +17,13 @@
   only:
     - master
 
+# Travis advances the master-tot tag to current top of the tree after
+# each push into the master branch, because it relies on that tag to
+# upload build artifacts to the master-tot release. This will cause
+# double testing for each push on Appveyor: one for the push, one for
+# the tag advance. Disable testing tags.
+skip_tags: true
+
 clone_depth: 5
 
 matrix:
@@ -39,3 +46,45 @@
 test_script:
   - ctest -C %CONFIGURATION% --output-on-failure
   - cd ../Test && bash runtests
+  - cd ../build
+
+after_test:
+  # For debug build, the generated dll has a postfix "d" in its name.
+  - ps: >-
+      If ($env:configuration -Match "Debug") {
+        $env:SUFFIX="d"
+      } Else {
+        $env:SUFFIX=""
+      }
+  - cd install
+  # Zip all glslang artifacts for uploading and deploying
+  - 7z a glslang-master-windows-"%PLATFORM%"-"%CONFIGURATION%".zip
+    bin\glslangValidator.exe
+    include\glslang\*
+    include\SPIRV\*
+    lib\glslang%SUFFIX%.lib
+    lib\HLSL%SUFFIX%.lib
+    lib\OGLCompiler%SUFFIX%.lib
+    lib\OSDependent%SUFFIX%.lib
+    lib\SPIRV%SUFFIX%.lib
+    lib\SPVRemapper%SUFFIX%.lib
+    lib\SPIRV-Tools%SUFFIX%.lib
+    lib\SPIRV-Tools-opt%SUFFIX%.lib
+
+artifacts:
+  - path: build\install\*.zip
+    name: artifacts-zip
+
+deploy:
+  - provider: GitHub
+    auth_token:
+      secure: YglcSYdl0TylEa59H4K6lylBEDr586NAt2EMgZquSo+iuPrwgZQuJLPCoihSm9y6
+    release: master-tot
+    description: "Continuous build of the latest master branch by Appveyor and Travis CI"
+    artifact: artifacts-zip
+    draft: false
+    prerelease: false
+    force_update: true
+    on:
+      branch: master
+      APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013
diff --git a/.travis.yml b/.travis.yml
index 0237d25..4fe4b5e 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -11,8 +11,11 @@
 dist: trusty
 
 env:
-  - GLSLANG_BUILD_TYPE=Release
-  - GLSLANG_BUILD_TYPE=Debug
+  global:
+    - secure: aGFrgzyKp+84hKrGkxVWg8cHV61uqrKEHT38gfSQK6+WS4GfLOyH83p7WnsEBb7AMhzU7LMNFdvOFr6+NaMpVnqRvc40CEG1Q+lNg9Pq9mhIZLowvDrfqTL9kQ+8Nbw5Q6/dg6CTvY7fvRfpfCEmKIUZBRkoKUuHeuM1uy3IupFcdNuL5bSYn3Beo+apSJginh9DI4BLDXFUgBzTRSLLyCX5g3cpaeGGOCr8quJlYx75W6HRck5g9SZuLtUoH9GFEV3l+ZEWB8noErW+J56L03bwNwFuuAh321evw++oQk5KFa8rlDvar3SJ3b1RHB8u/eq5DBYMyaK/fS8+Q7QbGr8diF/wDe68bKO7U9IhpNfExXmczCpExjHomW5TQv4rYdGhygPMfW97aIsPRYyNKcl4fkmb7NDrM8w0Jscdq2g5c2Kz0ItyZoBri/NXLwFQQjaVCs7Pf97TjuMA7mK0GJmDTRzi6SrDYlWMt5BQL3y0CCojyfLIRcTh0CQjQI29s97bLfQrYAxt9GNNFR+HTXRLLrkaAlJkPGEPwUywlSfEThnvHLesNxYqemolAYpQT4ithoL4GehGIHmaxsW295aKVhuRf8K9eBODNqrfblvM42UHhjntT+92ZnQ/Gkq80GqaMxnxi4PO5FyPIxt0r981b54YBkWi8YA4P7w5pNI=
+  matrix:
+    - GLSLANG_BUILD_TYPE=Release
+    - GLSLANG_BUILD_TYPE=Debug
 
 compiler:
   - clang
@@ -75,3 +78,46 @@
       ctest --output-on-failure &&
       cd ../Test && ./runtests;
     fi
+
+after_success:
+  # For debug build, the generated dll has a postfix "d" in its name.
+  - if [[ "${GLSLANG_BUILD_TYPE}" == "Debug" ]]; then
+      export SUFFIX="d";
+    else
+      export SUFFIX="";
+    fi
+  # Create tarball for deployment
+  - if [[ ${CC} == clang* && "${BUILD_NDK}" != "ON" ]]; then
+      cd ../build/install;
+      export TARBALL=glslang-master-${TRAVIS_OS_NAME}-${GLSLANG_BUILD_TYPE}.zip;
+      zip ${TARBALL}
+        bin/glslangValidator
+        include/glslang/*
+        include/SPIRV/*
+        lib/libglslang${SUFFIX}.a
+        lib/libHLSL${SUFFIX}.a
+        lib/libOGLCompiler${SUFFIX}.a
+        lib/libOSDependent${SUFFIX}.a
+        lib/libSPIRV${SUFFIX}.a
+        lib/libSPVRemapper${SUFFIX}.a
+        lib/libSPIRV-Tools${SUFFIX}.a
+        lib/libSPIRV-Tools-opt${SUFFIX}.a;
+    fi
+
+before_deploy:
+  # Tag the current top of the tree as "master-tot".
+  # Travis CI replies on the tag name to properly push to GitHub Releases.
+  - git config --global user.name "Travis CI"
+  - git config --global user.email "builds@travis-ci.org"
+  - git tag -f master-tot
+  - git push -q -f https://${glslangtoken}@github.com/KhronosGroup/glslang --tags
+
+deploy:
+  provider: releases
+  api_key: ${glslangtoken}
+  on:
+    branch: master
+    condition: ${CC} == clang* && ${BUILD_NDK} != ON
+  file: ${TARBALL}
+  skip_cleanup: true
+  overwrite: true
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 0d453cc..9a869c2 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -9,6 +9,14 @@
 # Adhere to GNU filesystem layout conventions
 include(GNUInstallDirs)
 
+option(BUILD_SHARED_LIBS "Build Shared Libraries" OFF)
+
+set(LIB_TYPE STATIC)
+
+if(BUILD_SHARED_LIBS)
+    set(LIB_TYPE SHARED)
+endif()
+
 option(SKIP_GLSLANG_INSTALL "Skip installation" ${SKIP_GLSLANG_INSTALL})
 if(NOT ${SKIP_GLSLANG_INSTALL})
   set(ENABLE_GLSLANG_INSTALL ON)
@@ -94,9 +102,12 @@
 
 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")
+    add_definitions(-DENABLE_OPT=1)
+else()
+    if(ENABLE_HLSL)
+        message(STATUS "spirv-tools not linked - illegal SPIRV may be generated for HLSL")
+    endif()
+    add_definitions(-DENABLE_OPT=0)
 endif()
 
 add_subdirectory(glslang)
diff --git a/OGLCompilersDLL/InitializeDll.cpp b/OGLCompilersDLL/InitializeDll.cpp
index 2eb912c..abea910 100644
--- a/OGLCompilersDLL/InitializeDll.cpp
+++ b/OGLCompilersDLL/InitializeDll.cpp
@@ -38,13 +38,17 @@
 
 #include "InitializeDll.h"
 #include "../glslang/Include/InitializeGlobals.h"
-
 #include "../glslang/Public/ShaderLang.h"
+#include "../glslang/Include/PoolAlloc.h"
 
 namespace glslang {
 
 OS_TLSIndex ThreadInitializeIndex = OS_INVALID_TLS_INDEX;
 
+// Per-process initialization.
+// Needs to be called at least once before parsing, etc. is done.
+// Will also do thread initialization for the calling thread; other
+// threads will need to do that explicitly.
 bool InitProcess()
 {
     glslang::GetGlobalLock();
@@ -85,7 +89,9 @@
     return true;
 }
 
-
+// Per-thread scoped initialization.
+// Must be called at least once by each new thread sharing the
+// symbol tables, etc., needed to parse.
 bool InitThread()
 {
     //
@@ -99,17 +105,21 @@
     if (OS_GetTLSValue(ThreadInitializeIndex) != 0)
         return true;
 
-    InitializeMemoryPools();
-
     if (! OS_SetTLSValue(ThreadInitializeIndex, (void *)1)) {
         assert(0 && "InitThread(): Unable to set init flag.");
         return false;
     }
 
+    glslang::SetThreadPoolAllocator(nullptr);
+
     return true;
 }
 
-
+// Not necessary to call this: InitThread() is reentrant, and the need
+// to do per thread tear down has been removed.
+//
+// This is kept, with memory management removed, to satisfy any exiting
+// calls to it that rely on it.
 bool DetachThread()
 {
     bool success = true;
@@ -125,14 +135,18 @@
             assert(0 && "DetachThread(): Unable to clear init flag.");
             success = false;
         }
-
-        FreeGlobalPools();
-
     }
 
     return success;
 }
 
+// Not necessary to call this: InitProcess() is reentrant.
+//
+// This is kept, with memory management removed, to satisfy any exiting
+// calls to it that rely on it.
+//
+// Users of glslang should call shFinalize() or glslang::FinalizeProcess() for
+// process-scoped memory tear down.
 bool DetachProcess()
 {
     bool success = true;
@@ -140,12 +154,8 @@
     if (ThreadInitializeIndex == OS_INVALID_TLS_INDEX)
         return true;
 
-    ShFinalize();
-
     success = DetachThread();
 
-    FreePoolIndex();
-
     OS_FreeTLSIndex(ThreadInitializeIndex);
     ThreadInitializeIndex = OS_INVALID_TLS_INDEX;
 
diff --git a/OGLCompilersDLL/InitializeDll.h b/OGLCompilersDLL/InitializeDll.h
index 60b2b15..661cee4 100644
--- a/OGLCompilersDLL/InitializeDll.h
+++ b/OGLCompilersDLL/InitializeDll.h
@@ -40,8 +40,8 @@
 
 bool InitProcess();
 bool InitThread();
-bool DetachThread();
-bool DetachProcess();
+bool DetachThread();  // not called from standalone, perhaps other tools rely on parts of it
+bool DetachProcess(); // not called from standalone, perhaps other tools rely on parts of it
 
 } // end namespace glslang
 
diff --git a/README.md b/README.md
index 9d5efb5..402b4d6 100644
--- a/README.md
+++ b/README.md
@@ -49,22 +49,31 @@
 Building
 --------
 
+Instead of building manually, you can also download the binaries for your
+platform directly from the [master-tot release][master-tot-release] on GitHub.
+Those binaries are automatically uploaded by the buildbots after successful
+testing and they always reflect the current top of the tree of the master
+branch.
+
 ### Dependencies
 
+* A C++11 compiler.
+  (For MSVS: 2015 is recommended, 2013 is fully supported/tested, and 2010 support is attempted, but not tested.)
 * [CMake][cmake]: for generating compilation targets.
+* make: _Linux_, ninja is an alternative, if configured.
 * [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.
 
 ### Build steps
 
+The following steps assume a Bash shell. On Windows, that could be the Git Bash
+shell or some other shell of your choosing.
+
 #### 1) Check-Out this project 
 
 ```bash
 cd <parent of where you want glslang to be>
-# If using SSH
-git clone git@github.com:KhronosGroup/glslang.git
-# Or if using HTTPS
 git clone https://github.com/KhronosGroup/glslang.git
 ```
 
@@ -83,28 +92,27 @@
 ./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
-the build directory is `$BUILD_DIR`:
-
-For building on Linux (assuming using the Ninja generator):
+Assume the source directory is `$SOURCE_DIR` and the build directory is
+`$BUILD_DIR`. First ensure the build directory exists, then navigate to it:
 
 ```bash
+mkdir -p $BUILD_DIR
 cd $BUILD_DIR
+```
 
-cmake -GNinja -DCMAKE_BUILD_TYPE={Debug|Release|RelWithDebInfo} \
-      -DCMAKE_INSTALL_PREFIX=`pwd`/install $SOURCE_DIR
+For building on Linux:
+
+```bash
+cmake -DCMAKE_BUILD_TYPE={Debug|Release|RelWithDebInfo} \
+      -DCMAKE_INSTALL_PREFIX="$(pwd)/install" $SOURCE_DIR
 ```
 
 For building on Windows:
 
 ```bash
-cmake $SOURCE_DIR -DCMAKE_INSTALL_PREFIX=`pwd`/install
+cmake $SOURCE_DIR -DCMAKE_INSTALL_PREFIX="$(pwd)/install"
 # The CMAKE_INSTALL_PREFIX part is for testing (explained later).
 ```
 
@@ -114,7 +122,7 @@
 
 ```bash
 # for Linux:
-ninja install
+make -j4 install
 
 # for Windows:
 cmake --build . --config {Release|Debug|MinSizeRel|RelWithDebInfo} \
@@ -233,8 +241,11 @@
 void FinalizeProcess();
 
 class TShader
+    setStrings(...);
+    setEnvInput(EShSourceHlsl or EShSourceGlsl, stage,  EShClientVulkan or EShClientOpenGL, 100);
+    setEnvClient(EShClientVulkan or EShClientOpenGL, EShTargetVulkan_1_0 or EShTargetVulkan_1_1 or EShTargetOpenGL_450);
+    setEnvTarget(EShTargetSpv, EShTargetSpv_1_0 or EShTargetSpv_1_3);
     bool parse(...);
-    void setStrings(...);
     const char* getInfoLog();
 
 class TProgram
@@ -318,3 +329,4 @@
 [bison]: https://www.gnu.org/software/bison/
 [googletest]: https://github.com/google/googletest
 [bison-gnu-win32]: http://gnuwin32.sourceforge.net/packages/bison.htm
+[master-tot-release]: https://github.com/KhronosGroup/glslang/releases/tag/master-tot
diff --git a/SPIRV/CMakeLists.txt b/SPIRV/CMakeLists.txt
index b1c0277..1e32e27 100755
--- a/SPIRV/CMakeLists.txt
+++ b/SPIRV/CMakeLists.txt
@@ -14,6 +14,7 @@
     bitutils.h
     spirv.hpp
     GLSL.std.450.h
+    GLSL.ext.EXT.h
     GLSL.ext.KHR.h
     GlslangToSpv.h
     hex_float.h
@@ -39,20 +40,25 @@
          GLSL.ext.NV.h)
 endif(ENABLE_NV_EXTENSIONS)
 
-add_library(SPIRV STATIC ${SOURCES} ${HEADERS})
+add_library(SPIRV ${LIB_TYPE} ${SOURCES} ${HEADERS})
 set_property(TARGET SPIRV PROPERTY FOLDER glslang)
 set_property(TARGET SPIRV PROPERTY POSITION_INDEPENDENT_CODE ON)
 
-add_library(SPVRemapper STATIC ${SPVREMAP_SOURCES} ${SPVREMAP_HEADERS})
+add_library(SPVRemapper ${LIB_TYPE} ${SPVREMAP_SOURCES} ${SPVREMAP_HEADERS})
 set_property(TARGET SPVRemapper PROPERTY FOLDER glslang)
 set_property(TARGET SPVRemapper PROPERTY POSITION_INDEPENDENT_CODE ON)
 
+if(WIN32 AND BUILD_SHARED_LIBS)
+    set_target_properties(SPIRV PROPERTIES PREFIX "")
+    set_target_properties(SPVRemapper PROPERTIES PREFIX "")
+endif()
+
 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)
+    target_link_libraries(SPIRV glslang SPIRV-Tools-opt)
 else()
     target_link_libraries(SPIRV glslang)
 endif(ENABLE_OPT)
diff --git a/SPIRV/GLSL.ext.AMD.h b/SPIRV/GLSL.ext.AMD.h
index 7e97be3..009d2f1 100644
--- a/SPIRV/GLSL.ext.AMD.h
+++ b/SPIRV/GLSL.ext.AMD.h
@@ -27,13 +27,8 @@
 #ifndef GLSLextAMD_H
 #define GLSLextAMD_H
 
-enum BuiltIn;
-enum Capability;
-enum Decoration;
-enum Op;
-
 static const int GLSLextAMDVersion = 100;
-static const int GLSLextAMDRevision = 6;
+static const int GLSLextAMDRevision = 7;
 
 // SPV_AMD_shader_ballot
 static const char* const E_SPV_AMD_shader_ballot = "SPV_AMD_shader_ballot";
@@ -104,14 +99,10 @@
 // SPV_AMD_shader_image_load_store_lod
 static const char* const E_SPV_AMD_shader_image_load_store_lod = "SPV_AMD_shader_image_load_store_lod";
 
-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);
+// SPV_AMD_gpu_shader_half_float_fetch
+static const char* const E_SPV_AMD_gpu_shader_half_float_fetch = "SPV_AMD_gpu_shader_half_float_fetch";
 
 #endif  // #ifndef GLSLextAMD_H
diff --git a/SPIRV/GLSL.ext.EXT.h b/SPIRV/GLSL.ext.EXT.h
new file mode 100644
index 0000000..c4a2430
--- /dev/null
+++ b/SPIRV/GLSL.ext.EXT.h
@@ -0,0 +1,37 @@
+/*
+** Copyright (c) 2014-2016 The Khronos Group Inc.
+**
+** Permission is hereby granted, free of charge, to any person obtaining a copy
+** of this software and/or associated documentation files (the "Materials"),
+** to deal in the Materials without restriction, including without limitation
+** the rights to use, copy, modify, merge, publish, distribute, sublicense,
+** and/or sell copies of the Materials, and to permit persons to whom the
+** Materials are furnished to do so, subject to the following conditions:
+**
+** The above copyright notice and this permission notice shall be included in
+** all copies or substantial portions of the Materials.
+**
+** MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS
+** STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND
+** HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/
+**
+** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+** THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+** FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS
+** IN THE MATERIALS.
+*/
+
+#ifndef GLSLextEXT_H
+#define GLSLextEXT_H
+
+static const int GLSLextEXTVersion = 100;
+static const int GLSLextEXTRevision = 1;
+
+static const char* const E_SPV_EXT_shader_stencil_export        = "SPV_EXT_shader_stencil_export";
+static const char* const E_SPV_EXT_shader_viewport_index_layer  = "SPV_EXT_shader_viewport_index_layer";
+static const char* const E_SPV_EXT_fragment_fully_covered = "SPV_EXT_fragment_fully_covered";
+
+#endif  // #ifndef GLSLextEXT_H
diff --git a/SPIRV/GLSL.ext.KHR.h b/SPIRV/GLSL.ext.KHR.h
index 2eb10ae..d8ea9b6 100644
--- a/SPIRV/GLSL.ext.KHR.h
+++ b/SPIRV/GLSL.ext.KHR.h
@@ -27,10 +27,6 @@
 #ifndef GLSLextKHR_H
 #define GLSLextKHR_H
 
-enum BuiltIn;
-enum Op;
-enum Capability;
-
 static const int GLSLextKHRVersion = 100;
 static const int GLSLextKHRRevision = 2;
 
@@ -42,7 +38,5 @@
 static const char* const E_SPV_KHR_16bit_storage                = "SPV_KHR_16bit_storage";
 static const char* const E_SPV_KHR_storage_buffer_storage_class = "SPV_KHR_storage_buffer_storage_class";
 static const char* const E_SPV_KHR_post_depth_coverage          = "SPV_KHR_post_depth_coverage";
-static const char* const E_SPV_EXT_shader_stencil_export        = "SPV_EXT_shader_stencil_export";
-static const char* const E_SPV_EXT_shader_viewport_index_layer  = "SPV_EXT_shader_viewport_index_layer";
 
 #endif  // #ifndef GLSLextKHR_H
diff --git a/SPIRV/GLSL.ext.NV.h b/SPIRV/GLSL.ext.NV.h
index c01858b..148d4b4 100644
--- a/SPIRV/GLSL.ext.NV.h
+++ b/SPIRV/GLSL.ext.NV.h
@@ -51,4 +51,7 @@
 //SPV_NVX_multiview_per_view_attributes
 const char* const E_SPV_NVX_multiview_per_view_attributes = "SPV_NVX_multiview_per_view_attributes";
 
+//SPV_NV_shader_subgroup_partitioned
+const char* const E_SPV_NV_shader_subgroup_partitioned = "SPV_NV_shader_subgroup_partitioned";
+
 #endif  // #ifndef GLSLextNV_H
\ No newline at end of file
diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp
index b0e51df..d2b2dee 100755
--- a/SPIRV/GlslangToSpv.cpp
+++ b/SPIRV/GlslangToSpv.cpp
@@ -1,6 +1,7 @@
 //
 // Copyright (C) 2014-2016 LunarG, Inc.
 // Copyright (C) 2015-2016 Google, Inc.
+// Copyright (C) 2017 ARM Limited.
 //
 // All rights reserved.
 //
@@ -44,6 +45,7 @@
 namespace spv {
     #include "GLSL.std.450.h"
     #include "GLSL.ext.KHR.h"
+    #include "GLSL.ext.EXT.h"
 #ifdef AMD_EXTENSIONS
     #include "GLSL.ext.AMD.h"
 #endif
@@ -52,13 +54,12 @@
 #endif
 }
 
-#ifdef ENABLE_OPT
+#if ENABLE_OPT
     #include "spirv-tools/optimizer.hpp"
     #include "message.h"
-    #include "SPVRemapper.h"
 #endif
 
-#ifdef ENABLE_OPT
+#if ENABLE_OPT
 using namespace spvtools;
 #endif
 
@@ -78,11 +79,6 @@
 
 namespace {
 
-// 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 = 2;
-
 namespace {
 class SpecConstantOpModeGuard {
 public:
@@ -102,7 +98,14 @@
     spv::Builder* builder_;
     bool previous_flag_;
 };
-}
+
+struct OpDecorations {
+    spv::Decoration precision;
+    spv::Decoration noContraction;
+    spv::Decoration nonUniform;
+};
+
+} // namespace
 
 //
 // The main holder of information for translating glslang to SPIR-V.
@@ -111,7 +114,8 @@
 //
 class TGlslangToSpvTraverser : public glslang::TIntermTraverser {
 public:
-    TGlslangToSpvTraverser(const glslang::TIntermediate*, spv::SpvBuildLogger* logger, glslang::SpvOptions& options);
+    TGlslangToSpvTraverser(unsigned int spvVersion, const glslang::TIntermediate*, spv::SpvBuildLogger* logger,
+        glslang::SpvOptions& options);
     virtual ~TGlslangToSpvTraverser() { }
 
     bool visitAggregate(glslang::TVisit, glslang::TIntermAggregate*);
@@ -128,20 +132,27 @@
     void dumpSpv(std::vector<unsigned int>& out);
 
 protected:
+    TGlslangToSpvTraverser(TGlslangToSpvTraverser&);
+    TGlslangToSpvTraverser& operator=(TGlslangToSpvTraverser&);
+
     spv::Decoration TranslateInterpolationDecoration(const glslang::TQualifier& qualifier);
     spv::Decoration TranslateAuxiliaryStorageDecoration(const glslang::TQualifier& qualifier);
+    spv::Decoration TranslateNonUniformDecoration(const glslang::TQualifier& qualifier);
     spv::BuiltIn TranslateBuiltInDecoration(glslang::TBuiltInVariable, bool memberDeclaration);
     spv::ImageFormat TranslateImageFormat(const glslang::TType& type);
-    spv::SelectionControlMask TranslateSelectionControl(glslang::TSelectionControl) const;
-    spv::LoopControlMask TranslateLoopControl(glslang::TLoopControl) const;
+    spv::SelectionControlMask TranslateSelectionControl(const glslang::TIntermSelection&) const;
+    spv::SelectionControlMask TranslateSwitchControl(const glslang::TIntermSwitch&) const;
+    spv::LoopControlMask TranslateLoopControl(const glslang::TIntermLoop&, unsigned int& dependencyLength) const;
     spv::StorageClass TranslateStorageClass(const glslang::TType&);
+    void addIndirectionIndexCapabilities(const glslang::TType& baseType, const glslang::TType& indexType);
     spv::Id createSpvVariable(const glslang::TIntermSymbol*);
     spv::Id getSampledType(const glslang::TSampler&);
     spv::Id getInvertedSwizzleType(const glslang::TIntermTyped&);
     spv::Id createInvertedSwizzle(spv::Decoration precision, const glslang::TIntermTyped&, spv::Id parentResult);
     void convertSwizzle(const glslang::TIntermAggregate&, std::vector<unsigned>& swizzle);
     spv::Id convertGlslangToSpvType(const glslang::TType& type);
-    spv::Id convertGlslangToSpvType(const glslang::TType& type, glslang::TLayoutPacking, const glslang::TQualifier&);
+    spv::Id convertGlslangToSpvType(const glslang::TType& type, glslang::TLayoutPacking, const glslang::TQualifier&,
+        bool lastBufferBlockMember);
     bool filterMember(const glslang::TType& member);
     spv::Id convertGlslangStructToSpvType(const glslang::TType&, const glslang::TTypeList* glslangStruct,
                                           glslang::TLayoutPacking, const glslang::TQualifier&);
@@ -154,7 +165,8 @@
     glslang::TLayoutPacking getExplicitLayout(const glslang::TType& type) const;
     int getArrayStride(const glslang::TType& arrayType, glslang::TLayoutPacking, glslang::TLayoutMatrix);
     int getMatrixStride(const glslang::TType& matrixType, glslang::TLayoutPacking, glslang::TLayoutMatrix);
-    void updateMemberOffset(const glslang::TType& structType, const glslang::TType& memberType, int& currentOffset, int& nextOffset, glslang::TLayoutPacking, glslang::TLayoutMatrix);
+    void updateMemberOffset(const glslang::TType& structType, const glslang::TType& memberType, int& currentOffset,
+                            int& nextOffset, glslang::TLayoutPacking, glslang::TLayoutMatrix);
     void declareUseOfStructMember(const glslang::TTypeList& members, int glslangMember);
 
     bool isShaderEntryPoint(const glslang::TIntermAggregate* node);
@@ -169,28 +181,37 @@
     spv::Id createImageTextureFunctionCall(glslang::TIntermOperator* node);
     spv::Id handleUserFunctionCall(const glslang::TIntermAggregate*);
 
-    spv::Id createBinaryOperation(glslang::TOperator op, spv::Decoration precision, spv::Decoration noContraction, spv::Id typeId, spv::Id left, spv::Id right, glslang::TBasicType typeProxy, bool reduceComparison = true);
-    spv::Id createBinaryMatrixOperation(spv::Op, spv::Decoration precision, spv::Decoration noContraction, spv::Id typeId, spv::Id left, spv::Id right);
-    spv::Id createUnaryOperation(glslang::TOperator op, spv::Decoration precision, spv::Decoration noContraction, spv::Id typeId, spv::Id operand,glslang::TBasicType typeProxy);
-    spv::Id createUnaryMatrixOperation(spv::Op op, spv::Decoration precision, spv::Decoration noContraction, spv::Id typeId, spv::Id operand,glslang::TBasicType typeProxy);
-    spv::Id createConversion(glslang::TOperator op, spv::Decoration precision, spv::Decoration noContraction, spv::Id destTypeId, spv::Id operand, glslang::TBasicType typeProxy);
+    spv::Id createBinaryOperation(glslang::TOperator op, OpDecorations&, spv::Id typeId, spv::Id left, spv::Id right,
+                                  glslang::TBasicType typeProxy, bool reduceComparison = true);
+    spv::Id createBinaryMatrixOperation(spv::Op, OpDecorations&, spv::Id typeId, spv::Id left, spv::Id right);
+    spv::Id createUnaryOperation(glslang::TOperator op, OpDecorations&, spv::Id typeId, spv::Id operand,
+                                 glslang::TBasicType typeProxy);
+    spv::Id createUnaryMatrixOperation(spv::Op op, OpDecorations&, spv::Id typeId, spv::Id operand,
+                                       glslang::TBasicType typeProxy);
+    spv::Id createConversion(glslang::TOperator op, OpDecorations&, spv::Id destTypeId, spv::Id operand,
+                             glslang::TBasicType typeProxy);
+    spv::Id createConversionOperation(glslang::TOperator op, spv::Id operand, int vectorSize);
     spv::Id makeSmearedConstant(spv::Id constant, int vectorSize);
     spv::Id createAtomicOperation(glslang::TOperator op, spv::Decoration precision, spv::Id typeId, std::vector<spv::Id>& operands, glslang::TBasicType typeProxy);
     spv::Id createInvocationsOperation(glslang::TOperator op, spv::Id typeId, std::vector<spv::Id>& operands, glslang::TBasicType typeProxy);
     spv::Id CreateInvocationsVectorOperation(spv::Op op, spv::GroupOperation groupOperation, spv::Id typeId, std::vector<spv::Id>& operands);
+    spv::Id createSubgroupOperation(glslang::TOperator op, spv::Id typeId, std::vector<spv::Id>& operands, glslang::TBasicType typeProxy);
     spv::Id createMiscOperation(glslang::TOperator op, spv::Decoration precision, spv::Id typeId, std::vector<spv::Id>& operands, glslang::TBasicType typeProxy);
     spv::Id createNoArgOperation(glslang::TOperator op, spv::Decoration precision, spv::Id typeId);
     spv::Id getSymbolId(const glslang::TIntermSymbol* node);
-    void addDecoration(spv::Id id, spv::Decoration dec);
-    void addDecoration(spv::Id id, spv::Decoration dec, unsigned value);
-    void addMemberDecoration(spv::Id id, int member, spv::Decoration dec);
-    void addMemberDecoration(spv::Id id, int member, spv::Decoration dec, unsigned value);
     spv::Id createSpvConstant(const glslang::TIntermTyped&);
     spv::Id createSpvConstantFromConstUnionArray(const glslang::TType& type, const glslang::TConstUnionArray&, int& nextConst, bool specConstant);
     bool isTrivialLeaf(const glslang::TIntermTyped* node);
     bool isTrivial(const glslang::TIntermTyped* node);
     spv::Id createShortCircuit(glslang::TOperator, glslang::TIntermTyped& left, glslang::TIntermTyped& right);
+#ifdef AMD_EXTENSIONS
     spv::Id getExtBuiltins(const char* name);
+#endif
+    void addPre13Extension(const char* ext)
+    {
+        if (builder.getSpvVersion() < glslang::EShTargetSpv_1_3)
+            builder.addExtension(ext);
+    }
 
     glslang::SpvOptions& options;
     spv::Function* shaderEntry;
@@ -214,8 +235,10 @@
     std::unordered_set<int> rValueParameters;  // set of formal function parameters passed as rValues, rather than a pointer
     std::unordered_map<std::string, spv::Function*> functionMap;
     std::unordered_map<const glslang::TTypeList*, spv::Id> structMap[glslang::ElpCount][glslang::ElmCount];
-    std::unordered_map<const glslang::TTypeList*, std::vector<int> > memberRemapper;  // for mapping glslang block indices to spv indices (e.g., due to hidden members)
+    // for mapping glslang block indices to spv indices (e.g., due to hidden members):
+    std::unordered_map<const glslang::TTypeList*, std::vector<int> > memberRemapper;
     std::stack<bool> breakForLoop;  // false means break for switch
+    std::unordered_map<std::string, const glslang::TIntermSymbol*> counterOriginator;
 };
 
 //
@@ -423,6 +446,17 @@
         return spv::DecorationMax;
 }
 
+// If glslang type is nonUniform, return SPIR-V NonUniform decoration.
+spv::Decoration TGlslangToSpvTraverser::TranslateNonUniformDecoration(const glslang::TQualifier& qualifier)
+{
+    if (qualifier.isNonUniform()) {
+        builder.addExtension("SPV_EXT_descriptor_indexing");
+        builder.addCapability(spv::CapabilityShaderNonUniformEXT);
+        return spv::DecorationNonUniformEXT;
+    } else
+        return spv::DecorationMax;
+}
+
 // Translate a glslang built-in variable to a SPIR-V built in decoration.  Also generate
 // associated capabilities when required.  For some built-in variables, a capability
 // is generated only when using the variable in an executable instruction, but not when
@@ -484,7 +518,6 @@
         return spv::BuiltInSamplePosition;
 
     case glslang::EbvSampleMask:
-        builder.addCapability(spv::CapabilitySampleRateShading);
         return spv::BuiltInSampleMask;
 
     case glslang::EbvLayer:
@@ -505,17 +538,17 @@
     case glslang::EbvInstanceIndex:        return spv::BuiltInInstanceIndex;
 
     case glslang::EbvBaseVertex:
-        builder.addExtension(spv::E_SPV_KHR_shader_draw_parameters);
+        addPre13Extension(spv::E_SPV_KHR_shader_draw_parameters);
         builder.addCapability(spv::CapabilityDrawParameters);
         return spv::BuiltInBaseVertex;
 
     case glslang::EbvBaseInstance:
-        builder.addExtension(spv::E_SPV_KHR_shader_draw_parameters);
+        addPre13Extension(spv::E_SPV_KHR_shader_draw_parameters);
         builder.addCapability(spv::CapabilityDrawParameters);
         return spv::BuiltInBaseInstance;
 
     case glslang::EbvDrawId:
-        builder.addExtension(spv::E_SPV_KHR_shader_draw_parameters);
+        addPre13Extension(spv::E_SPV_KHR_shader_draw_parameters);
         builder.addCapability(spv::CapabilityDrawParameters);
         return spv::BuiltInDrawIndex;
 
@@ -581,6 +614,46 @@
         builder.addCapability(spv::CapabilitySubgroupBallotKHR);
         return spv::BuiltInSubgroupLtMaskKHR;
 
+    case glslang::EbvNumSubgroups:
+        builder.addCapability(spv::CapabilityGroupNonUniform);
+        return spv::BuiltInNumSubgroups;
+
+    case glslang::EbvSubgroupID:
+        builder.addCapability(spv::CapabilityGroupNonUniform);
+        return spv::BuiltInSubgroupId;
+
+    case glslang::EbvSubgroupSize2:
+        builder.addCapability(spv::CapabilityGroupNonUniform);
+        return spv::BuiltInSubgroupSize;
+
+    case glslang::EbvSubgroupInvocation2:
+        builder.addCapability(spv::CapabilityGroupNonUniform);
+        return spv::BuiltInSubgroupLocalInvocationId;
+
+    case glslang::EbvSubgroupEqMask2:
+        builder.addCapability(spv::CapabilityGroupNonUniform);
+        builder.addCapability(spv::CapabilityGroupNonUniformBallot);
+        return spv::BuiltInSubgroupEqMask;
+
+    case glslang::EbvSubgroupGeMask2:
+        builder.addCapability(spv::CapabilityGroupNonUniform);
+        builder.addCapability(spv::CapabilityGroupNonUniformBallot);
+        return spv::BuiltInSubgroupGeMask;
+
+    case glslang::EbvSubgroupGtMask2:
+        builder.addCapability(spv::CapabilityGroupNonUniform);
+        builder.addCapability(spv::CapabilityGroupNonUniformBallot);
+        return spv::BuiltInSubgroupGtMask;
+
+    case glslang::EbvSubgroupLeMask2:
+        builder.addCapability(spv::CapabilityGroupNonUniform);
+        builder.addCapability(spv::CapabilityGroupNonUniformBallot);
+        return spv::BuiltInSubgroupLeMask;
+
+    case glslang::EbvSubgroupLtMask2:
+        builder.addCapability(spv::CapabilityGroupNonUniform);
+        builder.addCapability(spv::CapabilityGroupNonUniformBallot);
+        return spv::BuiltInSubgroupLtMask;
 #ifdef AMD_EXTENSIONS
     case glslang::EbvBaryCoordNoPersp:
         builder.addExtension(spv::E_SPV_AMD_shader_explicit_vertex_parameter);
@@ -612,12 +685,12 @@
 #endif
 
     case glslang::EbvDeviceIndex:
-        builder.addExtension(spv::E_SPV_KHR_device_group);
+        addPre13Extension(spv::E_SPV_KHR_device_group);
         builder.addCapability(spv::CapabilityDeviceGroup);
         return spv::BuiltInDeviceIndex;
 
     case glslang::EbvViewIndex:
-        builder.addExtension(spv::E_SPV_KHR_multiview);
+        addPre13Extension(spv::E_SPV_KHR_multiview);
         builder.addCapability(spv::CapabilityMultiView);
         return spv::BuiltInViewIndex;
 
@@ -652,6 +725,10 @@
             builder.addCapability(spv::CapabilityPerViewAttributesNV);
         }
         return spv::BuiltInViewportMaskPerViewNV;
+    case glslang::EbvFragFullyCoveredNV:
+        builder.addExtension(spv::E_SPV_EXT_fragment_fully_covered);
+        builder.addCapability(spv::CapabilityFragmentFullyCoveredEXT);
+        return spv::BuiltInFullyCoveredEXT;
 #endif 
     default:
         return spv::BuiltInMax;
@@ -746,26 +823,42 @@
     }
 }
 
-spv::SelectionControlMask TGlslangToSpvTraverser::TranslateSelectionControl(glslang::TSelectionControl selectionControl) const
+spv::SelectionControlMask TGlslangToSpvTraverser::TranslateSelectionControl(const glslang::TIntermSelection& selectionNode) const
 {
-    switch (selectionControl) {
-    case glslang::ESelectionControlNone:        return spv::SelectionControlMaskNone;
-    case glslang::ESelectionControlFlatten:     return spv::SelectionControlFlattenMask;
-    case glslang::ESelectionControlDontFlatten: return spv::SelectionControlDontFlattenMask;
-    default:                                    return spv::SelectionControlMaskNone;
-    }
+    if (selectionNode.getFlatten())
+        return spv::SelectionControlFlattenMask;
+    if (selectionNode.getDontFlatten())
+        return spv::SelectionControlDontFlattenMask;
+    return spv::SelectionControlMaskNone;
 }
 
-spv::LoopControlMask TGlslangToSpvTraverser::TranslateLoopControl(glslang::TLoopControl loopControl) const
+spv::SelectionControlMask TGlslangToSpvTraverser::TranslateSwitchControl(const glslang::TIntermSwitch& switchNode) const
 {
-    switch (loopControl) {
-    case glslang::ELoopControlNone:       return spv::LoopControlMaskNone;
-    case glslang::ELoopControlUnroll:     return spv::LoopControlUnrollMask;
-    case glslang::ELoopControlDontUnroll: return spv::LoopControlDontUnrollMask;
-    // TODO: DependencyInfinite
-    // TODO: DependencyLength
-    default:                              return spv::LoopControlMaskNone;
+    if (switchNode.getFlatten())
+        return spv::SelectionControlFlattenMask;
+    if (switchNode.getDontFlatten())
+        return spv::SelectionControlDontFlattenMask;
+    return spv::SelectionControlMaskNone;
+}
+
+// return a non-0 dependency if the dependency argument must be set
+spv::LoopControlMask TGlslangToSpvTraverser::TranslateLoopControl(const glslang::TIntermLoop& loopNode,
+    unsigned int& dependencyLength) const
+{
+    spv::LoopControlMask control = spv::LoopControlMaskNone;
+
+    if (loopNode.getDontUnroll())
+        control = control | spv::LoopControlDontUnrollMask;
+    if (loopNode.getUnroll())
+        control = control | spv::LoopControlUnrollMask;
+    if (unsigned(loopNode.getLoopDependency()) == glslang::TIntermLoop::dependencyInfinite)
+        control = control | spv::LoopControlDependencyInfiniteMask;
+    else if (loopNode.getLoopDependency() > 0) {
+        control = control | spv::LoopControlDependencyLengthMask;
+        dependencyLength = loopNode.getLoopDependency();
     }
+
+    return control;
 }
 
 // Translate glslang type to SPIR-V storage class.
@@ -785,7 +878,7 @@
     }
 
     if (glslangIntermediate->usingStorageBuffer() && type.getQualifier().storage == glslang::EvqBuffer) {
-        builder.addExtension(spv::E_SPV_KHR_storage_buffer_storage_class);
+        addPre13Extension(spv::E_SPV_KHR_storage_buffer_storage_class);
         return spv::StorageClassStorageBuffer;
     }
 
@@ -810,6 +903,42 @@
     return spv::StorageClassFunction;
 }
 
+// Add capabilities pertaining to how an array is indexed.
+void TGlslangToSpvTraverser::addIndirectionIndexCapabilities(const glslang::TType& baseType,
+                                                             const glslang::TType& indexType)
+{
+    if (indexType.getQualifier().isNonUniform()) {
+        // deal with an asserted non-uniform index
+        if (baseType.getBasicType() == glslang::EbtSampler) {
+            if (baseType.getQualifier().hasAttachment())
+                builder.addCapability(spv::CapabilityInputAttachmentArrayNonUniformIndexingEXT);
+            else if (baseType.isImage() && baseType.getSampler().dim == glslang::EsdBuffer)
+                builder.addCapability(spv::CapabilityStorageTexelBufferArrayNonUniformIndexingEXT);
+            else if (baseType.isTexture() && baseType.getSampler().dim == glslang::EsdBuffer)
+                builder.addCapability(spv::CapabilityUniformTexelBufferArrayNonUniformIndexingEXT);
+            else if (baseType.isImage())
+                builder.addCapability(spv::CapabilityStorageImageArrayNonUniformIndexingEXT);
+            else if (baseType.isTexture())
+                builder.addCapability(spv::CapabilitySampledImageArrayNonUniformIndexingEXT);
+        } else if (baseType.getBasicType() == glslang::EbtBlock) {
+            if (baseType.getQualifier().storage == glslang::EvqBuffer)
+                builder.addCapability(spv::CapabilityStorageBufferArrayNonUniformIndexingEXT);
+            else if (baseType.getQualifier().storage == glslang::EvqUniform)
+                builder.addCapability(spv::CapabilityUniformBufferArrayNonUniformIndexingEXT);
+        }
+    } else {
+        // assume a dynamically uniform index
+        if (baseType.getBasicType() == glslang::EbtSampler) {
+            if (baseType.getQualifier().hasAttachment())
+                builder.addCapability(spv::CapabilityInputAttachmentArrayDynamicIndexingEXT);
+            else if (baseType.isImage() && baseType.getSampler().dim == glslang::EsdBuffer)
+                builder.addCapability(spv::CapabilityStorageTexelBufferArrayDynamicIndexingEXT);
+            else if (baseType.isTexture() && baseType.getSampler().dim == glslang::EsdBuffer)
+                builder.addCapability(spv::CapabilityUniformTexelBufferArrayDynamicIndexingEXT);
+        }
+    }
+}
+
 // Return whether or not the given type is something that should be tied to a
 // descriptor set.
 bool IsDescriptorResource(const glslang::TType& type)
@@ -879,13 +1008,13 @@
 // Implement the TGlslangToSpvTraverser class.
 //
 
-TGlslangToSpvTraverser::TGlslangToSpvTraverser(const glslang::TIntermediate* glslangIntermediate,
+TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion, const glslang::TIntermediate* glslangIntermediate,
                                                spv::SpvBuildLogger* buildLogger, glslang::SpvOptions& options)
     : TIntermTraverser(true, false, true),
       options(options),
       shaderEntry(nullptr), currentFunction(nullptr),
       sequenceDepth(0), logger(buildLogger),
-      builder((glslang::GetKhronosToolId() << 16) | GeneratorVersion, logger),
+      builder(spvVersion, (glslang::GetKhronosToolId() << 16) | glslang::GetSpirvGeneratorVersion(), logger),
       inEntryPoint(false), entryPointTerminated(false), linkageOnly(false),
       glslangIntermediate(glslangIntermediate)
 {
@@ -1128,6 +1257,38 @@
         else
             builder.setAccessChainLValue(id);
     }
+
+    // Process linkage-only nodes for any special additional interface work.
+    if (linkageOnly) {
+        if (glslangIntermediate->getHlslFunctionality1()) {
+            // Map implicit counter buffers to their originating buffers, which should have been
+            // seen by now, given earlier pruning of unused counters, and preservation of order
+            // of declaration.
+            if (symbol->getType().getQualifier().isUniformOrBuffer()) {
+                if (!glslangIntermediate->hasCounterBufferName(symbol->getName())) {
+                    // Save possible originating buffers for counter buffers, keyed by
+                    // making the potential counter-buffer name.
+                    std::string keyName = symbol->getName().c_str();
+                    keyName = glslangIntermediate->addCounterBufferName(keyName);
+                    counterOriginator[keyName] = symbol;
+                } else {
+                    // Handle a counter buffer, by finding the saved originating buffer.
+                    std::string keyName = symbol->getName().c_str();
+                    auto it = counterOriginator.find(keyName);
+                    if (it != counterOriginator.end()) {
+                        id = getSymbolId(it->second);
+                        if (id != spv::NoResult) {
+                            spv::Id counterId = getSymbolId(symbol);
+                            if (counterId != spv::NoResult) {
+                                builder.addExtension("SPV_GOOGLE_hlsl_functionality1");
+                                builder.addDecorationId(id, spv::DecorationHlslCounterBufferGOOGLE, counterId);
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
 }
 
 bool TGlslangToSpvTraverser::visitBinary(glslang::TVisit /* visit */, glslang::TIntermBinary* node)
@@ -1176,8 +1337,10 @@
                 spv::Id leftRValue = accessChainLoad(node->getLeft()->getType());
 
                 // do the operation
-                rValue = createBinaryOperation(node->getOp(), TranslatePrecisionDecoration(node->getOperationPrecision()),
-                                               TranslateNoContractionDecoration(node->getType().getQualifier()),
+                OpDecorations decorations = { TranslatePrecisionDecoration(node->getOperationPrecision()),
+                                              TranslateNoContractionDecoration(node->getType().getQualifier()),
+                                              TranslateNonUniformDecoration(node->getType().getQualifier()) };
+                rValue = createBinaryOperation(node->getOp(), decorations,
                                                convertGlslangToSpvType(node->getType()), leftRValue, rValue,
                                                node->getType().getBasicType());
 
@@ -1252,6 +1415,8 @@
             node->getRight()->traverse(this);
             spv::Id index = accessChainLoad(node->getRight()->getType());
 
+            addIndirectionIndexCapabilities(node->getLeft()->getType(), node->getRight()->getType());
+
             // restore the saved access chain
             builder.setAccessChain(partial);
 
@@ -1304,8 +1469,10 @@
     spv::Id right = accessChainLoad(node->getRight()->getType());
 
     // get result
-    spv::Id result = createBinaryOperation(node->getOp(), TranslatePrecisionDecoration(node->getOperationPrecision()),
-                                           TranslateNoContractionDecoration(node->getType().getQualifier()),
+    OpDecorations decorations = { TranslatePrecisionDecoration(node->getOperationPrecision()),
+                                  TranslateNoContractionDecoration(node->getType().getQualifier()),
+                                  TranslateNonUniformDecoration(node->getType().getQualifier()) };
+    spv::Id result = createBinaryOperation(node->getOp(), decorations,
                                            convertGlslangToSpvType(node->getType()), left, right,
                                            node->getLeft()->getType().getBasicType());
 
@@ -1343,10 +1510,15 @@
     if (node->getOp() == glslang::EOpArrayLength) {
         // Quite special; won't want to evaluate the operand.
 
+        // Currently, the front-end does not allow .length() on an array until it is sized,
+        // except for the last block membeor of an SSBO.
+        // TODO: If this changes, link-time sized arrays might show up here, and need their
+        // size extracted.
+
         // Normal .length() would have been constant folded by the front-end.
         // So, this has to be block.lastMember.length().
         // SPV wants "block" and member number as the operands, go get them.
-        assert(node->getOperand()->getType().isRuntimeSizedArray());
+
         glslang::TIntermTyped* block = node->getOperand()->getAsBinaryNode()->getLeft();
         block->traverse(this);
         unsigned int member = node->getOperand()->getAsBinaryNode()->getRight()->getAsConstantUnion()->getConstArray()[0].getUConst();
@@ -1383,20 +1555,23 @@
     else
         operand = accessChainLoad(node->getOperand()->getType());
 
-    spv::Decoration precision = TranslatePrecisionDecoration(node->getOperationPrecision());
-    spv::Decoration noContraction = TranslateNoContractionDecoration(node->getType().getQualifier());
+    OpDecorations decorations = { TranslatePrecisionDecoration(node->getOperationPrecision()),
+                                  TranslateNoContractionDecoration(node->getType().getQualifier()),
+                                  TranslateNonUniformDecoration(node->getType().getQualifier()) };
 
     // it could be a conversion
     if (! result)
-        result = createConversion(node->getOp(), precision, noContraction, resultType(), operand, node->getOperand()->getBasicType());
+        result = createConversion(node->getOp(), decorations, resultType(), operand, node->getOperand()->getBasicType());
 
     // if not, then possibly an operation
     if (! result)
-        result = createUnaryOperation(node->getOp(), precision, noContraction, resultType(), operand, node->getOperand()->getBasicType());
+        result = createUnaryOperation(node->getOp(), decorations, resultType(), operand, node->getOperand()->getBasicType());
 
     if (result) {
-        if (invertedType)
-            result = createInvertedSwizzle(precision, *node->getOperand(), result);
+        if (invertedType) {
+            result = createInvertedSwizzle(decorations.precision, *node->getOperand(), result);
+            builder.addDecoration(result, decorations.nonUniform);
+        }
 
         builder.clearAccessChain();
         builder.setAccessChainRValue(result);
@@ -1417,16 +1592,14 @@
                 one = builder.makeFloatConstant(1.0F);
             else if (node->getBasicType() == glslang::EbtDouble)
                 one = builder.makeDoubleConstant(1.0);
-#ifdef AMD_EXTENSIONS
             else if (node->getBasicType() == glslang::EbtFloat16)
                 one = builder.makeFloat16Constant(1.0F);
-#endif
-            else if (node->getBasicType() == glslang::EbtInt64 || node->getBasicType() == glslang::EbtUint64)
-                one = builder.makeInt64Constant(1);
-#ifdef AMD_EXTENSIONS
+            else if (node->getBasicType() == glslang::EbtInt8  || node->getBasicType() == glslang::EbtUint8)
+                one = builder.makeInt8Constant(1);
             else if (node->getBasicType() == glslang::EbtInt16 || node->getBasicType() == glslang::EbtUint16)
                 one = builder.makeInt16Constant(1);
-#endif
+            else if (node->getBasicType() == glslang::EbtInt64 || node->getBasicType() == glslang::EbtUint64)
+                one = builder.makeInt64Constant(1);
             else
                 one = builder.makeIntConstant(1);
             glslang::TOperator op;
@@ -1436,8 +1609,7 @@
             else
                 op = glslang::EOpSub;
 
-            spv::Id result = createBinaryOperation(op, precision,
-                                                   TranslateNoContractionDecoration(node->getType().getQualifier()),
+            spv::Id result = createBinaryOperation(op, decorations,
                                                    convertGlslangToSpvType(node->getType()), operand, one,
                                                    node->getType().getBasicType());
             assert(result != spv::NoResult);
@@ -1631,7 +1803,6 @@
     case glslang::EOpConstructBMat4x2:
     case glslang::EOpConstructBMat4x3:
     case glslang::EOpConstructBMat4x4:
-#ifdef AMD_EXTENSIONS
     case glslang::EOpConstructF16Mat2x2:
     case glslang::EOpConstructF16Mat2x3:
     case glslang::EOpConstructF16Mat2x4:
@@ -1641,7 +1812,6 @@
     case glslang::EOpConstructF16Mat4x2:
     case glslang::EOpConstructF16Mat4x3:
     case glslang::EOpConstructF16Mat4x4:
-#endif
         isMatrix = true;
         // fall through
     case glslang::EOpConstructFloat:
@@ -1652,16 +1822,30 @@
     case glslang::EOpConstructDVec2:
     case glslang::EOpConstructDVec3:
     case glslang::EOpConstructDVec4:
-#ifdef AMD_EXTENSIONS
     case glslang::EOpConstructFloat16:
     case glslang::EOpConstructF16Vec2:
     case glslang::EOpConstructF16Vec3:
     case glslang::EOpConstructF16Vec4:
-#endif
     case glslang::EOpConstructBool:
     case glslang::EOpConstructBVec2:
     case glslang::EOpConstructBVec3:
     case glslang::EOpConstructBVec4:
+    case glslang::EOpConstructInt8:
+    case glslang::EOpConstructI8Vec2:
+    case glslang::EOpConstructI8Vec3:
+    case glslang::EOpConstructI8Vec4:
+    case glslang::EOpConstructUint8:
+    case glslang::EOpConstructU8Vec2:
+    case glslang::EOpConstructU8Vec3:
+    case glslang::EOpConstructU8Vec4:
+    case glslang::EOpConstructInt16:
+    case glslang::EOpConstructI16Vec2:
+    case glslang::EOpConstructI16Vec3:
+    case glslang::EOpConstructI16Vec4:
+    case glslang::EOpConstructUint16:
+    case glslang::EOpConstructU16Vec2:
+    case glslang::EOpConstructU16Vec3:
+    case glslang::EOpConstructU16Vec4:
     case glslang::EOpConstructInt:
     case glslang::EOpConstructIVec2:
     case glslang::EOpConstructIVec3:
@@ -1678,16 +1862,6 @@
     case glslang::EOpConstructU64Vec2:
     case glslang::EOpConstructU64Vec3:
     case glslang::EOpConstructU64Vec4:
-#ifdef AMD_EXTENSIONS
-    case glslang::EOpConstructInt16:
-    case glslang::EOpConstructI16Vec2:
-    case glslang::EOpConstructI16Vec3:
-    case glslang::EOpConstructI16Vec4:
-    case glslang::EOpConstructUint16:
-    case glslang::EOpConstructU16Vec2:
-    case glslang::EOpConstructU16Vec3:
-    case glslang::EOpConstructU16Vec4:
-#endif
     case glslang::EOpConstructStruct:
     case glslang::EOpConstructTextureSampler:
     {
@@ -1763,10 +1937,16 @@
     case glslang::EOpMemoryBarrierImage:
     case glslang::EOpMemoryBarrierShared:
     case glslang::EOpGroupMemoryBarrier:
+    case glslang::EOpDeviceMemoryBarrier:
     case glslang::EOpAllMemoryBarrierWithGroupSync:
-    case glslang::EOpGroupMemoryBarrierWithGroupSync:
+    case glslang::EOpDeviceMemoryBarrierWithGroupSync:
     case glslang::EOpWorkgroupMemoryBarrier:
     case glslang::EOpWorkgroupMemoryBarrierWithGroupSync:
+    case glslang::EOpSubgroupBarrier:
+    case glslang::EOpSubgroupMemoryBarrier:
+    case glslang::EOpSubgroupMemoryBarrierBuffer:
+    case glslang::EOpSubgroupMemoryBarrierImage:
+    case glslang::EOpSubgroupMemoryBarrierShared:
         noReturnValue = true;
         // These all have 0 operands and will naturally finish up in the code below for 0 operands
         break;
@@ -1817,7 +1997,10 @@
         spv::Id rightId = accessChainLoad(right->getType());
 
         builder.setLine(node->getLoc().line);
-        result = createBinaryOperation(binOp, precision, TranslateNoContractionDecoration(node->getType().getQualifier()),
+        OpDecorations decorations = { precision,
+                                      TranslateNoContractionDecoration(node->getType().getQualifier()),
+                                      TranslateNonUniformDecoration(node->getType().getQualifier()) };
+        result = createBinaryOperation(binOp, decorations,
                                        resultType(), leftId, rightId,
                                        left->getType().getBasicType(), reduceComparison);
 
@@ -1915,11 +2098,15 @@
             result = createNoArgOperation(node->getOp(), precision, resultType());
             break;
         case 1:
-            result = createUnaryOperation(
-                node->getOp(), precision,
-                TranslateNoContractionDecoration(node->getType().getQualifier()),
-                resultType(), operands.front(),
-                glslangOperands[0]->getAsTyped()->getBasicType());
+            {
+                OpDecorations decorations = { precision, 
+                                              TranslateNoContractionDecoration(node->getType().getQualifier()),
+                                              TranslateNonUniformDecoration(node->getType().getQualifier()) };
+                result = createUnaryOperation(
+                    node->getOp(), decorations,
+                    resultType(), operands.front(),
+                    glslangOperands[0]->getAsTyped()->getBasicType());
+            }
             break;
         default:
             result = createMiscOperation(node->getOp(), precision, resultType(), operands, node->getBasicType());
@@ -1953,18 +2140,29 @@
 // next layer copies r-values into memory to use the access-chain mechanism
 bool TGlslangToSpvTraverser::visitSelection(glslang::TVisit /* visit */, glslang::TIntermSelection* node)
 {
-    // See if it simple and safe to generate OpSelect instead of using control flow.
-    // Crucially, side effects must be avoided, and there are performance trade-offs.
-    // Return true if good idea (and safe) for OpSelect, false otherwise.
-    const auto selectPolicy = [&]() -> bool {
-        if ((!node->getType().isScalar() && !node->getType().isVector()) ||
-            node->getBasicType() == glslang::EbtVoid)
-            return false;
-
+    // See if it simple and safe, or required, to execute both sides.
+    // Crucially, side effects must be either semantically required or avoided,
+    // and there are performance trade-offs.
+    // Return true if required or a good idea (and safe) to execute both sides,
+    // false otherwise.
+    const auto bothSidesPolicy = [&]() -> bool {
+        // do we have both sides?
         if (node->getTrueBlock()  == nullptr ||
             node->getFalseBlock() == nullptr)
             return false;
 
+        // required? (unless we write additional code to look for side effects
+        // and make performance trade-offs if none are present)
+        if (!node->getShortCircuit())
+            return true;
+
+        // if not required to execute both, decide based on performance/practicality...
+
+        // see if OpSelect can handle it
+        if ((!node->getType().isScalar() && !node->getType().isVector()) ||
+            node->getBasicType() == glslang::EbtVoid)
+            return false;
+
         assert(node->getType() == node->getTrueBlock() ->getAsTyped()->getType() &&
                node->getType() == node->getFalseBlock()->getAsTyped()->getType());
 
@@ -1977,10 +2175,14 @@
                operandOkay(node->getFalseBlock()->getAsTyped());
     };
 
-    // Emit OpSelect for this selection.
-    const auto handleAsOpSelect = [&]() {
-        node->getCondition()->traverse(this);
-        spv::Id condition = accessChainLoad(node->getCondition()->getType());
+    spv::Id result = spv::NoResult; // upcoming result selecting between trueValue and falseValue
+    // emit the condition before doing anything with selection
+    node->getCondition()->traverse(this);
+    spv::Id condition = accessChainLoad(node->getCondition()->getType());
+
+    // Find a way of executing both sides and selecting the right result.
+    const auto executeBothSides = [&]() -> void {
+        // execute both sides
         node->getTrueBlock()->traverse(this);
         spv::Id trueValue = accessChainLoad(node->getTrueBlock()->getAsTyped()->getType());
         node->getFalseBlock()->traverse(this);
@@ -1988,72 +2190,98 @@
 
         builder.setLine(node->getLoc().line);
 
-        // smear condition to vector, if necessary (AST is always scalar)
-        if (builder.isVector(trueValue))
-            condition = builder.smearScalar(spv::NoPrecision, condition, 
-                                            builder.makeVectorType(builder.makeBoolType(),
-                                                                   builder.getNumComponents(trueValue)));
+        // done if void
+        if (node->getBasicType() == glslang::EbtVoid)
+            return;
 
-        spv::Id select = builder.createTriOp(spv::OpSelect,
-                                             convertGlslangToSpvType(node->getType()), condition,
-                                                                     trueValue, falseValue);
-        builder.clearAccessChain();
-        builder.setAccessChainRValue(select);
+        // emit code to select between trueValue and falseValue
+
+        // see if OpSelect can handle it
+        if (node->getType().isScalar() || node->getType().isVector()) {
+            // Emit OpSelect for this selection.
+
+            // smear condition to vector, if necessary (AST is always scalar)
+            if (builder.isVector(trueValue))
+                condition = builder.smearScalar(spv::NoPrecision, condition, 
+                                                builder.makeVectorType(builder.makeBoolType(),
+                                                                       builder.getNumComponents(trueValue)));
+
+            // OpSelect
+            result = builder.createTriOp(spv::OpSelect,
+                                         convertGlslangToSpvType(node->getType()), condition,
+                                                                 trueValue, falseValue);
+
+            builder.clearAccessChain();
+            builder.setAccessChainRValue(result);
+        } else {
+            // We need control flow to select the result.
+            // TODO: Once SPIR-V OpSelect allows arbitrary types, eliminate this path.
+            result = builder.createVariable(spv::StorageClassFunction, convertGlslangToSpvType(node->getType()));
+
+            // Selection control:
+            const spv::SelectionControlMask control = TranslateSelectionControl(*node);
+
+            // make an "if" based on the value created by the condition
+            spv::Builder::If ifBuilder(condition, control, builder);
+
+            // emit the "then" statement
+            builder.createStore(trueValue, result);
+            ifBuilder.makeBeginElse();
+            // emit the "else" statement
+            builder.createStore(falseValue, result);
+
+            // finish off the control flow
+            ifBuilder.makeEndIf();
+
+            builder.clearAccessChain();
+            builder.setAccessChainLValue(result);
+        }
     };
 
-    // Try for OpSelect
+    // Execute the one side needed, as per the condition
+    const auto executeOneSide = [&]() {
+        // Always emit control flow.
+        if (node->getBasicType() != glslang::EbtVoid)
+            result = builder.createVariable(spv::StorageClassFunction, convertGlslangToSpvType(node->getType()));
 
-    if (selectPolicy()) {
+        // Selection control:
+        const spv::SelectionControlMask control = TranslateSelectionControl(*node);
+
+        // make an "if" based on the value created by the condition
+        spv::Builder::If ifBuilder(condition, control, builder);
+
+        // emit the "then" statement
+        if (node->getTrueBlock() != nullptr) {
+            node->getTrueBlock()->traverse(this);
+            if (result != spv::NoResult)
+                builder.createStore(accessChainLoad(node->getTrueBlock()->getAsTyped()->getType()), result);
+        }
+
+        if (node->getFalseBlock() != nullptr) {
+            ifBuilder.makeBeginElse();
+            // emit the "else" statement
+            node->getFalseBlock()->traverse(this);
+            if (result != spv::NoResult)
+                builder.createStore(accessChainLoad(node->getFalseBlock()->getAsTyped()->getType()), result);
+        }
+
+        // finish off the control flow
+        ifBuilder.makeEndIf();
+
+        if (result != spv::NoResult) {
+            builder.clearAccessChain();
+            builder.setAccessChainLValue(result);
+        }
+    };
+
+    // Try for OpSelect (or a requirement to execute both sides)
+    if (bothSidesPolicy()) {
         SpecConstantOpModeGuard spec_constant_op_mode_setter(&builder);
         if (node->getType().getQualifier().isSpecConstant())
             spec_constant_op_mode_setter.turnOnSpecConstantOpMode();
-
-        handleAsOpSelect();
-        return false;
-    }
-
-    // Instead, emit control flow...    
-    // Don't handle results as temporaries, because there will be two names
-    // and better to leave SSA to later passes.
-    spv::Id result = (node->getBasicType() == glslang::EbtVoid)
-                        ? spv::NoResult
-                        : builder.createVariable(spv::StorageClassFunction, convertGlslangToSpvType(node->getType()));
-
-    // emit the condition before doing anything with selection
-    node->getCondition()->traverse(this);
-
-    // Selection control:
-    const spv::SelectionControlMask control = TranslateSelectionControl(node->getSelectionControl());
-
-    // make an "if" based on the value created by the condition
-    spv::Builder::If ifBuilder(accessChainLoad(node->getCondition()->getType()), control, builder);
-
-    // emit the "then" statement
-    if (node->getTrueBlock() != nullptr) {
-        node->getTrueBlock()->traverse(this);
-        if (result != spv::NoResult)
-             builder.createStore(accessChainLoad(node->getTrueBlock()->getAsTyped()->getType()), result);
-    }
-
-    if (node->getFalseBlock() != nullptr) {
-        ifBuilder.makeBeginElse();
-        // emit the "else" statement
-        node->getFalseBlock()->traverse(this);
-        if (result != spv::NoResult)
-            builder.createStore(accessChainLoad(node->getFalseBlock()->getAsTyped()->getType()), result);
-    }
-
-    // finish off the control flow
-    ifBuilder.makeEndIf();
-
-    if (result != spv::NoResult) {
-        // GLSL only has r-values as the result of a :?, but
-        // if we have an l-value, that can be more efficient if it will
-        // become the base of a complex r-value expression, because the
-        // next layer copies r-values into memory to use the access-chain mechanism
-        builder.clearAccessChain();
-        builder.setAccessChainLValue(result);
-    }
+        executeBothSides();
+    } else
+        executeOneSide();
 
     return false;
 }
@@ -2065,7 +2293,7 @@
     spv::Id selector = accessChainLoad(node->getCondition()->getAsTyped()->getType());
 
     // Selection control:
-    const spv::SelectionControlMask control = TranslateSelectionControl(node->getSelectionControl());
+    const spv::SelectionControlMask control = TranslateSwitchControl(*node);
 
     // browse the children to sort out code segments
     int defaultSegment = -1;
@@ -2125,9 +2353,8 @@
     builder.createBranch(&blocks.head);
 
     // Loop control:
-    const spv::LoopControlMask control = TranslateLoopControl(node->getLoopControl());
-
-    // TODO: dependency length
+    unsigned int dependencyLength = glslang::TIntermLoop::dependencyInfinite;
+    const spv::LoopControlMask control = TranslateLoopControl(*node, dependencyLength);
 
     // Spec requires back edges to target header blocks, and every header block
     // must dominate its merge block.  Make a header block first to ensure these
@@ -2137,7 +2364,7 @@
     // including merges of its own.
     builder.setLine(node->getLoc().line);
     builder.setBuildPoint(&blocks.head);
-    builder.createLoopMerge(&blocks.merge, &blocks.continue_target, control);
+    builder.createLoopMerge(&blocks.merge, &blocks.continue_target, control, dependencyLength);
     if (node->testFirst() && node->getTest()) {
         spv::Block& test = builder.makeNewBlock();
         builder.createBranch(&test);
@@ -2248,25 +2475,23 @@
     spv::StorageClass storageClass = TranslateStorageClass(node->getType());
     spv::Id spvType = convertGlslangToSpvType(node->getType());
 
-#ifdef AMD_EXTENSIONS
     const bool contains16BitType = node->getType().containsBasicType(glslang::EbtFloat16) ||
                                    node->getType().containsBasicType(glslang::EbtInt16)   ||
                                    node->getType().containsBasicType(glslang::EbtUint16);
     if (contains16BitType) {
         if (storageClass == spv::StorageClassInput || storageClass == spv::StorageClassOutput) {
-            builder.addExtension(spv::E_SPV_KHR_16bit_storage);
+            addPre13Extension(spv::E_SPV_KHR_16bit_storage);
             builder.addCapability(spv::CapabilityStorageInputOutput16);
         } else if (storageClass == spv::StorageClassPushConstant) {
-            builder.addExtension(spv::E_SPV_KHR_16bit_storage);
+            addPre13Extension(spv::E_SPV_KHR_16bit_storage);
             builder.addCapability(spv::CapabilityStoragePushConstant16);
         } else if (storageClass == spv::StorageClassUniform) {
-            builder.addExtension(spv::E_SPV_KHR_16bit_storage);
+            addPre13Extension(spv::E_SPV_KHR_16bit_storage);
             builder.addCapability(spv::CapabilityStorageUniform16);
             if (node->getType().getQualifier().storage == glslang::EvqBuffer)
                 builder.addCapability(spv::CapabilityStorageUniformBufferBlock16);
         }
     }
-#endif
 
     const char* name = node->getName().c_str();
     if (glslang::IsAnonymous(name))
@@ -2280,6 +2505,12 @@
 {
     switch (sampler.type) {
         case glslang::EbtFloat:    return builder.makeFloatType(32);
+#ifdef AMD_EXTENSIONS
+        case glslang::EbtFloat16:
+            builder.addExtension(spv::E_SPV_AMD_gpu_shader_half_float_fetch);
+            builder.addCapability(spv::CapabilityFloat16ImageAMD);
+            return builder.makeFloatType(16);
+#endif
         case glslang::EbtInt:      return builder.makeIntType(32);
         case glslang::EbtUint:     return builder.makeUintType(32);
         default:
@@ -2322,13 +2553,14 @@
 // layout state rooted from the top-level type.
 spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& type)
 {
-    return convertGlslangToSpvType(type, getExplicitLayout(type), type.getQualifier());
+    return convertGlslangToSpvType(type, getExplicitLayout(type), type.getQualifier(), false);
 }
 
 // Do full recursive conversion of an arbitrary glslang type to a SPIR-V Id.
 // explicitLayout can be kept the same throughout the hierarchical recursive walk.
 // Mutually recursive with convertGlslangStructToSpvType().
-spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& type, glslang::TLayoutPacking explicitLayout, const glslang::TQualifier& qualifier)
+spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& type,
+    glslang::TLayoutPacking explicitLayout, const glslang::TQualifier& qualifier, bool lastBufferBlockMember)
 {
     spv::Id spvType = spv::NoResult;
 
@@ -2343,12 +2575,14 @@
     case glslang::EbtDouble:
         spvType = builder.makeFloatType(64);
         break;
-#ifdef AMD_EXTENSIONS
     case glslang::EbtFloat16:
-        builder.addExtension(spv::E_SPV_AMD_gpu_shader_half_float);
+        builder.addCapability(spv::CapabilityFloat16);
+#if AMD_EXTENSIONS
+        if (builder.getSpvVersion() < glslang::EShTargetSpv_1_3)
+            builder.addExtension(spv::E_SPV_AMD_gpu_shader_half_float);
+#endif
         spvType = builder.makeFloatType(16);
         break;
-#endif
     case glslang::EbtBool:
         // "transparent" bool doesn't exist in SPIR-V.  The GLSL convention is
         // a 32-bit int where non-0 means true.
@@ -2357,6 +2591,30 @@
         else
             spvType = builder.makeBoolType();
         break;
+   case glslang::EbtInt8:
+        builder.addCapability(spv::CapabilityInt8);
+        spvType = builder.makeIntType(8);
+        break;
+    case glslang::EbtUint8:
+        builder.addCapability(spv::CapabilityInt8);
+        spvType = builder.makeUintType(8);
+        break;
+   case glslang::EbtInt16:
+        builder.addCapability(spv::CapabilityInt16);
+#ifdef AMD_EXTENSIONS
+        if (builder.getSpvVersion() < glslang::EShTargetSpv_1_3)
+            builder.addExtension(spv::E_SPV_AMD_gpu_shader_int16);
+#endif
+        spvType = builder.makeIntType(16);
+        break;
+    case glslang::EbtUint16:
+        builder.addCapability(spv::CapabilityInt16);
+#ifdef AMD_EXTENSIONS
+        if (builder.getSpvVersion() < glslang::EShTargetSpv_1_3)
+            builder.addExtension(spv::E_SPV_AMD_gpu_shader_int16);
+#endif
+        spvType = builder.makeUintType(16);
+        break;
     case glslang::EbtInt:
         spvType = builder.makeIntType(32);
         break;
@@ -2369,16 +2627,6 @@
     case glslang::EbtUint64:
         spvType = builder.makeUintType(64);
         break;
-#ifdef AMD_EXTENSIONS
-    case glslang::EbtInt16:
-        builder.addExtension(spv::E_SPV_AMD_gpu_shader_int16);
-        spvType = builder.makeIntType(16);
-        break;
-    case glslang::EbtUint16:
-        builder.addExtension(spv::E_SPV_AMD_gpu_shader_int16);
-        spvType = builder.makeUintType(16);
-        break;
-#endif
     case glslang::EbtAtomicUint:
         builder.addCapability(spv::CapabilityAtomicStorage);
         spvType = builder.makeUintType(32);
@@ -2442,8 +2690,8 @@
                 // Use a dummy glslang type for querying internal strides of
                 // arrays of arrays, but using just a one-dimensional array.
                 glslang::TType simpleArrayType(type, 0); // deference type of the array
-                while (simpleArrayType.getArraySizes().getNumDims() > 1)
-                    simpleArrayType.getArraySizes().dereference();
+                while (simpleArrayType.getArraySizes()->getNumDims() > 1)
+                    simpleArrayType.getArraySizes()->dereference();
 
                 // Will compute the higher-order strides here, rather than making a whole
                 // pile of types and doing repetitive recursion on their contents.
@@ -2465,12 +2713,16 @@
                 stride = getArrayStride(type, explicitLayout, qualifier.layoutMatrix);
         }
 
-        // Do the outer dimension, which might not be known for a runtime-sized array
-        if (type.isRuntimeSizedArray()) {
-            spvType = builder.makeRuntimeArray(spvType);
-        } else {
-            assert(type.getOuterArraySize() > 0);
+        // Do the outer dimension, which might not be known for a runtime-sized array.
+        // (Unsized arrays that survive through linking will be runtime-sized arrays)
+        if (type.isSizedArray())
             spvType = builder.makeArrayType(spvType, makeArraySizeId(*type.getArraySizes(), 0), stride);
+        else {
+            if (!lastBufferBlockMember) {
+                builder.addExtension("SPV_EXT_descriptor_indexing");
+                builder.addCapability(spv::CapabilityRuntimeDescriptorArrayEXT);
+            }
+            spvType = builder.makeRuntimeArray(spvType);
         }
         if (stride > 0)
             builder.addDecoration(spvType, spv::DecorationArrayStride, stride);
@@ -2538,7 +2790,10 @@
                 memberQualifier.layoutLocation = qualifier.layoutLocation;
 
             // recurse
-            spvMembers.push_back(convertGlslangToSpvType(glslangMember, explicitLayout, memberQualifier));
+            bool lastBufferBlockMember = qualifier.storage == glslang::EvqBuffer &&
+                                         i == (int)glslangMembers->size() - 1;
+            spvMembers.push_back(
+                convertGlslangToSpvType(glslangMember, explicitLayout, memberQualifier, lastBufferBlockMember));
         }
     }
 
@@ -2576,99 +2831,110 @@
         InheritQualifiers(memberQualifier, qualifier);
 
         // using -1 above to indicate a hidden member
-        if (member >= 0) {
-            builder.addMemberName(spvType, member, glslangMember.getFieldName().c_str());
-            addMemberDecoration(spvType, member, TranslateLayoutDecoration(glslangMember, memberQualifier.layoutMatrix));
-            addMemberDecoration(spvType, member, TranslatePrecisionDecoration(glslangMember));
-            // Add interpolation and auxiliary storage decorations only to top-level members of Input and Output storage classes
-            if (type.getQualifier().storage == glslang::EvqVaryingIn ||
-                type.getQualifier().storage == glslang::EvqVaryingOut) {
-                if (type.getBasicType() == glslang::EbtBlock ||
-                    glslangIntermediate->getSource() == glslang::EShSourceHlsl) {
-                    addMemberDecoration(spvType, member, TranslateInterpolationDecoration(memberQualifier));
-                    addMemberDecoration(spvType, member, TranslateAuxiliaryStorageDecoration(memberQualifier));
-                }
+        if (member < 0)
+            continue;
+
+        builder.addMemberName(spvType, member, glslangMember.getFieldName().c_str());
+        builder.addMemberDecoration(spvType, member,
+                                    TranslateLayoutDecoration(glslangMember, memberQualifier.layoutMatrix));
+        builder.addMemberDecoration(spvType, member, TranslatePrecisionDecoration(glslangMember));
+        // Add interpolation and auxiliary storage decorations only to
+        // top-level members of Input and Output storage classes
+        if (type.getQualifier().storage == glslang::EvqVaryingIn ||
+            type.getQualifier().storage == glslang::EvqVaryingOut) {
+            if (type.getBasicType() == glslang::EbtBlock ||
+                glslangIntermediate->getSource() == glslang::EShSourceHlsl) {
+                builder.addMemberDecoration(spvType, member, TranslateInterpolationDecoration(memberQualifier));
+                builder.addMemberDecoration(spvType, member, TranslateAuxiliaryStorageDecoration(memberQualifier));
             }
-            addMemberDecoration(spvType, member, TranslateInvariantDecoration(memberQualifier));
+        }
+        builder.addMemberDecoration(spvType, member, TranslateInvariantDecoration(memberQualifier));
 
-            if (type.getBasicType() == glslang::EbtBlock &&
-                qualifier.storage == glslang::EvqBuffer) {
-                // Add memory decorations only to top-level members of shader storage block
-                std::vector<spv::Decoration> memory;
-                TranslateMemoryDecoration(memberQualifier, memory);
-                for (unsigned int i = 0; i < memory.size(); ++i)
-                    addMemberDecoration(spvType, member, memory[i]);
-            }
+        if (type.getBasicType() == glslang::EbtBlock &&
+            qualifier.storage == glslang::EvqBuffer) {
+            // Add memory decorations only to top-level members of shader storage block
+            std::vector<spv::Decoration> memory;
+            TranslateMemoryDecoration(memberQualifier, memory);
+            for (unsigned int i = 0; i < memory.size(); ++i)
+                builder.addMemberDecoration(spvType, member, memory[i]);
+        }
 
-            // Location assignment was already completed correctly by the front end,
-            // just track whether a member needs to be decorated.
-            // Ignore member locations if the container is an array, as that's
-            // ill-specified and decisions have been made to not allow this.
-            if (! type.isArray() && memberQualifier.hasLocation())
-                builder.addMemberDecoration(spvType, member, spv::DecorationLocation, memberQualifier.layoutLocation);
+        // Location assignment was already completed correctly by the front end,
+        // just track whether a member needs to be decorated.
+        // Ignore member locations if the container is an array, as that's
+        // ill-specified and decisions have been made to not allow this.
+        if (! type.isArray() && memberQualifier.hasLocation())
+            builder.addMemberDecoration(spvType, member, spv::DecorationLocation, memberQualifier.layoutLocation);
 
-            if (qualifier.hasLocation())      // track for upcoming inheritance
-                locationOffset += glslangIntermediate->computeTypeLocationSize(glslangMember);
+        if (qualifier.hasLocation())      // track for upcoming inheritance
+            locationOffset += glslangIntermediate->computeTypeLocationSize(
+                                            glslangMember, glslangIntermediate->getStage());
 
-            // component, XFB, others
-            if (glslangMember.getQualifier().hasComponent())
-                builder.addMemberDecoration(spvType, member, spv::DecorationComponent, glslangMember.getQualifier().layoutComponent);
-            if (glslangMember.getQualifier().hasXfbOffset())
-                builder.addMemberDecoration(spvType, member, spv::DecorationOffset, glslangMember.getQualifier().layoutXfbOffset);
-            else if (explicitLayout != glslang::ElpNone) {
-                // figure out what to do with offset, which is accumulating
-                int nextOffset;
-                updateMemberOffset(type, glslangMember, offset, nextOffset, explicitLayout, memberQualifier.layoutMatrix);
-                if (offset >= 0)
-                    builder.addMemberDecoration(spvType, member, spv::DecorationOffset, offset);
-                offset = nextOffset;
-            }
+        // component, XFB, others
+        if (glslangMember.getQualifier().hasComponent())
+            builder.addMemberDecoration(spvType, member, spv::DecorationComponent,
+                                        glslangMember.getQualifier().layoutComponent);
+        if (glslangMember.getQualifier().hasXfbOffset())
+            builder.addMemberDecoration(spvType, member, spv::DecorationOffset,
+                                        glslangMember.getQualifier().layoutXfbOffset);
+        else if (explicitLayout != glslang::ElpNone) {
+            // figure out what to do with offset, which is accumulating
+            int nextOffset;
+            updateMemberOffset(type, glslangMember, offset, nextOffset, explicitLayout, memberQualifier.layoutMatrix);
+            if (offset >= 0)
+                builder.addMemberDecoration(spvType, member, spv::DecorationOffset, offset);
+            offset = nextOffset;
+        }
 
-            if (glslangMember.isMatrix() && explicitLayout != glslang::ElpNone)
-                builder.addMemberDecoration(spvType, member, spv::DecorationMatrixStride, getMatrixStride(glslangMember, explicitLayout, memberQualifier.layoutMatrix));
+        if (glslangMember.isMatrix() && explicitLayout != glslang::ElpNone)
+            builder.addMemberDecoration(spvType, member, spv::DecorationMatrixStride,
+                                        getMatrixStride(glslangMember, explicitLayout, memberQualifier.layoutMatrix));
 
-            // built-in variable decorations
-            spv::BuiltIn builtIn = TranslateBuiltInDecoration(glslangMember.getQualifier().builtIn, true);
-            if (builtIn != spv::BuiltInMax)
-                addMemberDecoration(spvType, member, spv::DecorationBuiltIn, (int)builtIn);
+        // built-in variable decorations
+        spv::BuiltIn builtIn = TranslateBuiltInDecoration(glslangMember.getQualifier().builtIn, true);
+        if (builtIn != spv::BuiltInMax)
+            builder.addMemberDecoration(spvType, member, spv::DecorationBuiltIn, (int)builtIn);
+
+        // nonuniform
+        builder.addMemberDecoration(spvType, member, TranslateNonUniformDecoration(glslangMember.getQualifier()));
+
+        if (glslangIntermediate->getHlslFunctionality1() && memberQualifier.semanticName != nullptr) {
+            builder.addExtension("SPV_GOOGLE_hlsl_functionality1");
+            builder.addMemberDecoration(spvType, member, (spv::Decoration)spv::DecorationHlslSemanticGOOGLE,
+                                        memberQualifier.semanticName);
+        }
 
 #ifdef NV_EXTENSIONS
-            if (builtIn == spv::BuiltInLayer) {
-                // SPV_NV_viewport_array2 extension
-                if (glslangMember.getQualifier().layoutViewportRelative){
-                    addMemberDecoration(spvType, member, (spv::Decoration)spv::DecorationViewportRelativeNV);
-                    builder.addCapability(spv::CapabilityShaderViewportMaskNV);
-                    builder.addExtension(spv::E_SPV_NV_viewport_array2);
-                }
-                if (glslangMember.getQualifier().layoutSecondaryViewportRelativeOffset != -2048){
-                    addMemberDecoration(spvType, member, (spv::Decoration)spv::DecorationSecondaryViewportRelativeNV, glslangMember.getQualifier().layoutSecondaryViewportRelativeOffset);
-                    builder.addCapability(spv::CapabilityShaderStereoViewNV);
-                    builder.addExtension(spv::E_SPV_NV_stereo_view_rendering);
-                }
+        if (builtIn == spv::BuiltInLayer) {
+            // SPV_NV_viewport_array2 extension
+            if (glslangMember.getQualifier().layoutViewportRelative){
+                builder.addMemberDecoration(spvType, member, (spv::Decoration)spv::DecorationViewportRelativeNV);
+                builder.addCapability(spv::CapabilityShaderViewportMaskNV);
+                builder.addExtension(spv::E_SPV_NV_viewport_array2);
             }
-            if (glslangMember.getQualifier().layoutPassthrough) {
-                addMemberDecoration(spvType, member, (spv::Decoration)spv::DecorationPassthroughNV);
-                builder.addCapability(spv::CapabilityGeometryShaderPassthroughNV);
-                builder.addExtension(spv::E_SPV_NV_geometry_shader_passthrough);
+            if (glslangMember.getQualifier().layoutSecondaryViewportRelativeOffset != -2048){
+                builder.addMemberDecoration(spvType, member,
+                                            (spv::Decoration)spv::DecorationSecondaryViewportRelativeNV,
+                                            glslangMember.getQualifier().layoutSecondaryViewportRelativeOffset);
+                builder.addCapability(spv::CapabilityShaderStereoViewNV);
+                builder.addExtension(spv::E_SPV_NV_stereo_view_rendering);
             }
-#endif
         }
+        if (glslangMember.getQualifier().layoutPassthrough) {
+            builder.addMemberDecoration(spvType, member, (spv::Decoration)spv::DecorationPassthroughNV);
+            builder.addCapability(spv::CapabilityGeometryShaderPassthroughNV);
+            builder.addExtension(spv::E_SPV_NV_geometry_shader_passthrough);
+        }
+#endif
     }
 
     // Decorate the structure
-    addDecoration(spvType, TranslateLayoutDecoration(type, qualifier.layoutMatrix));
-    addDecoration(spvType, TranslateBlockDecoration(type, glslangIntermediate->usingStorageBuffer()));
+    builder.addDecoration(spvType, TranslateLayoutDecoration(type, qualifier.layoutMatrix));
+    builder.addDecoration(spvType, TranslateBlockDecoration(type, glslangIntermediate->usingStorageBuffer()));
     if (type.getQualifier().hasStream() && glslangIntermediate->isMultiStream()) {
         builder.addCapability(spv::CapabilityGeometryStreams);
         builder.addDecoration(spvType, spv::DecorationStream, type.getQualifier().layoutStream);
     }
-    if (glslangIntermediate->getXfbMode()) {
-        builder.addCapability(spv::CapabilityTransformFeedback);
-        if (type.getQualifier().hasXfbStride())
-            builder.addDecoration(spvType, spv::DecorationXfbStride, type.getQualifier().layoutXfbStride);
-        if (type.getQualifier().hasXfbBuffer())
-            builder.addDecoration(spvType, spv::DecorationXfbBuffer, type.getQualifier().layoutXfbBuffer);
-    }
 }
 
 // Turn the expression forming the array size into an id.
@@ -2699,7 +2965,8 @@
 spv::Id TGlslangToSpvTraverser::accessChainLoad(const glslang::TType& type)
 {
     spv::Id nominalTypeId = builder.accessChainGetInferredType();
-    spv::Id loadedId = builder.accessChainLoad(TranslatePrecisionDecoration(type), nominalTypeId);
+    spv::Id loadedId = builder.accessChainLoad(TranslatePrecisionDecoration(type),
+                                               TranslateNonUniformDecoration(type.getQualifier()), nominalTypeId);
 
     // Need to convert to abstract types when necessary
     if (type.getBasicType() == glslang::EbtBool) {
@@ -2972,8 +3239,14 @@
 }
 
 // Does parameter need a place to keep writes, separate from the original?
+// Assumes called after originalParam(), which filters out block/buffer/opaque-based
+// qualifiers such that we should have only in/out/inout/constreadonly here.
 bool TGlslangToSpvTraverser::writableParam(glslang::TStorageQualifier qualifier)
 {
+    assert(qualifier == glslang::EvqIn ||
+           qualifier == glslang::EvqOut ||
+           qualifier == glslang::EvqInOut ||
+           qualifier == glslang::EvqConstReadOnly);
     return qualifier != glslang::EvqConstReadOnly;
 }
 
@@ -2984,7 +3257,7 @@
     if (implicitThisParam)                                                                     // implicit this
         return true;
     if (glslangIntermediate->getSource() == glslang::EShSourceHlsl)
-        return false;
+        return paramType.getBasicType() == glslang::EbtBlock;
     return paramType.containsOpaque() ||                                                       // sampler, etc.
            (paramType.getBasicType() == glslang::EbtBlock && qualifier == glslang::EvqBuffer); // SSBO
 }
@@ -3099,9 +3372,15 @@
 
     glslang::TSampler sampler = {};
     bool cubeCompare = false;
+#ifdef AMD_EXTENSIONS
+    bool f16ShadowCompare = false;
+#endif
     if (node.isTexture() || node.isImage()) {
         sampler = glslangArguments[0]->getAsTyped()->getType().getSampler();
         cubeCompare = sampler.dim == glslang::EsdCube && sampler.arrayed && sampler.shadow;
+#ifdef AMD_EXTENSIONS
+        f16ShadowCompare = sampler.shadow && glslangArguments[1]->getAsTyped()->getType().getBasicType() == glslang::EbtFloat16;
+#endif
     }
 
     for (int i = 0; i < (int)glslangArguments.size(); ++i) {
@@ -3126,6 +3405,21 @@
             if ((sampler.ms && i == 3) || (! sampler.ms && i == 2))
                 lvalue = true;
             break;
+#ifdef AMD_EXTENSIONS
+        case glslang::EOpSparseTexture:
+            if (((cubeCompare || f16ShadowCompare) && i == 3) || (! (cubeCompare || f16ShadowCompare) && i == 2))
+                lvalue = true;
+            break;
+        case glslang::EOpSparseTextureClamp:
+            if (((cubeCompare || f16ShadowCompare) && i == 4) || (! (cubeCompare || f16ShadowCompare) && i == 3))
+                lvalue = true;
+            break;
+        case glslang::EOpSparseTextureLod:
+        case glslang::EOpSparseTextureOffset:
+            if  ((f16ShadowCompare && i == 4) || (! f16ShadowCompare && i == 3))
+                lvalue = true;
+            break;
+#else
         case glslang::EOpSparseTexture:
             if ((cubeCompare && i == 3) || (! cubeCompare && i == 2))
                 lvalue = true;
@@ -3139,6 +3433,7 @@
             if (i == 3)
                 lvalue = true;
             break;
+#endif
         case glslang::EOpSparseTextureFetch:
             if ((sampler.dim != glslang::EsdRect && i == 3) || (sampler.dim == glslang::EsdRect && i == 2))
                 lvalue = true;
@@ -3147,6 +3442,23 @@
             if ((sampler.dim != glslang::EsdRect && i == 4) || (sampler.dim == glslang::EsdRect && i == 3))
                 lvalue = true;
             break;
+#ifdef AMD_EXTENSIONS
+        case glslang::EOpSparseTextureLodOffset:
+        case glslang::EOpSparseTextureGrad:
+        case glslang::EOpSparseTextureOffsetClamp:
+            if ((f16ShadowCompare && i == 5) || (! f16ShadowCompare && i == 4))
+                lvalue = true;
+            break;
+        case glslang::EOpSparseTextureGradOffset:
+        case glslang::EOpSparseTextureGradClamp:
+            if ((f16ShadowCompare && i == 6) || (! f16ShadowCompare && i == 5))
+                lvalue = true;
+            break;
+        case glslang::EOpSparseTextureGradOffsetClamp:
+            if ((f16ShadowCompare && i == 7) || (! f16ShadowCompare && i == 6))
+                lvalue = true;
+            break;
+#else
         case glslang::EOpSparseTextureLodOffset:
         case glslang::EOpSparseTextureGrad:
         case glslang::EOpSparseTextureOffsetClamp:
@@ -3162,6 +3474,7 @@
             if (i == 6)
                 lvalue = true;
             break;
+#endif
         case glslang::EOpSparseTextureGather:
             if ((sampler.shadow && i == 3) || (! sampler.shadow && i == 2))
                 lvalue = true;
@@ -3211,11 +3524,15 @@
 
     builder.setLine(node->getLoc().line);
 
-    auto resultType = [&node,this]{ return convertGlslangToSpvType(node->getType()); };
-
     // Process a GLSL texturing op (will be SPV image)
     const glslang::TSampler sampler = node->getAsAggregate() ? node->getAsAggregate()->getSequence()[0]->getAsTyped()->getType().getSampler()
                                                              : node->getAsUnaryNode()->getOperand()->getAsTyped()->getType().getSampler();
+#ifdef AMD_EXTENSIONS
+    bool f16ShadowCompare = (sampler.shadow && node->getAsAggregate())
+                                ? node->getAsAggregate()->getSequence()[1]->getAsTyped()->getType().getBasicType() == glslang::EbtFloat16
+                                : false;
+#endif
+
     std::vector<spv::Id> arguments;
     if (node->getAsAggregate())
         translateArguments(*node->getAsAggregate(), arguments);
@@ -3261,6 +3578,20 @@
         }
     }
 
+    int components = node->getType().getVectorSize();
+
+    if (node->getOp() == glslang::EOpTextureFetch) {
+        // These must produce 4 components, per SPIR-V spec.  We'll add a conversion constructor if needed.
+        // This will only happen through the HLSL path for operator[], so we do not have to handle e.g.
+        // the EOpTexture/Proj/Lod/etc family.  It would be harmless to do so, but would need more logic
+        // here around e.g. which ones return scalars or other types.
+        components = 4;
+    }
+
+    glslang::TType returnType(node->getType().getBasicType(), glslang::EvqTemporary, components);
+
+    auto resultType = [&returnType,this]{ return convertGlslangToSpvType(returnType); };
+
     // Check for image functions other than queries
     if (node->isImage()) {
         std::vector<spv::Id> operands;
@@ -3307,9 +3638,14 @@
             if (builder.getImageTypeFormat(builder.getImageType(operands.front())) == spv::ImageFormatUnknown)
                 builder.addCapability(spv::CapabilityStorageImageReadWithoutFormat);
 
-            spv::Id result = builder.createOp(spv::OpImageRead, resultType(), operands);
-            builder.setPrecision(result, precision);
-            return result;
+            std::vector<spv::Id> result( 1, builder.createOp(spv::OpImageRead, resultType(), operands) );
+            builder.setPrecision(result[0], precision);
+
+            // If needed, add a conversion constructor to the proper size.
+            if (components != node->getType().getVectorSize())
+                result[0] = builder.createConstructor(precision, result, convertGlslangToSpvType(node->getType()));
+
+            return result[0];
 #ifdef AMD_EXTENSIONS
         } else if (node->getOp() == glslang::EOpImageStore || node->getOp() == glslang::EOpImageStoreLod) {
 #else
@@ -3440,6 +3776,9 @@
 #ifdef AMD_EXTENSIONS
         if (cracked.gather)
             ++nonBiasArgCount; // comp argument should be present when bias argument is present
+
+        if (f16ShadowCompare)
+            ++nonBiasArgCount;
 #endif
         if (cracked.offset)
             ++nonBiasArgCount;
@@ -3483,7 +3822,11 @@
     bool noImplicitLod = false;
 
     // sort out where Dref is coming from
+#ifdef AMD_EXTENSIONS
+    if (cubeCompare || f16ShadowCompare) {
+#else
     if (cubeCompare) {
+#endif
         params.Dref = arguments[2];
         ++extraArgs;
     } else if (sampler.shadow && cracked.gather) {
@@ -3583,7 +3926,14 @@
         }
     }
 
-    return builder.createTextureCall(precision, resultType(), sparse, cracked.fetch, cracked.proj, cracked.gather, noImplicitLod, params);
+    std::vector<spv::Id> result( 1, 
+        builder.createTextureCall(precision, resultType(), sparse, cracked.fetch, cracked.proj, cracked.gather, noImplicitLod, params)
+    );
+
+    if (components != node->getType().getVectorSize())
+        result[0] = builder.createConstructor(precision, result, convertGlslangToSpvType(node->getType()));
+
+    return result[0];
 }
 
 spv::Id TGlslangToSpvTraverser::handleUserFunctionCall(const glslang::TIntermAggregate* node)
@@ -3615,8 +3965,8 @@
         glslangArgs[a]->traverse(this);
         argTypes.push_back(&paramType);
         // 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)) {
+        if (originalParam(qualifiers[a], paramType, function->hasImplicitThis() && a == 0) ||
+            writableParam(qualifiers[a])) {
             // save l-value
             lValues.push_back(builder.getAccessChain());
         } else {
@@ -3682,18 +4032,12 @@
 }
 
 // Translate AST operation to SPV operation, already having SPV-based operands/types.
-spv::Id TGlslangToSpvTraverser::createBinaryOperation(glslang::TOperator op, spv::Decoration precision,
-                                                      spv::Decoration noContraction,
+spv::Id TGlslangToSpvTraverser::createBinaryOperation(glslang::TOperator op, OpDecorations& decorations,
                                                       spv::Id typeId, spv::Id left, spv::Id right,
                                                       glslang::TBasicType typeProxy, bool reduceComparison)
 {
-#ifdef AMD_EXTENSIONS
-    bool isUnsigned = typeProxy == glslang::EbtUint || typeProxy == glslang::EbtUint64 || typeProxy == glslang::EbtUint16;
-    bool isFloat = typeProxy == glslang::EbtFloat || typeProxy == glslang::EbtDouble || typeProxy == glslang::EbtFloat16;
-#else
-    bool isUnsigned = typeProxy == glslang::EbtUint || typeProxy == glslang::EbtUint64;
-    bool isFloat = typeProxy == glslang::EbtFloat || typeProxy == glslang::EbtDouble;
-#endif
+    bool isUnsigned = isTypeUnsignedInt(typeProxy);
+    bool isFloat = isTypeFloat(typeProxy);
     bool isBool = typeProxy == glslang::EbtBool;
 
     spv::Op binOp = spv::OpNop;
@@ -3825,15 +4169,16 @@
     if (binOp != spv::OpNop) {
         assert(comparison == false);
         if (builder.isMatrix(left) || builder.isMatrix(right))
-            return createBinaryMatrixOperation(binOp, precision, noContraction, typeId, left, right);
+            return createBinaryMatrixOperation(binOp, decorations, typeId, left, right);
 
         // No matrix involved; make both operands be the same number of components, if needed
         if (needMatchingVectors)
-            builder.promoteScalar(precision, left, right);
+            builder.promoteScalar(decorations.precision, left, right);
 
         spv::Id result = builder.createBinOp(binOp, typeId, left, right);
-        addDecoration(result, noContraction);
-        return builder.setPrecision(result, precision);
+        builder.addDecoration(result, decorations.noContraction);
+        builder.addDecoration(result, decorations.nonUniform);
+        return builder.setPrecision(result, decorations.precision);
     }
 
     if (! comparison)
@@ -3842,8 +4187,11 @@
     // Handle comparison instructions
 
     if (reduceComparison && (op == glslang::EOpEqual || op == glslang::EOpNotEqual)
-                         && (builder.isVector(left) || builder.isMatrix(left) || builder.isAggregate(left)))
-        return builder.createCompositeCompare(precision, left, right, op == glslang::EOpEqual);
+                         && (builder.isVector(left) || builder.isMatrix(left) || builder.isAggregate(left))) {
+        spv::Id result = builder.createCompositeCompare(decorations.precision, left, right, op == glslang::EOpEqual);
+        builder.addDecoration(result, decorations.nonUniform);
+        return result;
+    }
 
     switch (op) {
     case glslang::EOpLessThan:
@@ -3902,8 +4250,9 @@
 
     if (binOp != spv::OpNop) {
         spv::Id result = builder.createBinOp(binOp, typeId, left, right);
-        addDecoration(result, noContraction);
-        return builder.setPrecision(result, precision);
+        builder.addDecoration(result, decorations.noContraction);
+        builder.addDecoration(result, decorations.nonUniform);
+        return builder.setPrecision(result, decorations.precision);
     }
 
     return 0;
@@ -3923,7 +4272,8 @@
 //   matrix op scalar    op in {+, -, /}
 //   scalar op matrix    op in {+, -, /}
 //
-spv::Id TGlslangToSpvTraverser::createBinaryMatrixOperation(spv::Op op, spv::Decoration precision, spv::Decoration noContraction, spv::Id typeId, spv::Id left, spv::Id right)
+spv::Id TGlslangToSpvTraverser::createBinaryMatrixOperation(spv::Op op, OpDecorations& decorations, spv::Id typeId,
+                                                            spv::Id left, spv::Id right)
 {
     bool firstClass = true;
 
@@ -3932,7 +4282,8 @@
     case spv::OpFDiv:
         if (builder.isMatrix(left) && builder.isScalar(right)) {
             // turn matrix / scalar into a multiply...
-            right = builder.createBinOp(spv::OpFDiv, builder.getTypeId(right), builder.makeFloatConstant(1.0F), right);
+            spv::Id resultType = builder.getTypeId(right);
+            right = builder.createBinOp(spv::OpFDiv, resultType, builder.makeFpConstant(resultType, 1.0), right);
             op = spv::OpMatrixTimesScalar;
         } else
             firstClass = false;
@@ -3961,8 +4312,9 @@
 
     if (firstClass) {
         spv::Id result = builder.createBinOp(op, typeId, left, right);
-        addDecoration(result, noContraction);
-        return builder.setPrecision(result, precision);
+        builder.addDecoration(result, decorations.noContraction);
+        builder.addDecoration(result, decorations.nonUniform);
+        return builder.setPrecision(result, decorations.precision);
     }
 
     // Handle component-wise +, -, *, %, and / for all combinations of type.
@@ -3989,9 +4341,9 @@
         std::vector<spv::Id> results;
         spv::Id smearVec = spv::NoResult;
         if (builder.isScalar(left))
-            smearVec = builder.smearScalar(precision, left, vecType);
+            smearVec = builder.smearScalar(decorations.precision, left, vecType);
         else if (builder.isScalar(right))
-            smearVec = builder.smearScalar(precision, right, vecType);
+            smearVec = builder.smearScalar(decorations.precision, right, vecType);
 
         // do each vector op
         for (unsigned int c = 0; c < numCols; ++c) {
@@ -4000,12 +4352,15 @@
             spv::Id  leftVec =  leftMat ? builder.createCompositeExtract( left, vecType, indexes) : smearVec;
             spv::Id rightVec = rightMat ? builder.createCompositeExtract(right, vecType, indexes) : smearVec;
             spv::Id result = builder.createBinOp(op, vecType, leftVec, rightVec);
-            addDecoration(result, noContraction);
-            results.push_back(builder.setPrecision(result, precision));
+            builder.addDecoration(result, decorations.noContraction);
+            builder.addDecoration(result, decorations.nonUniform);
+            results.push_back(builder.setPrecision(result, decorations.precision));
         }
 
         // put the pieces together
-        return  builder.setPrecision(builder.createCompositeConstruct(typeId, results), precision);
+        spv::Id result = builder.setPrecision(builder.createCompositeConstruct(typeId, results), decorations.precision);
+        builder.addDecoration(result, decorations.nonUniform);
+        return result;
     }
     default:
         assert(0);
@@ -4013,25 +4368,21 @@
     }
 }
 
-spv::Id TGlslangToSpvTraverser::createUnaryOperation(glslang::TOperator op, spv::Decoration precision, spv::Decoration noContraction, spv::Id typeId, spv::Id operand, glslang::TBasicType typeProxy)
+spv::Id TGlslangToSpvTraverser::createUnaryOperation(glslang::TOperator op, OpDecorations& decorations, spv::Id typeId,
+                                                     spv::Id operand, glslang::TBasicType typeProxy)
 {
     spv::Op unaryOp = spv::OpNop;
     int extBuiltins = -1;
     int libCall = -1;
-#ifdef AMD_EXTENSIONS
-    bool isUnsigned = typeProxy == glslang::EbtUint || typeProxy == glslang::EbtUint64 || typeProxy == glslang::EbtUint16;
-    bool isFloat = typeProxy == glslang::EbtFloat || typeProxy == glslang::EbtDouble || typeProxy == glslang::EbtFloat16;
-#else
-    bool isUnsigned = typeProxy == glslang::EbtUint || typeProxy == glslang::EbtUint64;
-    bool isFloat = typeProxy == glslang::EbtFloat || typeProxy == glslang::EbtDouble;
-#endif
+    bool isUnsigned = isTypeUnsignedInt(typeProxy);
+    bool isFloat = isTypeFloat(typeProxy);
 
     switch (op) {
     case glslang::EOpNegative:
         if (isFloat) {
             unaryOp = spv::OpFNegate;
             if (builder.isMatrixType(typeId))
-                return createUnaryMatrixOperation(unaryOp, precision, noContraction, typeId, operand, typeProxy);
+                return createUnaryMatrixOperation(unaryOp, decorations, typeId, operand, typeProxy);
         } else
             unaryOp = spv::OpSNegate;
         break;
@@ -4161,12 +4512,10 @@
     case glslang::EOpDoubleBitsToUint64:
     case glslang::EOpInt64BitsToDouble:
     case glslang::EOpUint64BitsToDouble:
-#ifdef AMD_EXTENSIONS
     case glslang::EOpFloat16BitsToInt16:
     case glslang::EOpFloat16BitsToUint16:
     case glslang::EOpInt16BitsToFloat16:
     case glslang::EOpUint16BitsToFloat16:
-#endif
         unaryOp = spv::OpBitcast;
         break;
 
@@ -4211,10 +4560,12 @@
     case glslang::EOpUnpackInt2x32:
     case glslang::EOpPackUint2x32:
     case glslang::EOpUnpackUint2x32:
-        unaryOp = spv::OpBitcast;
-        break;
-
-#ifdef AMD_EXTENSIONS
+    case glslang::EOpPack16:
+    case glslang::EOpPack32:
+    case glslang::EOpPack64:
+    case glslang::EOpUnpack32:
+    case glslang::EOpUnpack16:
+    case glslang::EOpUnpack8:
     case glslang::EOpPackInt2x16:
     case glslang::EOpUnpackInt2x16:
     case glslang::EOpPackUint2x16:
@@ -4227,7 +4578,6 @@
     case glslang::EOpUnpackFloat2x16:
         unaryOp = spv::OpBitcast;
         break;
-#endif
 
     case glslang::EOpDPdx:
         unaryOp = spv::OpDPdx;
@@ -4293,7 +4643,7 @@
         // Handle all of the atomics in one place, in createAtomicOperation()
         std::vector<spv::Id> operands;
         operands.push_back(operand);
-        return createAtomicOperation(op, precision, typeId, operands, typeProxy);
+        return createAtomicOperation(op, decorations.precision, typeId, operands, typeProxy);
     }
 
     case glslang::EOpBitFieldReverse:
@@ -4342,7 +4692,45 @@
         operands.push_back(operand);
         return createInvocationsOperation(op, typeId, operands, typeProxy);
     }
-
+    case glslang::EOpSubgroupAll:
+    case glslang::EOpSubgroupAny:
+    case glslang::EOpSubgroupAllEqual:
+    case glslang::EOpSubgroupBroadcastFirst:
+    case glslang::EOpSubgroupBallot:
+    case glslang::EOpSubgroupInverseBallot:
+    case glslang::EOpSubgroupBallotBitCount:
+    case glslang::EOpSubgroupBallotInclusiveBitCount:
+    case glslang::EOpSubgroupBallotExclusiveBitCount:
+    case glslang::EOpSubgroupBallotFindLSB:
+    case glslang::EOpSubgroupBallotFindMSB:
+    case glslang::EOpSubgroupAdd:
+    case glslang::EOpSubgroupMul:
+    case glslang::EOpSubgroupMin:
+    case glslang::EOpSubgroupMax:
+    case glslang::EOpSubgroupAnd:
+    case glslang::EOpSubgroupOr:
+    case glslang::EOpSubgroupXor:
+    case glslang::EOpSubgroupInclusiveAdd:
+    case glslang::EOpSubgroupInclusiveMul:
+    case glslang::EOpSubgroupInclusiveMin:
+    case glslang::EOpSubgroupInclusiveMax:
+    case glslang::EOpSubgroupInclusiveAnd:
+    case glslang::EOpSubgroupInclusiveOr:
+    case glslang::EOpSubgroupInclusiveXor:
+    case glslang::EOpSubgroupExclusiveAdd:
+    case glslang::EOpSubgroupExclusiveMul:
+    case glslang::EOpSubgroupExclusiveMin:
+    case glslang::EOpSubgroupExclusiveMax:
+    case glslang::EOpSubgroupExclusiveAnd:
+    case glslang::EOpSubgroupExclusiveOr:
+    case glslang::EOpSubgroupExclusiveXor:
+    case glslang::EOpSubgroupQuadSwapHorizontal:
+    case glslang::EOpSubgroupQuadSwapVertical:
+    case glslang::EOpSubgroupQuadSwapDiagonal: {
+        std::vector<spv::Id> operands;
+        operands.push_back(operand);
+        return createSubgroupOperation(op, typeId, operands, typeProxy);
+    }
 #ifdef AMD_EXTENSIONS
     case glslang::EOpMbcnt:
         extBuiltins = getExtBuiltins(spv::E_SPV_AMD_shader_ballot);
@@ -4359,7 +4747,13 @@
         libCall = spv::CubeFaceCoordAMD;
         break;
 #endif
-
+#ifdef NV_EXTENSIONS
+    case glslang::EOpSubgroupPartition:
+        builder.addExtension(spv::E_SPV_NV_shader_subgroup_partitioned);
+        builder.addCapability(spv::CapabilityGroupNonUniformPartitionedNV);
+        unaryOp = spv::OpGroupNonUniformPartitionNV;
+        break;
+#endif
     default:
         return 0;
     }
@@ -4373,12 +4767,14 @@
         id = builder.createUnaryOp(unaryOp, typeId, operand);
     }
 
-    addDecoration(id, noContraction);
-    return builder.setPrecision(id, precision);
+    builder.addDecoration(id, decorations.noContraction);
+    builder.addDecoration(id, decorations.nonUniform);
+    return builder.setPrecision(id, decorations.precision);
 }
 
 // Create a unary operation on a matrix
-spv::Id TGlslangToSpvTraverser::createUnaryMatrixOperation(spv::Op op, spv::Decoration precision, spv::Decoration noContraction, spv::Id typeId, spv::Id operand, glslang::TBasicType /* typeProxy */)
+spv::Id TGlslangToSpvTraverser::createUnaryMatrixOperation(spv::Op op, OpDecorations& decorations, spv::Id typeId,
+                                                           spv::Id operand, glslang::TBasicType /* typeProxy */)
 {
     // Handle unary operations vector by vector.
     // The result type is the same type as the original type.
@@ -4400,40 +4796,162 @@
         indexes.push_back(c);
         spv::Id srcVec  = builder.createCompositeExtract(operand, srcVecType, indexes);
         spv::Id destVec = builder.createUnaryOp(op, destVecType, srcVec);
-        addDecoration(destVec, noContraction);
-        results.push_back(builder.setPrecision(destVec, precision));
+        builder.addDecoration(destVec, decorations.noContraction);
+        builder.addDecoration(destVec, decorations.nonUniform);
+        results.push_back(builder.setPrecision(destVec, decorations.precision));
     }
 
     // put the pieces together
-    return builder.setPrecision(builder.createCompositeConstruct(typeId, results), precision);
+    spv::Id result = builder.setPrecision(builder.createCompositeConstruct(typeId, results), decorations.precision);
+    builder.addDecoration(result, decorations.nonUniform);
+    return result;
 }
 
-spv::Id TGlslangToSpvTraverser::createConversion(glslang::TOperator op, spv::Decoration precision, spv::Decoration noContraction, spv::Id destType, spv::Id operand, glslang::TBasicType typeProxy)
+spv::Id TGlslangToSpvTraverser::createConversionOperation(glslang::TOperator op, spv::Id operand, int vectorSize)
+{
+    spv::Op convOp = spv::OpNop;
+    spv::Id type = 0;
+
+    spv::Id result = 0;
+
+    switch(op) {
+    case glslang::EOpConvInt8ToUint16:
+        convOp = spv::OpSConvert;
+        type   = builder.makeIntType(16);
+        break;
+    case glslang::EOpConvInt8ToUint:
+        convOp = spv::OpSConvert;
+        type   = builder.makeIntType(32);
+        break;
+    case glslang::EOpConvInt8ToUint64:
+        convOp = spv::OpSConvert;
+        type   = builder.makeIntType(64);
+        break;
+    case glslang::EOpConvInt16ToUint8:
+        convOp = spv::OpSConvert;
+        type   = builder.makeIntType(8);
+        break;
+    case glslang::EOpConvInt16ToUint:
+        convOp = spv::OpSConvert;
+        type   = builder.makeIntType(32);
+        break;
+    case glslang::EOpConvInt16ToUint64:
+        convOp = spv::OpSConvert;
+        type   = builder.makeIntType(64);
+        break;
+    case glslang::EOpConvIntToUint8:
+        convOp = spv::OpSConvert;
+        type   = builder.makeIntType(8);
+        break;
+    case glslang::EOpConvIntToUint16:
+        convOp = spv::OpSConvert;
+        type   = builder.makeIntType(16);
+        break;
+    case glslang::EOpConvIntToUint64:
+        convOp = spv::OpSConvert;
+        type   = builder.makeIntType(64);
+        break;
+    case glslang::EOpConvInt64ToUint8:
+        convOp = spv::OpSConvert;
+        type   = builder.makeIntType(8);
+        break;
+    case glslang::EOpConvInt64ToUint16:
+        convOp = spv::OpSConvert;
+        type   = builder.makeIntType(16);
+        break;
+    case glslang::EOpConvInt64ToUint:
+        convOp = spv::OpSConvert;
+        type   = builder.makeIntType(32);
+        break;
+    case glslang::EOpConvUint8ToInt16:
+        convOp = spv::OpUConvert;
+        type   = builder.makeIntType(16);
+        break;
+    case glslang::EOpConvUint8ToInt:
+        convOp = spv::OpUConvert;
+        type   = builder.makeIntType(32);
+        break;
+    case glslang::EOpConvUint8ToInt64:
+        convOp = spv::OpUConvert;
+        type   = builder.makeIntType(64);
+        break;
+    case glslang::EOpConvUint16ToInt8:
+        convOp = spv::OpUConvert;
+        type   = builder.makeIntType(8);
+        break;
+    case glslang::EOpConvUint16ToInt:
+        convOp = spv::OpUConvert;
+        type   = builder.makeIntType(32);
+        break;
+    case glslang::EOpConvUint16ToInt64:
+        convOp = spv::OpUConvert;
+        type   = builder.makeIntType(64);
+        break;
+    case glslang::EOpConvUintToInt8:
+        convOp = spv::OpUConvert;
+        type   = builder.makeIntType(8);
+        break;
+    case glslang::EOpConvUintToInt16:
+        convOp = spv::OpUConvert;
+        type   = builder.makeIntType(16);
+        break;
+    case glslang::EOpConvUintToInt64:
+        convOp = spv::OpUConvert;
+        type   = builder.makeIntType(64);
+        break;
+    case glslang::EOpConvUint64ToInt8:
+        convOp = spv::OpUConvert;
+        type   = builder.makeIntType(8);
+        break;
+    case glslang::EOpConvUint64ToInt16:
+        convOp = spv::OpUConvert;
+        type   = builder.makeIntType(16);
+        break;
+    case glslang::EOpConvUint64ToInt:
+        convOp = spv::OpUConvert;
+        type   = builder.makeIntType(32);
+        break;
+
+    default:
+        assert(false && "Default missing");
+        break;
+    }
+
+    if (vectorSize > 0)
+        type = builder.makeVectorType(type, vectorSize);
+
+    result = builder.createUnaryOp(convOp, type, operand);
+    return result;
+}
+
+spv::Id TGlslangToSpvTraverser::createConversion(glslang::TOperator op, OpDecorations& decorations, spv::Id destType,
+                                                 spv::Id operand, glslang::TBasicType typeProxy)
 {
     spv::Op convOp = spv::OpNop;
     spv::Id zero = 0;
     spv::Id one = 0;
-    spv::Id type = 0;
 
     int vectorSize = builder.isVectorType(destType) ? builder.getNumTypeComponents(destType) : 0;
 
     switch (op) {
-    case glslang::EOpConvIntToBool:
-    case glslang::EOpConvUintToBool:
-    case glslang::EOpConvInt64ToBool:
-    case glslang::EOpConvUint64ToBool:
-#ifdef AMD_EXTENSIONS
+    case glslang::EOpConvInt8ToBool:
+    case glslang::EOpConvUint8ToBool:
+        zero = builder.makeUint8Constant(0);
+        zero = makeSmearedConstant(zero, vectorSize);
+        return builder.createBinOp(spv::OpINotEqual, destType, operand, zero);
     case glslang::EOpConvInt16ToBool:
     case glslang::EOpConvUint16ToBool:
-#endif
-        if (op == glslang::EOpConvInt64ToBool || op == glslang::EOpConvUint64ToBool)
-            zero = builder.makeUint64Constant(0);
-#ifdef AMD_EXTENSIONS
-        else if (op == glslang::EOpConvInt16ToBool || op == glslang::EOpConvUint16ToBool)
-            zero = builder.makeUint16Constant(0);
-#endif
-        else
-            zero = builder.makeUintConstant(0);
+        zero = builder.makeUint16Constant(0);
+        zero = makeSmearedConstant(zero, vectorSize);
+        return builder.createBinOp(spv::OpINotEqual, destType, operand, zero);
+    case glslang::EOpConvIntToBool:
+    case glslang::EOpConvUintToBool:
+        zero = builder.makeUintConstant(0);
+        zero = makeSmearedConstant(zero, vectorSize);
+        return builder.createBinOp(spv::OpINotEqual, destType, operand, zero);
+    case glslang::EOpConvInt64ToBool:
+    case glslang::EOpConvUint64ToBool:
+        zero = builder.makeUint64Constant(0);
         zero = makeSmearedConstant(zero, vectorSize);
         return builder.createBinOp(spv::OpINotEqual, destType, operand, zero);
 
@@ -4447,12 +4965,10 @@
         zero = makeSmearedConstant(zero, vectorSize);
         return builder.createBinOp(spv::OpFOrdNotEqual, destType, operand, zero);
 
-#ifdef AMD_EXTENSIONS
     case glslang::EOpConvFloat16ToBool:
         zero = builder.makeFloat16Constant(0.0F);
         zero = makeSmearedConstant(zero, vectorSize);
         return builder.createBinOp(spv::OpFOrdNotEqual, destType, operand, zero);
-#endif
 
     case glslang::EOpConvBoolToFloat:
         convOp = spv::OpSelect;
@@ -4466,34 +4982,45 @@
         one  = builder.makeDoubleConstant(1.0);
         break;
 
-#ifdef AMD_EXTENSIONS
     case glslang::EOpConvBoolToFloat16:
         convOp = spv::OpSelect;
         zero = builder.makeFloat16Constant(0.0F);
         one = builder.makeFloat16Constant(1.0F);
         break;
-#endif
+
+    case glslang::EOpConvBoolToInt8:
+        zero = builder.makeInt8Constant(0);
+        one  = builder.makeInt8Constant(1);
+        convOp = spv::OpSelect;
+        break;
+
+    case glslang::EOpConvBoolToUint8:
+        zero = builder.makeUint8Constant(0);
+        one  = builder.makeUint8Constant(1);
+        convOp = spv::OpSelect;
+        break;
+
+    case glslang::EOpConvBoolToInt16:
+        zero = builder.makeInt16Constant(0);
+        one  = builder.makeInt16Constant(1);
+        convOp = spv::OpSelect;
+        break;
+
+    case glslang::EOpConvBoolToUint16:
+        zero = builder.makeUint16Constant(0);
+        one  = builder.makeUint16Constant(1);
+        convOp = spv::OpSelect;
+        break;
 
     case glslang::EOpConvBoolToInt:
     case glslang::EOpConvBoolToInt64:
-#ifdef AMD_EXTENSIONS
-    case glslang::EOpConvBoolToInt16:
-#endif
         if (op == glslang::EOpConvBoolToInt64)
             zero = builder.makeInt64Constant(0);
-#ifdef AMD_EXTENSIONS
-        else if (op == glslang::EOpConvBoolToInt16)
-            zero = builder.makeInt16Constant(0);
-#endif
         else
             zero = builder.makeIntConstant(0);
 
         if (op == glslang::EOpConvBoolToInt64)
             one = builder.makeInt64Constant(1);
-#ifdef AMD_EXTENSIONS
-        else if (op == glslang::EOpConvBoolToInt16)
-            one = builder.makeInt16Constant(1);
-#endif
         else
             one = builder.makeIntConstant(1);
 
@@ -4502,104 +5029,94 @@
 
     case glslang::EOpConvBoolToUint:
     case glslang::EOpConvBoolToUint64:
-#ifdef AMD_EXTENSIONS
-    case glslang::EOpConvBoolToUint16:
-#endif
         if (op == glslang::EOpConvBoolToUint64)
             zero = builder.makeUint64Constant(0);
-#ifdef AMD_EXTENSIONS
-        else if (op == glslang::EOpConvBoolToUint16)
-            zero = builder.makeUint16Constant(0);
-#endif
         else
             zero = builder.makeUintConstant(0);
 
         if (op == glslang::EOpConvBoolToUint64)
             one = builder.makeUint64Constant(1);
-#ifdef AMD_EXTENSIONS
-        else if (op == glslang::EOpConvBoolToUint16)
-            one = builder.makeUint16Constant(1);
-#endif
         else
             one = builder.makeUintConstant(1);
 
         convOp = spv::OpSelect;
         break;
 
+    case glslang::EOpConvInt8ToFloat16:
+    case glslang::EOpConvInt8ToFloat:
+    case glslang::EOpConvInt8ToDouble:
+    case glslang::EOpConvInt16ToFloat16:
+    case glslang::EOpConvInt16ToFloat:
+    case glslang::EOpConvInt16ToDouble:
+    case glslang::EOpConvIntToFloat16:
     case glslang::EOpConvIntToFloat:
     case glslang::EOpConvIntToDouble:
     case glslang::EOpConvInt64ToFloat:
     case glslang::EOpConvInt64ToDouble:
-#ifdef AMD_EXTENSIONS
-    case glslang::EOpConvInt16ToFloat:
-    case glslang::EOpConvInt16ToDouble:
-    case glslang::EOpConvInt16ToFloat16:
-    case glslang::EOpConvIntToFloat16:
     case glslang::EOpConvInt64ToFloat16:
-#endif
         convOp = spv::OpConvertSToF;
         break;
 
+    case glslang::EOpConvUint8ToFloat16:
+    case glslang::EOpConvUint8ToFloat:
+    case glslang::EOpConvUint8ToDouble:
+    case glslang::EOpConvUint16ToFloat16:
+    case glslang::EOpConvUint16ToFloat:
+    case glslang::EOpConvUint16ToDouble:
+    case glslang::EOpConvUintToFloat16:
     case glslang::EOpConvUintToFloat:
     case glslang::EOpConvUintToDouble:
     case glslang::EOpConvUint64ToFloat:
     case glslang::EOpConvUint64ToDouble:
-#ifdef AMD_EXTENSIONS
-    case glslang::EOpConvUint16ToFloat:
-    case glslang::EOpConvUint16ToDouble:
-    case glslang::EOpConvUint16ToFloat16:
-    case glslang::EOpConvUintToFloat16:
     case glslang::EOpConvUint64ToFloat16:
-#endif
         convOp = spv::OpConvertUToF;
         break;
 
     case glslang::EOpConvDoubleToFloat:
     case glslang::EOpConvFloatToDouble:
-#ifdef AMD_EXTENSIONS
     case glslang::EOpConvDoubleToFloat16:
     case glslang::EOpConvFloat16ToDouble:
     case glslang::EOpConvFloatToFloat16:
     case glslang::EOpConvFloat16ToFloat:
-#endif
         convOp = spv::OpFConvert;
         if (builder.isMatrixType(destType))
-            return createUnaryMatrixOperation(convOp, precision, noContraction, destType, operand, typeProxy);
+            return createUnaryMatrixOperation(convOp, decorations, destType, operand, typeProxy);
         break;
 
-    case glslang::EOpConvFloatToInt:
-    case glslang::EOpConvDoubleToInt:
-    case glslang::EOpConvFloatToInt64:
-    case glslang::EOpConvDoubleToInt64:
-#ifdef AMD_EXTENSIONS
+    case glslang::EOpConvFloat16ToInt8:
+    case glslang::EOpConvFloatToInt8:
+    case glslang::EOpConvDoubleToInt8:
+    case glslang::EOpConvFloat16ToInt16:
     case glslang::EOpConvFloatToInt16:
     case glslang::EOpConvDoubleToInt16:
-    case glslang::EOpConvFloat16ToInt16:
     case glslang::EOpConvFloat16ToInt:
+    case glslang::EOpConvFloatToInt:
+    case glslang::EOpConvDoubleToInt:
     case glslang::EOpConvFloat16ToInt64:
-#endif
+    case glslang::EOpConvFloatToInt64:
+    case glslang::EOpConvDoubleToInt64:
         convOp = spv::OpConvertFToS;
         break;
 
+    case glslang::EOpConvUint8ToInt8:
+    case glslang::EOpConvInt8ToUint8:
+    case glslang::EOpConvUint16ToInt16:
+    case glslang::EOpConvInt16ToUint16:
     case glslang::EOpConvUintToInt:
     case glslang::EOpConvIntToUint:
     case glslang::EOpConvUint64ToInt64:
     case glslang::EOpConvInt64ToUint64:
-#ifdef AMD_EXTENSIONS
-    case glslang::EOpConvUint16ToInt16:
-    case glslang::EOpConvInt16ToUint16:
-#endif
         if (builder.isInSpecConstCodeGenMode()) {
             // Build zero scalar or vector for OpIAdd.
-            if (op == glslang::EOpConvUint64ToInt64 || op == glslang::EOpConvInt64ToUint64)
-                zero = builder.makeUint64Constant(0);
-#ifdef AMD_EXTENSIONS
-            else if (op == glslang::EOpConvUint16ToInt16 || op == glslang::EOpConvInt16ToUint16)
+            if(op == glslang::EOpConvUint8ToInt8 || op == glslang::EOpConvInt8ToUint8) {
+                zero = builder.makeUint8Constant(0);
+            } else if (op == glslang::EOpConvUint16ToInt16 || op == glslang::EOpConvInt16ToUint16) {
                 zero = builder.makeUint16Constant(0);
-#endif
-            else
+            } else if (op == glslang::EOpConvUint64ToInt64 || op == glslang::EOpConvInt64ToUint64) {
+                zero = builder.makeUint64Constant(0);
+            } else {
                 zero = builder.makeUintConstant(0);
-
+            }
             zero = makeSmearedConstant(zero, vectorSize);
             // Use OpIAdd, instead of OpBitcast to do the conversion when
             // generating for OpSpecConstantOp instruction.
@@ -4609,126 +5126,117 @@
         convOp = spv::OpBitcast;
         break;
 
+    case glslang::EOpConvFloat16ToUint8:
+    case glslang::EOpConvFloatToUint8:
+    case glslang::EOpConvDoubleToUint8:
+    case glslang::EOpConvFloat16ToUint16:
+    case glslang::EOpConvFloatToUint16:
+    case glslang::EOpConvDoubleToUint16:
+    case glslang::EOpConvFloat16ToUint:
     case glslang::EOpConvFloatToUint:
     case glslang::EOpConvDoubleToUint:
     case glslang::EOpConvFloatToUint64:
     case glslang::EOpConvDoubleToUint64:
-#ifdef AMD_EXTENSIONS
-    case glslang::EOpConvFloatToUint16:
-    case glslang::EOpConvDoubleToUint16:
-    case glslang::EOpConvFloat16ToUint16:
-    case glslang::EOpConvFloat16ToUint:
     case glslang::EOpConvFloat16ToUint64:
-#endif
         convOp = spv::OpConvertFToU;
         break;
 
-    case glslang::EOpConvIntToInt64:
-    case glslang::EOpConvInt64ToInt:
-#ifdef AMD_EXTENSIONS
-    case glslang::EOpConvIntToInt16:
+    case glslang::EOpConvInt8ToInt16:
+    case glslang::EOpConvInt8ToInt:
+    case glslang::EOpConvInt8ToInt64:
+    case glslang::EOpConvInt16ToInt8:
     case glslang::EOpConvInt16ToInt:
-    case glslang::EOpConvInt64ToInt16:
     case glslang::EOpConvInt16ToInt64:
-#endif
+    case glslang::EOpConvIntToInt8:
+    case glslang::EOpConvIntToInt16:
+    case glslang::EOpConvIntToInt64:
+    case glslang::EOpConvInt64ToInt8:
+    case glslang::EOpConvInt64ToInt16:
+    case glslang::EOpConvInt64ToInt:
         convOp = spv::OpSConvert;
         break;
 
-    case glslang::EOpConvUintToUint64:
-    case glslang::EOpConvUint64ToUint:
-#ifdef AMD_EXTENSIONS
-    case glslang::EOpConvUintToUint16:
+    case glslang::EOpConvUint8ToUint16:
+    case glslang::EOpConvUint8ToUint:
+    case glslang::EOpConvUint8ToUint64:
+    case glslang::EOpConvUint16ToUint8:
     case glslang::EOpConvUint16ToUint:
-    case glslang::EOpConvUint64ToUint16:
     case glslang::EOpConvUint16ToUint64:
-#endif
+    case glslang::EOpConvUintToUint8:
+    case glslang::EOpConvUintToUint16:
+    case glslang::EOpConvUintToUint64:
+    case glslang::EOpConvUint64ToUint8:
+    case glslang::EOpConvUint64ToUint16:
+    case glslang::EOpConvUint64ToUint:
         convOp = spv::OpUConvert;
         break;
 
-    case glslang::EOpConvIntToUint64:
-    case glslang::EOpConvInt64ToUint:
-    case glslang::EOpConvUint64ToInt:
-    case glslang::EOpConvUintToInt64:
-#ifdef AMD_EXTENSIONS
+    case glslang::EOpConvInt8ToUint16:
+    case glslang::EOpConvInt8ToUint:
+    case glslang::EOpConvInt8ToUint64:
+    case glslang::EOpConvInt16ToUint8:
     case glslang::EOpConvInt16ToUint:
-    case glslang::EOpConvUintToInt16:
     case glslang::EOpConvInt16ToUint64:
-    case glslang::EOpConvUint64ToInt16:
-    case glslang::EOpConvUint16ToInt:
+    case glslang::EOpConvIntToUint8:
     case glslang::EOpConvIntToUint16:
-    case glslang::EOpConvUint16ToInt64:
+    case glslang::EOpConvIntToUint64:
+    case glslang::EOpConvInt64ToUint8:
     case glslang::EOpConvInt64ToUint16:
-#endif
+    case glslang::EOpConvInt64ToUint:
+    case glslang::EOpConvUint8ToInt16:
+    case glslang::EOpConvUint8ToInt:
+    case glslang::EOpConvUint8ToInt64:
+    case glslang::EOpConvUint16ToInt8:
+    case glslang::EOpConvUint16ToInt:
+    case glslang::EOpConvUint16ToInt64:
+    case glslang::EOpConvUintToInt8:
+    case glslang::EOpConvUintToInt16:
+    case glslang::EOpConvUintToInt64:
+    case glslang::EOpConvUint64ToInt8:
+    case glslang::EOpConvUint64ToInt16:
+    case glslang::EOpConvUint64ToInt:
         // OpSConvert/OpUConvert + OpBitCast
-        switch (op) {
-        case glslang::EOpConvIntToUint64:
-#ifdef AMD_EXTENSIONS
-        case glslang::EOpConvInt16ToUint64:
-#endif
-            convOp = spv::OpSConvert;
-            type   = builder.makeIntType(64);
-            break;
-        case glslang::EOpConvInt64ToUint:
-#ifdef AMD_EXTENSIONS
-        case glslang::EOpConvInt16ToUint:
-#endif
-            convOp = spv::OpSConvert;
-            type   = builder.makeIntType(32);
-            break;
-        case glslang::EOpConvUint64ToInt:
-#ifdef AMD_EXTENSIONS
-        case glslang::EOpConvUint16ToInt:
-#endif
-            convOp = spv::OpUConvert;
-            type   = builder.makeUintType(32);
-            break;
-        case glslang::EOpConvUintToInt64:
-#ifdef AMD_EXTENSIONS
-        case glslang::EOpConvUint16ToInt64:
-#endif
-            convOp = spv::OpUConvert;
-            type   = builder.makeUintType(64);
-            break;
-#ifdef AMD_EXTENSIONS
-        case glslang::EOpConvUintToInt16:
-        case glslang::EOpConvUint64ToInt16:
-            convOp = spv::OpUConvert;
-            type   = builder.makeUintType(16);
-            break;
-        case glslang::EOpConvIntToUint16:
-        case glslang::EOpConvInt64ToUint16:
-            convOp = spv::OpSConvert;
-            type   = builder.makeIntType(16);
-            break;
-#endif
-        default:
-            assert(0);
-            break;
-        }
-
-        if (vectorSize > 0)
-            type = builder.makeVectorType(type, vectorSize);
-
-        operand = builder.createUnaryOp(convOp, type, operand);
+        operand = createConversionOperation(op, operand, vectorSize);
 
         if (builder.isInSpecConstCodeGenMode()) {
             // Build zero scalar or vector for OpIAdd.
-#ifdef AMD_EXTENSIONS
-            if (op == glslang::EOpConvIntToUint64 || op == glslang::EOpConvUintToInt64 ||
-                op == glslang::EOpConvInt16ToUint64 || op == glslang::EOpConvUint16ToInt64)
-                zero = builder.makeUint64Constant(0);
-            else if (op == glslang::EOpConvIntToUint16 || op == glslang::EOpConvUintToInt16 ||
-                     op == glslang::EOpConvInt64ToUint16 || op == glslang::EOpConvUint64ToInt16)
+            switch(op) {
+            case glslang::EOpConvInt16ToUint8:
+            case glslang::EOpConvIntToUint8:
+            case glslang::EOpConvInt64ToUint8:
+            case glslang::EOpConvUint16ToInt8:
+            case glslang::EOpConvUintToInt8:
+            case glslang::EOpConvUint64ToInt8:
+                zero = builder.makeUint8Constant(0);
+                break;
+            case glslang::EOpConvInt8ToUint16:
+            case glslang::EOpConvIntToUint16:
+            case glslang::EOpConvInt64ToUint16:
+            case glslang::EOpConvUint8ToInt16:
+            case glslang::EOpConvUintToInt16:
+            case glslang::EOpConvUint64ToInt16:
                 zero = builder.makeUint16Constant(0);
-            else
+                break;
+            case glslang::EOpConvInt8ToUint:
+            case glslang::EOpConvInt16ToUint:
+            case glslang::EOpConvInt64ToUint:
+            case glslang::EOpConvUint8ToInt:
+            case glslang::EOpConvUint16ToInt:
+            case glslang::EOpConvUint64ToInt:
                 zero = builder.makeUintConstant(0);
-#else
-            if (op == glslang::EOpConvIntToUint64 || op == glslang::EOpConvUintToInt64)
+                break;
+            case glslang::EOpConvInt8ToUint64:
+            case glslang::EOpConvInt16ToUint64:
+            case glslang::EOpConvIntToUint64:
+            case glslang::EOpConvUint8ToInt64:
+            case glslang::EOpConvUint16ToInt64:
+            case glslang::EOpConvUintToInt64:
                 zero = builder.makeUint64Constant(0);
-            else
-                zero = builder.makeUintConstant(0);
-#endif
-
+                break;
+            default:
+                assert(false && "Default missing");
+                break;
+            }
             zero = makeSmearedConstant(zero, vectorSize);
             // Use OpIAdd, instead of OpBitcast to do the conversion when
             // generating for OpSpecConstantOp instruction.
@@ -4752,7 +5260,9 @@
     } else
         result = builder.createUnaryOp(convOp, destType, operand);
 
-    return builder.setPrecision(result, precision);
+    result = builder.setPrecision(result, decorations.precision);
+    builder.addDecoration(result, decorations.nonUniform);
+    return result;
 }
 
 spv::Id TGlslangToSpvTraverser::makeSmearedConstant(spv::Id constant, int vectorSize)
@@ -4870,10 +5380,8 @@
 // Create group invocation operations.
 spv::Id TGlslangToSpvTraverser::createInvocationsOperation(glslang::TOperator op, spv::Id typeId, std::vector<spv::Id>& operands, glslang::TBasicType typeProxy)
 {
-#ifdef AMD_EXTENSIONS
-    bool isUnsigned = typeProxy == glslang::EbtUint || typeProxy == glslang::EbtUint64;
-    bool isFloat = typeProxy == glslang::EbtFloat || typeProxy == glslang::EbtDouble || typeProxy == glslang::EbtFloat16;
-#endif
+    bool isUnsigned = isTypeUnsignedInt(typeProxy);
+    bool isFloat = isTypeFloat(typeProxy);
 
     spv::Op opCode = spv::OpNop;
     std::vector<spv::Id> spvGroupOperands;
@@ -5134,15 +5642,353 @@
     return builder.createCompositeConstruct(typeId, results);
 }
 
+// Create subgroup invocation operations.
+spv::Id TGlslangToSpvTraverser::createSubgroupOperation(glslang::TOperator op, spv::Id typeId, std::vector<spv::Id>& operands, glslang::TBasicType typeProxy)
+{
+    // Add the required capabilities.
+    switch (op) {
+    case glslang::EOpSubgroupElect:
+        builder.addCapability(spv::CapabilityGroupNonUniform);
+        break;
+    case glslang::EOpSubgroupAll:
+    case glslang::EOpSubgroupAny:
+    case glslang::EOpSubgroupAllEqual:
+        builder.addCapability(spv::CapabilityGroupNonUniform);
+        builder.addCapability(spv::CapabilityGroupNonUniformVote);
+        break;
+    case glslang::EOpSubgroupBroadcast:
+    case glslang::EOpSubgroupBroadcastFirst:
+    case glslang::EOpSubgroupBallot:
+    case glslang::EOpSubgroupInverseBallot:
+    case glslang::EOpSubgroupBallotBitExtract:
+    case glslang::EOpSubgroupBallotBitCount:
+    case glslang::EOpSubgroupBallotInclusiveBitCount:
+    case glslang::EOpSubgroupBallotExclusiveBitCount:
+    case glslang::EOpSubgroupBallotFindLSB:
+    case glslang::EOpSubgroupBallotFindMSB:
+        builder.addCapability(spv::CapabilityGroupNonUniform);
+        builder.addCapability(spv::CapabilityGroupNonUniformBallot);
+        break;
+    case glslang::EOpSubgroupShuffle:
+    case glslang::EOpSubgroupShuffleXor:
+        builder.addCapability(spv::CapabilityGroupNonUniform);
+        builder.addCapability(spv::CapabilityGroupNonUniformShuffle);
+        break;
+    case glslang::EOpSubgroupShuffleUp:
+    case glslang::EOpSubgroupShuffleDown:
+        builder.addCapability(spv::CapabilityGroupNonUniform);
+        builder.addCapability(spv::CapabilityGroupNonUniformShuffleRelative);
+        break;
+    case glslang::EOpSubgroupAdd:
+    case glslang::EOpSubgroupMul:
+    case glslang::EOpSubgroupMin:
+    case glslang::EOpSubgroupMax:
+    case glslang::EOpSubgroupAnd:
+    case glslang::EOpSubgroupOr:
+    case glslang::EOpSubgroupXor:
+    case glslang::EOpSubgroupInclusiveAdd:
+    case glslang::EOpSubgroupInclusiveMul:
+    case glslang::EOpSubgroupInclusiveMin:
+    case glslang::EOpSubgroupInclusiveMax:
+    case glslang::EOpSubgroupInclusiveAnd:
+    case glslang::EOpSubgroupInclusiveOr:
+    case glslang::EOpSubgroupInclusiveXor:
+    case glslang::EOpSubgroupExclusiveAdd:
+    case glslang::EOpSubgroupExclusiveMul:
+    case glslang::EOpSubgroupExclusiveMin:
+    case glslang::EOpSubgroupExclusiveMax:
+    case glslang::EOpSubgroupExclusiveAnd:
+    case glslang::EOpSubgroupExclusiveOr:
+    case glslang::EOpSubgroupExclusiveXor:
+        builder.addCapability(spv::CapabilityGroupNonUniform);
+        builder.addCapability(spv::CapabilityGroupNonUniformArithmetic);
+        break;
+    case glslang::EOpSubgroupClusteredAdd:
+    case glslang::EOpSubgroupClusteredMul:
+    case glslang::EOpSubgroupClusteredMin:
+    case glslang::EOpSubgroupClusteredMax:
+    case glslang::EOpSubgroupClusteredAnd:
+    case glslang::EOpSubgroupClusteredOr:
+    case glslang::EOpSubgroupClusteredXor:
+        builder.addCapability(spv::CapabilityGroupNonUniform);
+        builder.addCapability(spv::CapabilityGroupNonUniformClustered);
+        break;
+    case glslang::EOpSubgroupQuadBroadcast:
+    case glslang::EOpSubgroupQuadSwapHorizontal:
+    case glslang::EOpSubgroupQuadSwapVertical:
+    case glslang::EOpSubgroupQuadSwapDiagonal:
+        builder.addCapability(spv::CapabilityGroupNonUniform);
+        builder.addCapability(spv::CapabilityGroupNonUniformQuad);
+        break;
+#ifdef NV_EXTENSIONS
+    case glslang::EOpSubgroupPartitionedAdd:
+    case glslang::EOpSubgroupPartitionedMul:
+    case glslang::EOpSubgroupPartitionedMin:
+    case glslang::EOpSubgroupPartitionedMax:
+    case glslang::EOpSubgroupPartitionedAnd:
+    case glslang::EOpSubgroupPartitionedOr:
+    case glslang::EOpSubgroupPartitionedXor:
+    case glslang::EOpSubgroupPartitionedInclusiveAdd:
+    case glslang::EOpSubgroupPartitionedInclusiveMul:
+    case glslang::EOpSubgroupPartitionedInclusiveMin:
+    case glslang::EOpSubgroupPartitionedInclusiveMax:
+    case glslang::EOpSubgroupPartitionedInclusiveAnd:
+    case glslang::EOpSubgroupPartitionedInclusiveOr:
+    case glslang::EOpSubgroupPartitionedInclusiveXor:
+    case glslang::EOpSubgroupPartitionedExclusiveAdd:
+    case glslang::EOpSubgroupPartitionedExclusiveMul:
+    case glslang::EOpSubgroupPartitionedExclusiveMin:
+    case glslang::EOpSubgroupPartitionedExclusiveMax:
+    case glslang::EOpSubgroupPartitionedExclusiveAnd:
+    case glslang::EOpSubgroupPartitionedExclusiveOr:
+    case glslang::EOpSubgroupPartitionedExclusiveXor:
+        builder.addExtension(spv::E_SPV_NV_shader_subgroup_partitioned);
+        builder.addCapability(spv::CapabilityGroupNonUniformPartitionedNV);
+        break;
+#endif
+    default: assert(0 && "Unhandled subgroup operation!");
+    }
+
+    const bool isUnsigned = typeProxy == glslang::EbtUint || typeProxy == glslang::EbtUint64;
+    const bool isFloat = typeProxy == glslang::EbtFloat || typeProxy == glslang::EbtDouble;
+    const bool isBool = typeProxy == glslang::EbtBool;
+
+    spv::Op opCode = spv::OpNop;
+
+    // Figure out which opcode to use.
+    switch (op) {
+    case glslang::EOpSubgroupElect:                   opCode = spv::OpGroupNonUniformElect; break;
+    case glslang::EOpSubgroupAll:                     opCode = spv::OpGroupNonUniformAll; break;
+    case glslang::EOpSubgroupAny:                     opCode = spv::OpGroupNonUniformAny; break;
+    case glslang::EOpSubgroupAllEqual:                opCode = spv::OpGroupNonUniformAllEqual; break;
+    case glslang::EOpSubgroupBroadcast:               opCode = spv::OpGroupNonUniformBroadcast; break;
+    case glslang::EOpSubgroupBroadcastFirst:          opCode = spv::OpGroupNonUniformBroadcastFirst; break;
+    case glslang::EOpSubgroupBallot:                  opCode = spv::OpGroupNonUniformBallot; break;
+    case glslang::EOpSubgroupInverseBallot:           opCode = spv::OpGroupNonUniformInverseBallot; break;
+    case glslang::EOpSubgroupBallotBitExtract:        opCode = spv::OpGroupNonUniformBallotBitExtract; break;
+    case glslang::EOpSubgroupBallotBitCount:
+    case glslang::EOpSubgroupBallotInclusiveBitCount:
+    case glslang::EOpSubgroupBallotExclusiveBitCount: opCode = spv::OpGroupNonUniformBallotBitCount; break;
+    case glslang::EOpSubgroupBallotFindLSB:           opCode = spv::OpGroupNonUniformBallotFindLSB; break;
+    case glslang::EOpSubgroupBallotFindMSB:           opCode = spv::OpGroupNonUniformBallotFindMSB; break;
+    case glslang::EOpSubgroupShuffle:                 opCode = spv::OpGroupNonUniformShuffle; break;
+    case glslang::EOpSubgroupShuffleXor:              opCode = spv::OpGroupNonUniformShuffleXor; break;
+    case glslang::EOpSubgroupShuffleUp:               opCode = spv::OpGroupNonUniformShuffleUp; break;
+    case glslang::EOpSubgroupShuffleDown:             opCode = spv::OpGroupNonUniformShuffleDown; break;
+    case glslang::EOpSubgroupAdd:
+    case glslang::EOpSubgroupInclusiveAdd:
+    case glslang::EOpSubgroupExclusiveAdd:
+    case glslang::EOpSubgroupClusteredAdd:
+#ifdef NV_EXTENSIONS
+    case glslang::EOpSubgroupPartitionedAdd:
+    case glslang::EOpSubgroupPartitionedInclusiveAdd:
+    case glslang::EOpSubgroupPartitionedExclusiveAdd:
+#endif
+        if (isFloat) {
+            opCode = spv::OpGroupNonUniformFAdd;
+        } else {
+            opCode = spv::OpGroupNonUniformIAdd;
+        }
+        break;
+    case glslang::EOpSubgroupMul:
+    case glslang::EOpSubgroupInclusiveMul:
+    case glslang::EOpSubgroupExclusiveMul:
+    case glslang::EOpSubgroupClusteredMul:
+#ifdef NV_EXTENSIONS
+    case glslang::EOpSubgroupPartitionedMul:
+    case glslang::EOpSubgroupPartitionedInclusiveMul:
+    case glslang::EOpSubgroupPartitionedExclusiveMul:
+#endif
+        if (isFloat) {
+            opCode = spv::OpGroupNonUniformFMul;
+        } else {
+            opCode = spv::OpGroupNonUniformIMul;
+        }
+        break;
+    case glslang::EOpSubgroupMin:
+    case glslang::EOpSubgroupInclusiveMin:
+    case glslang::EOpSubgroupExclusiveMin:
+    case glslang::EOpSubgroupClusteredMin:
+#ifdef NV_EXTENSIONS
+    case glslang::EOpSubgroupPartitionedMin:
+    case glslang::EOpSubgroupPartitionedInclusiveMin:
+    case glslang::EOpSubgroupPartitionedExclusiveMin:
+#endif
+        if (isFloat) {
+            opCode = spv::OpGroupNonUniformFMin;
+        } else if (isUnsigned) {
+            opCode = spv::OpGroupNonUniformUMin;
+        } else {
+            opCode = spv::OpGroupNonUniformSMin;
+        }
+        break;
+    case glslang::EOpSubgroupMax:
+    case glslang::EOpSubgroupInclusiveMax:
+    case glslang::EOpSubgroupExclusiveMax:
+    case glslang::EOpSubgroupClusteredMax:
+#ifdef NV_EXTENSIONS
+    case glslang::EOpSubgroupPartitionedMax:
+    case glslang::EOpSubgroupPartitionedInclusiveMax:
+    case glslang::EOpSubgroupPartitionedExclusiveMax:
+#endif
+        if (isFloat) {
+            opCode = spv::OpGroupNonUniformFMax;
+        } else if (isUnsigned) {
+            opCode = spv::OpGroupNonUniformUMax;
+        } else {
+            opCode = spv::OpGroupNonUniformSMax;
+        }
+        break;
+    case glslang::EOpSubgroupAnd:
+    case glslang::EOpSubgroupInclusiveAnd:
+    case glslang::EOpSubgroupExclusiveAnd:
+    case glslang::EOpSubgroupClusteredAnd:
+#ifdef NV_EXTENSIONS
+    case glslang::EOpSubgroupPartitionedAnd:
+    case glslang::EOpSubgroupPartitionedInclusiveAnd:
+    case glslang::EOpSubgroupPartitionedExclusiveAnd:
+#endif
+        if (isBool) {
+            opCode = spv::OpGroupNonUniformLogicalAnd;
+        } else {
+            opCode = spv::OpGroupNonUniformBitwiseAnd;
+        }
+        break;
+    case glslang::EOpSubgroupOr:
+    case glslang::EOpSubgroupInclusiveOr:
+    case glslang::EOpSubgroupExclusiveOr:
+    case glslang::EOpSubgroupClusteredOr:
+#ifdef NV_EXTENSIONS
+    case glslang::EOpSubgroupPartitionedOr:
+    case glslang::EOpSubgroupPartitionedInclusiveOr:
+    case glslang::EOpSubgroupPartitionedExclusiveOr:
+#endif
+        if (isBool) {
+            opCode = spv::OpGroupNonUniformLogicalOr;
+        } else {
+            opCode = spv::OpGroupNonUniformBitwiseOr;
+        }
+        break;
+    case glslang::EOpSubgroupXor:
+    case glslang::EOpSubgroupInclusiveXor:
+    case glslang::EOpSubgroupExclusiveXor:
+    case glslang::EOpSubgroupClusteredXor:
+#ifdef NV_EXTENSIONS
+    case glslang::EOpSubgroupPartitionedXor:
+    case glslang::EOpSubgroupPartitionedInclusiveXor:
+    case glslang::EOpSubgroupPartitionedExclusiveXor:
+#endif
+        if (isBool) {
+            opCode = spv::OpGroupNonUniformLogicalXor;
+        } else {
+            opCode = spv::OpGroupNonUniformBitwiseXor;
+        }
+        break;
+    case glslang::EOpSubgroupQuadBroadcast:      opCode = spv::OpGroupNonUniformQuadBroadcast; break;
+    case glslang::EOpSubgroupQuadSwapHorizontal:
+    case glslang::EOpSubgroupQuadSwapVertical:
+    case glslang::EOpSubgroupQuadSwapDiagonal:   opCode = spv::OpGroupNonUniformQuadSwap; break;
+    default: assert(0 && "Unhandled subgroup operation!");
+    }
+
+    std::vector<spv::Id> spvGroupOperands;
+
+    // Every operation begins with the Execution Scope operand.
+    spvGroupOperands.push_back(builder.makeUintConstant(spv::ScopeSubgroup));
+
+    // Next, for all operations that use a Group Operation, push that as an operand.
+    switch (op) {
+    default: break;
+    case glslang::EOpSubgroupBallotBitCount:
+    case glslang::EOpSubgroupAdd:
+    case glslang::EOpSubgroupMul:
+    case glslang::EOpSubgroupMin:
+    case glslang::EOpSubgroupMax:
+    case glslang::EOpSubgroupAnd:
+    case glslang::EOpSubgroupOr:
+    case glslang::EOpSubgroupXor:
+        spvGroupOperands.push_back(spv::GroupOperationReduce);
+        break;
+    case glslang::EOpSubgroupBallotInclusiveBitCount:
+    case glslang::EOpSubgroupInclusiveAdd:
+    case glslang::EOpSubgroupInclusiveMul:
+    case glslang::EOpSubgroupInclusiveMin:
+    case glslang::EOpSubgroupInclusiveMax:
+    case glslang::EOpSubgroupInclusiveAnd:
+    case glslang::EOpSubgroupInclusiveOr:
+    case glslang::EOpSubgroupInclusiveXor:
+        spvGroupOperands.push_back(spv::GroupOperationInclusiveScan);
+        break;
+    case glslang::EOpSubgroupBallotExclusiveBitCount:
+    case glslang::EOpSubgroupExclusiveAdd:
+    case glslang::EOpSubgroupExclusiveMul:
+    case glslang::EOpSubgroupExclusiveMin:
+    case glslang::EOpSubgroupExclusiveMax:
+    case glslang::EOpSubgroupExclusiveAnd:
+    case glslang::EOpSubgroupExclusiveOr:
+    case glslang::EOpSubgroupExclusiveXor:
+        spvGroupOperands.push_back(spv::GroupOperationExclusiveScan);
+        break;
+    case glslang::EOpSubgroupClusteredAdd:
+    case glslang::EOpSubgroupClusteredMul:
+    case glslang::EOpSubgroupClusteredMin:
+    case glslang::EOpSubgroupClusteredMax:
+    case glslang::EOpSubgroupClusteredAnd:
+    case glslang::EOpSubgroupClusteredOr:
+    case glslang::EOpSubgroupClusteredXor:
+        spvGroupOperands.push_back(spv::GroupOperationClusteredReduce);
+        break;
+#ifdef NV_EXTENSIONS
+    case glslang::EOpSubgroupPartitionedAdd:
+    case glslang::EOpSubgroupPartitionedMul:
+    case glslang::EOpSubgroupPartitionedMin:
+    case glslang::EOpSubgroupPartitionedMax:
+    case glslang::EOpSubgroupPartitionedAnd:
+    case glslang::EOpSubgroupPartitionedOr:
+    case glslang::EOpSubgroupPartitionedXor:
+        spvGroupOperands.push_back(spv::GroupOperationPartitionedReduceNV);
+        break;
+    case glslang::EOpSubgroupPartitionedInclusiveAdd:
+    case glslang::EOpSubgroupPartitionedInclusiveMul:
+    case glslang::EOpSubgroupPartitionedInclusiveMin:
+    case glslang::EOpSubgroupPartitionedInclusiveMax:
+    case glslang::EOpSubgroupPartitionedInclusiveAnd:
+    case glslang::EOpSubgroupPartitionedInclusiveOr:
+    case glslang::EOpSubgroupPartitionedInclusiveXor:
+        spvGroupOperands.push_back(spv::GroupOperationPartitionedInclusiveScanNV);
+        break;
+    case glslang::EOpSubgroupPartitionedExclusiveAdd:
+    case glslang::EOpSubgroupPartitionedExclusiveMul:
+    case glslang::EOpSubgroupPartitionedExclusiveMin:
+    case glslang::EOpSubgroupPartitionedExclusiveMax:
+    case glslang::EOpSubgroupPartitionedExclusiveAnd:
+    case glslang::EOpSubgroupPartitionedExclusiveOr:
+    case glslang::EOpSubgroupPartitionedExclusiveXor:
+        spvGroupOperands.push_back(spv::GroupOperationPartitionedExclusiveScanNV);
+        break;
+#endif
+    }
+
+    // Push back the operands next.
+    for (auto opIt : operands) {
+        spvGroupOperands.push_back(opIt);
+    }
+
+    // Some opcodes have additional operands.
+    switch (op) {
+    default: break;
+    case glslang::EOpSubgroupQuadSwapHorizontal: spvGroupOperands.push_back(builder.makeUintConstant(0)); break;
+    case glslang::EOpSubgroupQuadSwapVertical:   spvGroupOperands.push_back(builder.makeUintConstant(1)); break;
+    case glslang::EOpSubgroupQuadSwapDiagonal:   spvGroupOperands.push_back(builder.makeUintConstant(2)); break;
+    }
+
+    return builder.createOp(opCode, typeId, spvGroupOperands);
+}
+
 spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv::Decoration precision, spv::Id typeId, std::vector<spv::Id>& operands, glslang::TBasicType typeProxy)
 {
-#ifdef AMD_EXTENSIONS
-    bool isUnsigned = typeProxy == glslang::EbtUint || typeProxy == glslang::EbtUint64 || typeProxy == glslang::EbtUint16;
-    bool isFloat = typeProxy == glslang::EbtFloat || typeProxy == glslang::EbtDouble || typeProxy == glslang::EbtFloat16;
-#else
-    bool isUnsigned = typeProxy == glslang::EbtUint || typeProxy == glslang::EbtUint64;
-    bool isFloat = typeProxy == glslang::EbtFloat || typeProxy == glslang::EbtDouble;
-#endif
+    bool isUnsigned = isTypeUnsignedInt(typeProxy);
+    bool isFloat = isTypeFloat(typeProxy);
 
     spv::Op opCode = spv::OpNop;
     int extBuiltins = -1;
@@ -5279,10 +6125,11 @@
             libCall = spv::GLSLstd450FrexpStruct;
             assert(builder.isPointerType(typeId1));
             typeId1 = builder.getContainedTypeId(typeId1);
-#ifdef AMD_EXTENSIONS
             int width = builder.getScalarTypeWidth(typeId1);
-#else
-            int width = 32;
+#ifdef AMD_EXTENSIONS
+            if (width == 16)
+                // Using 16-bit exp operand, enable extension SPV_AMD_gpu_shader_int16
+                builder.addExtension(spv::E_SPV_AMD_gpu_shader_int16);
 #endif
             if (builder.getNumComponents(operands[0]) == 1)
                 frexpIntType = builder.makeIntegerType(width, true);
@@ -5299,6 +6146,45 @@
     case glslang::EOpReadInvocation:
         return createInvocationsOperation(op, typeId, operands, typeProxy);
 
+    case glslang::EOpSubgroupBroadcast:
+    case glslang::EOpSubgroupBallotBitExtract:
+    case glslang::EOpSubgroupShuffle:
+    case glslang::EOpSubgroupShuffleXor:
+    case glslang::EOpSubgroupShuffleUp:
+    case glslang::EOpSubgroupShuffleDown:
+    case glslang::EOpSubgroupClusteredAdd:
+    case glslang::EOpSubgroupClusteredMul:
+    case glslang::EOpSubgroupClusteredMin:
+    case glslang::EOpSubgroupClusteredMax:
+    case glslang::EOpSubgroupClusteredAnd:
+    case glslang::EOpSubgroupClusteredOr:
+    case glslang::EOpSubgroupClusteredXor:
+    case glslang::EOpSubgroupQuadBroadcast:
+#ifdef NV_EXTENSIONS
+    case glslang::EOpSubgroupPartitionedAdd:
+    case glslang::EOpSubgroupPartitionedMul:
+    case glslang::EOpSubgroupPartitionedMin:
+    case glslang::EOpSubgroupPartitionedMax:
+    case glslang::EOpSubgroupPartitionedAnd:
+    case glslang::EOpSubgroupPartitionedOr:
+    case glslang::EOpSubgroupPartitionedXor:
+    case glslang::EOpSubgroupPartitionedInclusiveAdd:
+    case glslang::EOpSubgroupPartitionedInclusiveMul:
+    case glslang::EOpSubgroupPartitionedInclusiveMin:
+    case glslang::EOpSubgroupPartitionedInclusiveMax:
+    case glslang::EOpSubgroupPartitionedInclusiveAnd:
+    case glslang::EOpSubgroupPartitionedInclusiveOr:
+    case glslang::EOpSubgroupPartitionedInclusiveXor:
+    case glslang::EOpSubgroupPartitionedExclusiveAdd:
+    case glslang::EOpSubgroupPartitionedExclusiveMul:
+    case glslang::EOpSubgroupPartitionedExclusiveMin:
+    case glslang::EOpSubgroupPartitionedExclusiveMax:
+    case glslang::EOpSubgroupPartitionedExclusiveAnd:
+    case glslang::EOpSubgroupPartitionedExclusiveOr:
+    case glslang::EOpSubgroupPartitionedExclusiveXor:
+#endif
+        return createSubgroupOperation(op, typeId, operands, typeProxy);
+
 #ifdef AMD_EXTENSIONS
     case glslang::EOpSwizzleInvocations:
         extBuiltins = getExtBuiltins(spv::E_SPV_AMD_shader_ballot);
@@ -5431,41 +6317,90 @@
         builder.createNoResultOp(spv::OpEndPrimitive);
         return 0;
     case glslang::EOpBarrier:
-        builder.createControlBarrier(spv::ScopeWorkgroup, spv::ScopeDevice, spv::MemorySemanticsMaskNone);
+        if (glslangIntermediate->getStage() == EShLangTessControl) {
+            builder.createControlBarrier(spv::ScopeWorkgroup, spv::ScopeInvocation, spv::MemorySemanticsMaskNone);
+            // TODO: prefer the following, when available:
+            // builder.createControlBarrier(spv::ScopePatch, spv::ScopePatch,
+            //                                 spv::MemorySemanticsPatchMask |
+            //                                 spv::MemorySemanticsAcquireReleaseMask);
+        } else {
+            builder.createControlBarrier(spv::ScopeWorkgroup, spv::ScopeWorkgroup,
+                                            spv::MemorySemanticsWorkgroupMemoryMask |
+                                            spv::MemorySemanticsAcquireReleaseMask);
+        }
         return 0;
     case glslang::EOpMemoryBarrier:
-        builder.createMemoryBarrier(spv::ScopeDevice, spv::MemorySemanticsAllMemory);
+        builder.createMemoryBarrier(spv::ScopeDevice, spv::MemorySemanticsAllMemory |
+                                                      spv::MemorySemanticsAcquireReleaseMask);
         return 0;
     case glslang::EOpMemoryBarrierAtomicCounter:
-        builder.createMemoryBarrier(spv::ScopeDevice, spv::MemorySemanticsAtomicCounterMemoryMask);
+        builder.createMemoryBarrier(spv::ScopeDevice, spv::MemorySemanticsAtomicCounterMemoryMask |
+                                                      spv::MemorySemanticsAcquireReleaseMask);
         return 0;
     case glslang::EOpMemoryBarrierBuffer:
-        builder.createMemoryBarrier(spv::ScopeDevice, spv::MemorySemanticsUniformMemoryMask);
+        builder.createMemoryBarrier(spv::ScopeDevice, spv::MemorySemanticsUniformMemoryMask |
+                                                      spv::MemorySemanticsAcquireReleaseMask);
         return 0;
     case glslang::EOpMemoryBarrierImage:
-        builder.createMemoryBarrier(spv::ScopeDevice, spv::MemorySemanticsImageMemoryMask);
+        builder.createMemoryBarrier(spv::ScopeDevice, spv::MemorySemanticsImageMemoryMask |
+                                                      spv::MemorySemanticsAcquireReleaseMask);
         return 0;
     case glslang::EOpMemoryBarrierShared:
-        builder.createMemoryBarrier(spv::ScopeDevice, spv::MemorySemanticsWorkgroupMemoryMask);
+        builder.createMemoryBarrier(spv::ScopeDevice, spv::MemorySemanticsWorkgroupMemoryMask |
+                                                      spv::MemorySemanticsAcquireReleaseMask);
         return 0;
     case glslang::EOpGroupMemoryBarrier:
-        builder.createMemoryBarrier(spv::ScopeDevice, spv::MemorySemanticsCrossWorkgroupMemoryMask);
+        builder.createMemoryBarrier(spv::ScopeWorkgroup, spv::MemorySemanticsAllMemory |
+                                                         spv::MemorySemanticsAcquireReleaseMask);
         return 0;
     case glslang::EOpAllMemoryBarrierWithGroupSync:
-        // Control barrier with non-"None" semantic is also a memory barrier.
-        builder.createControlBarrier(spv::ScopeDevice, spv::ScopeDevice, spv::MemorySemanticsAllMemory);
+        builder.createControlBarrier(spv::ScopeWorkgroup, spv::ScopeDevice,
+                                        spv::MemorySemanticsAllMemory |
+                                        spv::MemorySemanticsAcquireReleaseMask);
         return 0;
-    case glslang::EOpGroupMemoryBarrierWithGroupSync:
-        // Control barrier with non-"None" semantic is also a memory barrier.
-        builder.createControlBarrier(spv::ScopeDevice, spv::ScopeDevice, spv::MemorySemanticsCrossWorkgroupMemoryMask);
+    case glslang::EOpDeviceMemoryBarrier:
+        builder.createMemoryBarrier(spv::ScopeDevice, spv::MemorySemanticsUniformMemoryMask |
+                                                      spv::MemorySemanticsImageMemoryMask |
+                                                      spv::MemorySemanticsAcquireReleaseMask);
+        return 0;
+    case glslang::EOpDeviceMemoryBarrierWithGroupSync:
+        builder.createControlBarrier(spv::ScopeWorkgroup, spv::ScopeDevice, spv::MemorySemanticsUniformMemoryMask |
+                                                                            spv::MemorySemanticsImageMemoryMask |
+                                                                            spv::MemorySemanticsAcquireReleaseMask);
         return 0;
     case glslang::EOpWorkgroupMemoryBarrier:
-        builder.createMemoryBarrier(spv::ScopeWorkgroup, spv::MemorySemanticsWorkgroupMemoryMask);
+        builder.createMemoryBarrier(spv::ScopeWorkgroup, spv::MemorySemanticsWorkgroupMemoryMask |
+                                                         spv::MemorySemanticsAcquireReleaseMask);
         return 0;
     case glslang::EOpWorkgroupMemoryBarrierWithGroupSync:
-        // Control barrier with non-"None" semantic is also a memory barrier.
-        builder.createControlBarrier(spv::ScopeWorkgroup, spv::ScopeWorkgroup, spv::MemorySemanticsWorkgroupMemoryMask);
+        builder.createControlBarrier(spv::ScopeWorkgroup, spv::ScopeWorkgroup,
+                                        spv::MemorySemanticsWorkgroupMemoryMask |
+                                        spv::MemorySemanticsAcquireReleaseMask);
         return 0;
+    case glslang::EOpSubgroupBarrier:
+        builder.createControlBarrier(spv::ScopeSubgroup, spv::ScopeSubgroup, spv::MemorySemanticsAllMemory |
+                                                                             spv::MemorySemanticsAcquireReleaseMask);
+        return spv::NoResult;
+    case glslang::EOpSubgroupMemoryBarrier:
+        builder.createMemoryBarrier(spv::ScopeSubgroup, spv::MemorySemanticsAllMemory |
+                                                        spv::MemorySemanticsAcquireReleaseMask);
+        return spv::NoResult;
+    case glslang::EOpSubgroupMemoryBarrierBuffer:
+        builder.createMemoryBarrier(spv::ScopeSubgroup, spv::MemorySemanticsUniformMemoryMask |
+                                                        spv::MemorySemanticsAcquireReleaseMask);
+        return spv::NoResult;
+    case glslang::EOpSubgroupMemoryBarrierImage:
+        builder.createMemoryBarrier(spv::ScopeSubgroup, spv::MemorySemanticsImageMemoryMask |
+                                                        spv::MemorySemanticsAcquireReleaseMask);
+        return spv::NoResult;
+    case glslang::EOpSubgroupMemoryBarrierShared:
+        builder.createMemoryBarrier(spv::ScopeSubgroup, spv::MemorySemanticsWorkgroupMemoryMask |
+                                                        spv::MemorySemanticsAcquireReleaseMask);
+        return spv::NoResult;
+    case glslang::EOpSubgroupElect: {
+        std::vector<spv::Id> operands;
+        return createSubgroupOperation(op, typeId, operands, glslang::EbtVoid);
+    }
 #ifdef AMD_EXTENSIONS
     case glslang::EOpTime:
     {
@@ -5494,24 +6429,15 @@
     symbolValues[symbol->getId()] = id;
 
     if (symbol->getBasicType() != glslang::EbtBlock) {
-        addDecoration(id, TranslatePrecisionDecoration(symbol->getType()));
-        addDecoration(id, TranslateInterpolationDecoration(symbol->getType().getQualifier()));
-        addDecoration(id, TranslateAuxiliaryStorageDecoration(symbol->getType().getQualifier()));
+        builder.addDecoration(id, TranslatePrecisionDecoration(symbol->getType()));
+        builder.addDecoration(id, TranslateInterpolationDecoration(symbol->getType().getQualifier()));
+        builder.addDecoration(id, TranslateAuxiliaryStorageDecoration(symbol->getType().getQualifier()));
         if (symbol->getType().getQualifier().hasSpecConstantId())
-            addDecoration(id, spv::DecorationSpecId, symbol->getType().getQualifier().layoutSpecConstantId);
+            builder.addDecoration(id, spv::DecorationSpecId, symbol->getType().getQualifier().layoutSpecConstantId);
         if (symbol->getQualifier().hasIndex())
             builder.addDecoration(id, spv::DecorationIndex, symbol->getQualifier().layoutIndex);
         if (symbol->getQualifier().hasComponent())
             builder.addDecoration(id, spv::DecorationComponent, symbol->getQualifier().layoutComponent);
-        if (glslangIntermediate->getXfbMode()) {
-            builder.addCapability(spv::CapabilityTransformFeedback);
-            if (symbol->getQualifier().hasXfbStride())
-                builder.addDecoration(id, spv::DecorationXfbStride, symbol->getQualifier().layoutXfbStride);
-            if (symbol->getQualifier().hasXfbBuffer())
-                builder.addDecoration(id, spv::DecorationXfbBuffer, symbol->getQualifier().layoutXfbBuffer);
-            if (symbol->getQualifier().hasXfbOffset())
-                builder.addDecoration(id, spv::DecorationOffset, symbol->getQualifier().layoutXfbOffset);
-        }
         // atomic counters use this:
         if (symbol->getQualifier().hasOffset())
             builder.addDecoration(id, spv::DecorationOffset, symbol->getQualifier().layoutOffset);
@@ -5519,7 +6445,7 @@
 
     if (symbol->getQualifier().hasLocation())
         builder.addDecoration(id, spv::DecorationLocation, symbol->getQualifier().layoutLocation);
-    addDecoration(id, TranslateInvariantDecoration(symbol->getType().getQualifier()));
+    builder.addDecoration(id, TranslateInvariantDecoration(symbol->getType().getQualifier()));
     if (symbol->getQualifier().hasStream() && glslangIntermediate->isMultiStream()) {
         builder.addCapability(spv::CapabilityGeometryStreams);
         builder.addDecoration(id, spv::DecorationStream, symbol->getQualifier().layoutStream);
@@ -5538,21 +6464,30 @@
         builder.addCapability(spv::CapabilityTransformFeedback);
         if (symbol->getQualifier().hasXfbStride())
             builder.addDecoration(id, spv::DecorationXfbStride, symbol->getQualifier().layoutXfbStride);
-        if (symbol->getQualifier().hasXfbBuffer())
+        if (symbol->getQualifier().hasXfbBuffer()) {
             builder.addDecoration(id, spv::DecorationXfbBuffer, symbol->getQualifier().layoutXfbBuffer);
+            unsigned stride = glslangIntermediate->getXfbStride(symbol->getQualifier().layoutXfbBuffer);
+            if (stride != glslang::TQualifier::layoutXfbStrideEnd)
+                builder.addDecoration(id, spv::DecorationXfbStride, stride);
+        }
+        if (symbol->getQualifier().hasXfbOffset())
+            builder.addDecoration(id, spv::DecorationOffset, symbol->getQualifier().layoutXfbOffset);
     }
 
     if (symbol->getType().isImage()) {
         std::vector<spv::Decoration> memory;
         TranslateMemoryDecoration(symbol->getType().getQualifier(), memory);
         for (unsigned int i = 0; i < memory.size(); ++i)
-            addDecoration(id, memory[i]);
+            builder.addDecoration(id, memory[i]);
     }
 
     // built-in variable decorations
     spv::BuiltIn builtIn = TranslateBuiltInDecoration(symbol->getQualifier().builtIn, false);
     if (builtIn != spv::BuiltInMax)
-        addDecoration(id, spv::DecorationBuiltIn, (int)builtIn);
+        builder.addDecoration(id, spv::DecorationBuiltIn, (int)builtIn);
+
+    // nonuniform
+    builder.addDecoration(id, TranslateNonUniformDecoration(symbol->getType().getQualifier()));
 
 #ifdef NV_EXTENSIONS
     if (builtIn == spv::BuiltInSampleMask) {
@@ -5562,7 +6497,7 @@
               decoration = (spv::Decoration)spv::DecorationOverrideCoverageNV;
           else
               decoration = (spv::Decoration)spv::DecorationMax;
-        addDecoration(id, decoration);
+        builder.addDecoration(id, decoration);
         if (decoration != spv::DecorationMax) {
             builder.addExtension(spv::E_SPV_NV_sample_mask_override_coverage);
         }
@@ -5570,55 +6505,34 @@
     else if (builtIn == spv::BuiltInLayer) {
         // SPV_NV_viewport_array2 extension
         if (symbol->getQualifier().layoutViewportRelative) {
-            addDecoration(id, (spv::Decoration)spv::DecorationViewportRelativeNV);
+            builder.addDecoration(id, (spv::Decoration)spv::DecorationViewportRelativeNV);
             builder.addCapability(spv::CapabilityShaderViewportMaskNV);
             builder.addExtension(spv::E_SPV_NV_viewport_array2);
         }
         if (symbol->getQualifier().layoutSecondaryViewportRelativeOffset != -2048) {
-            addDecoration(id, (spv::Decoration)spv::DecorationSecondaryViewportRelativeNV, symbol->getQualifier().layoutSecondaryViewportRelativeOffset);
+            builder.addDecoration(id, (spv::Decoration)spv::DecorationSecondaryViewportRelativeNV,
+                                  symbol->getQualifier().layoutSecondaryViewportRelativeOffset);
             builder.addCapability(spv::CapabilityShaderStereoViewNV);
             builder.addExtension(spv::E_SPV_NV_stereo_view_rendering);
         }
     }
 
     if (symbol->getQualifier().layoutPassthrough) {
-        addDecoration(id, spv::DecorationPassthroughNV);
+        builder.addDecoration(id, spv::DecorationPassthroughNV);
         builder.addCapability(spv::CapabilityGeometryShaderPassthroughNV);
         builder.addExtension(spv::E_SPV_NV_geometry_shader_passthrough);
     }
 #endif
 
+    if (glslangIntermediate->getHlslFunctionality1() && symbol->getType().getQualifier().semanticName != nullptr) {
+        builder.addExtension("SPV_GOOGLE_hlsl_functionality1");
+        builder.addDecoration(id, (spv::Decoration)spv::DecorationHlslSemanticGOOGLE,
+                              symbol->getType().getQualifier().semanticName);
+    }
+
     return id;
 }
 
-// If 'dec' is valid, add no-operand decoration to an object
-void TGlslangToSpvTraverser::addDecoration(spv::Id id, spv::Decoration dec)
-{
-    if (dec != spv::DecorationMax)
-        builder.addDecoration(id, dec);
-}
-
-// If 'dec' is valid, add a one-operand decoration to an object
-void TGlslangToSpvTraverser::addDecoration(spv::Id id, spv::Decoration dec, unsigned value)
-{
-    if (dec != spv::DecorationMax)
-        builder.addDecoration(id, dec, value);
-}
-
-// If 'dec' is valid, add a no-operand decoration to a struct member
-void TGlslangToSpvTraverser::addMemberDecoration(spv::Id id, int member, spv::Decoration dec)
-{
-    if (dec != spv::DecorationMax)
-        builder.addMemberDecoration(id, (unsigned)member, dec);
-}
-
-// If 'dec' is valid, add a one-operand decoration to a struct member
-void TGlslangToSpvTraverser::addMemberDecoration(spv::Id id, int member, spv::Decoration dec, unsigned value)
-{
-    if (dec != spv::DecorationMax)
-        builder.addMemberDecoration(id, (unsigned)member, dec, value);
-}
-
 // Make a full tree of instructions to build a SPIR-V specialization constant,
 // or regular constant if possible.
 //
@@ -5651,8 +6565,10 @@
         for (int dim = 0; dim < 3; ++dim) {
             bool specConst = (glslangIntermediate->getLocalSizeSpecId(dim) != glslang::TQualifier::layoutNotSet);
             dimConstId.push_back(builder.makeUintConstant(glslangIntermediate->getLocalSize(dim), specConst));
-            if (specConst)
-                addDecoration(dimConstId.back(), spv::DecorationSpecId, glslangIntermediate->getLocalSizeSpecId(dim));
+            if (specConst) {
+                builder.addDecoration(dimConstId.back(), spv::DecorationSpecId,
+                                      glslangIntermediate->getLocalSizeSpecId(dim));
+            }
         }
         return builder.makeCompositeConstant(builder.makeVectorType(builder.makeUintType(32), 3), dimConstId, true);
     }
@@ -5711,6 +6627,18 @@
         for (unsigned int i = 0; i < (unsigned int)glslangType.getVectorSize(); ++i) {
             bool zero = nextConst >= consts.size();
             switch (glslangType.getBasicType()) {
+            case glslang::EbtInt8:
+                spvConsts.push_back(builder.makeInt8Constant(zero ? 0 : consts[nextConst].getI8Const()));
+                break;
+            case glslang::EbtUint8:
+                spvConsts.push_back(builder.makeUint8Constant(zero ? 0 : consts[nextConst].getU8Const()));
+                break;
+            case glslang::EbtInt16:
+                spvConsts.push_back(builder.makeInt16Constant(zero ? 0 : consts[nextConst].getI16Const()));
+                break;
+            case glslang::EbtUint16:
+                spvConsts.push_back(builder.makeUint16Constant(zero ? 0 : consts[nextConst].getU16Const()));
+                break;
             case glslang::EbtInt:
                 spvConsts.push_back(builder.makeIntConstant(zero ? 0 : consts[nextConst].getIConst()));
                 break;
@@ -5723,25 +6651,15 @@
             case glslang::EbtUint64:
                 spvConsts.push_back(builder.makeUint64Constant(zero ? 0 : consts[nextConst].getU64Const()));
                 break;
-#ifdef AMD_EXTENSIONS
-            case glslang::EbtInt16:
-                spvConsts.push_back(builder.makeInt16Constant(zero ? 0 : (short)consts[nextConst].getIConst()));
-                break;
-            case glslang::EbtUint16:
-                spvConsts.push_back(builder.makeUint16Constant(zero ? 0 : (unsigned short)consts[nextConst].getUConst()));
-                break;
-#endif
             case glslang::EbtFloat:
                 spvConsts.push_back(builder.makeFloatConstant(zero ? 0.0F : (float)consts[nextConst].getDConst()));
                 break;
             case glslang::EbtDouble:
                 spvConsts.push_back(builder.makeDoubleConstant(zero ? 0.0 : consts[nextConst].getDConst()));
                 break;
-#ifdef AMD_EXTENSIONS
             case glslang::EbtFloat16:
                 spvConsts.push_back(builder.makeFloat16Constant(zero ? 0.0F : (float)consts[nextConst].getDConst()));
                 break;
-#endif
             case glslang::EbtBool:
                 spvConsts.push_back(builder.makeBoolConstant(zero ? false : consts[nextConst].getBConst()));
                 break;
@@ -5756,6 +6674,18 @@
         bool zero = nextConst >= consts.size();
         spv::Id scalar = 0;
         switch (glslangType.getBasicType()) {
+        case glslang::EbtInt8:
+            scalar = builder.makeInt8Constant(zero ? 0 : consts[nextConst].getI8Const(), specConstant);
+            break;
+        case glslang::EbtUint8:
+            scalar = builder.makeUint8Constant(zero ? 0 : consts[nextConst].getU8Const(), specConstant);
+            break;
+        case glslang::EbtInt16:
+            scalar = builder.makeInt16Constant(zero ? 0 : consts[nextConst].getI16Const(), specConstant);
+            break;
+        case glslang::EbtUint16:
+            scalar = builder.makeUint16Constant(zero ? 0 : consts[nextConst].getU16Const(), specConstant);
+            break;
         case glslang::EbtInt:
             scalar = builder.makeIntConstant(zero ? 0 : consts[nextConst].getIConst(), specConstant);
             break;
@@ -5768,25 +6698,15 @@
         case glslang::EbtUint64:
             scalar = builder.makeUint64Constant(zero ? 0 : consts[nextConst].getU64Const(), specConstant);
             break;
-#ifdef AMD_EXTENSIONS
-        case glslang::EbtInt16:
-            scalar = builder.makeInt16Constant(zero ? 0 : (short)consts[nextConst].getIConst(), specConstant);
-            break;
-        case glslang::EbtUint16:
-            scalar = builder.makeUint16Constant(zero ? 0 : (unsigned short)consts[nextConst].getUConst(), specConstant);
-            break;
-#endif
         case glslang::EbtFloat:
             scalar = builder.makeFloatConstant(zero ? 0.0F : (float)consts[nextConst].getDConst(), specConstant);
             break;
         case glslang::EbtDouble:
             scalar = builder.makeDoubleConstant(zero ? 0.0 : consts[nextConst].getDConst(), specConstant);
             break;
-#ifdef AMD_EXTENSIONS
         case glslang::EbtFloat16:
             scalar = builder.makeFloat16Constant(zero ? 0.0F : (float)consts[nextConst].getDConst(), specConstant);
             break;
-#endif
         case glslang::EbtBool:
             scalar = builder.makeBoolConstant(zero ? false : consts[nextConst].getBConst(), specConstant);
             break;
@@ -5933,6 +6853,7 @@
     return builder.createOp(spv::OpPhi, boolTypeId, phiOperands);
 }
 
+#ifdef AMD_EXTENSIONS
 // Return type Id of the imported set of extended instructions corresponds to the name.
 // Import this set if it has not been imported yet.
 spv::Id TGlslangToSpvTraverser::getExtBuiltins(const char* name)
@@ -5946,6 +6867,7 @@
         return extBuiltins;
     }
 }
+#endif
 
 };  // end anonymous namespace
 
@@ -5959,6 +6881,20 @@
     version = buf;
 }
 
+// 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).
+int GetSpirvGeneratorVersion()
+{
+    // return 1; // start
+    // return 2; // EOpAtomicCounterDecrement gets a post decrement, to map between GLSL -> SPIR-V
+    // return 3; // change/correct barrier-instruction operands, to match memory model group decisions
+    // return 4; // some deeper access chains: for dynamic vector component, and local Boolean component
+    // return 5; // make OpArrayLength result type be an int with signedness of 0
+    return 6; // revert version 5 change, which makes a different (new) kind of incorrect code,
+              // versions 4 and 6 each generate OpArrayLength as it has long been done
+}
+
 // Write SPIR-V out to a binary file
 void OutputSpvBin(const std::vector<unsigned int>& spirv, const char* baseName)
 {
@@ -5980,7 +6916,9 @@
     out.open(baseName, std::ios::binary | std::ios::out);
     if (out.fail())
         printf("ERROR: Failed to open file: %s\n", baseName);
-    out << "\t// " GLSLANG_REVISION " " GLSLANG_DATE << std::endl;
+    out << "\t// " << 
+        glslang::GetSpirvGeneratorVersion() << "." << GLSLANG_MINOR_VERSION << "." << GLSLANG_PATCH_LEVEL <<
+        std::endl;
     if (varName != nullptr) {
         out << "\t #pragma once" << std::endl;
         out << "const uint32_t " << varName << "[] = {" << std::endl;
@@ -6003,12 +6941,6 @@
     out.close();
 }
 
-#ifdef ENABLE_OPT
-void errHandler(const std::string& str) {
-    std::cerr << str << std::endl;
-}
-#endif
-
 //
 // Set up the glslang traversal
 //
@@ -6032,12 +6964,12 @@
 
     glslang::GetThreadPoolAllocator().push();
 
-    TGlslangToSpvTraverser it(&intermediate, logger, *options);
+    TGlslangToSpvTraverser it(intermediate.getSpv().spv, &intermediate, logger, *options);
     root->traverse(&it);
     it.finishSpv();
     it.dumpSpv(spirv);
 
-#ifdef ENABLE_OPT
+#if 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 ||
@@ -6054,30 +6986,35 @@
                       << std::endl;
         });
 
+        optimizer.RegisterPass(CreateMergeReturnPass());
         optimizer.RegisterPass(CreateInlineExhaustivePass());
+        optimizer.RegisterPass(CreateEliminateDeadFunctionsPass());
+        optimizer.RegisterPass(CreateScalarReplacementPass());
         optimizer.RegisterPass(CreateLocalAccessChainConvertPass());
         optimizer.RegisterPass(CreateLocalSingleBlockLoadStoreElimPass());
         optimizer.RegisterPass(CreateLocalSingleStoreElimPass());
-        optimizer.RegisterPass(CreateInsertExtractElimPass());
         optimizer.RegisterPass(CreateAggressiveDCEPass());
+        optimizer.RegisterPass(CreateInsertExtractElimPass());
+        optimizer.RegisterPass(CreateDeadInsertElimPass());
+        optimizer.RegisterPass(CreateAggressiveDCEPass());
+        optimizer.RegisterPass(CreateCCPPass());
+        optimizer.RegisterPass(CreateSimplificationPass());
         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());
+        optimizer.RegisterPass(CreateInsertExtractElimPass());
+        optimizer.RegisterPass(CreateDeadInsertElimPass());
+        if (options->optimizeSize) {
+            optimizer.RegisterPass(CreateRedundancyEliminationPass());
+            // TODO(greg-lunarg): Add this when AMD driver issues are resolved
+            // optimizer.RegisterPass(CreateCommonUniformElimPass());
+        }
+        optimizer.RegisterPass(CreateAggressiveDCEPass());
 
         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
 
diff --git a/SPIRV/GlslangToSpv.h b/SPIRV/GlslangToSpv.h
index 0398501..f7f7cff 100644
--- a/SPIRV/GlslangToSpv.h
+++ b/SPIRV/GlslangToSpv.h
@@ -34,7 +34,7 @@
 
 #pragma once
 
-#if _MSC_VER >= 1900
+#if defined(_MSC_VER) && _MSC_VER >= 1900
     #pragma warning(disable : 4464) // relative include path contains '..'
 #endif
 
@@ -56,6 +56,7 @@
 };
 
 void GetSpirvVersion(std::string&);
+int GetSpirvGeneratorVersion();
 void GlslangToSpv(const glslang::TIntermediate& intermediate, std::vector<unsigned int>& spirv,
                   SpvOptions* options = nullptr);
 void GlslangToSpv(const glslang::TIntermediate& intermediate, std::vector<unsigned int>& spirv,
diff --git a/SPIRV/SPVRemapper.cpp b/SPIRV/SPVRemapper.cpp
index 4d96df6..4bac145 100755
--- a/SPIRV/SPVRemapper.cpp
+++ b/SPIRV/SPVRemapper.cpp
@@ -256,7 +256,7 @@
 
     spv::Id spirvbin_t::localId(spv::Id id, spv::Id newId)
     {
-        assert(id != spv::NoResult && newId != spv::NoResult);
+        //assert(id != spv::NoResult && newId != spv::NoResult);
 
         if (id > bound()) {
             error(std::string("ID out of range: ") + std::to_string(id));
@@ -1392,7 +1392,7 @@
 
         int strippedPos = 0;
         for (unsigned word = 0; word < unsigned(spv.size()); ++word) {
-            if (strip_it != stripRange.end() && word >= strip_it->second)
+            while (strip_it != stripRange.end() && word >= strip_it->second)
                 ++strip_it;
 
             if (strip_it == stripRange.end() || word < strip_it->first || word >= strip_it->second)
diff --git a/SPIRV/SpvBuilder.cpp b/SPIRV/SpvBuilder.cpp
index c795ca8..27ce71c 100644
--- a/SPIRV/SpvBuilder.cpp
+++ b/SPIRV/SpvBuilder.cpp
@@ -46,9 +46,7 @@
 
 #include "SpvBuilder.h"
 
-#ifdef AMD_EXTENSIONS
-    #include "hex_float.h"
-#endif
+#include "hex_float.h"
 
 #ifndef _WIN32
     #include <cstdio>
@@ -56,7 +54,8 @@
 
 namespace spv {
 
-Builder::Builder(unsigned int magicNumber, SpvBuildLogger* buildLogger) :
+Builder::Builder(unsigned int spvVersion, unsigned int magicNumber, SpvBuildLogger* buildLogger) :
+    spvVersion(spvVersion),
     source(SourceLanguageUnknown),
     sourceVersion(0),
     sourceFileStringId(NoResult),
@@ -193,6 +192,9 @@
 
     // deal with capabilities
     switch (width) {
+    case 8:
+        addCapability(CapabilityInt8);
+        break;
     case 16:
         addCapability(CapabilityInt16);
         break;
@@ -621,7 +623,7 @@
 
 // See if a scalar constant of this type has already been created, so it
 // can be reused rather than duplicated.  (Required by the specification).
-Id Builder::findScalarConstant(Op typeClass, Op opcode, Id typeId, unsigned value) const
+Id Builder::findScalarConstant(Op typeClass, Op opcode, Id typeId, unsigned value)
 {
     Instruction* constant;
     for (int i = 0; i < (int)groupedConstants[typeClass].size(); ++i) {
@@ -636,7 +638,7 @@
 }
 
 // Version of findScalarConstant (see above) for scalars that take two operands (e.g. a 'double' or 'int64').
-Id Builder::findScalarConstant(Op typeClass, Op opcode, Id typeId, unsigned v1, unsigned v2) const
+Id Builder::findScalarConstant(Op typeClass, Op opcode, Id typeId, unsigned v1, unsigned v2)
 {
     Instruction* constant;
     for (int i = 0; i < (int)groupedConstants[typeClass].size(); ++i) {
@@ -818,7 +820,6 @@
     return c->getResultId();
 }
 
-#ifdef AMD_EXTENSIONS
 Id Builder::makeFloat16Constant(float f16, bool specConstant)
 {
     Op opcode = specConstant ? OpSpecConstant : OpConstant;
@@ -846,9 +847,27 @@
 
     return c->getResultId();
 }
-#endif
 
-Id Builder::findCompositeConstant(Op typeClass, const std::vector<Id>& comps) const
+Id Builder::makeFpConstant(Id type, double d, bool specConstant)
+{
+        assert(isFloatType(type));
+
+        switch (getScalarTypeWidth(type)) {
+        case 16:
+                return makeFloat16Constant((float)d, specConstant);
+        case 32:
+                return makeFloatConstant((float)d, specConstant);
+        case 64:
+                return makeDoubleConstant(d, specConstant);
+        default:
+                break;
+        }
+
+        assert(false);
+        return NoResult;
+}
+
+Id Builder::findCompositeConstant(Op typeClass, const std::vector<Id>& comps)
 {
     Instruction* constant = 0;
     bool found = false;
@@ -876,6 +895,30 @@
     return found ? constant->getResultId() : NoResult;
 }
 
+Id Builder::findStructConstant(Id typeId, const std::vector<Id>& comps)
+{
+    Instruction* constant = 0;
+    bool found = false;
+    for (int i = 0; i < (int)groupedStructConstants[typeId].size(); ++i) {
+        constant = groupedStructConstants[typeId][i];
+
+        // same contents?
+        bool mismatch = false;
+        for (int op = 0; op < constant->getNumOperands(); ++op) {
+            if (constant->getIdOperand(op) != comps[op]) {
+                mismatch = true;
+                break;
+            }
+        }
+        if (! mismatch) {
+            found = true;
+            break;
+        }
+    }
+
+    return found ? constant->getResultId() : NoResult;
+}
+
 // Comments in header
 Id Builder::makeCompositeConstant(Id typeId, const std::vector<Id>& members, bool specConstant)
 {
@@ -886,25 +929,33 @@
     switch (typeClass) {
     case OpTypeVector:
     case OpTypeArray:
-    case OpTypeStruct:
     case OpTypeMatrix:
+        if (! specConstant) {
+            Id existing = findCompositeConstant(typeClass, members);
+            if (existing)
+                return existing;
+        }
+        break;
+    case OpTypeStruct:
+        if (! specConstant) {
+            Id existing = findStructConstant(typeId, members);
+            if (existing)
+                return existing;
+        }
         break;
     default:
         assert(0);
         return makeFloatConstant(0.0);
     }
 
-    if (! specConstant) {
-        Id existing = findCompositeConstant(typeClass, members);
-        if (existing)
-            return existing;
-    }
-
     Instruction* c = new Instruction(getUniqueId(), typeId, opcode);
     for (int op = 0; op < (int)members.size(); ++op)
         c->addIdOperand(members[op]);
     constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(c));
-    groupedConstants[typeClass].push_back(c);
+    if (typeClass == OpTypeStruct)
+        groupedStructConstants[typeId].push_back(c);
+    else
+        groupedConstants[typeClass].push_back(c);
     module.mapInstruction(c);
 
     return c->getResultId();
@@ -961,6 +1012,7 @@
 {
     if (decoration == spv::DecorationMax)
         return;
+
     Instruction* dec = new Instruction(OpDecorate);
     dec->addIdOperand(id);
     dec->addImmediateOperand(decoration);
@@ -970,8 +1022,37 @@
     decorations.push_back(std::unique_ptr<Instruction>(dec));
 }
 
+void Builder::addDecoration(Id id, Decoration decoration, const char* s)
+{
+    if (decoration == spv::DecorationMax)
+        return;
+
+    Instruction* dec = new Instruction(OpDecorateStringGOOGLE);
+    dec->addIdOperand(id);
+    dec->addImmediateOperand(decoration);
+    dec->addStringOperand(s);
+
+    decorations.push_back(std::unique_ptr<Instruction>(dec));
+}
+
+void Builder::addDecorationId(Id id, Decoration decoration, Id idDecoration)
+{
+    if (decoration == spv::DecorationMax)
+        return;
+
+    Instruction* dec = new Instruction(OpDecorateId);
+    dec->addIdOperand(id);
+    dec->addImmediateOperand(decoration);
+    dec->addIdOperand(idDecoration);
+
+    decorations.push_back(std::unique_ptr<Instruction>(dec));
+}
+
 void Builder::addMemberDecoration(Id id, unsigned int member, Decoration decoration, int num)
 {
+    if (decoration == spv::DecorationMax)
+        return;
+
     Instruction* dec = new Instruction(OpMemberDecorate);
     dec->addIdOperand(id);
     dec->addImmediateOperand(member);
@@ -982,6 +1063,20 @@
     decorations.push_back(std::unique_ptr<Instruction>(dec));
 }
 
+void Builder::addMemberDecoration(Id id, unsigned int member, Decoration decoration, const char *s)
+{
+    if (decoration == spv::DecorationMax)
+        return;
+
+    Instruction* dec = new Instruction(OpMemberDecorateStringGOOGLE);
+    dec->addIdOperand(id);
+    dec->addImmediateOperand(member);
+    dec->addImmediateOperand(decoration);
+    dec->addStringOperand(s);
+
+    decorations.push_back(std::unique_ptr<Instruction>(dec));
+}
+
 // Comments in header
 Function* Builder::makeEntryPoint(const char* entryPoint)
 {
@@ -1387,16 +1482,13 @@
         return createCompositeInsert(source, target, typeId, channels.front());
 
     Instruction* swizzle = new Instruction(getUniqueId(), typeId, OpVectorShuffle);
+
     assert(isVector(target));
     swizzle->addIdOperand(target);
-    if (accessChain.component != NoResult)
-        // For dynamic component selection, source does not involve in l-value swizzle
-        swizzle->addIdOperand(target);
-    else {
-        assert(getNumComponents(source) == (int)channels.size());
-        assert(isVector(source));
-        swizzle->addIdOperand(source);
-    }
+
+    assert(getNumComponents(source) == (int)channels.size());
+    assert(isVector(source));
+    swizzle->addIdOperand(source);
 
     // Set up an identity shuffle from the base value to the result value
     unsigned int components[4];
@@ -1405,12 +1497,8 @@
         components[i] = i;
 
     // Punch in the l-value swizzle
-    for (int i = 0; i < (int)channels.size(); ++i) {
-        if (accessChain.component != NoResult)
-            components[i] = channels[i]; // Only shuffle the base value
-        else
-            components[channels[i]] = numTargetComponents + i;
-    }
+    for (int i = 0; i < (int)channels.size(); ++i)
+        components[channels[i]] = numTargetComponents + i;
 
     // finish the instruction with these components selectors
     for (int i = 0; i < numTargetComponents; ++i)
@@ -1725,7 +1813,11 @@
         break;
     }
     case OpImageQueryLod:
+#ifdef AMD_EXTENSIONS
+        resultType = makeVectorType(getScalarTypeId(getTypeId(parameters.coords)), 2);
+#else
         resultType = makeVectorType(makeFloatType(32), 2);
+#endif
         break;
     case OpImageQueryLevels:
     case OpImageQuerySamples:
@@ -2202,7 +2294,7 @@
         accessChain.preSwizzleBaseType = preSwizzleBaseType;
 
     // if needed, propagate the swizzle for the current access chain
-    if (accessChain.swizzle.size()) {
+    if (accessChain.swizzle.size() > 0) {
         std::vector<unsigned> oldSwizzle = accessChain.swizzle;
         accessChain.swizzle.resize(0);
         for (unsigned int i = 0; i < swizzle.size(); ++i) {
@@ -2223,34 +2315,28 @@
 
     transferAccessChainSwizzle(true);
     Id base = collapseAccessChain();
+    Id source = rvalue;
+
+    // dynamic component should be gone
+    assert(accessChain.component == NoResult);
 
     // If swizzle still exists, it is out-of-order or not full, we must load the target vector,
     // extract and insert elements to perform writeMask and/or swizzle.
-    Id source = NoResult;
-    if (accessChain.swizzle.size()) {
+    if (accessChain.swizzle.size() > 0) {
         Id tempBaseId = createLoad(base);
-        source = createLvalueSwizzle(getTypeId(tempBaseId), tempBaseId, rvalue, accessChain.swizzle);
+        source = createLvalueSwizzle(getTypeId(tempBaseId), tempBaseId, source, accessChain.swizzle);
     }
 
-    // dynamic component selection
-    if (accessChain.component != NoResult) {
-        Id tempBaseId = (source == NoResult) ? createLoad(base) : source;
-        source = createVectorInsertDynamic(tempBaseId, getTypeId(tempBaseId), rvalue, accessChain.component);
-    }
-
-    if (source == NoResult)
-        source = rvalue;
-
     createStore(source, base);
 }
 
 // Comments in header
-Id Builder::accessChainLoad(Decoration precision, Id resultType)
+Id Builder::accessChainLoad(Decoration precision, Decoration nonUniform, Id resultType)
 {
     Id id;
 
     if (accessChain.isRValue) {
-        // transfer access chain, but keep it static, so we can stay in registers
+        // transfer access chain, but try to stay in registers
         transferAccessChainSwizzle(false);
         if (accessChain.indexChain.size() > 0) {
             Id swizzleBase = accessChain.preSwizzleBaseType != NoType ? accessChain.preSwizzleBaseType : resultType;
@@ -2291,6 +2377,7 @@
         // load through the access chain
         id = createLoad(collapseAccessChain());
         setPrecision(id, precision);
+        addDecoration(id, nonUniform);
     }
 
     // Done, unless there are swizzles to do
@@ -2298,19 +2385,20 @@
         return id;
 
     // Do remaining swizzling
-    // First, static swizzling
-    if (accessChain.swizzle.size()) {
-        // static swizzle
+
+    // Do the basic swizzle
+    if (accessChain.swizzle.size() > 0) {
         Id swizzledType = getScalarTypeId(getTypeId(id));
         if (accessChain.swizzle.size() > 1)
             swizzledType = makeVectorType(swizzledType, (int)accessChain.swizzle.size());
         id = createRvalueSwizzle(precision, swizzledType, id, accessChain.swizzle);
     }
 
-    // dynamic single-component selection
+    // Do the dynamic component
     if (accessChain.component != NoResult)
         id = setPrecision(createVectorExtractDynamic(id, resultType, accessChain.component), precision);
 
+    addDecoration(id, nonUniform);
     return id;
 }
 
@@ -2403,7 +2491,7 @@
 {
     // Header, before first instructions:
     out.push_back(MagicNumber);
-    out.push_back(Version);
+    out.push_back(spvVersion);
     out.push_back(builderNumber);
     out.push_back(uniqueId + 1);
     out.push_back(0);
@@ -2433,7 +2521,6 @@
 
     // Debug instructions
     dumpInstructions(out, strings);
-    dumpModuleProcesses(out);
     dumpSourceInstructions(out);
     for (int e = 0; e < (int)sourceExtensions.size(); ++e) {
         Instruction sourceExtInst(0, 0, OpSourceExtension);
@@ -2441,7 +2528,7 @@
         sourceExtInst.dump(out);
     }
     dumpInstructions(out, names);
-    dumpInstructions(out, lines);
+    dumpModuleProcesses(out);
 
     // Annotation instructions
     dumpInstructions(out, decorations);
@@ -2457,26 +2544,66 @@
 // Protected methods.
 //
 
-// Turn the described access chain in 'accessChain' into an instruction
+// Turn the described access chain in 'accessChain' into an instruction(s)
 // computing its address.  This *cannot* include complex swizzles, which must
-// be handled after this is called, but it does include swizzles that select
-// an individual element, as a single address of a scalar type can be
-// computed by an OpAccessChain instruction.
+// be handled after this is called.
+//
+// Can generate code.
 Id Builder::collapseAccessChain()
 {
     assert(accessChain.isRValue == false);
 
-    if (accessChain.indexChain.size() > 0) {
-        if (accessChain.instr == 0) {
-            StorageClass storageClass = (StorageClass)module.getStorageClass(getTypeId(accessChain.base));
-            accessChain.instr = createAccessChain(storageClass, accessChain.base, accessChain.indexChain);
-        }
-
+    // did we already emit an access chain for this?
+    if (accessChain.instr != NoResult)
         return accessChain.instr;
-    } else
+
+    // If we have a dynamic component, we can still transfer
+    // that into a final operand to the access chain.  We need to remap the
+    // dynamic component through the swizzle to get a new dynamic component to
+    // update.
+    //
+    // This was not done in transferAccessChainSwizzle() because it might
+    // generate code.
+    remapDynamicSwizzle();
+    if (accessChain.component != NoResult) {
+        // transfer the dynamic component to the access chain
+        accessChain.indexChain.push_back(accessChain.component);
+        accessChain.component = NoResult;
+    }
+
+    // note that non-trivial swizzling is left pending
+
+    // do we have an access chain?
+    if (accessChain.indexChain.size() == 0)
         return accessChain.base;
 
-    // note that non-trivial swizzling is left pending...
+    // emit the access chain
+    StorageClass storageClass = (StorageClass)module.getStorageClass(getTypeId(accessChain.base));
+    accessChain.instr = createAccessChain(storageClass, accessChain.base, accessChain.indexChain);
+
+    return accessChain.instr;
+}
+
+// For a dynamic component selection of a swizzle.
+//
+// Turn the swizzle and dynamic component into just a dynamic component.
+//
+// Generates code.
+void Builder::remapDynamicSwizzle()
+{
+    // do we have a swizzle to remap a dynamic component through?
+    if (accessChain.component != NoResult && accessChain.swizzle.size() > 1) {
+        // build a vector of the swizzle for the component to map into
+        std::vector<Id> components;
+        for (int c = 0; c < (int)accessChain.swizzle.size(); ++c)
+            components.push_back(makeUintConstant(accessChain.swizzle[c]));
+        Id mapType = makeVectorType(makeUintType(32), (int)accessChain.swizzle.size());
+        Id map = makeCompositeConstant(mapType, components);
+
+        // use it
+        accessChain.component = createVectorExtractDynamic(map, makeUintType(32), accessChain.component);
+        accessChain.swizzle.clear();
+    }
 }
 
 // clear out swizzle if it is redundant, that is reselecting the same components
@@ -2502,38 +2629,30 @@
 
 // To the extent any swizzling can become part of the chain
 // of accesses instead of a post operation, make it so.
-// If 'dynamic' is true, include transferring a non-static component index,
-// otherwise, only transfer static indexes.
+// If 'dynamic' is true, include transferring the dynamic component,
+// otherwise, leave it pending.
 //
-// Also, Boolean vectors are likely to be special.  While
-// for external storage, they should only be integer types,
-// function-local bool vectors could use sub-word indexing,
-// so keep that as a separate Insert/Extract on a loaded vector.
+// Does not generate code. just updates the access chain.
 void Builder::transferAccessChainSwizzle(bool dynamic)
 {
-    // too complex?
-    if (accessChain.swizzle.size() > 1)
-        return;
-
     // non existent?
     if (accessChain.swizzle.size() == 0 && accessChain.component == NoResult)
         return;
 
-    // single component...
-
-    // skip doing it for Boolean vectors
-    if (isBoolType(getContainedTypeId(accessChain.preSwizzleBaseType)))
+    // too complex?
+    // (this requires either a swizzle, or generating code for a dynamic component)
+    if (accessChain.swizzle.size() > 1)
         return;
 
+    // single component, either in the swizzle and/or dynamic component
     if (accessChain.swizzle.size() == 1) {
-        // handle static component
+        assert(accessChain.component == NoResult);
+        // handle static component selection
         accessChain.indexChain.push_back(makeUintConstant(accessChain.swizzle.front()));
         accessChain.swizzle.clear();
-        // note, the only valid remaining dynamic access would be to this one
-        // component, so don't bother even looking at accessChain.component
         accessChain.preSwizzleBaseType = NoType;
-        accessChain.component = NoResult;
     } else if (dynamic && accessChain.component != NoResult) {
+        assert(accessChain.swizzle.size() == 0);
         // handle dynamic component
         accessChain.indexChain.push_back(accessChain.component);
         accessChain.preSwizzleBaseType = NoType;
@@ -2572,12 +2691,15 @@
     buildPoint->addInstruction(std::unique_ptr<Instruction>(merge));
 }
 
-void Builder::createLoopMerge(Block* mergeBlock, Block* continueBlock, unsigned int control)
+void Builder::createLoopMerge(Block* mergeBlock, Block* continueBlock, unsigned int control,
+                              unsigned int dependencyLength)
 {
     Instruction* merge = new Instruction(OpLoopMerge);
     merge->addIdOperand(mergeBlock->getId());
     merge->addIdOperand(continueBlock->getId());
     merge->addImmediateOperand(control);
+    if ((control & LoopControlDependencyLengthMask) != 0)
+        merge->addImmediateOperand(dependencyLength);
     buildPoint->addInstruction(std::unique_ptr<Instruction>(merge));
 }
 
@@ -2644,8 +2766,6 @@
 void Builder::dumpModuleProcesses(std::vector<unsigned int>& out) const
 {
     for (int i = 0; i < (int)moduleProcesses.size(); ++i) {
-        // TODO: switch this out for the 1.1 headers
-        const spv::Op OpModuleProcessed = (spv::Op)330;
         Instruction moduleProcessed(OpModuleProcessed);
         moduleProcessed.addStringOperand(moduleProcesses[i]);
         moduleProcessed.dump(out);
diff --git a/SPIRV/SpvBuilder.h b/SPIRV/SpvBuilder.h
index 59b1da2..099b1d9 100755
--- a/SPIRV/SpvBuilder.h
+++ b/SPIRV/SpvBuilder.h
@@ -1,6 +1,7 @@
 //
 // Copyright (C) 2014-2015 LunarG, Inc.
 // Copyright (C) 2015-2016 Google, Inc.
+// Copyright (C) 2017 ARM Limited.
 //
 // All rights reserved.
 //
@@ -55,16 +56,19 @@
 #include <set>
 #include <sstream>
 #include <stack>
+#include <unordered_map>
 
 namespace spv {
 
 class Builder {
 public:
-    Builder(unsigned int userNumber, SpvBuildLogger* logger);
+    Builder(unsigned int spvVersion, unsigned int userNumber, SpvBuildLogger* logger);
     virtual ~Builder();
 
     static const int maxMatrixSize = 4;
 
+    unsigned int getSpvVersion() const { return spvVersion; }
+
     void setSource(spv::SourceLanguage lang, int version)
     {
         source = lang;
@@ -149,7 +153,7 @@
     bool isAggregate(Id resultId)    const { return isAggregateType(getTypeId(resultId)); }
     bool isSampledImage(Id resultId) const { return isSampledImageType(getTypeId(resultId)); }
 
-    bool isBoolType(Id typeId)         const { return groupedTypes[OpTypeBool].size() > 0 && typeId == groupedTypes[OpTypeBool].back()->getResultId(); }
+    bool isBoolType(Id typeId)               { return groupedTypes[OpTypeBool].size() > 0 && typeId == groupedTypes[OpTypeBool].back()->getResultId(); }
     bool isIntType(Id typeId)          const { return getTypeClass(typeId) == OpTypeInt && module.getInstruction(typeId)->getImmediateOperand(1) != 0; }
     bool isUintType(Id typeId)         const { return getTypeClass(typeId) == OpTypeInt && module.getInstruction(typeId)->getImmediateOperand(1) == 0; }
     bool isFloatType(Id typeId)        const { return getTypeClass(typeId) == OpTypeFloat; }
@@ -211,19 +215,18 @@
 
     // For making new constants (will return old constant if the requested one was already made).
     Id makeBoolConstant(bool b, bool specConstant = false);
+    Id makeInt8Constant(int i, bool specConstant = false)        { return makeIntConstant(makeIntType(8),  (unsigned)i, specConstant); }
+    Id makeUint8Constant(unsigned u, bool specConstant = false)  { return makeIntConstant(makeUintType(8),           u, specConstant); }
+    Id makeInt16Constant(int i, bool specConstant = false)       { return makeIntConstant(makeIntType(16),  (unsigned)i, specConstant); }
+    Id makeUint16Constant(unsigned u, bool specConstant = false) { return makeIntConstant(makeUintType(16),           u, specConstant); }
     Id makeIntConstant(int i, bool specConstant = false)         { return makeIntConstant(makeIntType(32),  (unsigned)i, specConstant); }
     Id makeUintConstant(unsigned u, bool specConstant = false)   { return makeIntConstant(makeUintType(32),           u, specConstant); }
     Id makeInt64Constant(long long i, bool specConstant = false)            { return makeInt64Constant(makeIntType(64),  (unsigned long long)i, specConstant); }
     Id makeUint64Constant(unsigned long long u, bool specConstant = false)  { return makeInt64Constant(makeUintType(64),                     u, specConstant); }
-#ifdef AMD_EXTENSIONS
-    Id makeInt16Constant(short i, bool specConstant = false)        { return makeIntConstant(makeIntType(16),      (unsigned)((unsigned short)i), specConstant); }
-    Id makeUint16Constant(unsigned short u, bool specConstant = false)  { return makeIntConstant(makeUintType(16), (unsigned)u, specConstant); }
-#endif
     Id makeFloatConstant(float f, bool specConstant = false);
     Id makeDoubleConstant(double d, bool specConstant = false);
-#ifdef AMD_EXTENSIONS
     Id makeFloat16Constant(float f16, bool specConstant = false);
-#endif
+    Id makeFpConstant(Id type, double d, bool specConstant = false);
 
     // Turn the array of constants into a proper spv constant of the requested type.
     Id makeCompositeConstant(Id type, const std::vector<Id>& comps, bool specConst = false);
@@ -234,7 +237,10 @@
     void addName(Id, const char* name);
     void addMemberName(Id, int member, const char* name);
     void addDecoration(Id, Decoration, int num = -1);
+    void addDecoration(Id, Decoration, const char*);
+    void addDecorationId(Id id, Decoration, Id idDecoration);
     void addMemberDecoration(Id, unsigned int member, Decoration, int num = -1);
+    void addMemberDecoration(Id, unsigned int member, Decoration, const char*);
 
     // At the end of what block do the next create*() instructions go?
     void setBuildPoint(Block* bp) { buildPoint = bp; }
@@ -330,7 +336,7 @@
     // Generally, the type of 'scalar' does not need to be the same type as the components in 'vector'.
     // The type of the created vector is a vector of components of the same type as the scalar.
     //
-    // Note: One of the arguments will change, with the result coming back that way rather than 
+    // Note: One of the arguments will change, with the result coming back that way rather than
     // through the return value.
     void promoteScalar(Decoration precision, Id& left, Id& right);
 
@@ -533,19 +539,22 @@
     // push new swizzle onto the end of any existing swizzle, merging into a single swizzle
     void accessChainPushSwizzle(std::vector<unsigned>& swizzle, Id preSwizzleBaseType);
 
-    // push a variable component selection onto the access chain; supporting only one, so unsided
+    // push a dynamic component selection onto the access chain, only applicable with a
+    // non-trivial swizzle or no swizzle
     void accessChainPushComponent(Id component, Id preSwizzleBaseType)
     {
-        accessChain.component = component;
-        if (accessChain.preSwizzleBaseType == NoType)
-            accessChain.preSwizzleBaseType = preSwizzleBaseType;
+        if (accessChain.swizzle.size() != 1) {
+            accessChain.component = component;
+            if (accessChain.preSwizzleBaseType == NoType)
+                accessChain.preSwizzleBaseType = preSwizzleBaseType;
+        }
     }
 
     // use accessChain and swizzle to store value
     void accessChainStore(Id rvalue);
 
     // use accessChain and swizzle to load an r-value
-    Id accessChainLoad(Decoration precision, Id ResultType);
+    Id accessChainLoad(Decoration precision, Decoration nonUniform, Id ResultType);
 
     // get the direct pointer for an l-value
     Id accessChainGetLValue();
@@ -561,7 +570,7 @@
 
     void createBranch(Block* block);
     void createConditionalBranch(Id condition, Block* thenBlock, Block* elseBlock);
-    void createLoopMerge(Block* mergeBlock, Block* continueBlock, unsigned int control);
+    void createLoopMerge(Block* mergeBlock, Block* continueBlock, unsigned int control, unsigned int dependencyLength);
 
     // Sets to generate opcode for specialization constants.
     void setToSpecConstCodeGenMode() { generatingOpCodeForSpecConst = true; }
@@ -573,10 +582,12 @@
  protected:
     Id makeIntConstant(Id typeId, unsigned value, bool specConstant);
     Id makeInt64Constant(Id typeId, unsigned long long value, bool specConstant);
-    Id findScalarConstant(Op typeClass, Op opcode, Id typeId, unsigned value) const;
-    Id findScalarConstant(Op typeClass, Op opcode, Id typeId, unsigned v1, unsigned v2) const;
-    Id findCompositeConstant(Op typeClass, const std::vector<Id>& comps) const;
+    Id findScalarConstant(Op typeClass, Op opcode, Id typeId, unsigned value);
+    Id findScalarConstant(Op typeClass, Op opcode, Id typeId, unsigned v1, unsigned v2);
+    Id findCompositeConstant(Op typeClass, const std::vector<Id>& comps);
+    Id findStructConstant(Id typeId, const std::vector<Id>& comps);
     Id collapseAccessChain();
+    void remapDynamicSwizzle();
     void transferAccessChainSwizzle(bool dynamic);
     void simplifyAccessChainSwizzle();
     void createAndSetNoPredecessorBlock(const char*);
@@ -585,6 +596,7 @@
     void dumpInstructions(std::vector<unsigned int>&, const std::vector<std::unique_ptr<Instruction> >&) const;
     void dumpModuleProcesses(std::vector<unsigned int>&) const;
 
+    unsigned int spvVersion;     // the version of SPIR-V to emit in the header
     SourceLanguage source;
     int sourceVersion;
     spv::Id sourceFileStringId;
@@ -611,15 +623,15 @@
     std::vector<std::unique_ptr<Instruction> > entryPoints;
     std::vector<std::unique_ptr<Instruction> > executionModes;
     std::vector<std::unique_ptr<Instruction> > names;
-    std::vector<std::unique_ptr<Instruction> > lines;
     std::vector<std::unique_ptr<Instruction> > decorations;
     std::vector<std::unique_ptr<Instruction> > constantsTypesGlobals;
     std::vector<std::unique_ptr<Instruction> > externals;
     std::vector<std::unique_ptr<Function> > functions;
 
      // not output, internally used for quick & dirty canonical (unique) creation
-    std::vector<Instruction*> groupedConstants[OpConstant];  // all types appear before OpConstant
-    std::vector<Instruction*> groupedTypes[OpConstant];
+    std::unordered_map<unsigned int, std::vector<Instruction*>> groupedConstants;       // map type opcodes to constant inst.
+    std::unordered_map<unsigned int, std::vector<Instruction*>> groupedStructConstants; // map struct-id to constant instructions
+    std::unordered_map<unsigned int, std::vector<Instruction*>> groupedTypes;           // map type opcodes to type instructions
 
     // stack of switches
     std::stack<Block*> switchMerges;
diff --git a/SPIRV/disassemble.cpp b/SPIRV/disassemble.cpp
index c950a66..c07dfc7 100644
--- a/SPIRV/disassemble.cpp
+++ b/SPIRV/disassemble.cpp
@@ -54,6 +54,7 @@
 #ifdef AMD_EXTENSIONS
         #include "GLSL.ext.AMD.h"
 #endif
+
 #ifdef NV_EXTENSIONS
         #include "GLSL.ext.NV.h"
 #endif
@@ -80,12 +81,15 @@
 // used to identify the extended instruction library imported when printing
 enum ExtInstSet {
     GLSL450Inst,
+
 #ifdef AMD_EXTENSIONS
     GLSLextAMDInst,
 #endif
+
 #ifdef NV_EXTENSIONS
     GLSLextNVInst,
 #endif
+
     OpenCLExtInst,
 };
 
@@ -653,7 +657,6 @@
 }
 #endif
 
-
 #ifdef NV_EXTENSIONS
 static const char* GLSLextNVGetDebugNames(const char* name, unsigned entrypoint)
 {
diff --git a/SPIRV/doc.cpp b/SPIRV/doc.cpp
index f9d5254..a905968 100755
--- a/SPIRV/doc.cpp
+++ b/SPIRV/doc.cpp
@@ -49,6 +49,7 @@
     extern "C" {
         // Include C-based headers that don't have a namespace
         #include "GLSL.ext.KHR.h"
+        #include "GLSL.ext.EXT.h"
 #ifdef AMD_EXTENSIONS
         #include "GLSL.ext.AMD.h"
 #endif
@@ -65,7 +66,7 @@
 // the specification (or their sanitized versions for auto-generating the
 // spirv headers.
 //
-// Also, the ceilings are declared next to these, to help keep them in sync.
+// Also, for masks the ceilings are declared next to these, to help keep them in sync.
 // Ceilings should be
 //  - one more than the maximum value an enumerant takes on, for non-mask enumerants
 //    (for non-sparse enums, this is the number of enumerants)
@@ -73,8 +74,6 @@
 //    (for non-sparse mask enums, this is the number of enumerants)
 //
 
-const int SourceLanguageCeiling = 6; // HLSL todo: need official enumerant
-
 const char* SourceString(int source)
 {
     switch (source) {
@@ -85,13 +84,10 @@
     case 4:  return "OpenCL_CPP";
     case 5:  return "HLSL";
 
-    case SourceLanguageCeiling:
     default: return "Bad";
     }
 }
 
-const int ExecutionModelCeiling = 7;
-
 const char* ExecutionModelString(int model)
 {
     switch (model) {
@@ -103,13 +99,10 @@
     case 5:  return "GLCompute";
     case 6:  return "Kernel";
 
-    case ExecutionModelCeiling:
     default: return "Bad";
     }
 }
 
-const int AddressingModelCeiling = 3;
-
 const char* AddressingString(int addr)
 {
     switch (addr) {
@@ -117,13 +110,10 @@
     case 1:  return "Physical32";
     case 2:  return "Physical64";
 
-    case AddressingModelCeiling:
     default: return "Bad";
     }
 }
 
-const int MemoryModelCeiling = 3;
-
 const char* MemoryString(int mem)
 {
     switch (mem) {
@@ -131,7 +121,6 @@
     case 1:  return "GLSL450";
     case 2:  return "OpenCL";
 
-    case MemoryModelCeiling:
     default: return "Bad";
     }
 }
@@ -181,8 +170,6 @@
     }
 }
 
-const int StorageClassCeiling = 13;
-
 const char* StorageClassString(int StorageClass)
 {
     switch (StorageClass) {
@@ -200,7 +187,6 @@
     case 11: return "Image";
     case 12: return "StorageBuffer";
 
-    case StorageClassCeiling:
     default: return "Bad";
     }
 }
@@ -260,19 +246,21 @@
     default:  return "Bad";
 
 #ifdef AMD_EXTENSIONS
-    case 4999: return "ExplicitInterpAMD";
+    case DecorationExplicitInterpAMD: return "ExplicitInterpAMD";
 #endif
 #ifdef NV_EXTENSIONS
-    case 5248: return "OverrideCoverageNV";
-    case 5250: return "PassthroughNV";
-    case 5252: return "ViewportRelativeNV";
-    case 5256: return "SecondaryViewportRelativeNV";
+    case DecorationOverrideCoverageNV:          return "OverrideCoverageNV";
+    case DecorationPassthroughNV:               return "PassthroughNV";
+    case DecorationViewportRelativeNV:          return "ViewportRelativeNV";
+    case DecorationSecondaryViewportRelativeNV: return "SecondaryViewportRelativeNV";
 #endif
+
+    case DecorationNonUniformEXT:           return "DecorationNonUniformEXT";
+    case DecorationHlslCounterBufferGOOGLE: return "DecorationHlslCounterBufferGOOGLE";
+    case DecorationHlslSemanticGOOGLE:      return "DecorationHlslSemanticGOOGLE";
     }
 }
 
-const int BuiltInCeiling = 44;
-
 const char* BuiltInString(int builtIn)
 {
     switch (builtIn) {
@@ -351,13 +339,12 @@
     case 5262: return "ViewportMaskPerViewNV";
 #endif
 
-    case BuiltInCeiling:
+    case 5264: return "FullyCoveredEXT";
+
     default: return "Bad";
     }
 }
 
-const int DimensionCeiling = 7;
-
 const char* DimensionString(int dim)
 {
     switch (dim) {
@@ -369,13 +356,10 @@
     case 5:  return "Buffer";
     case 6:  return "SubpassData";
 
-    case DimensionCeiling:
     default: return "Bad";
     }
 }
 
-const int SamplerAddressingModeCeiling = 5;
-
 const char* SamplerAddressingModeString(int mode)
 {
     switch (mode) {
@@ -385,26 +369,20 @@
     case 3:  return "Repeat";
     case 4:  return "RepeatMirrored";
 
-    case SamplerAddressingModeCeiling:
     default: return "Bad";
     }
 }
 
-const int SamplerFilterModeCeiling = 2;
-
 const char* SamplerFilterModeString(int mode)
 {
     switch (mode) {
     case 0: return "Nearest";
     case 1: return "Linear";
 
-    case SamplerFilterModeCeiling:
     default: return "Bad";
     }
 }
 
-const int ImageFormatCeiling = 40;
-
 const char* ImageFormatString(int format)
 {
     switch (format) {
@@ -461,14 +439,11 @@
     case 38: return "R16ui";
     case 39: return "R8ui";
 
-    case ImageFormatCeiling:
     default:
         return "Bad";
     }
 }
 
-const int ImageChannelOrderCeiling = 19;
-
 const char* ImageChannelOrderString(int format)
 {
     switch (format) {
@@ -492,14 +467,11 @@
     case 17: return "sRGBA";
     case 18: return "sBGRA";
 
-    case ImageChannelOrderCeiling:
     default: 
         return "Bad";
     }
 }
 
-const int ImageChannelDataTypeCeiling = 17;
-
 const char* ImageChannelDataTypeString(int type)
 {
     switch (type)
@@ -522,7 +494,6 @@
     case 15: return "UnormInt24";
     case 16: return "UnormInt101010_2";
 
-    case ImageChannelDataTypeCeiling:
     default:
         return "Bad";
     }
@@ -548,8 +519,6 @@
     }
 }
 
-const int FPFastMathCeiling = 5;
-
 const char* FPFastMathString(int mode)
 {
     switch (mode) {
@@ -559,13 +528,10 @@
     case 3: return "AllowRecip";
     case 4: return "Fast";
 
-    case FPFastMathCeiling:
     default:     return "Bad";
     }
 }
 
-const int FPRoundingModeCeiling = 4;
-
 const char* FPRoundingModeString(int mode)
 {
     switch (mode) {
@@ -574,26 +540,20 @@
     case 2:  return "RTP";
     case 3:  return "RTN";
 
-    case FPRoundingModeCeiling:
     default: return "Bad";
     }
 }
 
-const int LinkageTypeCeiling = 2;
-
 const char* LinkageTypeString(int type)
 {
     switch (type) {
     case 0:  return "Export";
     case 1:  return "Import";
 
-    case LinkageTypeCeiling:
     default: return "Bad";
     }
 }
 
-const int FuncParamAttrCeiling = 8;
-
 const char* FuncParamAttrString(int attr)
 {
     switch (attr) {
@@ -606,13 +566,10 @@
     case 6:  return "NoWrite";
     case 7:  return "NoReadWrite";
 
-    case FuncParamAttrCeiling:
     default: return "Bad";
     }
 }
 
-const int AccessQualifierCeiling = 3;
-
 const char* AccessQualifierString(int attr)
 {
     switch (attr) {
@@ -620,7 +577,6 @@
     case 1:  return "WriteOnly";
     case 2:  return "ReadWrite";
 
-    case AccessQualifierCeiling:
     default: return "Bad";
     }
 }
@@ -668,8 +624,6 @@
     }
 }
 
-const int MemorySemanticsCeiling = 12;
-
 const char* MemorySemanticsString(int mem)
 {
     // Note: No bits set (None) means "Relaxed"
@@ -687,13 +641,10 @@
     case 10: return "AtomicCounterMemory";
     case 11: return "ImageMemory";
 
-    case MemorySemanticsCeiling:
     default:     return "Bad";
     }
 }
 
-const int MemoryAccessCeiling = 3;
-
 const char* MemoryAccessString(int mem)
 {
     switch (mem) {
@@ -701,13 +652,10 @@
     case 1:  return "Aligned";
     case 2:  return "Nontemporal";
 
-    case MemoryAccessCeiling:
     default: return "Bad";
     }
 }
 
-const int ScopeCeiling = 5;
-
 const char* ScopeString(int mem)
 {
     switch (mem) {
@@ -717,29 +665,29 @@
     case 3:  return "Subgroup";
     case 4:  return "Invocation";
 
-    case ScopeCeiling:
     default: return "Bad";
     }
 }
 
-const int GroupOperationCeiling = 3;
-
 const char* GroupOperationString(int gop)
 {
 
     switch (gop)
     {
-    case 0:  return "Reduce";
-    case 1:  return "InclusiveScan";
-    case 2:  return "ExclusiveScan";
+    case GroupOperationReduce:  return "Reduce";
+    case GroupOperationInclusiveScan:  return "InclusiveScan";
+    case GroupOperationExclusiveScan:  return "ExclusiveScan";
+    case GroupOperationClusteredReduce:  return "ClusteredReduce";
+#ifdef NV_EXTENSIONS
+    case GroupOperationPartitionedReduceNV:  return "PartitionedReduceNV";
+    case GroupOperationPartitionedInclusiveScanNV:  return "PartitionedInclusiveScanNV";
+    case GroupOperationPartitionedExclusiveScanNV:  return "PartitionedExclusiveScanNV";
+#endif
 
-    case GroupOperationCeiling:
     default: return "Bad";
     }
 }
 
-const int KernelEnqueueFlagsCeiling = 3;
-
 const char* KernelEnqueueFlagsString(int flag)
 {
     switch (flag)
@@ -748,26 +696,20 @@
     case 1:  return "WaitKernel";
     case 2:  return "WaitWorkGroup";
 
-    case KernelEnqueueFlagsCeiling:
     default: return "Bad";
     }
 }
 
-const int KernelProfilingInfoCeiling = 1;
-
 const char* KernelProfilingInfoString(int info)
 {
     switch (info)
     {
     case 0:  return "CmdExecTime";
 
-    case KernelProfilingInfoCeiling:
     default: return "Bad";
     }
 }
 
-const int CapabilityCeiling = 58;
-
 const char* CapabilityString(int info)
 {
     switch (info)
@@ -830,39 +772,63 @@
     case 55: return "StorageImageReadWithoutFormat";
     case 56: return "StorageImageWriteWithoutFormat";
     case 57: return "MultiViewport";
+    case 61: return "GroupNonUniform";
+    case 62: return "GroupNonUniformVote";
+    case 63: return "GroupNonUniformArithmetic";
+    case 64: return "GroupNonUniformBallot";
+    case 65: return "GroupNonUniformShuffle";
+    case 66: return "GroupNonUniformShuffleRelative";
+    case 67: return "GroupNonUniformClustered";
+    case 68: return "GroupNonUniformQuad";
 
-    case 4423: return "SubgroupBallotKHR";
-    case 4427: return "DrawParameters";
-    case 4431: return "SubgroupVoteKHR";
+    case CapabilitySubgroupBallotKHR: return "SubgroupBallotKHR";
+    case CapabilityDrawParameters:    return "DrawParameters";
+    case CapabilitySubgroupVoteKHR:   return "SubgroupVoteKHR";
 
-    case 4433: return "StorageUniformBufferBlock16";
-    case 4434: return "StorageUniform16";
-    case 4435: return "StoragePushConstant16";
-    case 4436: return "StorageInputOutput16";
+    case CapabilityStorageUniformBufferBlock16: return "StorageUniformBufferBlock16";
+    case CapabilityStorageUniform16:            return "StorageUniform16";
+    case CapabilityStoragePushConstant16:       return "StoragePushConstant16";
+    case CapabilityStorageInputOutput16:        return "StorageInputOutput16";
 
-    case 4437: return "DeviceGroup";
-    case 4439: return "MultiView";
+    case CapabilityDeviceGroup: return "DeviceGroup";
+    case CapabilityMultiView:   return "MultiView";
 
-    case 5013: return "StencilExportEXT";
+    case CapabilityStencilExportEXT: return "StencilExportEXT";
 
 #ifdef AMD_EXTENSIONS
-    case 5009: return "ImageGatherBiasLodAMD";
-    case 5010: return "FragmentMaskAMD";
-    case 5015: return "ImageReadWriteLodAMD";
+    case CapabilityFloat16ImageAMD:       return "Float16ImageAMD";
+    case CapabilityImageGatherBiasLodAMD: return "ImageGatherBiasLodAMD";
+    case CapabilityFragmentMaskAMD:       return "FragmentMaskAMD";
+    case CapabilityImageReadWriteLodAMD:  return "ImageReadWriteLodAMD";
 #endif
 
-    case 4445: return "AtomicStorageOps";
+    case CapabilityAtomicStorageOps:             return "AtomicStorageOps";
 
-    case 4447: return "SampleMaskPostDepthCoverage";
+    case CapabilitySampleMaskPostDepthCoverage:  return "SampleMaskPostDepthCoverage";
 #ifdef NV_EXTENSIONS
-    case 5251: return "GeometryShaderPassthroughNV";
-    case 5254: return "ShaderViewportIndexLayerNV";
-    case 5255: return "ShaderViewportMaskNV";
-    case 5259: return "ShaderStereoViewNV";
-    case 5260: return "PerViewAttributesNV";
+    case CapabilityGeometryShaderPassthroughNV:  return "GeometryShaderPassthroughNV";
+    case CapabilityShaderViewportIndexLayerNV:   return "ShaderViewportIndexLayerNV";
+    case CapabilityShaderViewportMaskNV:         return "ShaderViewportMaskNV";
+    case CapabilityShaderStereoViewNV:           return "ShaderStereoViewNV";
+    case CapabilityPerViewAttributesNV:          return "PerViewAttributesNV";
+    case CapabilityGroupNonUniformPartitionedNV: return "GroupNonUniformPartitionedNV";
 #endif
 
-    case CapabilityCeiling:
+    case CapabilityFragmentFullyCoveredEXT: return "FragmentFullyCoveredEXT";
+
+    case CapabilityShaderNonUniformEXT:                          return "CapabilityShaderNonUniformEXT";
+    case CapabilityRuntimeDescriptorArrayEXT:                    return "CapabilityRuntimeDescriptorArrayEXT";
+    case CapabilityInputAttachmentArrayDynamicIndexingEXT:       return "CapabilityInputAttachmentArrayDynamicIndexingEXT";
+    case CapabilityUniformTexelBufferArrayDynamicIndexingEXT:    return "CapabilityUniformTexelBufferArrayDynamicIndexingEXT";
+    case CapabilityStorageTexelBufferArrayDynamicIndexingEXT:    return "CapabilityStorageTexelBufferArrayDynamicIndexingEXT";
+    case CapabilityUniformBufferArrayNonUniformIndexingEXT:      return "CapabilityUniformBufferArrayNonUniformIndexingEXT";
+    case CapabilitySampledImageArrayNonUniformIndexingEXT:       return "CapabilitySampledImageArrayNonUniformIndexingEXT";
+    case CapabilityStorageBufferArrayNonUniformIndexingEXT:      return "CapabilityStorageBufferArrayNonUniformIndexingEXT";
+    case CapabilityStorageImageArrayNonUniformIndexingEXT:       return "CapabilityStorageImageArrayNonUniformIndexingEXT";
+    case CapabilityInputAttachmentArrayNonUniformIndexingEXT:    return "CapabilityInputAttachmentArrayNonUniformIndexingEXT";
+    case CapabilityUniformTexelBufferArrayNonUniformIndexingEXT: return "CapabilityUniformTexelBufferArrayNonUniformIndexingEXT";
+    case CapabilityStorageTexelBufferArrayNonUniformIndexingEXT: return "CapabilityStorageTexelBufferArrayNonUniformIndexingEXT";
+
     default: return "Bad";
     }
 }
@@ -1192,6 +1158,44 @@
     case 319: return "OpAtomicFlagClear";
     case 320: return "OpImageSparseRead";
 
+    case OpModuleProcessed: return "OpModuleProcessed";
+    case OpDecorateId:      return "OpDecorateId";
+
+    case 333: return "OpGroupNonUniformElect";
+    case 334: return "OpGroupNonUniformAll";
+    case 335: return "OpGroupNonUniformAny";
+    case 336: return "OpGroupNonUniformAllEqual";
+    case 337: return "OpGroupNonUniformBroadcast";
+    case 338: return "OpGroupNonUniformBroadcastFirst";
+    case 339: return "OpGroupNonUniformBallot";
+    case 340: return "OpGroupNonUniformInverseBallot";
+    case 341: return "OpGroupNonUniformBallotBitExtract";
+    case 342: return "OpGroupNonUniformBallotBitCount";
+    case 343: return "OpGroupNonUniformBallotFindLSB";
+    case 344: return "OpGroupNonUniformBallotFindMSB";
+    case 345: return "OpGroupNonUniformShuffle";
+    case 346: return "OpGroupNonUniformShuffleXor";
+    case 347: return "OpGroupNonUniformShuffleUp";
+    case 348: return "OpGroupNonUniformShuffleDown";
+    case 349: return "OpGroupNonUniformIAdd";
+    case 350: return "OpGroupNonUniformFAdd";
+    case 351: return "OpGroupNonUniformIMul";
+    case 352: return "OpGroupNonUniformFMul";
+    case 353: return "OpGroupNonUniformSMin";
+    case 354: return "OpGroupNonUniformUMin";
+    case 355: return "OpGroupNonUniformFMin";
+    case 356: return "OpGroupNonUniformSMax";
+    case 357: return "OpGroupNonUniformUMax";
+    case 358: return "OpGroupNonUniformFMax";
+    case 359: return "OpGroupNonUniformBitwiseAnd";
+    case 360: return "OpGroupNonUniformBitwiseOr";
+    case 361: return "OpGroupNonUniformBitwiseXor";
+    case 362: return "OpGroupNonUniformLogicalAnd";
+    case 363: return "OpGroupNonUniformLogicalOr";
+    case 364: return "OpGroupNonUniformLogicalXor";
+    case 365: return "OpGroupNonUniformQuadBroadcast";
+    case 366: return "OpGroupNonUniformQuadSwap";
+
     case 4421: return "OpSubgroupBallotKHR";
     case 4422: return "OpSubgroupFirstInvocationKHR";
     case 4428: return "OpSubgroupAllKHR";
@@ -1213,7 +1217,12 @@
     case 5012: return "OpFragmentFetchAMD";
 #endif
 
-    case OpcodeCeiling:
+    case OpDecorateStringGOOGLE:       return "OpDecorateStringGOOGLE";
+    case OpMemberDecorateStringGOOGLE: return "OpMemberDecorateStringGOOGLE";
+
+#ifdef NV_EXTENSIONS
+    case OpGroupNonUniformPartitionNV: return "OpGroupNonUniformPartitionNV";
+#endif
     default:
         return "Bad";
     }
@@ -1226,35 +1235,12 @@
 OperandParameters DecorationOperands[DecorationCeiling];
 
 EnumDefinition OperandClassParams[OperandCount];
-EnumParameters ExecutionModelParams[ExecutionModelCeiling];
-EnumParameters AddressingParams[AddressingModelCeiling];
-EnumParameters MemoryParams[MemoryModelCeiling];
 EnumParameters ExecutionModeParams[ExecutionModeCeiling];
-EnumParameters StorageParams[StorageClassCeiling];
-EnumParameters SamplerAddressingModeParams[SamplerAddressingModeCeiling];
-EnumParameters SamplerFilterModeParams[SamplerFilterModeCeiling];
-EnumParameters ImageFormatParams[ImageFormatCeiling];
-EnumParameters ImageChannelOrderParams[ImageChannelOrderCeiling];
-EnumParameters ImageChannelDataTypeParams[ImageChannelDataTypeCeiling];
 EnumParameters ImageOperandsParams[ImageOperandsCeiling];
-EnumParameters FPFastMathParams[FPFastMathCeiling];
-EnumParameters FPRoundingModeParams[FPRoundingModeCeiling];
-EnumParameters LinkageTypeParams[LinkageTypeCeiling];
 EnumParameters DecorationParams[DecorationCeiling];
-EnumParameters BuiltInParams[BuiltInCeiling];
-EnumParameters DimensionalityParams[DimensionCeiling];
-EnumParameters FuncParamAttrParams[FuncParamAttrCeiling];
-EnumParameters AccessQualifierParams[AccessQualifierCeiling];
-EnumParameters GroupOperationParams[GroupOperationCeiling];
 EnumParameters LoopControlParams[FunctionControlCeiling];
 EnumParameters SelectionControlParams[SelectControlCeiling];
 EnumParameters FunctionControlParams[FunctionControlCeiling];
-EnumParameters MemorySemanticsParams[MemorySemanticsCeiling];
-EnumParameters MemoryAccessParams[MemoryAccessCeiling];
-EnumParameters ScopeParams[ScopeCeiling];
-EnumParameters KernelEnqueueFlagsParams[KernelEnqueueFlagsCeiling];
-EnumParameters KernelProfilingInfoParams[KernelProfilingInfoCeiling];
-EnumParameters CapabilityParams[CapabilityCeiling];
 
 // Set up all the parameterizing descriptions of the opcodes, operands, etc.
 void Parameterize()
@@ -1304,7 +1290,10 @@
     InstructionDesc[OpImageWrite].setResultAndType(false, false);
     InstructionDesc[OpDecorationGroup].setResultAndType(true, false);
     InstructionDesc[OpDecorate].setResultAndType(false, false);
+    InstructionDesc[OpDecorateId].setResultAndType(false, false);
+    InstructionDesc[OpDecorateStringGOOGLE].setResultAndType(false, false);
     InstructionDesc[OpMemberDecorate].setResultAndType(false, false);
+    InstructionDesc[OpMemberDecorateStringGOOGLE].setResultAndType(false, false);
     InstructionDesc[OpGroupDecorate].setResultAndType(false, false);
     InstructionDesc[OpGroupMemberDecorate].setResultAndType(false, false);
     InstructionDesc[OpName].setResultAndType(false, false);
@@ -1343,6 +1332,7 @@
     InstructionDesc[OpReleaseEvent].setResultAndType(false, false);
     InstructionDesc[OpGroupWaitEvents].setResultAndType(false, false);
     InstructionDesc[OpAtomicFlagClear].setResultAndType(false, false);
+    InstructionDesc[OpModuleProcessed].setResultAndType(false, false);
 
     // Specific additional context-dependent operands
 
@@ -1380,354 +1370,39 @@
     DecorationOperands[DecorationInputAttachmentIndex].push(OperandLiteralNumber, "'Attachment Index'");
     DecorationOperands[DecorationAlignment].push(OperandLiteralNumber, "'Alignment'");
 
-    OperandClassParams[OperandSource].set(SourceLanguageCeiling, SourceString, 0);
-    OperandClassParams[OperandExecutionModel].set(ExecutionModelCeiling, ExecutionModelString, ExecutionModelParams);
-    OperandClassParams[OperandAddressing].set(AddressingModelCeiling, AddressingString, AddressingParams);
-    OperandClassParams[OperandMemory].set(MemoryModelCeiling, MemoryString, MemoryParams);
+    OperandClassParams[OperandSource].set(0, SourceString, 0);
+    OperandClassParams[OperandExecutionModel].set(0, ExecutionModelString, nullptr);
+    OperandClassParams[OperandAddressing].set(0, AddressingString, nullptr);
+    OperandClassParams[OperandMemory].set(0, MemoryString, nullptr);
     OperandClassParams[OperandExecutionMode].set(ExecutionModeCeiling, ExecutionModeString, ExecutionModeParams);
     OperandClassParams[OperandExecutionMode].setOperands(ExecutionModeOperands);
-    OperandClassParams[OperandStorage].set(StorageClassCeiling, StorageClassString, StorageParams);
-    OperandClassParams[OperandDimensionality].set(DimensionCeiling, DimensionString, DimensionalityParams);
-    OperandClassParams[OperandSamplerAddressingMode].set(SamplerAddressingModeCeiling, SamplerAddressingModeString, SamplerAddressingModeParams);
-    OperandClassParams[OperandSamplerFilterMode].set(SamplerFilterModeCeiling, SamplerFilterModeString, SamplerFilterModeParams);
-    OperandClassParams[OperandSamplerImageFormat].set(ImageFormatCeiling, ImageFormatString, ImageFormatParams);
-    OperandClassParams[OperandImageChannelOrder].set(ImageChannelOrderCeiling, ImageChannelOrderString, ImageChannelOrderParams);
-    OperandClassParams[OperandImageChannelDataType].set(ImageChannelDataTypeCeiling, ImageChannelDataTypeString, ImageChannelDataTypeParams);
+    OperandClassParams[OperandStorage].set(0, StorageClassString, nullptr);
+    OperandClassParams[OperandDimensionality].set(0, DimensionString, nullptr);
+    OperandClassParams[OperandSamplerAddressingMode].set(0, SamplerAddressingModeString, nullptr);
+    OperandClassParams[OperandSamplerFilterMode].set(0, SamplerFilterModeString, nullptr);
+    OperandClassParams[OperandSamplerImageFormat].set(0, ImageFormatString, nullptr);
+    OperandClassParams[OperandImageChannelOrder].set(0, ImageChannelOrderString, nullptr);
+    OperandClassParams[OperandImageChannelDataType].set(0, ImageChannelDataTypeString, nullptr);
     OperandClassParams[OperandImageOperands].set(ImageOperandsCeiling, ImageOperandsString, ImageOperandsParams, true);
-    OperandClassParams[OperandFPFastMath].set(FPFastMathCeiling, FPFastMathString, FPFastMathParams, true);
-    OperandClassParams[OperandFPRoundingMode].set(FPRoundingModeCeiling, FPRoundingModeString, FPRoundingModeParams);
-    OperandClassParams[OperandLinkageType].set(LinkageTypeCeiling, LinkageTypeString, LinkageTypeParams);
-    OperandClassParams[OperandFuncParamAttr].set(FuncParamAttrCeiling, FuncParamAttrString, FuncParamAttrParams);
-    OperandClassParams[OperandAccessQualifier].set(AccessQualifierCeiling, AccessQualifierString, AccessQualifierParams);
+    OperandClassParams[OperandFPFastMath].set(0, FPFastMathString, nullptr, true);
+    OperandClassParams[OperandFPRoundingMode].set(0, FPRoundingModeString, nullptr);
+    OperandClassParams[OperandLinkageType].set(0, LinkageTypeString, nullptr);
+    OperandClassParams[OperandFuncParamAttr].set(0, FuncParamAttrString, nullptr);
+    OperandClassParams[OperandAccessQualifier].set(0, AccessQualifierString, nullptr);
     OperandClassParams[OperandDecoration].set(DecorationCeiling, DecorationString, DecorationParams);
     OperandClassParams[OperandDecoration].setOperands(DecorationOperands);
-    OperandClassParams[OperandBuiltIn].set(BuiltInCeiling, BuiltInString, BuiltInParams);
+    OperandClassParams[OperandBuiltIn].set(0, BuiltInString, nullptr);
     OperandClassParams[OperandSelect].set(SelectControlCeiling, SelectControlString, SelectionControlParams, true);
     OperandClassParams[OperandLoop].set(LoopControlCeiling, LoopControlString, LoopControlParams, true);
     OperandClassParams[OperandFunction].set(FunctionControlCeiling, FunctionControlString, FunctionControlParams, true);
-    OperandClassParams[OperandMemorySemantics].set(MemorySemanticsCeiling, MemorySemanticsString, MemorySemanticsParams, true);
-    OperandClassParams[OperandMemoryAccess].set(MemoryAccessCeiling, MemoryAccessString, MemoryAccessParams, true);
-    OperandClassParams[OperandScope].set(ScopeCeiling, ScopeString, ScopeParams);
-    OperandClassParams[OperandGroupOperation].set(GroupOperationCeiling, GroupOperationString, GroupOperationParams);
-    OperandClassParams[OperandKernelEnqueueFlags].set(KernelEnqueueFlagsCeiling, KernelEnqueueFlagsString, KernelEnqueueFlagsParams);
-    OperandClassParams[OperandKernelProfilingInfo].set(KernelProfilingInfoCeiling, KernelProfilingInfoString, KernelProfilingInfoParams, true);
-    OperandClassParams[OperandCapability].set(CapabilityCeiling, CapabilityString, CapabilityParams);
-    OperandClassParams[OperandOpcode].set(OpcodeCeiling, OpcodeString, 0);
-
-    CapabilityParams[CapabilityShader].caps.push_back(CapabilityMatrix);
-    CapabilityParams[CapabilityGeometry].caps.push_back(CapabilityShader);
-    CapabilityParams[CapabilityTessellation].caps.push_back(CapabilityShader);
-    CapabilityParams[CapabilityVector16].caps.push_back(CapabilityKernel);
-    CapabilityParams[CapabilityFloat16Buffer].caps.push_back(CapabilityKernel);
-    CapabilityParams[CapabilityInt64Atomics].caps.push_back(CapabilityInt64);
-    CapabilityParams[CapabilityImageBasic].caps.push_back(CapabilityKernel);
-    CapabilityParams[CapabilityImageReadWrite].caps.push_back(CapabilityImageBasic);
-    CapabilityParams[CapabilityImageMipmap].caps.push_back(CapabilityImageBasic);
-    CapabilityParams[CapabilityPipes].caps.push_back(CapabilityKernel);
-    CapabilityParams[CapabilityDeviceEnqueue].caps.push_back(CapabilityKernel);
-    CapabilityParams[CapabilityLiteralSampler].caps.push_back(CapabilityKernel);
-    CapabilityParams[CapabilityAtomicStorage].caps.push_back(CapabilityShader);
-    CapabilityParams[CapabilitySampleRateShading].caps.push_back(CapabilityShader);
-    CapabilityParams[CapabilityTessellationPointSize].caps.push_back(CapabilityTessellation);
-    CapabilityParams[CapabilityGeometryPointSize].caps.push_back(CapabilityGeometry);
-    CapabilityParams[CapabilityImageGatherExtended].caps.push_back(CapabilityShader);
-    CapabilityParams[CapabilityStorageImageExtendedFormats].caps.push_back(CapabilityShader);
-    CapabilityParams[CapabilityStorageImageMultisample].caps.push_back(CapabilityShader);
-    CapabilityParams[CapabilityUniformBufferArrayDynamicIndexing].caps.push_back(CapabilityShader);
-    CapabilityParams[CapabilitySampledImageArrayDynamicIndexing].caps.push_back(CapabilityShader);
-    CapabilityParams[CapabilityStorageBufferArrayDynamicIndexing].caps.push_back(CapabilityShader);
-    CapabilityParams[CapabilityStorageImageArrayDynamicIndexing].caps.push_back(CapabilityShader);
-    CapabilityParams[CapabilityClipDistance].caps.push_back(CapabilityShader);
-    CapabilityParams[CapabilityCullDistance].caps.push_back(CapabilityShader);
-    CapabilityParams[CapabilityGenericPointer].caps.push_back(CapabilityAddresses);
-    CapabilityParams[CapabilityInt8].caps.push_back(CapabilityKernel);
-    CapabilityParams[CapabilityInputAttachment].caps.push_back(CapabilityShader);
-    CapabilityParams[CapabilityMinLod].caps.push_back(CapabilityShader);
-    CapabilityParams[CapabilitySparseResidency].caps.push_back(CapabilityShader);
-    CapabilityParams[CapabilitySampled1D].caps.push_back(CapabilityShader);
-    CapabilityParams[CapabilitySampledRect].caps.push_back(CapabilityShader);
-    CapabilityParams[CapabilitySampledBuffer].caps.push_back(CapabilityShader);
-    CapabilityParams[CapabilitySampledCubeArray].caps.push_back(CapabilityShader);
-    CapabilityParams[CapabilityImageMSArray].caps.push_back(CapabilityShader);
-    CapabilityParams[CapabilityImage1D].caps.push_back(CapabilitySampled1D);
-    CapabilityParams[CapabilityImageRect].caps.push_back(CapabilitySampledRect);
-    CapabilityParams[CapabilityImageBuffer].caps.push_back(CapabilitySampledBuffer);
-    CapabilityParams[CapabilityImageCubeArray].caps.push_back(CapabilitySampledCubeArray);
-    CapabilityParams[CapabilityImageQuery].caps.push_back(CapabilityShader);
-    CapabilityParams[CapabilityDerivativeControl].caps.push_back(CapabilityShader);
-    CapabilityParams[CapabilityInterpolationFunction].caps.push_back(CapabilityShader);
-    CapabilityParams[CapabilityTransformFeedback].caps.push_back(CapabilityShader);
-    CapabilityParams[CapabilityGeometryStreams].caps.push_back(CapabilityGeometry);
-    CapabilityParams[CapabilityStorageImageReadWithoutFormat].caps.push_back(CapabilityShader);
-    CapabilityParams[CapabilityStorageImageWriteWithoutFormat].caps.push_back(CapabilityShader);
-    CapabilityParams[CapabilityMultiViewport].caps.push_back(CapabilityGeometry);
-
-    AddressingParams[AddressingModelPhysical32].caps.push_back(CapabilityAddresses);
-    AddressingParams[AddressingModelPhysical64].caps.push_back(CapabilityAddresses);
-
-    MemoryParams[MemoryModelSimple].caps.push_back(CapabilityShader);
-    MemoryParams[MemoryModelGLSL450].caps.push_back(CapabilityShader);
-    MemoryParams[MemoryModelOpenCL].caps.push_back(CapabilityKernel);
-
-    MemorySemanticsParams[MemorySemanticsUniformMemoryShift].caps.push_back(CapabilityShader);
-    MemorySemanticsParams[MemorySemanticsAtomicCounterMemoryShift].caps.push_back(CapabilityAtomicStorage);
-
-    ExecutionModelParams[ExecutionModelVertex].caps.push_back(CapabilityShader);
-    ExecutionModelParams[ExecutionModelTessellationControl].caps.push_back(CapabilityTessellation);
-    ExecutionModelParams[ExecutionModelTessellationEvaluation].caps.push_back(CapabilityTessellation);
-    ExecutionModelParams[ExecutionModelGeometry].caps.push_back(CapabilityGeometry);
-    ExecutionModelParams[ExecutionModelFragment].caps.push_back(CapabilityShader);
-    ExecutionModelParams[ExecutionModelGLCompute].caps.push_back(CapabilityShader);
-    ExecutionModelParams[ExecutionModelKernel].caps.push_back(CapabilityKernel);
-
-    // Storage capabilites
-    StorageParams[StorageClassInput].caps.push_back(CapabilityShader);
-    StorageParams[StorageClassUniform].caps.push_back(CapabilityShader);
-    StorageParams[StorageClassOutput].caps.push_back(CapabilityShader);
-    StorageParams[StorageClassPrivate].caps.push_back(CapabilityShader);
-    StorageParams[StorageClassGeneric].caps.push_back(CapabilityKernel);
-    StorageParams[StorageClassAtomicCounter].caps.push_back(CapabilityAtomicStorage);
-    StorageParams[StorageClassPushConstant].caps.push_back(CapabilityShader);
-
-    // Sampler Filter & Addressing mode capabilities
-    SamplerAddressingModeParams[SamplerAddressingModeNone].caps.push_back(CapabilityKernel);
-    SamplerAddressingModeParams[SamplerAddressingModeClampToEdge].caps.push_back(CapabilityKernel);
-    SamplerAddressingModeParams[SamplerAddressingModeClamp].caps.push_back(CapabilityKernel);
-    SamplerAddressingModeParams[SamplerAddressingModeRepeat].caps.push_back(CapabilityKernel);
-    SamplerAddressingModeParams[SamplerAddressingModeRepeatMirrored].caps.push_back(CapabilityKernel);
-
-    SamplerFilterModeParams[SamplerFilterModeNearest].caps.push_back(CapabilityKernel);
-    SamplerFilterModeParams[SamplerFilterModeLinear].caps.push_back(CapabilityKernel);
-
-    // image format capabilities
-
-    // ES/Desktop float
-    ImageFormatParams[ImageFormatRgba32f].caps.push_back(CapabilityShader);
-    ImageFormatParams[ImageFormatRgba16f].caps.push_back(CapabilityShader);
-    ImageFormatParams[ImageFormatR32f].caps.push_back(CapabilityShader);
-    ImageFormatParams[ImageFormatRgba8].caps.push_back(CapabilityShader);
-    ImageFormatParams[ImageFormatRgba8Snorm].caps.push_back(CapabilityShader);
-
-    // Desktop float
-    ImageFormatParams[ImageFormatRg32f].caps.push_back(CapabilityStorageImageExtendedFormats);
-    ImageFormatParams[ImageFormatRg16f].caps.push_back(CapabilityStorageImageExtendedFormats);
-    ImageFormatParams[ImageFormatR11fG11fB10f].caps.push_back(CapabilityStorageImageExtendedFormats);
-    ImageFormatParams[ImageFormatR16f].caps.push_back(CapabilityStorageImageExtendedFormats);
-    ImageFormatParams[ImageFormatRgba16].caps.push_back(CapabilityStorageImageExtendedFormats);
-    ImageFormatParams[ImageFormatRgb10A2].caps.push_back(CapabilityStorageImageExtendedFormats);
-    ImageFormatParams[ImageFormatRg16].caps.push_back(CapabilityStorageImageExtendedFormats);
-    ImageFormatParams[ImageFormatRg8].caps.push_back(CapabilityStorageImageExtendedFormats);
-    ImageFormatParams[ImageFormatR16].caps.push_back(CapabilityStorageImageExtendedFormats);
-    ImageFormatParams[ImageFormatR8].caps.push_back(CapabilityStorageImageExtendedFormats);
-    ImageFormatParams[ImageFormatRgba16Snorm].caps.push_back(CapabilityStorageImageExtendedFormats);
-    ImageFormatParams[ImageFormatRg16Snorm].caps.push_back(CapabilityStorageImageExtendedFormats);
-    ImageFormatParams[ImageFormatRg8Snorm].caps.push_back(CapabilityStorageImageExtendedFormats);
-    ImageFormatParams[ImageFormatR16Snorm].caps.push_back(CapabilityStorageImageExtendedFormats);
-    ImageFormatParams[ImageFormatR8Snorm].caps.push_back(CapabilityStorageImageExtendedFormats);
-
-    // ES/Desktop int
-    ImageFormatParams[ImageFormatRgba32i].caps.push_back(CapabilityShader);
-    ImageFormatParams[ImageFormatRgba16i].caps.push_back(CapabilityShader);
-    ImageFormatParams[ImageFormatRgba8i].caps.push_back(CapabilityShader);
-    ImageFormatParams[ImageFormatR32i].caps.push_back(CapabilityShader);
-
-    // Desktop int
-    ImageFormatParams[ImageFormatRg32i].caps.push_back(CapabilityStorageImageExtendedFormats);
-    ImageFormatParams[ImageFormatRg16i].caps.push_back(CapabilityStorageImageExtendedFormats);
-    ImageFormatParams[ImageFormatRg8i].caps.push_back(CapabilityStorageImageExtendedFormats);
-    ImageFormatParams[ImageFormatR16i].caps.push_back(CapabilityStorageImageExtendedFormats);
-    ImageFormatParams[ImageFormatR8i].caps.push_back(CapabilityStorageImageExtendedFormats);
-
-    // ES/Desktop uint
-    ImageFormatParams[ImageFormatRgba32ui].caps.push_back(CapabilityShader);
-    ImageFormatParams[ImageFormatRgba16ui].caps.push_back(CapabilityShader);
-    ImageFormatParams[ImageFormatRgba8ui].caps.push_back(CapabilityShader);
-    ImageFormatParams[ImageFormatR32ui].caps.push_back(CapabilityShader);
-
-    // Desktop uint
-    ImageFormatParams[ImageFormatRgb10a2ui].caps.push_back(CapabilityStorageImageExtendedFormats);
-    ImageFormatParams[ImageFormatRg32ui].caps.push_back(CapabilityStorageImageExtendedFormats);
-    ImageFormatParams[ImageFormatRg16ui].caps.push_back(CapabilityStorageImageExtendedFormats);
-    ImageFormatParams[ImageFormatRg8ui].caps.push_back(CapabilityStorageImageExtendedFormats);
-    ImageFormatParams[ImageFormatR16ui].caps.push_back(CapabilityStorageImageExtendedFormats);
-    ImageFormatParams[ImageFormatR8ui].caps.push_back(CapabilityStorageImageExtendedFormats);
-
-    // image channel order capabilities
-    for (int i = 0; i < ImageChannelOrderCeiling; ++i) {
-        ImageChannelOrderParams[i].caps.push_back(CapabilityKernel);
-    }
-
-    // image channel type capabilities
-    for (int i = 0; i < ImageChannelDataTypeCeiling; ++i) {
-        ImageChannelDataTypeParams[i].caps.push_back(CapabilityKernel);
-    }
-
-    // image lookup operands
-    ImageOperandsParams[ImageOperandsBiasShift].caps.push_back(CapabilityShader);
-    ImageOperandsParams[ImageOperandsOffsetShift].caps.push_back(CapabilityImageGatherExtended);
-    ImageOperandsParams[ImageOperandsMinLodShift].caps.push_back(CapabilityMinLod);
-
-    // fast math flags capabilities
-    for (int i = 0; i < FPFastMathCeiling; ++i) {
-        FPFastMathParams[i].caps.push_back(CapabilityKernel);
-    }
-
-    // fp rounding mode capabilities
-    for (int i = 0; i < FPRoundingModeCeiling; ++i) {
-        FPRoundingModeParams[i].caps.push_back(CapabilityKernel);
-    }
-
-    // linkage types
-    for (int i = 0; i < LinkageTypeCeiling; ++i) {
-        LinkageTypeParams[i].caps.push_back(CapabilityLinkage);
-    }
-
-    // function argument types
-    for (int i = 0; i < FuncParamAttrCeiling; ++i) {
-        FuncParamAttrParams[i].caps.push_back(CapabilityKernel);
-    }
-
-    // function argument types
-    for (int i = 0; i < AccessQualifierCeiling; ++i) {
-        AccessQualifierParams[i].caps.push_back(CapabilityKernel);
-    }
-
-    ExecutionModeParams[ExecutionModeInvocations].caps.push_back(CapabilityGeometry);
-    ExecutionModeParams[ExecutionModeSpacingEqual].caps.push_back(CapabilityTessellation);
-    ExecutionModeParams[ExecutionModeSpacingFractionalEven].caps.push_back(CapabilityTessellation);
-    ExecutionModeParams[ExecutionModeSpacingFractionalOdd].caps.push_back(CapabilityTessellation);
-    ExecutionModeParams[ExecutionModeVertexOrderCw].caps.push_back(CapabilityTessellation);
-    ExecutionModeParams[ExecutionModeVertexOrderCcw].caps.push_back(CapabilityTessellation);
-    ExecutionModeParams[ExecutionModePixelCenterInteger].caps.push_back(CapabilityShader);
-    ExecutionModeParams[ExecutionModeOriginUpperLeft].caps.push_back(CapabilityShader);
-    ExecutionModeParams[ExecutionModeOriginLowerLeft].caps.push_back(CapabilityShader);
-    ExecutionModeParams[ExecutionModeEarlyFragmentTests].caps.push_back(CapabilityShader);
-    ExecutionModeParams[ExecutionModePointMode].caps.push_back(CapabilityTessellation);
-    ExecutionModeParams[ExecutionModeXfb].caps.push_back(CapabilityTransformFeedback);
-    ExecutionModeParams[ExecutionModeDepthReplacing].caps.push_back(CapabilityShader);
-    ExecutionModeParams[ExecutionModeDepthGreater].caps.push_back(CapabilityShader);
-    ExecutionModeParams[ExecutionModeDepthLess].caps.push_back(CapabilityShader);
-    ExecutionModeParams[ExecutionModeDepthUnchanged].caps.push_back(CapabilityShader);
-    ExecutionModeParams[ExecutionModeLocalSizeHint].caps.push_back(CapabilityKernel);
-    ExecutionModeParams[ExecutionModeInputPoints].caps.push_back(CapabilityGeometry);
-    ExecutionModeParams[ExecutionModeInputLines].caps.push_back(CapabilityGeometry);
-    ExecutionModeParams[ExecutionModeInputLinesAdjacency].caps.push_back(CapabilityGeometry);
-    ExecutionModeParams[ExecutionModeTriangles].caps.push_back(CapabilityGeometry);
-    ExecutionModeParams[ExecutionModeTriangles].caps.push_back(CapabilityTessellation);
-    ExecutionModeParams[ExecutionModeInputTrianglesAdjacency].caps.push_back(CapabilityGeometry);
-    ExecutionModeParams[ExecutionModeQuads].caps.push_back(CapabilityTessellation);
-    ExecutionModeParams[ExecutionModeIsolines].caps.push_back(CapabilityTessellation);
-    ExecutionModeParams[ExecutionModeOutputVertices].caps.push_back(CapabilityGeometry);
-    ExecutionModeParams[ExecutionModeOutputVertices].caps.push_back(CapabilityTessellation);
-    ExecutionModeParams[ExecutionModeOutputPoints].caps.push_back(CapabilityGeometry);
-    ExecutionModeParams[ExecutionModeOutputLineStrip].caps.push_back(CapabilityGeometry);
-    ExecutionModeParams[ExecutionModeOutputTriangleStrip].caps.push_back(CapabilityGeometry);
-    ExecutionModeParams[ExecutionModeVecTypeHint].caps.push_back(CapabilityKernel);
-    ExecutionModeParams[ExecutionModeContractionOff].caps.push_back(CapabilityKernel);
-
-    DecorationParams[DecorationRelaxedPrecision].caps.push_back(CapabilityShader);
-    DecorationParams[DecorationBlock].caps.push_back(CapabilityShader);
-    DecorationParams[DecorationBufferBlock].caps.push_back(CapabilityShader);
-    DecorationParams[DecorationRowMajor].caps.push_back(CapabilityMatrix);
-    DecorationParams[DecorationColMajor].caps.push_back(CapabilityMatrix);
-    DecorationParams[DecorationGLSLShared].caps.push_back(CapabilityShader);
-    DecorationParams[DecorationGLSLPacked].caps.push_back(CapabilityShader);
-    DecorationParams[DecorationNoPerspective].caps.push_back(CapabilityShader);
-    DecorationParams[DecorationFlat].caps.push_back(CapabilityShader);
-    DecorationParams[DecorationPatch].caps.push_back(CapabilityTessellation);
-    DecorationParams[DecorationCentroid].caps.push_back(CapabilityShader);
-    DecorationParams[DecorationSample].caps.push_back(CapabilitySampleRateShading);
-    DecorationParams[DecorationInvariant].caps.push_back(CapabilityShader);
-    DecorationParams[DecorationConstant].caps.push_back(CapabilityKernel);
-    DecorationParams[DecorationUniform].caps.push_back(CapabilityShader);
-    DecorationParams[DecorationCPacked].caps.push_back(CapabilityKernel);
-    DecorationParams[DecorationSaturatedConversion].caps.push_back(CapabilityKernel);
-    DecorationParams[DecorationStream].caps.push_back(CapabilityGeometryStreams);
-    DecorationParams[DecorationLocation].caps.push_back(CapabilityShader);
-    DecorationParams[DecorationComponent].caps.push_back(CapabilityShader);
-    DecorationParams[DecorationOffset].caps.push_back(CapabilityShader);
-    DecorationParams[DecorationIndex].caps.push_back(CapabilityShader);
-    DecorationParams[DecorationBinding].caps.push_back(CapabilityShader);
-    DecorationParams[DecorationDescriptorSet].caps.push_back(CapabilityShader);
-    DecorationParams[DecorationXfbBuffer].caps.push_back(CapabilityTransformFeedback);
-    DecorationParams[DecorationXfbStride].caps.push_back(CapabilityTransformFeedback);
-    DecorationParams[DecorationArrayStride].caps.push_back(CapabilityShader);
-    DecorationParams[DecorationMatrixStride].caps.push_back(CapabilityMatrix);
-    DecorationParams[DecorationFuncParamAttr].caps.push_back(CapabilityKernel);
-    DecorationParams[DecorationFPRoundingMode].caps.push_back(CapabilityKernel);
-    DecorationParams[DecorationFPFastMathMode].caps.push_back(CapabilityKernel);
-    DecorationParams[DecorationLinkageAttributes].caps.push_back(CapabilityLinkage);
-    DecorationParams[DecorationSpecId].caps.push_back(CapabilityShader);
-    DecorationParams[DecorationNoContraction].caps.push_back(CapabilityShader);
-    DecorationParams[DecorationInputAttachmentIndex].caps.push_back(CapabilityInputAttachment);
-    DecorationParams[DecorationAlignment].caps.push_back(CapabilityKernel);
-
-    BuiltInParams[BuiltInPosition].caps.push_back(CapabilityShader);
-    BuiltInParams[BuiltInPointSize].caps.push_back(CapabilityShader);
-    BuiltInParams[BuiltInClipDistance].caps.push_back(CapabilityClipDistance);
-    BuiltInParams[BuiltInCullDistance].caps.push_back(CapabilityCullDistance);
-
-    BuiltInParams[BuiltInVertexId].caps.push_back(CapabilityShader);
-    BuiltInParams[BuiltInVertexId].desc = "Vertex ID, which takes on values 0, 1, 2, . . . .";
-
-    BuiltInParams[BuiltInInstanceId].caps.push_back(CapabilityShader);
-    BuiltInParams[BuiltInInstanceId].desc = "Instance ID, which takes on values 0, 1, 2, . . . .";
-
-    BuiltInParams[BuiltInVertexIndex].caps.push_back(CapabilityShader);
-    BuiltInParams[BuiltInVertexIndex].desc = "Vertex index, which takes on values base, base+1, base+2, . . . .";
-
-    BuiltInParams[BuiltInInstanceIndex].caps.push_back(CapabilityShader);
-    BuiltInParams[BuiltInInstanceIndex].desc = "Instance index, which takes on values base, base+1, base+2, . . . .";
-
-    BuiltInParams[BuiltInPrimitiveId].caps.push_back(CapabilityGeometry);
-    BuiltInParams[BuiltInPrimitiveId].caps.push_back(CapabilityTessellation);
-    BuiltInParams[BuiltInInvocationId].caps.push_back(CapabilityGeometry);
-    BuiltInParams[BuiltInInvocationId].caps.push_back(CapabilityTessellation);
-    BuiltInParams[BuiltInLayer].caps.push_back(CapabilityGeometry);
-    BuiltInParams[BuiltInViewportIndex].caps.push_back(CapabilityMultiViewport);
-    BuiltInParams[BuiltInTessLevelOuter].caps.push_back(CapabilityTessellation);
-    BuiltInParams[BuiltInTessLevelInner].caps.push_back(CapabilityTessellation);
-    BuiltInParams[BuiltInTessCoord].caps.push_back(CapabilityTessellation);
-    BuiltInParams[BuiltInPatchVertices].caps.push_back(CapabilityTessellation);
-    BuiltInParams[BuiltInFragCoord].caps.push_back(CapabilityShader);
-    BuiltInParams[BuiltInPointCoord].caps.push_back(CapabilityShader);
-    BuiltInParams[BuiltInFrontFacing].caps.push_back(CapabilityShader);
-    BuiltInParams[BuiltInSampleId].caps.push_back(CapabilitySampleRateShading);
-    BuiltInParams[BuiltInSamplePosition].caps.push_back(CapabilitySampleRateShading);
-    BuiltInParams[BuiltInSampleMask].caps.push_back(CapabilitySampleRateShading);
-    BuiltInParams[BuiltInFragDepth].caps.push_back(CapabilityShader);
-    BuiltInParams[BuiltInHelperInvocation].caps.push_back(CapabilityShader);
-    BuiltInParams[BuiltInWorkDim].caps.push_back(CapabilityKernel);
-    BuiltInParams[BuiltInGlobalSize].caps.push_back(CapabilityKernel);
-    BuiltInParams[BuiltInEnqueuedWorkgroupSize].caps.push_back(CapabilityKernel);
-    BuiltInParams[BuiltInGlobalOffset].caps.push_back(CapabilityKernel);
-    BuiltInParams[BuiltInGlobalLinearId].caps.push_back(CapabilityKernel);
-
-    BuiltInParams[BuiltInSubgroupSize].caps.push_back(CapabilityKernel);
-    BuiltInParams[BuiltInSubgroupMaxSize].caps.push_back(CapabilityKernel);
-    BuiltInParams[BuiltInNumSubgroups].caps.push_back(CapabilityKernel);
-    BuiltInParams[BuiltInNumEnqueuedSubgroups].caps.push_back(CapabilityKernel);
-    BuiltInParams[BuiltInSubgroupId].caps.push_back(CapabilityKernel);
-    BuiltInParams[BuiltInSubgroupLocalInvocationId].caps.push_back(CapabilityKernel);
-
-    DimensionalityParams[Dim1D].caps.push_back(CapabilitySampled1D);
-    DimensionalityParams[DimCube].caps.push_back(CapabilityShader);
-    DimensionalityParams[DimRect].caps.push_back(CapabilitySampledRect);
-    DimensionalityParams[DimBuffer].caps.push_back(CapabilitySampledBuffer);
-    DimensionalityParams[DimSubpassData].caps.push_back(CapabilityInputAttachment);
-
-    // Group Operations
-    for (int i = 0; i < GroupOperationCeiling; ++i) {
-        GroupOperationParams[i].caps.push_back(CapabilityKernel);
-    }
-
-    // Enqueue flags
-    for (int i = 0; i < KernelEnqueueFlagsCeiling; ++i) {
-        KernelEnqueueFlagsParams[i].caps.push_back(CapabilityKernel);
-    }
-
-    // Profiling info
-    KernelProfilingInfoParams[0].caps.push_back(CapabilityKernel);
+    OperandClassParams[OperandMemorySemantics].set(0, MemorySemanticsString, nullptr, true);
+    OperandClassParams[OperandMemoryAccess].set(0, MemoryAccessString, nullptr, true);
+    OperandClassParams[OperandScope].set(0, ScopeString, nullptr);
+    OperandClassParams[OperandGroupOperation].set(0, GroupOperationString, nullptr);
+    OperandClassParams[OperandKernelEnqueueFlags].set(0, KernelEnqueueFlagsString, nullptr);
+    OperandClassParams[OperandKernelProfilingInfo].set(0, KernelProfilingInfoString, nullptr, true);
+    OperandClassParams[OperandCapability].set(0, CapabilityString, nullptr);
+    OperandClassParams[OperandOpcode].set(OpCodeMask + 1, OpcodeString, 0);
 
     // set name of operator, an initial set of <id> style operands, and the description
 
@@ -1779,7 +1454,6 @@
     InstructionDesc[OpTypeVector].operands.push(OperandId, "'Component Type'");
     InstructionDesc[OpTypeVector].operands.push(OperandLiteralNumber, "'Component Count'");
 
-    InstructionDesc[OpTypeMatrix].capabilities.push_back(CapabilityMatrix);
     InstructionDesc[OpTypeMatrix].operands.push(OperandId, "'Column Type'");
     InstructionDesc[OpTypeMatrix].operands.push(OperandLiteralNumber, "'Column Count'");
 
@@ -1797,31 +1471,19 @@
     InstructionDesc[OpTypeArray].operands.push(OperandId, "'Element Type'");
     InstructionDesc[OpTypeArray].operands.push(OperandId, "'Length'");
 
-    InstructionDesc[OpTypeRuntimeArray].capabilities.push_back(CapabilityShader);
     InstructionDesc[OpTypeRuntimeArray].operands.push(OperandId, "'Element Type'");
 
     InstructionDesc[OpTypeStruct].operands.push(OperandVariableIds, "'Member 0 type', +\n'member 1 type', +\n...");
 
-    InstructionDesc[OpTypeOpaque].capabilities.push_back(CapabilityKernel);
     InstructionDesc[OpTypeOpaque].operands.push(OperandLiteralString, "The name of the opaque type.");
 
     InstructionDesc[OpTypePointer].operands.push(OperandStorage, "");
     InstructionDesc[OpTypePointer].operands.push(OperandId, "'Type'");
 
-    InstructionDesc[OpTypeForwardPointer].capabilities.push_back(CapabilityAddresses);
     InstructionDesc[OpTypeForwardPointer].operands.push(OperandId, "'Pointer Type'");
     InstructionDesc[OpTypeForwardPointer].operands.push(OperandStorage, "");
 
-    InstructionDesc[OpTypeEvent].capabilities.push_back(CapabilityKernel);
-
-    InstructionDesc[OpTypeDeviceEvent].capabilities.push_back(CapabilityDeviceEnqueue);
-
-    InstructionDesc[OpTypeReserveId].capabilities.push_back(CapabilityPipes);
-
-    InstructionDesc[OpTypeQueue].capabilities.push_back(CapabilityDeviceEnqueue);
-
     InstructionDesc[OpTypePipe].operands.push(OperandAccessQualifier, "'Qualifier'");
-    InstructionDesc[OpTypePipe].capabilities.push_back(CapabilityPipes);
 
     InstructionDesc[OpTypeFunction].operands.push(OperandId, "'Return Type'");
     InstructionDesc[OpTypeFunction].operands.push(OperandVariableIds, "'Parameter 0 Type', +\n'Parameter 1 Type', +\n...");
@@ -1830,7 +1492,6 @@
 
     InstructionDesc[OpConstantComposite].operands.push(OperandVariableIds, "'Constituents'");
 
-    InstructionDesc[OpConstantSampler].capabilities.push_back(CapabilityLiteralSampler);
     InstructionDesc[OpConstantSampler].operands.push(OperandSamplerAddressingMode, "");
     InstructionDesc[OpConstantSampler].operands.push(OperandLiteralNumber, "'Param'");
     InstructionDesc[OpConstantSampler].operands.push(OperandSamplerFilterMode, "");
@@ -1868,11 +1529,24 @@
     InstructionDesc[OpDecorate].operands.push(OperandDecoration, "");
     InstructionDesc[OpDecorate].operands.push(OperandVariableLiterals, "See <<Decoration,'Decoration'>>.");
 
+    InstructionDesc[OpDecorateId].operands.push(OperandId, "'Target'");
+    InstructionDesc[OpDecorateId].operands.push(OperandDecoration, "");
+    InstructionDesc[OpDecorateId].operands.push(OperandVariableIds, "See <<Decoration,'Decoration'>>.");
+
+    InstructionDesc[OpDecorateStringGOOGLE].operands.push(OperandId, "'Target'");
+    InstructionDesc[OpDecorateStringGOOGLE].operands.push(OperandDecoration, "");
+    InstructionDesc[OpDecorateStringGOOGLE].operands.push(OperandLiteralString, "'Literal String'");
+
     InstructionDesc[OpMemberDecorate].operands.push(OperandId, "'Structure Type'");
     InstructionDesc[OpMemberDecorate].operands.push(OperandLiteralNumber, "'Member'");
     InstructionDesc[OpMemberDecorate].operands.push(OperandDecoration, "");
     InstructionDesc[OpMemberDecorate].operands.push(OperandVariableLiterals, "See <<Decoration,'Decoration'>>.");
 
+    InstructionDesc[OpMemberDecorateStringGOOGLE].operands.push(OperandId, "'Structure Type'");
+    InstructionDesc[OpMemberDecorateStringGOOGLE].operands.push(OperandLiteralNumber, "'Member'");
+    InstructionDesc[OpMemberDecorateStringGOOGLE].operands.push(OperandDecoration, "");
+    InstructionDesc[OpMemberDecorateStringGOOGLE].operands.push(OperandLiteralString, "'Literal String'");
+
     InstructionDesc[OpGroupDecorate].operands.push(OperandId, "'Decoration Group'");
     InstructionDesc[OpGroupDecorate].operands.push(OperandVariableIds, "'Targets'");
 
@@ -1910,8 +1584,6 @@
     InstructionDesc[OpCopyMemorySized].operands.push(OperandId, "'Size'");
     InstructionDesc[OpCopyMemorySized].operands.push(OperandMemoryAccess, "", true);
 
-    InstructionDesc[OpCopyMemorySized].capabilities.push_back(CapabilityAddresses);
-
     InstructionDesc[OpSampledImage].operands.push(OperandId, "'Image'");
     InstructionDesc[OpSampledImage].operands.push(OperandId, "'Sampler'");
 
@@ -1932,7 +1604,6 @@
     InstructionDesc[OpImageSampleImplicitLod].operands.push(OperandId, "'Coordinate'");
     InstructionDesc[OpImageSampleImplicitLod].operands.push(OperandImageOperands, "", true);
     InstructionDesc[OpImageSampleImplicitLod].operands.push(OperandVariableIds, "", true);
-    InstructionDesc[OpImageSampleImplicitLod].capabilities.push_back(CapabilityShader);
 
     InstructionDesc[OpImageSampleExplicitLod].operands.push(OperandId, "'Sampled Image'");
     InstructionDesc[OpImageSampleExplicitLod].operands.push(OperandId, "'Coordinate'");
@@ -1944,40 +1615,34 @@
     InstructionDesc[OpImageSampleDrefImplicitLod].operands.push(OperandId, "'D~ref~'");
     InstructionDesc[OpImageSampleDrefImplicitLod].operands.push(OperandImageOperands, "", true);
     InstructionDesc[OpImageSampleDrefImplicitLod].operands.push(OperandVariableIds, "", true);
-    InstructionDesc[OpImageSampleDrefImplicitLod].capabilities.push_back(CapabilityShader);
 
     InstructionDesc[OpImageSampleDrefExplicitLod].operands.push(OperandId, "'Sampled Image'");
     InstructionDesc[OpImageSampleDrefExplicitLod].operands.push(OperandId, "'Coordinate'");
     InstructionDesc[OpImageSampleDrefExplicitLod].operands.push(OperandId, "'D~ref~'");
     InstructionDesc[OpImageSampleDrefExplicitLod].operands.push(OperandImageOperands, "", true);
     InstructionDesc[OpImageSampleDrefExplicitLod].operands.push(OperandVariableIds, "", true);
-    InstructionDesc[OpImageSampleDrefExplicitLod].capabilities.push_back(CapabilityShader);
 
     InstructionDesc[OpImageSampleProjImplicitLod].operands.push(OperandId, "'Sampled Image'");
     InstructionDesc[OpImageSampleProjImplicitLod].operands.push(OperandId, "'Coordinate'");
     InstructionDesc[OpImageSampleProjImplicitLod].operands.push(OperandImageOperands, "", true);
     InstructionDesc[OpImageSampleProjImplicitLod].operands.push(OperandVariableIds, "", true);
-    InstructionDesc[OpImageSampleProjImplicitLod].capabilities.push_back(CapabilityShader);
 
     InstructionDesc[OpImageSampleProjExplicitLod].operands.push(OperandId, "'Sampled Image'");
     InstructionDesc[OpImageSampleProjExplicitLod].operands.push(OperandId, "'Coordinate'");
     InstructionDesc[OpImageSampleProjExplicitLod].operands.push(OperandImageOperands, "", true);
     InstructionDesc[OpImageSampleProjExplicitLod].operands.push(OperandVariableIds, "", true);
-    InstructionDesc[OpImageSampleProjExplicitLod].capabilities.push_back(CapabilityShader);
 
     InstructionDesc[OpImageSampleProjDrefImplicitLod].operands.push(OperandId, "'Sampled Image'");
     InstructionDesc[OpImageSampleProjDrefImplicitLod].operands.push(OperandId, "'Coordinate'");
     InstructionDesc[OpImageSampleProjDrefImplicitLod].operands.push(OperandId, "'D~ref~'");
     InstructionDesc[OpImageSampleProjDrefImplicitLod].operands.push(OperandImageOperands, "", true);
     InstructionDesc[OpImageSampleProjDrefImplicitLod].operands.push(OperandVariableIds, "", true);
-    InstructionDesc[OpImageSampleProjDrefImplicitLod].capabilities.push_back(CapabilityShader);
 
     InstructionDesc[OpImageSampleProjDrefExplicitLod].operands.push(OperandId, "'Sampled Image'");
     InstructionDesc[OpImageSampleProjDrefExplicitLod].operands.push(OperandId, "'Coordinate'");
     InstructionDesc[OpImageSampleProjDrefExplicitLod].operands.push(OperandId, "'D~ref~'");
     InstructionDesc[OpImageSampleProjDrefExplicitLod].operands.push(OperandImageOperands, "", true);
     InstructionDesc[OpImageSampleProjDrefExplicitLod].operands.push(OperandVariableIds, "", true);
-    InstructionDesc[OpImageSampleProjDrefExplicitLod].capabilities.push_back(CapabilityShader);
 
     InstructionDesc[OpImageFetch].operands.push(OperandId, "'Image'");
     InstructionDesc[OpImageFetch].operands.push(OperandId, "'Coordinate'");
@@ -1989,122 +1654,96 @@
     InstructionDesc[OpImageGather].operands.push(OperandId, "'Component'");
     InstructionDesc[OpImageGather].operands.push(OperandImageOperands, "", true);
     InstructionDesc[OpImageGather].operands.push(OperandVariableIds, "", true);
-    InstructionDesc[OpImageGather].capabilities.push_back(CapabilityShader);
 
     InstructionDesc[OpImageDrefGather].operands.push(OperandId, "'Sampled Image'");
     InstructionDesc[OpImageDrefGather].operands.push(OperandId, "'Coordinate'");
     InstructionDesc[OpImageDrefGather].operands.push(OperandId, "'D~ref~'");
     InstructionDesc[OpImageDrefGather].operands.push(OperandImageOperands, "", true);
     InstructionDesc[OpImageDrefGather].operands.push(OperandVariableIds, "", true);
-    InstructionDesc[OpImageDrefGather].capabilities.push_back(CapabilityShader);
 
     InstructionDesc[OpImageSparseSampleImplicitLod].operands.push(OperandId, "'Sampled Image'");
     InstructionDesc[OpImageSparseSampleImplicitLod].operands.push(OperandId, "'Coordinate'");
     InstructionDesc[OpImageSparseSampleImplicitLod].operands.push(OperandImageOperands, "", true);
     InstructionDesc[OpImageSparseSampleImplicitLod].operands.push(OperandVariableIds, "", true);
-    InstructionDesc[OpImageSparseSampleImplicitLod].capabilities.push_back(CapabilitySparseResidency);
 
     InstructionDesc[OpImageSparseSampleExplicitLod].operands.push(OperandId, "'Sampled Image'");
     InstructionDesc[OpImageSparseSampleExplicitLod].operands.push(OperandId, "'Coordinate'");
     InstructionDesc[OpImageSparseSampleExplicitLod].operands.push(OperandImageOperands, "", true);
     InstructionDesc[OpImageSparseSampleExplicitLod].operands.push(OperandVariableIds, "", true);
-    InstructionDesc[OpImageSparseSampleExplicitLod].capabilities.push_back(CapabilitySparseResidency);
 
     InstructionDesc[OpImageSparseSampleDrefImplicitLod].operands.push(OperandId, "'Sampled Image'");
     InstructionDesc[OpImageSparseSampleDrefImplicitLod].operands.push(OperandId, "'Coordinate'");
     InstructionDesc[OpImageSparseSampleDrefImplicitLod].operands.push(OperandId, "'D~ref~'");
     InstructionDesc[OpImageSparseSampleDrefImplicitLod].operands.push(OperandImageOperands, "", true);
     InstructionDesc[OpImageSparseSampleDrefImplicitLod].operands.push(OperandVariableIds, "", true);
-    InstructionDesc[OpImageSparseSampleDrefImplicitLod].capabilities.push_back(CapabilitySparseResidency);
 
     InstructionDesc[OpImageSparseSampleDrefExplicitLod].operands.push(OperandId, "'Sampled Image'");
     InstructionDesc[OpImageSparseSampleDrefExplicitLod].operands.push(OperandId, "'Coordinate'");
     InstructionDesc[OpImageSparseSampleDrefExplicitLod].operands.push(OperandId, "'D~ref~'");
     InstructionDesc[OpImageSparseSampleDrefExplicitLod].operands.push(OperandImageOperands, "", true);
     InstructionDesc[OpImageSparseSampleDrefExplicitLod].operands.push(OperandVariableIds, "", true);
-    InstructionDesc[OpImageSparseSampleDrefExplicitLod].capabilities.push_back(CapabilitySparseResidency);
 
     InstructionDesc[OpImageSparseSampleProjImplicitLod].operands.push(OperandId, "'Sampled Image'");
     InstructionDesc[OpImageSparseSampleProjImplicitLod].operands.push(OperandId, "'Coordinate'");
     InstructionDesc[OpImageSparseSampleProjImplicitLod].operands.push(OperandImageOperands, "", true);
     InstructionDesc[OpImageSparseSampleProjImplicitLod].operands.push(OperandVariableIds, "", true);
-    InstructionDesc[OpImageSparseSampleProjImplicitLod].capabilities.push_back(CapabilitySparseResidency);
 
     InstructionDesc[OpImageSparseSampleProjExplicitLod].operands.push(OperandId, "'Sampled Image'");
     InstructionDesc[OpImageSparseSampleProjExplicitLod].operands.push(OperandId, "'Coordinate'");
     InstructionDesc[OpImageSparseSampleProjExplicitLod].operands.push(OperandImageOperands, "", true);
     InstructionDesc[OpImageSparseSampleProjExplicitLod].operands.push(OperandVariableIds, "", true);
-    InstructionDesc[OpImageSparseSampleProjExplicitLod].capabilities.push_back(CapabilitySparseResidency);
 
     InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].operands.push(OperandId, "'Sampled Image'");
     InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].operands.push(OperandId, "'Coordinate'");
     InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].operands.push(OperandId, "'D~ref~'");
     InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].operands.push(OperandImageOperands, "", true);
     InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].operands.push(OperandVariableIds, "", true);
-    InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].capabilities.push_back(CapabilitySparseResidency);
 
     InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].operands.push(OperandId, "'Sampled Image'");
     InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].operands.push(OperandId, "'Coordinate'");
     InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].operands.push(OperandId, "'D~ref~'");
     InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].operands.push(OperandImageOperands, "", true);
     InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].operands.push(OperandVariableIds, "", true);
-    InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].capabilities.push_back(CapabilitySparseResidency);
 
     InstructionDesc[OpImageSparseFetch].operands.push(OperandId, "'Image'");
     InstructionDesc[OpImageSparseFetch].operands.push(OperandId, "'Coordinate'");
     InstructionDesc[OpImageSparseFetch].operands.push(OperandImageOperands, "", true);
     InstructionDesc[OpImageSparseFetch].operands.push(OperandVariableIds, "", true);
-    InstructionDesc[OpImageSparseFetch].capabilities.push_back(CapabilitySparseResidency);
 
     InstructionDesc[OpImageSparseGather].operands.push(OperandId, "'Sampled Image'");
     InstructionDesc[OpImageSparseGather].operands.push(OperandId, "'Coordinate'");
     InstructionDesc[OpImageSparseGather].operands.push(OperandId, "'Component'");
     InstructionDesc[OpImageSparseGather].operands.push(OperandImageOperands, "", true);
     InstructionDesc[OpImageSparseGather].operands.push(OperandVariableIds, "", true);
-    InstructionDesc[OpImageSparseGather].capabilities.push_back(CapabilitySparseResidency);
 
     InstructionDesc[OpImageSparseDrefGather].operands.push(OperandId, "'Sampled Image'");
     InstructionDesc[OpImageSparseDrefGather].operands.push(OperandId, "'Coordinate'");
     InstructionDesc[OpImageSparseDrefGather].operands.push(OperandId, "'D~ref~'");
     InstructionDesc[OpImageSparseDrefGather].operands.push(OperandImageOperands, "", true);
     InstructionDesc[OpImageSparseDrefGather].operands.push(OperandVariableIds, "", true);
-    InstructionDesc[OpImageSparseDrefGather].capabilities.push_back(CapabilitySparseResidency);
 
     InstructionDesc[OpImageSparseRead].operands.push(OperandId, "'Image'");
     InstructionDesc[OpImageSparseRead].operands.push(OperandId, "'Coordinate'");
     InstructionDesc[OpImageSparseRead].operands.push(OperandImageOperands, "", true);
     InstructionDesc[OpImageSparseRead].operands.push(OperandVariableIds, "", true);
-    InstructionDesc[OpImageSparseRead].capabilities.push_back(CapabilitySparseResidency);
 
     InstructionDesc[OpImageSparseTexelsResident].operands.push(OperandId, "'Resident Code'");
-    InstructionDesc[OpImageSparseTexelsResident].capabilities.push_back(CapabilitySparseResidency);
 
     InstructionDesc[OpImageQuerySizeLod].operands.push(OperandId, "'Image'");
     InstructionDesc[OpImageQuerySizeLod].operands.push(OperandId, "'Level of Detail'");
-    InstructionDesc[OpImageQuerySizeLod].capabilities.push_back(CapabilityKernel);
-    InstructionDesc[OpImageQuerySizeLod].capabilities.push_back(CapabilityImageQuery);
 
     InstructionDesc[OpImageQuerySize].operands.push(OperandId, "'Image'");
-    InstructionDesc[OpImageQuerySize].capabilities.push_back(CapabilityKernel);
-    InstructionDesc[OpImageQuerySize].capabilities.push_back(CapabilityImageQuery);
 
     InstructionDesc[OpImageQueryLod].operands.push(OperandId, "'Image'");
     InstructionDesc[OpImageQueryLod].operands.push(OperandId, "'Coordinate'");
-    InstructionDesc[OpImageQueryLod].capabilities.push_back(CapabilityImageQuery);
 
     InstructionDesc[OpImageQueryLevels].operands.push(OperandId, "'Image'");
-    InstructionDesc[OpImageQueryLevels].capabilities.push_back(CapabilityKernel);
-    InstructionDesc[OpImageQueryLevels].capabilities.push_back(CapabilityImageQuery);
 
     InstructionDesc[OpImageQuerySamples].operands.push(OperandId, "'Image'");
-    InstructionDesc[OpImageQuerySamples].capabilities.push_back(CapabilityKernel);
-    InstructionDesc[OpImageQuerySamples].capabilities.push_back(CapabilityImageQuery);
 
     InstructionDesc[OpImageQueryFormat].operands.push(OperandId, "'Image'");
-    InstructionDesc[OpImageQueryFormat].capabilities.push_back(CapabilityKernel);
 
     InstructionDesc[OpImageQueryOrder].operands.push(OperandId, "'Image'");
-    InstructionDesc[OpImageQueryOrder].capabilities.push_back(CapabilityKernel);
 
     InstructionDesc[OpAccessChain].operands.push(OperandId, "'Base'");
     InstructionDesc[OpAccessChain].operands.push(OperandVariableIds, "'Indexes'");
@@ -2115,12 +1754,10 @@
     InstructionDesc[OpPtrAccessChain].operands.push(OperandId, "'Base'");
     InstructionDesc[OpPtrAccessChain].operands.push(OperandId, "'Element'");
     InstructionDesc[OpPtrAccessChain].operands.push(OperandVariableIds, "'Indexes'");
-    InstructionDesc[OpPtrAccessChain].capabilities.push_back(CapabilityAddresses);
 
     InstructionDesc[OpInBoundsPtrAccessChain].operands.push(OperandId, "'Base'");
     InstructionDesc[OpInBoundsPtrAccessChain].operands.push(OperandId, "'Element'");
     InstructionDesc[OpInBoundsPtrAccessChain].operands.push(OperandVariableIds, "'Indexes'");
-    InstructionDesc[OpInBoundsPtrAccessChain].capabilities.push_back(CapabilityAddresses);
 
     InstructionDesc[OpSNegate].operands.push(OperandId, "'Operand'");
 
@@ -2147,65 +1784,49 @@
     InstructionDesc[OpFConvert].operands.push(OperandId, "'Float Value'");
 
     InstructionDesc[OpSatConvertSToU].operands.push(OperandId, "'Signed Value'");
-    InstructionDesc[OpSatConvertSToU].capabilities.push_back(CapabilityKernel);
 
     InstructionDesc[OpSatConvertUToS].operands.push(OperandId, "'Unsigned Value'");
-    InstructionDesc[OpSatConvertUToS].capabilities.push_back(CapabilityKernel);
 
     InstructionDesc[OpConvertPtrToU].operands.push(OperandId, "'Pointer'");
-    InstructionDesc[OpConvertPtrToU].capabilities.push_back(CapabilityAddresses);
 
     InstructionDesc[OpConvertUToPtr].operands.push(OperandId, "'Integer Value'");
-    InstructionDesc[OpConvertUToPtr].capabilities.push_back(CapabilityAddresses);
 
     InstructionDesc[OpPtrCastToGeneric].operands.push(OperandId, "'Pointer'");
-    InstructionDesc[OpPtrCastToGeneric].capabilities.push_back(CapabilityKernel);
 
     InstructionDesc[OpGenericCastToPtr].operands.push(OperandId, "'Pointer'");
-    InstructionDesc[OpGenericCastToPtr].capabilities.push_back(CapabilityKernel);
 
     InstructionDesc[OpGenericCastToPtrExplicit].operands.push(OperandId, "'Pointer'");
     InstructionDesc[OpGenericCastToPtrExplicit].operands.push(OperandStorage, "'Storage'");
-    InstructionDesc[OpGenericCastToPtrExplicit].capabilities.push_back(CapabilityKernel);
 
     InstructionDesc[OpGenericPtrMemSemantics].operands.push(OperandId, "'Pointer'");
-    InstructionDesc[OpGenericPtrMemSemantics].capabilities.push_back(CapabilityKernel);
 
     InstructionDesc[OpBitcast].operands.push(OperandId, "'Operand'");
 
     InstructionDesc[OpQuantizeToF16].operands.push(OperandId, "'Value'");
 
-    InstructionDesc[OpTranspose].capabilities.push_back(CapabilityMatrix);
     InstructionDesc[OpTranspose].operands.push(OperandId, "'Matrix'");
 
     InstructionDesc[OpIsNan].operands.push(OperandId, "'x'");
 
     InstructionDesc[OpIsInf].operands.push(OperandId, "'x'");
 
-    InstructionDesc[OpIsFinite].capabilities.push_back(CapabilityKernel);
     InstructionDesc[OpIsFinite].operands.push(OperandId, "'x'");
 
-    InstructionDesc[OpIsNormal].capabilities.push_back(CapabilityKernel);
     InstructionDesc[OpIsNormal].operands.push(OperandId, "'x'");
 
-    InstructionDesc[OpSignBitSet].capabilities.push_back(CapabilityKernel);
     InstructionDesc[OpSignBitSet].operands.push(OperandId, "'x'");
 
-    InstructionDesc[OpLessOrGreater].capabilities.push_back(CapabilityKernel);
     InstructionDesc[OpLessOrGreater].operands.push(OperandId, "'x'");
     InstructionDesc[OpLessOrGreater].operands.push(OperandId, "'y'");
 
-    InstructionDesc[OpOrdered].capabilities.push_back(CapabilityKernel);
     InstructionDesc[OpOrdered].operands.push(OperandId, "'x'");
     InstructionDesc[OpOrdered].operands.push(OperandId, "'y'");
 
-    InstructionDesc[OpUnordered].capabilities.push_back(CapabilityKernel);
     InstructionDesc[OpUnordered].operands.push(OperandId, "'x'");
     InstructionDesc[OpUnordered].operands.push(OperandId, "'y'");
 
     InstructionDesc[OpArrayLength].operands.push(OperandId, "'Structure'");
     InstructionDesc[OpArrayLength].operands.push(OperandLiteralNumber, "'Array member'");
-    InstructionDesc[OpArrayLength].capabilities.push_back(CapabilityShader);
 
     InstructionDesc[OpIAdd].operands.push(OperandId, "'Operand 1'");
     InstructionDesc[OpIAdd].operands.push(OperandId, "'Operand 2'");
@@ -2252,23 +1873,18 @@
     InstructionDesc[OpVectorTimesScalar].operands.push(OperandId, "'Vector'");
     InstructionDesc[OpVectorTimesScalar].operands.push(OperandId, "'Scalar'");
 
-    InstructionDesc[OpMatrixTimesScalar].capabilities.push_back(CapabilityMatrix);
     InstructionDesc[OpMatrixTimesScalar].operands.push(OperandId, "'Matrix'");
     InstructionDesc[OpMatrixTimesScalar].operands.push(OperandId, "'Scalar'");
 
-    InstructionDesc[OpVectorTimesMatrix].capabilities.push_back(CapabilityMatrix);
     InstructionDesc[OpVectorTimesMatrix].operands.push(OperandId, "'Vector'");
     InstructionDesc[OpVectorTimesMatrix].operands.push(OperandId, "'Matrix'");
 
-    InstructionDesc[OpMatrixTimesVector].capabilities.push_back(CapabilityMatrix);
     InstructionDesc[OpMatrixTimesVector].operands.push(OperandId, "'Matrix'");
     InstructionDesc[OpMatrixTimesVector].operands.push(OperandId, "'Vector'");
 
-    InstructionDesc[OpMatrixTimesMatrix].capabilities.push_back(CapabilityMatrix);
     InstructionDesc[OpMatrixTimesMatrix].operands.push(OperandId, "'LeftMatrix'");
     InstructionDesc[OpMatrixTimesMatrix].operands.push(OperandId, "'RightMatrix'");
 
-    InstructionDesc[OpOuterProduct].capabilities.push_back(CapabilityMatrix);
     InstructionDesc[OpOuterProduct].operands.push(OperandId, "'Vector 1'");
     InstructionDesc[OpOuterProduct].operands.push(OperandId, "'Vector 2'");
 
@@ -2319,23 +1935,19 @@
     InstructionDesc[OpBitwiseAnd].operands.push(OperandId, "'Operand 1'");
     InstructionDesc[OpBitwiseAnd].operands.push(OperandId, "'Operand 2'");
 
-    InstructionDesc[OpBitFieldInsert].capabilities.push_back(CapabilityShader);
     InstructionDesc[OpBitFieldInsert].operands.push(OperandId, "'Base'");
     InstructionDesc[OpBitFieldInsert].operands.push(OperandId, "'Insert'");
     InstructionDesc[OpBitFieldInsert].operands.push(OperandId, "'Offset'");
     InstructionDesc[OpBitFieldInsert].operands.push(OperandId, "'Count'");
-    
-    InstructionDesc[OpBitFieldSExtract].capabilities.push_back(CapabilityShader);
+
     InstructionDesc[OpBitFieldSExtract].operands.push(OperandId, "'Base'");
     InstructionDesc[OpBitFieldSExtract].operands.push(OperandId, "'Offset'");
     InstructionDesc[OpBitFieldSExtract].operands.push(OperandId, "'Count'");
     
-    InstructionDesc[OpBitFieldUExtract].capabilities.push_back(CapabilityShader);
     InstructionDesc[OpBitFieldUExtract].operands.push(OperandId, "'Base'");
     InstructionDesc[OpBitFieldUExtract].operands.push(OperandId, "'Offset'");
     InstructionDesc[OpBitFieldUExtract].operands.push(OperandId, "'Count'");
     
-    InstructionDesc[OpBitReverse].capabilities.push_back(CapabilityShader);
     InstructionDesc[OpBitReverse].operands.push(OperandId, "'Base'");
 
     InstructionDesc[OpBitCount].operands.push(OperandId, "'Base'");
@@ -2410,42 +2022,27 @@
     InstructionDesc[OpFUnordGreaterThanEqual].operands.push(OperandId, "'Operand 1'");
     InstructionDesc[OpFUnordGreaterThanEqual].operands.push(OperandId, "'Operand 2'");
 
-    InstructionDesc[OpDPdx].capabilities.push_back(CapabilityShader);
     InstructionDesc[OpDPdx].operands.push(OperandId, "'P'");
 
-    InstructionDesc[OpDPdy].capabilities.push_back(CapabilityShader);
     InstructionDesc[OpDPdy].operands.push(OperandId, "'P'");
 
-    InstructionDesc[OpFwidth].capabilities.push_back(CapabilityShader);
     InstructionDesc[OpFwidth].operands.push(OperandId, "'P'");
 
-    InstructionDesc[OpDPdxFine].capabilities.push_back(CapabilityDerivativeControl);
     InstructionDesc[OpDPdxFine].operands.push(OperandId, "'P'");
 
-    InstructionDesc[OpDPdyFine].capabilities.push_back(CapabilityDerivativeControl);
     InstructionDesc[OpDPdyFine].operands.push(OperandId, "'P'");
 
-    InstructionDesc[OpFwidthFine].capabilities.push_back(CapabilityDerivativeControl);
     InstructionDesc[OpFwidthFine].operands.push(OperandId, "'P'");
 
-    InstructionDesc[OpDPdxCoarse].capabilities.push_back(CapabilityDerivativeControl);
     InstructionDesc[OpDPdxCoarse].operands.push(OperandId, "'P'");
 
-    InstructionDesc[OpDPdyCoarse].capabilities.push_back(CapabilityDerivativeControl);
     InstructionDesc[OpDPdyCoarse].operands.push(OperandId, "'P'");
 
-    InstructionDesc[OpFwidthCoarse].capabilities.push_back(CapabilityDerivativeControl);
     InstructionDesc[OpFwidthCoarse].operands.push(OperandId, "'P'");
 
-    InstructionDesc[OpEmitVertex].capabilities.push_back(CapabilityGeometry);
-
-    InstructionDesc[OpEndPrimitive].capabilities.push_back(CapabilityGeometry);
-
     InstructionDesc[OpEmitStreamVertex].operands.push(OperandId, "'Stream'");
-    InstructionDesc[OpEmitStreamVertex].capabilities.push_back(CapabilityGeometryStreams);
 
     InstructionDesc[OpEndStreamPrimitive].operands.push(OperandId, "'Stream'");
-    InstructionDesc[OpEndStreamPrimitive].capabilities.push_back(CapabilityGeometryStreams);
 
     InstructionDesc[OpControlBarrier].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpControlBarrier].operands.push(OperandScope, "'Memory'");
@@ -2485,7 +2082,6 @@
     InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandMemorySemantics, "'Unequal'");
     InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandId, "'Value'");
     InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandId, "'Comparator'");
-    InstructionDesc[OpAtomicCompareExchangeWeak].capabilities.push_back(CapabilityKernel);
 
     InstructionDesc[OpAtomicIIncrement].operands.push(OperandId, "'Pointer'");
     InstructionDesc[OpAtomicIIncrement].operands.push(OperandScope, "'Scope'");
@@ -2543,16 +2139,15 @@
     InstructionDesc[OpAtomicFlagTestAndSet].operands.push(OperandId, "'Pointer'");
     InstructionDesc[OpAtomicFlagTestAndSet].operands.push(OperandScope, "'Scope'");
     InstructionDesc[OpAtomicFlagTestAndSet].operands.push(OperandMemorySemantics, "'Semantics'");
-    InstructionDesc[OpAtomicFlagTestAndSet].capabilities.push_back(CapabilityKernel);
 
     InstructionDesc[OpAtomicFlagClear].operands.push(OperandId, "'Pointer'");
     InstructionDesc[OpAtomicFlagClear].operands.push(OperandScope, "'Scope'");
     InstructionDesc[OpAtomicFlagClear].operands.push(OperandMemorySemantics, "'Semantics'");
-    InstructionDesc[OpAtomicFlagClear].capabilities.push_back(CapabilityKernel);
 
     InstructionDesc[OpLoopMerge].operands.push(OperandId, "'Merge Block'");
     InstructionDesc[OpLoopMerge].operands.push(OperandId, "'Continue Target'");
     InstructionDesc[OpLoopMerge].operands.push(OperandLoop, "");
+    InstructionDesc[OpLoopMerge].operands.push(OperandOptionalLiteral, "");
 
     InstructionDesc[OpSelectionMerge].operands.push(OperandId, "'Merge Block'");
     InstructionDesc[OpSelectionMerge].operands.push(OperandSelect, "");
@@ -2568,19 +2163,15 @@
     InstructionDesc[OpSwitch].operands.push(OperandId, "'Default'");
     InstructionDesc[OpSwitch].operands.push(OperandVariableLiteralId, "'Target'");
 
-    InstructionDesc[OpKill].capabilities.push_back(CapabilityShader);
 
     InstructionDesc[OpReturnValue].operands.push(OperandId, "'Value'");
 
     InstructionDesc[OpLifetimeStart].operands.push(OperandId, "'Pointer'");
     InstructionDesc[OpLifetimeStart].operands.push(OperandLiteralNumber, "'Size'");
-    InstructionDesc[OpLifetimeStart].capabilities.push_back(CapabilityKernel);
 
     InstructionDesc[OpLifetimeStop].operands.push(OperandId, "'Pointer'");
     InstructionDesc[OpLifetimeStop].operands.push(OperandLiteralNumber, "'Size'");
-    InstructionDesc[OpLifetimeStop].capabilities.push_back(CapabilityKernel);
 
-    InstructionDesc[OpGroupAsyncCopy].capabilities.push_back(CapabilityKernel);
     InstructionDesc[OpGroupAsyncCopy].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupAsyncCopy].operands.push(OperandId, "'Destination'");
     InstructionDesc[OpGroupAsyncCopy].operands.push(OperandId, "'Source'");
@@ -2588,77 +2179,62 @@
     InstructionDesc[OpGroupAsyncCopy].operands.push(OperandId, "'Stride'");
     InstructionDesc[OpGroupAsyncCopy].operands.push(OperandId, "'Event'");
 
-    InstructionDesc[OpGroupWaitEvents].capabilities.push_back(CapabilityKernel);
     InstructionDesc[OpGroupWaitEvents].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupWaitEvents].operands.push(OperandId, "'Num Events'");
     InstructionDesc[OpGroupWaitEvents].operands.push(OperandId, "'Events List'");
 
-    InstructionDesc[OpGroupAll].capabilities.push_back(CapabilityGroups);
     InstructionDesc[OpGroupAll].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupAll].operands.push(OperandId, "'Predicate'");
 
-    InstructionDesc[OpGroupAny].capabilities.push_back(CapabilityGroups);
     InstructionDesc[OpGroupAny].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupAny].operands.push(OperandId, "'Predicate'");
 
-    InstructionDesc[OpGroupBroadcast].capabilities.push_back(CapabilityGroups);
     InstructionDesc[OpGroupBroadcast].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupBroadcast].operands.push(OperandId, "'Value'");
     InstructionDesc[OpGroupBroadcast].operands.push(OperandId, "'LocalId'");
 
-    InstructionDesc[OpGroupIAdd].capabilities.push_back(CapabilityGroups);
     InstructionDesc[OpGroupIAdd].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupIAdd].operands.push(OperandGroupOperation, "'Operation'");
     InstructionDesc[OpGroupIAdd].operands.push(OperandId, "'X'");
 
-    InstructionDesc[OpGroupFAdd].capabilities.push_back(CapabilityGroups);
     InstructionDesc[OpGroupFAdd].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupFAdd].operands.push(OperandGroupOperation, "'Operation'");
     InstructionDesc[OpGroupFAdd].operands.push(OperandId, "'X'");
 
-    InstructionDesc[OpGroupUMin].capabilities.push_back(CapabilityGroups);
     InstructionDesc[OpGroupUMin].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupUMin].operands.push(OperandGroupOperation, "'Operation'");
     InstructionDesc[OpGroupUMin].operands.push(OperandId, "'X'");
 
-    InstructionDesc[OpGroupSMin].capabilities.push_back(CapabilityGroups);
     InstructionDesc[OpGroupSMin].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupSMin].operands.push(OperandGroupOperation, "'Operation'");
     InstructionDesc[OpGroupSMin].operands.push(OperandId, "X");
 
-    InstructionDesc[OpGroupFMin].capabilities.push_back(CapabilityGroups);
     InstructionDesc[OpGroupFMin].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupFMin].operands.push(OperandGroupOperation, "'Operation'");
     InstructionDesc[OpGroupFMin].operands.push(OperandId, "X");
 
-    InstructionDesc[OpGroupUMax].capabilities.push_back(CapabilityGroups);
     InstructionDesc[OpGroupUMax].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupUMax].operands.push(OperandGroupOperation, "'Operation'");
     InstructionDesc[OpGroupUMax].operands.push(OperandId, "X");
 
-    InstructionDesc[OpGroupSMax].capabilities.push_back(CapabilityGroups);
     InstructionDesc[OpGroupSMax].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupSMax].operands.push(OperandGroupOperation, "'Operation'");
     InstructionDesc[OpGroupSMax].operands.push(OperandId, "X");
 
-    InstructionDesc[OpGroupFMax].capabilities.push_back(CapabilityGroups);
     InstructionDesc[OpGroupFMax].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupFMax].operands.push(OperandGroupOperation, "'Operation'");
     InstructionDesc[OpGroupFMax].operands.push(OperandId, "X");
 
-    InstructionDesc[OpReadPipe].capabilities.push_back(CapabilityPipes);
     InstructionDesc[OpReadPipe].operands.push(OperandId, "'Pipe'");
     InstructionDesc[OpReadPipe].operands.push(OperandId, "'Pointer'");
     InstructionDesc[OpReadPipe].operands.push(OperandId, "'Packet Size'");
     InstructionDesc[OpReadPipe].operands.push(OperandId, "'Packet Alignment'");
 
-    InstructionDesc[OpWritePipe].capabilities.push_back(CapabilityPipes);
     InstructionDesc[OpWritePipe].operands.push(OperandId, "'Pipe'");
     InstructionDesc[OpWritePipe].operands.push(OperandId, "'Pointer'");
     InstructionDesc[OpWritePipe].operands.push(OperandId, "'Packet Size'");
     InstructionDesc[OpWritePipe].operands.push(OperandId, "'Packet Alignment'");
 
-    InstructionDesc[OpReservedReadPipe].capabilities.push_back(CapabilityPipes);
     InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Pipe'");
     InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Reserve Id'");
     InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Index'");
@@ -2666,7 +2242,6 @@
     InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Packet Size'");
     InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Packet Alignment'");
 
-    InstructionDesc[OpReservedWritePipe].capabilities.push_back(CapabilityPipes);
     InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Pipe'");
     InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Reserve Id'");
     InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Index'");
@@ -2674,127 +2249,99 @@
     InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Packet Size'");
     InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Packet Alignment'");
 
-    InstructionDesc[OpReserveReadPipePackets].capabilities.push_back(CapabilityPipes);
     InstructionDesc[OpReserveReadPipePackets].operands.push(OperandId, "'Pipe'");
     InstructionDesc[OpReserveReadPipePackets].operands.push(OperandId, "'Num Packets'");
     InstructionDesc[OpReserveReadPipePackets].operands.push(OperandId, "'Packet Size'");
     InstructionDesc[OpReserveReadPipePackets].operands.push(OperandId, "'Packet Alignment'");
 
-    InstructionDesc[OpReserveWritePipePackets].capabilities.push_back(CapabilityPipes);
     InstructionDesc[OpReserveWritePipePackets].operands.push(OperandId, "'Pipe'");
     InstructionDesc[OpReserveWritePipePackets].operands.push(OperandId, "'Num Packets'");
     InstructionDesc[OpReserveWritePipePackets].operands.push(OperandId, "'Packet Size'");
     InstructionDesc[OpReserveWritePipePackets].operands.push(OperandId, "'Packet Alignment'");
 
-    InstructionDesc[OpCommitReadPipe].capabilities.push_back(CapabilityPipes);
     InstructionDesc[OpCommitReadPipe].operands.push(OperandId, "'Pipe'");
     InstructionDesc[OpCommitReadPipe].operands.push(OperandId, "'Reserve Id'");
     InstructionDesc[OpCommitReadPipe].operands.push(OperandId, "'Packet Size'");
     InstructionDesc[OpCommitReadPipe].operands.push(OperandId, "'Packet Alignment'");
 
-    InstructionDesc[OpCommitWritePipe].capabilities.push_back(CapabilityPipes);
     InstructionDesc[OpCommitWritePipe].operands.push(OperandId, "'Pipe'");
     InstructionDesc[OpCommitWritePipe].operands.push(OperandId, "'Reserve Id'");
     InstructionDesc[OpCommitWritePipe].operands.push(OperandId, "'Packet Size'");
     InstructionDesc[OpCommitWritePipe].operands.push(OperandId, "'Packet Alignment'");
 
-    InstructionDesc[OpIsValidReserveId].capabilities.push_back(CapabilityPipes);
     InstructionDesc[OpIsValidReserveId].operands.push(OperandId, "'Reserve Id'");
 
-    InstructionDesc[OpGetNumPipePackets].capabilities.push_back(CapabilityPipes);
     InstructionDesc[OpGetNumPipePackets].operands.push(OperandId, "'Pipe'");
     InstructionDesc[OpGetNumPipePackets].operands.push(OperandId, "'Packet Size'");
     InstructionDesc[OpGetNumPipePackets].operands.push(OperandId, "'Packet Alignment'");
 
-    InstructionDesc[OpGetMaxPipePackets].capabilities.push_back(CapabilityPipes);
     InstructionDesc[OpGetMaxPipePackets].operands.push(OperandId, "'Pipe'");
     InstructionDesc[OpGetMaxPipePackets].operands.push(OperandId, "'Packet Size'");
     InstructionDesc[OpGetMaxPipePackets].operands.push(OperandId, "'Packet Alignment'");
 
-    InstructionDesc[OpGroupReserveReadPipePackets].capabilities.push_back(CapabilityPipes);
     InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandId, "'Pipe'");
     InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandId, "'Num Packets'");
     InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandId, "'Packet Size'");
     InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandId, "'Packet Alignment'");
 
-    InstructionDesc[OpGroupReserveWritePipePackets].capabilities.push_back(CapabilityPipes);
     InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandId, "'Pipe'");
     InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandId, "'Num Packets'");
     InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandId, "'Packet Size'");
     InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandId, "'Packet Alignment'");
 
-    InstructionDesc[OpGroupCommitReadPipe].capabilities.push_back(CapabilityPipes);
     InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandId, "'Pipe'");
     InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandId, "'Reserve Id'");
     InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandId, "'Packet Size'");
     InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandId, "'Packet Alignment'");
 
-    InstructionDesc[OpGroupCommitWritePipe].capabilities.push_back(CapabilityPipes);
     InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandId, "'Pipe'");
     InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandId, "'Reserve Id'");
     InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandId, "'Packet Size'");
     InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandId, "'Packet Alignment'");
 
-    InstructionDesc[OpBuildNDRange].capabilities.push_back(CapabilityDeviceEnqueue);
     InstructionDesc[OpBuildNDRange].operands.push(OperandId, "'GlobalWorkSize'");
     InstructionDesc[OpBuildNDRange].operands.push(OperandId, "'LocalWorkSize'");
     InstructionDesc[OpBuildNDRange].operands.push(OperandId, "'GlobalWorkOffset'");
 
-    InstructionDesc[OpGetDefaultQueue].capabilities.push_back(CapabilityDeviceEnqueue);
-
-    InstructionDesc[OpCaptureEventProfilingInfo].capabilities.push_back(CapabilityDeviceEnqueue);
-
     InstructionDesc[OpCaptureEventProfilingInfo].operands.push(OperandId, "'Event'");
     InstructionDesc[OpCaptureEventProfilingInfo].operands.push(OperandId, "'Profiling Info'");
     InstructionDesc[OpCaptureEventProfilingInfo].operands.push(OperandId, "'Value'");
 
-    InstructionDesc[OpSetUserEventStatus].capabilities.push_back(CapabilityDeviceEnqueue);
-
     InstructionDesc[OpSetUserEventStatus].operands.push(OperandId, "'Event'");
     InstructionDesc[OpSetUserEventStatus].operands.push(OperandId, "'Status'");
 
-    InstructionDesc[OpIsValidEvent].capabilities.push_back(CapabilityDeviceEnqueue);
     InstructionDesc[OpIsValidEvent].operands.push(OperandId, "'Event'");
 
-    InstructionDesc[OpCreateUserEvent].capabilities.push_back(CapabilityDeviceEnqueue);
-
-    InstructionDesc[OpRetainEvent].capabilities.push_back(CapabilityDeviceEnqueue);
     InstructionDesc[OpRetainEvent].operands.push(OperandId, "'Event'");
 
-    InstructionDesc[OpReleaseEvent].capabilities.push_back(CapabilityDeviceEnqueue);
     InstructionDesc[OpReleaseEvent].operands.push(OperandId, "'Event'");
 
-    InstructionDesc[OpGetKernelWorkGroupSize].capabilities.push_back(CapabilityDeviceEnqueue);
     InstructionDesc[OpGetKernelWorkGroupSize].operands.push(OperandId, "'Invoke'");
     InstructionDesc[OpGetKernelWorkGroupSize].operands.push(OperandId, "'Param'");
     InstructionDesc[OpGetKernelWorkGroupSize].operands.push(OperandId, "'Param Size'");
     InstructionDesc[OpGetKernelWorkGroupSize].operands.push(OperandId, "'Param Align'");
 
-    InstructionDesc[OpGetKernelPreferredWorkGroupSizeMultiple].capabilities.push_back(CapabilityDeviceEnqueue);
     InstructionDesc[OpGetKernelPreferredWorkGroupSizeMultiple].operands.push(OperandId, "'Invoke'");
     InstructionDesc[OpGetKernelPreferredWorkGroupSizeMultiple].operands.push(OperandId, "'Param'");
     InstructionDesc[OpGetKernelPreferredWorkGroupSizeMultiple].operands.push(OperandId, "'Param Size'");
     InstructionDesc[OpGetKernelPreferredWorkGroupSizeMultiple].operands.push(OperandId, "'Param Align'");
 
-    InstructionDesc[OpGetKernelNDrangeSubGroupCount].capabilities.push_back(CapabilityDeviceEnqueue);
     InstructionDesc[OpGetKernelNDrangeSubGroupCount].operands.push(OperandId, "'ND Range'");
     InstructionDesc[OpGetKernelNDrangeSubGroupCount].operands.push(OperandId, "'Invoke'");
     InstructionDesc[OpGetKernelNDrangeSubGroupCount].operands.push(OperandId, "'Param'");
     InstructionDesc[OpGetKernelNDrangeSubGroupCount].operands.push(OperandId, "'Param Size'");
     InstructionDesc[OpGetKernelNDrangeSubGroupCount].operands.push(OperandId, "'Param Align'");
 
-    InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].capabilities.push_back(CapabilityDeviceEnqueue);
     InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].operands.push(OperandId, "'ND Range'");
     InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].operands.push(OperandId, "'Invoke'");
     InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].operands.push(OperandId, "'Param'");
     InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].operands.push(OperandId, "'Param Size'");
     InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].operands.push(OperandId, "'Param Align'");
 
-    InstructionDesc[OpEnqueueKernel].capabilities.push_back(CapabilityDeviceEnqueue);
     InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Queue'");
     InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Flags'");
     InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'ND Range'");
@@ -2807,82 +2354,215 @@
     InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Param Align'");
     InstructionDesc[OpEnqueueKernel].operands.push(OperandVariableIds, "'Local Size'");
 
-    InstructionDesc[OpEnqueueMarker].capabilities.push_back(CapabilityDeviceEnqueue);
     InstructionDesc[OpEnqueueMarker].operands.push(OperandId, "'Queue'");
     InstructionDesc[OpEnqueueMarker].operands.push(OperandId, "'Num Events'");
     InstructionDesc[OpEnqueueMarker].operands.push(OperandId, "'Wait Events'");
     InstructionDesc[OpEnqueueMarker].operands.push(OperandId, "'Ret Event'");
 
+    InstructionDesc[OpGroupNonUniformElect].operands.push(OperandScope, "'Execution'");
+
+    InstructionDesc[OpGroupNonUniformAll].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupNonUniformAll].operands.push(OperandId, "X");
+
+    InstructionDesc[OpGroupNonUniformAny].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupNonUniformAny].operands.push(OperandId, "X");
+
+    InstructionDesc[OpGroupNonUniformAllEqual].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupNonUniformAllEqual].operands.push(OperandId, "X");
+
+    InstructionDesc[OpGroupNonUniformBroadcast].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupNonUniformBroadcast].operands.push(OperandId, "X");
+    InstructionDesc[OpGroupNonUniformBroadcast].operands.push(OperandId, "ID");
+
+    InstructionDesc[OpGroupNonUniformBroadcastFirst].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupNonUniformBroadcastFirst].operands.push(OperandId, "X");
+
+    InstructionDesc[OpGroupNonUniformBallot].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupNonUniformBallot].operands.push(OperandId, "X");
+
+    InstructionDesc[OpGroupNonUniformInverseBallot].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupNonUniformInverseBallot].operands.push(OperandId, "X");
+
+    InstructionDesc[OpGroupNonUniformBallotBitExtract].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupNonUniformBallotBitExtract].operands.push(OperandId, "X");
+    InstructionDesc[OpGroupNonUniformBallotBitExtract].operands.push(OperandId, "Bit");
+
+    InstructionDesc[OpGroupNonUniformBallotBitCount].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupNonUniformBallotBitCount].operands.push(OperandGroupOperation, "'Operation'");
+    InstructionDesc[OpGroupNonUniformBallotBitCount].operands.push(OperandId, "X");
+
+    InstructionDesc[OpGroupNonUniformBallotFindLSB].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupNonUniformBallotFindLSB].operands.push(OperandId, "X");
+
+    InstructionDesc[OpGroupNonUniformBallotFindMSB].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupNonUniformBallotFindMSB].operands.push(OperandId, "X");
+
+    InstructionDesc[OpGroupNonUniformShuffle].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupNonUniformShuffle].operands.push(OperandId, "X");
+    InstructionDesc[OpGroupNonUniformShuffle].operands.push(OperandId, "'Id'");
+
+    InstructionDesc[OpGroupNonUniformShuffleXor].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupNonUniformShuffleXor].operands.push(OperandId, "X");
+    InstructionDesc[OpGroupNonUniformShuffleXor].operands.push(OperandId, "Mask");
+
+    InstructionDesc[OpGroupNonUniformShuffleUp].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupNonUniformShuffleUp].operands.push(OperandId, "X");
+    InstructionDesc[OpGroupNonUniformShuffleUp].operands.push(OperandId, "Offset");
+
+    InstructionDesc[OpGroupNonUniformShuffleDown].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupNonUniformShuffleDown].operands.push(OperandId, "X");
+    InstructionDesc[OpGroupNonUniformShuffleDown].operands.push(OperandId, "Offset");
+
+    InstructionDesc[OpGroupNonUniformIAdd].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupNonUniformIAdd].operands.push(OperandGroupOperation, "'Operation'");
+    InstructionDesc[OpGroupNonUniformIAdd].operands.push(OperandId, "X");
+    InstructionDesc[OpGroupNonUniformIAdd].operands.push(OperandId, "'ClusterSize'", true);
+
+    InstructionDesc[OpGroupNonUniformFAdd].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupNonUniformFAdd].operands.push(OperandGroupOperation, "'Operation'");
+    InstructionDesc[OpGroupNonUniformFAdd].operands.push(OperandId, "X");
+    InstructionDesc[OpGroupNonUniformFAdd].operands.push(OperandId, "'ClusterSize'", true);
+
+    InstructionDesc[OpGroupNonUniformIMul].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupNonUniformIMul].operands.push(OperandGroupOperation, "'Operation'");
+    InstructionDesc[OpGroupNonUniformIMul].operands.push(OperandId, "X");
+    InstructionDesc[OpGroupNonUniformIMul].operands.push(OperandId, "'ClusterSize'", true);
+
+    InstructionDesc[OpGroupNonUniformFMul].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupNonUniformFMul].operands.push(OperandGroupOperation, "'Operation'");
+    InstructionDesc[OpGroupNonUniformFMul].operands.push(OperandId, "X");
+    InstructionDesc[OpGroupNonUniformFMul].operands.push(OperandId, "'ClusterSize'", true);
+
+    InstructionDesc[OpGroupNonUniformSMin].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupNonUniformSMin].operands.push(OperandGroupOperation, "'Operation'");
+    InstructionDesc[OpGroupNonUniformSMin].operands.push(OperandId, "X");
+    InstructionDesc[OpGroupNonUniformSMin].operands.push(OperandId, "'ClusterSize'", true);
+
+    InstructionDesc[OpGroupNonUniformUMin].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupNonUniformUMin].operands.push(OperandGroupOperation, "'Operation'");
+    InstructionDesc[OpGroupNonUniformUMin].operands.push(OperandId, "X");
+    InstructionDesc[OpGroupNonUniformUMin].operands.push(OperandId, "'ClusterSize'", true);
+
+    InstructionDesc[OpGroupNonUniformFMin].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupNonUniformFMin].operands.push(OperandGroupOperation, "'Operation'");
+    InstructionDesc[OpGroupNonUniformFMin].operands.push(OperandId, "X");
+    InstructionDesc[OpGroupNonUniformFMin].operands.push(OperandId, "'ClusterSize'", true);
+
+    InstructionDesc[OpGroupNonUniformSMax].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupNonUniformSMax].operands.push(OperandGroupOperation, "'Operation'");
+    InstructionDesc[OpGroupNonUniformSMax].operands.push(OperandId, "X");
+    InstructionDesc[OpGroupNonUniformSMax].operands.push(OperandId, "'ClusterSize'", true);
+
+    InstructionDesc[OpGroupNonUniformUMax].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupNonUniformUMax].operands.push(OperandGroupOperation, "'Operation'");
+    InstructionDesc[OpGroupNonUniformUMax].operands.push(OperandId, "X");
+    InstructionDesc[OpGroupNonUniformUMax].operands.push(OperandId, "'ClusterSize'", true);
+
+    InstructionDesc[OpGroupNonUniformFMax].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupNonUniformFMax].operands.push(OperandGroupOperation, "'Operation'");
+    InstructionDesc[OpGroupNonUniformFMax].operands.push(OperandId, "X");
+    InstructionDesc[OpGroupNonUniformFMax].operands.push(OperandId, "'ClusterSize'", true);
+
+    InstructionDesc[OpGroupNonUniformBitwiseAnd].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupNonUniformBitwiseAnd].operands.push(OperandGroupOperation, "'Operation'");
+    InstructionDesc[OpGroupNonUniformBitwiseAnd].operands.push(OperandId, "X");
+    InstructionDesc[OpGroupNonUniformBitwiseAnd].operands.push(OperandId, "'ClusterSize'", true);
+
+    InstructionDesc[OpGroupNonUniformBitwiseOr].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupNonUniformBitwiseOr].operands.push(OperandGroupOperation, "'Operation'");
+    InstructionDesc[OpGroupNonUniformBitwiseOr].operands.push(OperandId, "X");
+    InstructionDesc[OpGroupNonUniformBitwiseOr].operands.push(OperandId, "'ClusterSize'", true);
+
+    InstructionDesc[OpGroupNonUniformBitwiseXor].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupNonUniformBitwiseXor].operands.push(OperandGroupOperation, "'Operation'");
+    InstructionDesc[OpGroupNonUniformBitwiseXor].operands.push(OperandId, "X");
+    InstructionDesc[OpGroupNonUniformBitwiseXor].operands.push(OperandId, "'ClusterSize'", true);
+
+    InstructionDesc[OpGroupNonUniformLogicalAnd].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupNonUniformLogicalAnd].operands.push(OperandGroupOperation, "'Operation'");
+    InstructionDesc[OpGroupNonUniformLogicalAnd].operands.push(OperandId, "X");
+    InstructionDesc[OpGroupNonUniformLogicalAnd].operands.push(OperandId, "'ClusterSize'", true);
+
+    InstructionDesc[OpGroupNonUniformLogicalOr].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupNonUniformLogicalOr].operands.push(OperandGroupOperation, "'Operation'");
+    InstructionDesc[OpGroupNonUniformLogicalOr].operands.push(OperandId, "X");
+    InstructionDesc[OpGroupNonUniformLogicalOr].operands.push(OperandId, "'ClusterSize'", true);
+
+    InstructionDesc[OpGroupNonUniformLogicalXor].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupNonUniformLogicalXor].operands.push(OperandGroupOperation, "'Operation'");
+    InstructionDesc[OpGroupNonUniformLogicalXor].operands.push(OperandId, "X");
+    InstructionDesc[OpGroupNonUniformLogicalXor].operands.push(OperandId, "'ClusterSize'", true);
+
+    InstructionDesc[OpGroupNonUniformQuadBroadcast].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupNonUniformQuadBroadcast].operands.push(OperandId, "X");
+    InstructionDesc[OpGroupNonUniformQuadBroadcast].operands.push(OperandId, "'Id'");
+
+    InstructionDesc[OpGroupNonUniformQuadSwap].operands.push(OperandScope, "'Execution'");
+    InstructionDesc[OpGroupNonUniformQuadSwap].operands.push(OperandId, "X");
+    InstructionDesc[OpGroupNonUniformQuadSwap].operands.push(OperandLiteralNumber, "'Direction'");
+
     InstructionDesc[OpSubgroupBallotKHR].operands.push(OperandId, "'Predicate'");
 
     InstructionDesc[OpSubgroupFirstInvocationKHR].operands.push(OperandId, "'Value'");
 
-    InstructionDesc[OpSubgroupAnyKHR].capabilities.push_back(CapabilitySubgroupVoteKHR);
     InstructionDesc[OpSubgroupAnyKHR].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpSubgroupAnyKHR].operands.push(OperandId, "'Predicate'");
 
-    InstructionDesc[OpSubgroupAllKHR].capabilities.push_back(CapabilitySubgroupVoteKHR);
     InstructionDesc[OpSubgroupAllKHR].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpSubgroupAllKHR].operands.push(OperandId, "'Predicate'");
 
-    InstructionDesc[OpSubgroupAllEqualKHR].capabilities.push_back(CapabilitySubgroupVoteKHR);
     InstructionDesc[OpSubgroupAllEqualKHR].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpSubgroupAllEqualKHR].operands.push(OperandId, "'Predicate'");
 
-    InstructionDesc[OpSubgroupReadInvocationKHR].capabilities.push_back(CapabilityGroups);
     InstructionDesc[OpSubgroupReadInvocationKHR].operands.push(OperandId, "'Value'");
     InstructionDesc[OpSubgroupReadInvocationKHR].operands.push(OperandId, "'Index'");
 
+    InstructionDesc[OpModuleProcessed].operands.push(OperandLiteralString, "'process'");
+
 #ifdef AMD_EXTENSIONS
-    InstructionDesc[OpGroupIAddNonUniformAMD].capabilities.push_back(CapabilityGroups);
     InstructionDesc[OpGroupIAddNonUniformAMD].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupIAddNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
     InstructionDesc[OpGroupIAddNonUniformAMD].operands.push(OperandId, "'X'");
 
-    InstructionDesc[OpGroupFAddNonUniformAMD].capabilities.push_back(CapabilityGroups);
     InstructionDesc[OpGroupFAddNonUniformAMD].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupFAddNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
     InstructionDesc[OpGroupFAddNonUniformAMD].operands.push(OperandId, "'X'");
 
-    InstructionDesc[OpGroupUMinNonUniformAMD].capabilities.push_back(CapabilityGroups);
     InstructionDesc[OpGroupUMinNonUniformAMD].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupUMinNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
     InstructionDesc[OpGroupUMinNonUniformAMD].operands.push(OperandId, "'X'");
 
-    InstructionDesc[OpGroupSMinNonUniformAMD].capabilities.push_back(CapabilityGroups);
     InstructionDesc[OpGroupSMinNonUniformAMD].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupSMinNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
     InstructionDesc[OpGroupSMinNonUniformAMD].operands.push(OperandId, "X");
 
-    InstructionDesc[OpGroupFMinNonUniformAMD].capabilities.push_back(CapabilityGroups);
     InstructionDesc[OpGroupFMinNonUniformAMD].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupFMinNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
     InstructionDesc[OpGroupFMinNonUniformAMD].operands.push(OperandId, "X");
 
-    InstructionDesc[OpGroupUMaxNonUniformAMD].capabilities.push_back(CapabilityGroups);
     InstructionDesc[OpGroupUMaxNonUniformAMD].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupUMaxNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
     InstructionDesc[OpGroupUMaxNonUniformAMD].operands.push(OperandId, "X");
 
-    InstructionDesc[OpGroupSMaxNonUniformAMD].capabilities.push_back(CapabilityGroups);
     InstructionDesc[OpGroupSMaxNonUniformAMD].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupSMaxNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
     InstructionDesc[OpGroupSMaxNonUniformAMD].operands.push(OperandId, "X");
 
-    InstructionDesc[OpGroupFMaxNonUniformAMD].capabilities.push_back(CapabilityGroups);
     InstructionDesc[OpGroupFMaxNonUniformAMD].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupFMaxNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
     InstructionDesc[OpGroupFMaxNonUniformAMD].operands.push(OperandId, "X");
 
-    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
+
+#ifdef NV_EXTENSIONS
+    InstructionDesc[OpGroupNonUniformPartitionNV].operands.push(OperandId, "X");
+#endif
 }
 
 }; // end spv namespace
diff --git a/SPIRV/doc.h b/SPIRV/doc.h
index 710ca1a..7d0475d 100644
--- a/SPIRV/doc.h
+++ b/SPIRV/doc.h
@@ -190,7 +190,6 @@
 class EnumParameters {
 public:
     EnumParameters() : desc(0) { }
-    EnumCaps caps;
     const char* desc;
 };
 
@@ -235,7 +234,6 @@
     bool hasType()   const { return typePresent != 0; }
 
     const char* opDesc;
-    EnumCaps capabilities;
     OpcodeClass opClass;
     OperandParameters operands;
 
@@ -244,8 +242,6 @@
     int resultPresent : 1;
 };
 
-const int OpcodeCeiling = 321;
-
 // The set of objects that hold all the instruction/operand
 // parameterization information.
 extern InstructionParameters InstructionDesc[];
diff --git a/SPIRV/spirv.hpp b/SPIRV/spirv.hpp
old mode 100755
new mode 100644
index 8bddf7e..e21762d
--- a/SPIRV/spirv.hpp
+++ b/SPIRV/spirv.hpp
@@ -1,4 +1,4 @@
-// Copyright (c) 2014-2017 The Khronos Group Inc.
+// Copyright (c) 2014-2018 The Khronos Group Inc.
 // 
 // Permission is hereby granted, free of charge, to any person obtaining a copy
 // of this software and/or associated documentation files (the "Materials"),
@@ -46,12 +46,12 @@
 
 typedef unsigned int Id;
 
-#define SPV_VERSION 0x10000
-#define SPV_REVISION 12
+#define SPV_VERSION 0x10300
+#define SPV_REVISION 1
 
 static const unsigned int MagicNumber = 0x07230203;
-static const unsigned int Version = 0x00010000;
-static const unsigned int Revision = 12;
+static const unsigned int Version = 0x00010300;
+static const unsigned int Revision = 1;
 static const unsigned int OpCodeMask = 0xffff;
 static const unsigned int WordCountShift = 16;
 
@@ -122,7 +122,15 @@
     ExecutionModeOutputTriangleStrip = 29,
     ExecutionModeVecTypeHint = 30,
     ExecutionModeContractionOff = 31,
+    ExecutionModeInitializer = 33,
+    ExecutionModeFinalizer = 34,
+    ExecutionModeSubgroupSize = 35,
+    ExecutionModeSubgroupsPerWorkgroup = 36,
+    ExecutionModeSubgroupsPerWorkgroupId = 37,
+    ExecutionModeLocalSizeId = 38,
+    ExecutionModeLocalSizeHintId = 39,
     ExecutionModePostDepthCoverage = 4446,
+    ExecutionModeStencilRefReplacingEXT = 5027,
     ExecutionModeMax = 0x7fffffff,
 };
 
@@ -377,11 +385,17 @@
     DecorationNoContraction = 42,
     DecorationInputAttachmentIndex = 43,
     DecorationAlignment = 44,
+    DecorationMaxByteOffset = 45,
+    DecorationAlignmentId = 46,
+    DecorationMaxByteOffsetId = 47,
     DecorationExplicitInterpAMD = 4999,
     DecorationOverrideCoverageNV = 5248,
     DecorationPassthroughNV = 5250,
     DecorationViewportRelativeNV = 5252,
     DecorationSecondaryViewportRelativeNV = 5256,
+    DecorationNonUniformEXT = 5300,
+    DecorationHlslCounterBufferGOOGLE = 5634,
+    DecorationHlslSemanticGOOGLE = 5635,
     DecorationMax = 0x7fffffff,
 };
 
@@ -427,10 +441,15 @@
     BuiltInSubgroupLocalInvocationId = 41,
     BuiltInVertexIndex = 42,
     BuiltInInstanceIndex = 43,
+    BuiltInSubgroupEqMask = 4416,
     BuiltInSubgroupEqMaskKHR = 4416,
+    BuiltInSubgroupGeMask = 4417,
     BuiltInSubgroupGeMaskKHR = 4417,
+    BuiltInSubgroupGtMask = 4418,
     BuiltInSubgroupGtMaskKHR = 4418,
+    BuiltInSubgroupLeMask = 4419,
     BuiltInSubgroupLeMaskKHR = 4419,
+    BuiltInSubgroupLtMask = 4420,
     BuiltInSubgroupLtMaskKHR = 4420,
     BuiltInBaseVertex = 4424,
     BuiltInBaseInstance = 4425,
@@ -450,6 +469,7 @@
     BuiltInSecondaryViewportMaskNV = 5258,
     BuiltInPositionPerViewNV = 5261,
     BuiltInViewportMaskPerViewNV = 5262,
+    BuiltInFullyCoveredEXT = 5264,
     BuiltInMax = 0x7fffffff,
 };
 
@@ -468,6 +488,8 @@
 enum LoopControlShift {
     LoopControlUnrollShift = 0,
     LoopControlDontUnrollShift = 1,
+    LoopControlDependencyInfiniteShift = 2,
+    LoopControlDependencyLengthShift = 3,
     LoopControlMax = 0x7fffffff,
 };
 
@@ -475,6 +497,8 @@
     LoopControlMaskNone = 0,
     LoopControlUnrollMask = 0x00000001,
     LoopControlDontUnrollMask = 0x00000002,
+    LoopControlDependencyInfiniteMask = 0x00000004,
+    LoopControlDependencyLengthMask = 0x00000008,
 };
 
 enum FunctionControlShift {
@@ -548,6 +572,10 @@
     GroupOperationReduce = 0,
     GroupOperationInclusiveScan = 1,
     GroupOperationExclusiveScan = 2,
+    GroupOperationClusteredReduce = 3,
+    GroupOperationPartitionedReduceNV = 6,
+    GroupOperationPartitionedInclusiveScanNV = 7,
+    GroupOperationPartitionedExclusiveScanNV = 8,
     GroupOperationMax = 0x7fffffff,
 };
 
@@ -625,6 +653,17 @@
     CapabilityStorageImageReadWithoutFormat = 55,
     CapabilityStorageImageWriteWithoutFormat = 56,
     CapabilityMultiViewport = 57,
+    CapabilitySubgroupDispatch = 58,
+    CapabilityNamedBarrier = 59,
+    CapabilityPipeStorage = 60,
+    CapabilityGroupNonUniform = 61,
+    CapabilityGroupNonUniformVote = 62,
+    CapabilityGroupNonUniformArithmetic = 63,
+    CapabilityGroupNonUniformBallot = 64,
+    CapabilityGroupNonUniformShuffle = 65,
+    CapabilityGroupNonUniformShuffleRelative = 66,
+    CapabilityGroupNonUniformClustered = 67,
+    CapabilityGroupNonUniformQuad = 68,
     CapabilitySubgroupBallotKHR = 4423,
     CapabilityDrawParameters = 4427,
     CapabilitySubgroupVoteKHR = 4431,
@@ -640,8 +679,11 @@
     CapabilityVariablePointers = 4442,
     CapabilityAtomicStorageOps = 4445,
     CapabilitySampleMaskPostDepthCoverage = 4447,
+    CapabilityFloat16ImageAMD = 5008,
     CapabilityImageGatherBiasLodAMD = 5009,
+    CapabilityFragmentMaskAMD = 5010,
     CapabilityStencilExportEXT = 5013,
+    CapabilityImageReadWriteLodAMD = 5015,
     CapabilitySampleMaskOverrideCoverageNV = 5249,
     CapabilityGeometryShaderPassthroughNV = 5251,
     CapabilityShaderViewportIndexLayerEXT = 5254,
@@ -649,6 +691,23 @@
     CapabilityShaderViewportMaskNV = 5255,
     CapabilityShaderStereoViewNV = 5259,
     CapabilityPerViewAttributesNV = 5260,
+    CapabilityFragmentFullyCoveredEXT = 5265,
+    CapabilityGroupNonUniformPartitionedNV = 5297,
+    CapabilityShaderNonUniformEXT = 5301,
+    CapabilityRuntimeDescriptorArrayEXT = 5302,
+    CapabilityInputAttachmentArrayDynamicIndexingEXT = 5303,
+    CapabilityUniformTexelBufferArrayDynamicIndexingEXT = 5304,
+    CapabilityStorageTexelBufferArrayDynamicIndexingEXT = 5305,
+    CapabilityUniformBufferArrayNonUniformIndexingEXT = 5306,
+    CapabilitySampledImageArrayNonUniformIndexingEXT = 5307,
+    CapabilityStorageBufferArrayNonUniformIndexingEXT = 5308,
+    CapabilityStorageImageArrayNonUniformIndexingEXT = 5309,
+    CapabilityInputAttachmentArrayNonUniformIndexingEXT = 5310,
+    CapabilityUniformTexelBufferArrayNonUniformIndexingEXT = 5311,
+    CapabilityStorageTexelBufferArrayNonUniformIndexingEXT = 5312,
+    CapabilitySubgroupShuffleINTEL = 5568,
+    CapabilitySubgroupBufferBlockIOINTEL = 5569,
+    CapabilitySubgroupImageBlockIOINTEL = 5570,
     CapabilityMax = 0x7fffffff,
 };
 
@@ -947,6 +1006,52 @@
     OpAtomicFlagTestAndSet = 318,
     OpAtomicFlagClear = 319,
     OpImageSparseRead = 320,
+    OpSizeOf = 321,
+    OpTypePipeStorage = 322,
+    OpConstantPipeStorage = 323,
+    OpCreatePipeFromPipeStorage = 324,
+    OpGetKernelLocalSizeForSubgroupCount = 325,
+    OpGetKernelMaxNumSubgroups = 326,
+    OpTypeNamedBarrier = 327,
+    OpNamedBarrierInitialize = 328,
+    OpMemoryNamedBarrier = 329,
+    OpModuleProcessed = 330,
+    OpExecutionModeId = 331,
+    OpDecorateId = 332,
+    OpGroupNonUniformElect = 333,
+    OpGroupNonUniformAll = 334,
+    OpGroupNonUniformAny = 335,
+    OpGroupNonUniformAllEqual = 336,
+    OpGroupNonUniformBroadcast = 337,
+    OpGroupNonUniformBroadcastFirst = 338,
+    OpGroupNonUniformBallot = 339,
+    OpGroupNonUniformInverseBallot = 340,
+    OpGroupNonUniformBallotBitExtract = 341,
+    OpGroupNonUniformBallotBitCount = 342,
+    OpGroupNonUniformBallotFindLSB = 343,
+    OpGroupNonUniformBallotFindMSB = 344,
+    OpGroupNonUniformShuffle = 345,
+    OpGroupNonUniformShuffleXor = 346,
+    OpGroupNonUniformShuffleUp = 347,
+    OpGroupNonUniformShuffleDown = 348,
+    OpGroupNonUniformIAdd = 349,
+    OpGroupNonUniformFAdd = 350,
+    OpGroupNonUniformIMul = 351,
+    OpGroupNonUniformFMul = 352,
+    OpGroupNonUniformSMin = 353,
+    OpGroupNonUniformUMin = 354,
+    OpGroupNonUniformFMin = 355,
+    OpGroupNonUniformSMax = 356,
+    OpGroupNonUniformUMax = 357,
+    OpGroupNonUniformFMax = 358,
+    OpGroupNonUniformBitwiseAnd = 359,
+    OpGroupNonUniformBitwiseOr = 360,
+    OpGroupNonUniformBitwiseXor = 361,
+    OpGroupNonUniformLogicalAnd = 362,
+    OpGroupNonUniformLogicalOr = 363,
+    OpGroupNonUniformLogicalXor = 364,
+    OpGroupNonUniformQuadBroadcast = 365,
+    OpGroupNonUniformQuadSwap = 366,
     OpSubgroupBallotKHR = 4421,
     OpSubgroupFirstInvocationKHR = 4422,
     OpSubgroupAllKHR = 4428,
@@ -961,6 +1066,19 @@
     OpGroupFMaxNonUniformAMD = 5005,
     OpGroupUMaxNonUniformAMD = 5006,
     OpGroupSMaxNonUniformAMD = 5007,
+    OpFragmentMaskFetchAMD = 5011,
+    OpFragmentFetchAMD = 5012,
+    OpGroupNonUniformPartitionNV = 5296,
+    OpSubgroupShuffleINTEL = 5571,
+    OpSubgroupShuffleDownINTEL = 5572,
+    OpSubgroupShuffleUpINTEL = 5573,
+    OpSubgroupShuffleXorINTEL = 5574,
+    OpSubgroupBlockReadINTEL = 5575,
+    OpSubgroupBlockWriteINTEL = 5576,
+    OpSubgroupImageBlockReadINTEL = 5577,
+    OpSubgroupImageBlockWriteINTEL = 5578,
+    OpDecorateStringGOOGLE = 5632,
+    OpMemberDecorateStringGOOGLE = 5633,
     OpMax = 0x7fffffff,
 };
 
diff --git a/SPIRV/spvIR.h b/SPIRV/spvIR.h
index 6880595..faa2701 100755
--- a/SPIRV/spvIR.h
+++ b/SPIRV/spvIR.h
@@ -74,11 +74,8 @@
 
 POTENTIALLY_UNUSED
 const MemorySemanticsMask MemorySemanticsAllMemory =
-                (MemorySemanticsMask)(MemorySemanticsSequentiallyConsistentMask |
-                                      MemorySemanticsUniformMemoryMask |
-                                      MemorySemanticsSubgroupMemoryMask |
+                (MemorySemanticsMask)(MemorySemanticsUniformMemoryMask |
                                       MemorySemanticsWorkgroupMemoryMask |
-                                      MemorySemanticsCrossWorkgroupMemoryMask |
                                       MemorySemanticsAtomicCounterMemoryMask |
                                       MemorySemanticsImageMemoryMask);
 
diff --git a/StandAlone/StandAlone.cpp b/StandAlone/StandAlone.cpp
index 19302cb..044662f 100644
--- a/StandAlone/StandAlone.cpp
+++ b/StandAlone/StandAlone.cpp
@@ -98,7 +98,10 @@
     EOptionStdin                = (1 << 27),
     EOptionOptimizeDisable      = (1 << 28),
     EOptionOptimizeSize         = (1 << 29),
+    EOptionInvertY              = (1 << 30),
+    EOptionDumpBareVersion      = (1 << 31),
 };
+bool targetHlslFunctionality1 = false;
 
 //
 // Return codes from main/exit().
@@ -127,6 +130,9 @@
 bool CompileFailed = false;
 bool LinkFailed = false;
 
+// array of unique places to leave the shader names and infologs for the asynchronous compiles
+std::vector<std::unique_ptr<glslang::TWorkItem>> WorkItems;
+
 TBuiltInResource Resources;
 std::string ConfigFile;
 
@@ -151,12 +157,16 @@
 const char* sourceEntryPointName = nullptr;
 const char* shaderStageName = nullptr;
 const char* variableName = nullptr;
+bool HlslEnable16BitTypes = false;
 std::vector<std::string> IncludeDirectoryList;
-int ClientInputSemanticsVersion = 100;   // maps to, say, #define VULKAN 100
-int VulkanClientVersion = 100;           // would map to, say, Vulkan 1.0
-int OpenGLClientVersion = 450;           // doesn't influence anything yet, but maps to OpenGL 4.50
-unsigned int TargetVersion = 0x00001000; // maps to, say, SPIR-V 1.0
-std::vector<std::string> Processes;      // what should be recorded by OpModuleProcessed, or equivalent
+int ClientInputSemanticsVersion = 100;                  // maps to, say, #define VULKAN 100
+glslang::EShTargetClientVersion VulkanClientVersion =
+                          glslang::EShTargetVulkan_1_0; // would map to, say, Vulkan 1.0
+glslang::EShTargetClientVersion OpenGLClientVersion =
+                          glslang::EShTargetOpenGL_450; // doesn't influence anything yet, but maps to OpenGL 4.50
+glslang::EShTargetLanguageVersion TargetVersion =
+                          glslang::EShTargetSpv_1_0;    // maps to, say, SPIR-V 1.0
+std::vector<std::string> Processes;                     // what should be recorded by OpModuleProcessed, or equivalent
 
 // Per descriptor-set binding base data
 typedef std::map<unsigned int, unsigned int> TPerSetBaseBinding;
@@ -261,14 +271,14 @@
 //
 void Error(const char* message)
 {
-    printf("%s: Error %s (use -h for usage)\n", ExecutableName, message);
+    fprintf(stderr, "%s: Error %s (use -h for usage)\n", ExecutableName, message);
     exit(EFailUsage);
 }
 
 //
 // 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.
+//   --argname [stage] [base set]...   // 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
 //
@@ -293,8 +303,8 @@
     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++]);
+            const int setNum = atoi(argv[arg++]);
             perSetBase[setNum] = baseNum;
         }
     } else {
@@ -445,6 +455,11 @@
                                lowerword == "hlsl-iomapper" ||
                                lowerword == "hlsl-iomapping") {
                         Options |= EOptionHlslIoMapping;
+                    } else if (lowerword == "hlsl-enable-16bit-types") {
+                        HlslEnable16BitTypes = true;
+                    } else if (lowerword == "invert-y" ||  // synonyms
+                               lowerword == "iy") {
+                        Options |= EOptionInvertY;
                     } else if (lowerword == "keep-uncalled" || // synonyms
                                lowerword == "ku") {
                         Options |= EOptionKeepUncalled;
@@ -500,22 +515,28 @@
                         if (argc > 1) {
                             if (strcmp(argv[1], "vulkan1.0") == 0) {
                                 setVulkanSpv();
-                                VulkanClientVersion = 100;
+                                VulkanClientVersion = glslang::EShTargetVulkan_1_0;
+                            } else if (strcmp(argv[1], "vulkan1.1") == 0) {
+                                setVulkanSpv();
+                                TargetVersion = glslang::EShTargetSpv_1_3;
+                                VulkanClientVersion = glslang::EShTargetVulkan_1_1;
                             } else if (strcmp(argv[1], "opengl") == 0) {
                                 setOpenGlSpv();
-                                OpenGLClientVersion = 450;
+                                OpenGLClientVersion = glslang::EShTargetOpenGL_450;
                             } else
-                                Error("--target-env expected vulkan1.0 or opengl");
+                                Error("--target-env expected vulkan1.0, vulkan1.1, or opengl");
                         }
                         bumpArg();
                     } else if (lowerword == "variable-name" || // synonyms
-                        lowerword == "vn") {
+                               lowerword == "vn") {
                         Options |= EOptionOutputHexadecimal;
                         if (argc <= 1)
                             Error("no <C-variable-name> provided for --variable-name");
                         variableName = argv[1];
                         bumpArg();
                         break;
+                    } else if (lowerword == "version") {
+                        Options |= EOptionDumpVersions;
                     } else {
                         usage();
                     }
@@ -553,7 +574,7 @@
                 if (argv[0][2] == 'd')
                     Options |= EOptionOptimizeDisable;
                 else if (argv[0][2] == 's')
-#ifdef ENABLE_OPT
+#if ENABLE_OPT
                     Options |= EOptionOptimizeSize;
 #else
                     Error("-Os not available; optimizer not linked");
@@ -573,13 +594,17 @@
             case 'V':
                 setVulkanSpv();
                 if (argv[0][2] != 0)
-                    ClientInputSemanticsVersion = getAttachedNumber("-G<num> client input semantics");
+                    ClientInputSemanticsVersion = getAttachedNumber("-V<num> client input semantics");
                 break;
             case 'c':
                 Options |= EOptionDumpConfig;
                 break;
             case 'd':
-                Options |= EOptionDefaultDesktop;
+                if (strncmp(&argv[0][1], "dumpversion", strlen(&argv[0][1]) + 1) == 0 ||
+                    strncmp(&argv[0][1], "dumpfullversion", strlen(&argv[0][1]) + 1) == 0)
+                    Options |= EOptionDumpBareVersion;
+                else
+                    Options |= EOptionDefaultDesktop;
                 break;
             case 'e':
                 // HLSL todo: entry point handle needs much more sophistication.
@@ -589,6 +614,12 @@
                     Error("no <name> provided for -e");
                 bumpArg();
                 break;
+            case 'f':
+                if (strcmp(&argv[0][2], "hlsl_functionality1") == 0)
+                    targetHlslFunctionality1 = true;
+                else
+                    Error("-f: expected hlsl_functionality1");
+                break;
             case 'g':
                 Options |= EOptionDebug;
                 break;
@@ -687,6 +718,10 @@
         messages = (EShMessages)(messages | EShMsgHlslOffsets);
     if (Options & EOptionDebug)
         messages = (EShMessages)(messages | EShMsgDebugInfo);
+    if (HlslEnable16BitTypes)
+        messages = (EShMessages)(messages | EShMsgHlslEnable16BitTypes);
+    if ((Options & EOptionOptimizeDisable) || !ENABLE_OPT)
+        messages = (EShMessages)(messages | EShMsgHlslLegalization);
 }
 
 //
@@ -694,6 +729,9 @@
 //
 void CompileShaders(glslang::TWorklist& worklist)
 {
+    if (Options & EOptionDebug)
+        Error("cannot generate debug information unless linking to generate code");
+
     glslang::TWorkItem* workItem;
     if (Options & EOptionStdin) {
         worklist.remove(workItem);
@@ -821,7 +859,7 @@
             // 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->setShiftBindingForSet(res, i->second, i->first);
         }
 
         shader->setFlattenUniformArrays((Options & EOptionFlattenUniformArrays) != 0);
@@ -837,6 +875,9 @@
         if (Options & EOptionAutoMapLocations)
             shader->setAutoMapLocations(true);
 
+        if (Options & EOptionInvertY)
+            shader->setInvertY(true);
+
         // Set up the environment, some subsettings take precedence over earlier
         // ways of setting things.
         if (Options & EOptionSpv) {
@@ -845,14 +886,15 @@
                                                                 : glslang::EShSourceGlsl,
                                         compUnit.stage, glslang::EShClientVulkan, ClientInputSemanticsVersion);
                 shader->setEnvClient(glslang::EShClientVulkan, VulkanClientVersion);
-                shader->setEnvTarget(glslang::EshTargetSpv, TargetVersion);
             } else {
                 shader->setEnvInput((Options & EOptionReadHlsl) ? glslang::EShSourceHlsl
                                                                 : glslang::EShSourceGlsl,
                                         compUnit.stage, glslang::EShClientOpenGL, ClientInputSemanticsVersion);
                 shader->setEnvClient(glslang::EShClientOpenGL, OpenGLClientVersion);
-                shader->setEnvTarget(glslang::EshTargetSpv, TargetVersion);
             }
+            shader->setEnvTarget(glslang::EShTargetSpv, TargetVersion);
+            if (targetHlslFunctionality1)
+                shader->setEnvTargetHlslFunctionality1();
         }
 
         shaders.push_back(shader);
@@ -1022,14 +1064,10 @@
         FreeFileData(const_cast<char*>(it->text[0]));
 }
 
-int C_DECL main(int argc, char* argv[])
+int singleMain()
 {
-    // array of unique places to leave the shader names and infologs for the asynchronous compiles
-    std::vector<std::unique_ptr<glslang::TWorkItem>> workItems;
-    ProcessArguments(workItems, argc, argv);
-
     glslang::TWorklist workList;
-    std::for_each(workItems.begin(), workItems.end(), [&workList](std::unique_ptr<glslang::TWorkItem>& item) {
+    std::for_each(WorkItems.begin(), WorkItems.end(), [&workList](std::unique_ptr<glslang::TWorkItem>& item) {
         assert(item);
         workList.add(item.get());
     });
@@ -1040,8 +1078,14 @@
             return ESuccess;
     }
 
-    if (Options & EOptionDumpVersions) {
-        printf("Glslang Version: %s %s\n", GLSLANG_REVISION, GLSLANG_DATE);
+    if (Options & EOptionDumpBareVersion) {
+        printf("%d.%d.%d\n",
+            glslang::GetSpirvGeneratorVersion(), GLSLANG_MINOR_VERSION, GLSLANG_PATCH_LEVEL);
+        if (workList.empty())
+            return ESuccess;
+    } else if (Options & EOptionDumpVersions) {
+        printf("Glslang Version: %d.%d.%d\n",
+            glslang::GetSpirvGeneratorVersion(), GLSLANG_MINOR_VERSION, GLSLANG_PATCH_LEVEL);
         printf("ESSL Version: %s\n", glslang::GetEsslVersionString());
         printf("GLSL Version: %s\n", glslang::GetGlslVersionString());
         std::string spirvVersion;
@@ -1049,6 +1093,7 @@
         printf("SPIR-V Version %s\n", spirvVersion.c_str());
         printf("GLSL.std.450 Version %d, Revision %d\n", GLSLstd450Version, GLSLstd450Revision);
         printf("Khronos Tool ID %d\n", glslang::GetKhronosToolId());
+        printf("SPIR-V Generator Version %d\n", glslang::GetSpirvGeneratorVersion());
         printf("GL_KHR_vulkan_glsl version %d\n", 100);
         printf("ARB_GL_gl_spirv version %d\n", 100);
         if (workList.empty())
@@ -1060,8 +1105,8 @@
     }
 
     if (Options & EOptionStdin) {
-        workItems.push_back(std::unique_ptr<glslang::TWorkItem>{new glslang::TWorkItem("stdin")});
-        workList.add(workItems.back().get());
+        WorkItems.push_back(std::unique_ptr<glslang::TWorkItem>{new glslang::TWorkItem("stdin")});
+        workList.add(WorkItems.back().get());
     }
 
     ProcessConfigFile();
@@ -1074,22 +1119,25 @@
     if (Options & EOptionLinkProgram ||
         Options & EOptionOutputPreprocessed) {
         glslang::InitializeProcess();
+        glslang::InitializeProcess();  // also test reference counting of users
+        glslang::InitializeProcess();  // also test reference counting of users
+        glslang::FinalizeProcess();    // also test reference counting of users
+        glslang::FinalizeProcess();    // also test reference counting of users
         CompileAndLinkShaderFiles(workList);
         glslang::FinalizeProcess();
     } else {
         ShInitialize();
+        ShInitialize();  // also test reference counting of users
+        ShFinalize();    // also test reference counting of users
 
         bool printShaderNames = workList.size() > 1;
 
-        if (Options & EOptionMultiThreaded)
-        {
+        if (Options & EOptionMultiThreaded) {
             std::array<std::thread, 16> threads;
-            for (unsigned int t = 0; t < threads.size(); ++t)
-            {
+            for (unsigned int t = 0; t < threads.size(); ++t) {
                 threads[t] = std::thread(CompileShaders, std::ref(workList));
-                if (threads[t].get_id() == std::thread::id())
-                {
-                    printf("Failed to create thread\n");
+                if (threads[t].get_id() == std::thread::id()) {
+                    fprintf(stderr, "Failed to create thread\n");
                     return EFailThreadCreate;
                 }
             }
@@ -1099,11 +1147,11 @@
             CompileShaders(workList);
 
         // Print out all the resulting infologs
-        for (size_t w = 0; w < workItems.size(); ++w) {
-            if (workItems[w]) {
-                if (printShaderNames || workItems[w]->results.size() > 0)
-                    PutsIfNonEmpty(workItems[w]->name.c_str());
-                PutsIfNonEmpty(workItems[w]->results.c_str());
+        for (size_t w = 0; w < WorkItems.size(); ++w) {
+            if (WorkItems[w]) {
+                if (printShaderNames || WorkItems[w]->results.size() > 0)
+                    PutsIfNonEmpty(WorkItems[w]->name.c_str());
+                PutsIfNonEmpty(WorkItems[w]->results.c_str());
             }
         }
 
@@ -1118,6 +1166,25 @@
     return 0;
 }
 
+int C_DECL main(int argc, char* argv[])
+{
+    ProcessArguments(WorkItems, argc, argv);
+
+    int ret = 0;
+
+    // Loop over the entire init/finalize cycle to watch memory changes
+    const int iterations = 1;
+    if (iterations > 1)
+        glslang::OS_DumpMemoryCounters();
+    for (int i = 0; i < iterations; ++i) {
+        ret = singleMain();
+        if (iterations > 1)
+            glslang::OS_DumpMemoryCounters();
+    }
+
+    return ret;
+}
+
 //
 //   Deduce the language from the filename.  Files must end in one of the
 //   following extensions:
@@ -1264,6 +1331,9 @@
            "  -d          default to desktop (#version 110) when there is no shader #version\n"
            "              (default is ES version 100)\n"
            "  -e <name>   specify <name> as the entry-point name\n"
+           "  -f{hlsl_functionality1}\n"
+           "              'hlsl_functionality1' enables use of the\n"
+           "                  SPV_GOOGLE_hlsl_functionality1 extension\n"
            "  -g          generate debug information\n"
            "  -h          print this usage message\n"
            "  -i          intermediate tree (glslang AST) is printed out\n"
@@ -1272,7 +1342,7 @@
            "  -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"
+           "  -s          silence syntax and semantic error reporting\n"
            "  -t          multi-threaded mode\n"
            "  -v          print version strings\n"
            "  -w          synonym for --suppress-warnings\n"
@@ -1284,12 +1354,16 @@
            "                                       'location' (fragile, not cross stage)\n"
            "  --aml                                synonym for --auto-map-locations\n"
            "  --client {vulkan<ver>|opengl<ver>}   see -V and -G\n"
+           "  -dumpfullversion                     print bare major.minor.patchlevel\n"
+           "  -dumpversion                         same as -dumpfullversion\n"
            "  --flatten-uniform-arrays             flatten uniform texture/sampler arrays to\n"
            "                                       scalars\n"
            "  --fua                                synonym for --flatten-uniform-arrays\n"
            "  --hlsl-offsets                       Allow block offsets to follow HLSL rules\n"
            "                                       Works independently of source language\n"
            "  --hlsl-iomap                         Perform IO mapping in HLSL register space\n"
+           "  --hlsl-enable-16bit-types            Allow use of 16-bit types in SPIR-V for HLSL\n"
+           "  --invert-y | --iy                    invert position.Y output in vertex shader\n"
            "  --keep-uncalled                      don't eliminate uncalled functions\n"
            "  --ku                                 synonym for --keep-uncalled\n"
            "  --no-storage-format                  use Unknown image format\n"
@@ -1301,24 +1375,24 @@
            "              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"
+           "  --shift-image-binding [stage] [num set]... 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"
+           "  --shift-sampler-binding [stage] [num set]... 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"
+           "  --shift-ssbo-binding [stage] [num set]... 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"
+           "  --shift-texture-binding [stage] [num set]... 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"
+           "  --shift-uav-binding [stage] [num set]... 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-UBO-binding [stage] [num set]... 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"
+           "  --shift-cbuffer-binding [stage] [num set]... 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 <name> given in -e\n"
@@ -1328,14 +1402,16 @@
            "                                       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"
-           "                                       execute in (as opposed to language\n"
+           "  --target-env {vulkan1.0 | vulkan1.1 | opengl} \n"
+           "                                       set execution environment that emitted code\n"
+           "                                       will execute in (as opposed to the language\n"
            "                                       semantics selected by --client) defaults:\n"
-           "                                        'vulkan1.0' under '--client vulkan<ver>'\n"
-           "                                        'opengl' under '--client opengl<ver>'\n"
+           "                                          'vulkan1.0' under '--client vulkan<ver>'\n"
+           "                                          'opengl' under '--client opengl<ver>'\n"
            "  --variable-name <name>               Creates a C header file that contains a\n"
            "                                       uint32_t array named <name>\n"
            "                                       initialized with the shader binary code.\n"
+           "  --version                            synonym for -v\n"
            "  --vn <name>                          synonym for --variable-name <name>\n"
            );
 
diff --git a/Test/310AofA.vert b/Test/310AofA.vert
index a196388..fba2977 100644
--- a/Test/310AofA.vert
+++ b/Test/310AofA.vert
@@ -113,3 +113,9 @@
 uniform ubaa {

     int a;

 } ubaaname[2][3];  // ERROR

+

+vec3 func(in mat3[2] x[3])

+{

+	mat3 a0 = x[2][1];

+    return a0[2];

+}

diff --git a/Test/310implicitSizeArrayError.vert b/Test/310implicitSizeArrayError.vert
index 72c403e..7aa0ee1 100644
--- a/Test/310implicitSizeArrayError.vert
+++ b/Test/310implicitSizeArrayError.vert
@@ -1,5 +1,5 @@
 #version 310 es

-layout (location=0) uniform Block {

+layout (binding=0) uniform Block {

   highp int a[];

 } uni;

 layout (location=0) out highp int o;

diff --git a/Test/310runtimeArray.vert b/Test/310runtimeArray.vert
new file mode 100644
index 0000000..3d7b018
--- /dev/null
+++ b/Test/310runtimeArray.vert
@@ -0,0 +1,18 @@
+#version 310 es
+
+precision highp float;
+layout(location=0) out float o;
+
+struct S  { float f; };
+buffer b1 { S s[]; };
+buffer b2 { S s[]; } b2name;
+buffer b3 { S s[]; } b3name[];
+buffer b4 { S s[]; } b4name[4];
+
+void main()
+{
+  o = s[5].f;
+  o += b2name.s[6].f;
+  o += b3name[3].s[7].f;
+  o += b4name[2].s[8].f;
+}
diff --git a/Test/440.vert b/Test/440.vert
index 2e61f79..4ab6f2e 100644
--- a/Test/440.vert
+++ b/Test/440.vert
@@ -174,6 +174,12 @@
     float f;

 } bbinst10;

 

+layout(xfb_buffer = 3) out;

+layout(xfb_offset = 32) out gl_PerVertex {

+    layout(xfb_buffer = 2) float gl_PointSize; // ERROR, change in xfb_buffer

+    vec4 gl_Position;

+};

+

 int drawParamsBad()

 {

     return gl_BaseVertexARB + gl_BaseInstanceARB + gl_DrawIDARB; // ERROR, extension not requested

diff --git a/Test/450.vert b/Test/450.vert
index 51e9b10..e99a133 100644
--- a/Test/450.vert
+++ b/Test/450.vert
@@ -46,3 +46,11 @@
     allInvocationsEqual(b1);  // ERROR, need 4.6

 }

 ; // ERROR: no extraneous semicolons

+

+layout(location = 0) uniform locBlock {        // ERROR, no location uniform block

+    int a;

+};

+

+layout(location = 0) buffer locBuffBlock {     // ERROR, no location on buffer block

+    int b;

+};

diff --git a/Test/460.frag b/Test/460.frag
index 43a7c3b..23f8eea 100644
--- a/Test/460.frag
+++ b/Test/460.frag
@@ -15,3 +15,18 @@
     b1 = allInvocations(b1);

     b1 = allInvocationsEqual(b1);

 }

+

+void attExtBad()

+{

+    // ERRORs, not enabled

+    [[dependency_length(1+3)]] for (int i = 0; i < 8; ++i) { }
+    [[flatten]]                if (true) { } else { }
+}
+

+#extension GL_EXT_control_flow_attributes : enable

+

+void attExt()

+{

+    [[dependency_length(-3)]] do {  } while(true); // ERROR, not positive

+    [[dependency_length(0)]] do {  } while(true);  // ERROR, not positive
+}
diff --git a/Test/array.frag b/Test/array.frag
index 4ccb00c..63d5f4c 100644
--- a/Test/array.frag
+++ b/Test/array.frag
@@ -104,3 +104,9 @@
 int[] i = int[]();    // ERROR, need constructor arguments
 float emptyA[];

 float b = vec4(emptyA);    // ERROR, array can't be a constructor argument

+uniform sampler2D s2d[];

+

+void foo4()

+{

+    s2d[a];           // ERROR, can't variably index unsized array

+}

diff --git a/Test/baseLegalResults/hlsl.aliasOpaque.frag.out b/Test/baseLegalResults/hlsl.aliasOpaque.frag.out
index 779d5e1..f877db6 100644
--- a/Test/baseLegalResults/hlsl.aliasOpaque.frag.out
+++ b/Test/baseLegalResults/hlsl.aliasOpaque.frag.out
@@ -1,50 +1,46 @@
 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
+// Generated by (magic number): 80006
+// Id's are bound by 87
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 57
+                              EntryPoint Fragment 4  "main" 62
                               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
+                              Name 47  "gss"
+                              Name 51  "gtex"
+                              Name 62  "@entryPointOutput"
+                              Decorate 47(gss) DescriptorSet 0
+                              Decorate 51(gtex) DescriptorSet 0
+                              Decorate 62(@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
+               7:             TypeFloat 32
+               8:             TypeImage 7(float) 2D sampled format:Unknown
+              11:             TypeVector 7(float) 4
+              32:             TypeSampledImage 8
+              34:             TypeVector 7(float) 2
+              35:    7(float) Constant 1045220557
+              36:    7(float) Constant 1050253722
+              37:   34(fvec2) ConstantComposite 35 36
+              43:             TypePointer UniformConstant 6
+         47(gss):     43(ptr) Variable UniformConstant
+              50:             TypePointer UniformConstant 8
+        51(gtex):     50(ptr) Variable UniformConstant
+              54:    7(float) Constant 1077936128
+              61:             TypePointer Output 11(fvec4)
+62(@entryPointOutput):     61(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
+              70:           6 Load 47(gss)
+              72:           8 Load 51(gtex)
+              84:          32 SampledImage 72 70
+              85:   11(fvec4) ImageSampleImplicitLod 84 37
+              86:   11(fvec4) VectorTimesScalar 85 54
+                              Store 62(@entryPointOutput) 86
                               Return
                               FunctionEnd
diff --git a/Test/baseLegalResults/hlsl.flattenOpaque.frag.out b/Test/baseLegalResults/hlsl.flattenOpaque.frag.out
index 3c7d198..ab9237b 100644
--- a/Test/baseLegalResults/hlsl.flattenOpaque.frag.out
+++ b/Test/baseLegalResults/hlsl.flattenOpaque.frag.out
@@ -1,65 +1,65 @@
 hlsl.flattenOpaque.frag
 // Module Version 10000
-// Generated by (magic number): 80002
-// Id's are bound by 144
+// Generated by (magic number): 80006
+// Id's are bound by 185
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 97
+                              EntryPoint Fragment 4  "main" 120
                               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"
+                              Name 82  "s.s2D"
+                              Name 97  "s2.s2D"
+                              Name 100  "s2.tex"
+                              Name 120  "@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
+                              Decorate 82(s.s2D) DescriptorSet 0
+                              Decorate 97(s2.s2D) DescriptorSet 0
+                              Decorate 100(s2.tex) DescriptorSet 0
+                              Decorate 120(@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
+               9:             TypeFloat 32
+              10:             TypeVector 9(float) 4
+              15:             TypeVector 9(float) 2
+              22:             TypeImage 9(float) 2D sampled format:Unknown
+              37:             TypePointer UniformConstant 22
          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
+              45:             TypeSampledImage 22
+              47:    9(float) Constant 1045220557
+              48:    9(float) Constant 1050253722
+              49:   15(fvec2) ConstantComposite 47 48
+              81:             TypePointer UniformConstant 6
+       82(s.s2D):     81(ptr) Variable UniformConstant
+      97(s2.s2D):     81(ptr) Variable UniformConstant
+     100(s2.tex):     37(ptr) Variable UniformConstant
+             119:             TypePointer Output 10(fvec4)
+120(@entryPointOutput):    119(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
+             134:           6 Load 82(s.s2D)
+             158:          22 Load 38(tex)
+             161:          45 SampledImage 158 134
+             162:   10(fvec4) ImageSampleImplicitLod 161 49
+             138:           6 Load 82(s.s2D)
+             164:          22 Load 38(tex)
+             167:          45 SampledImage 164 138
+             169:   10(fvec4) ImageSampleImplicitLod 167 49
+             142:   10(fvec4) FAdd 162 169
+             143:           6 Load 97(s2.s2D)
+             145:          22 Load 100(s2.tex)
+             175:          45 SampledImage 145 143
+             176:   10(fvec4) ImageSampleImplicitLod 175 49
+             149:   10(fvec4) FAdd 142 176
+             150:           6 Load 97(s2.s2D)
+             152:          22 Load 100(s2.tex)
+             182:          45 SampledImage 152 150
+             184:   10(fvec4) ImageSampleImplicitLod 182 49
+             156:   10(fvec4) FAdd 149 184
+                              Store 120(@entryPointOutput) 156
                               Return
                               FunctionEnd
diff --git a/Test/baseLegalResults/hlsl.flattenOpaqueInit.vert.out b/Test/baseLegalResults/hlsl.flattenOpaqueInit.vert.out
index 4aef874..3d0a0bd 100644
--- a/Test/baseLegalResults/hlsl.flattenOpaqueInit.vert.out
+++ b/Test/baseLegalResults/hlsl.flattenOpaqueInit.vert.out
@@ -1,49 +1,52 @@
 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
+// Generated by (magic number): 80006
+// Id's are bound by 134
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Vertex 4  "main" 82
+                              EntryPoint Vertex 4  "main" 80
                               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
+                              Name 43  "g_tInputTexture_sampler"
+                              Name 47  "g_tInputTexture"
+                              Name 80  "@entryPointOutput"
+                              Decorate 43(g_tInputTexture_sampler) DescriptorSet 0
+                              Decorate 47(g_tInputTexture) DescriptorSet 0
+                              Decorate 80(@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
+               7:             TypeFloat 32
+               8:             TypeImage 7(float) 2D sampled format:Unknown
+              11:             TypeVector 7(float) 4
+              31:             TypeSampledImage 8
+              33:             TypeVector 7(float) 2
+              34:    7(float) Constant 1050253722
+              35:    7(float) Constant 1053609165
+              36:   33(fvec2) ConstantComposite 34 35
+              37:    7(float) Constant 0
+              42:             TypePointer UniformConstant 6
+43(g_tInputTexture_sampler):     42(ptr) Variable UniformConstant
+              46:             TypePointer UniformConstant 8
+47(g_tInputTexture):     46(ptr) Variable UniformConstant
+              79:             TypePointer Output 11(fvec4)
+80(@entryPointOutput):     79(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
+              90:           6 Load 43(g_tInputTexture_sampler)
+              91:           8 Load 47(g_tInputTexture)
+             111:          31 SampledImage 91 90
+             112:   11(fvec4) ImageSampleExplicitLod 111 36 Lod 37
+             115:           6 Load 43(g_tInputTexture_sampler)
+             117:           8 Load 47(g_tInputTexture)
+             125:          31 SampledImage 117 115
+             126:   11(fvec4) ImageSampleExplicitLod 125 36 Lod 37
+              99:   11(fvec4) FAdd 112 126
+             132:          31 SampledImage 91 90
+             133:   11(fvec4) ImageSampleExplicitLod 132 36 Lod 37
+             104:   11(fvec4) FAdd 99 133
+                              Store 80(@entryPointOutput) 104
                               Return
                               FunctionEnd
diff --git a/Test/baseLegalResults/hlsl.flattenOpaqueInitMix.vert.out b/Test/baseLegalResults/hlsl.flattenOpaqueInitMix.vert.out
index 0b05615..9793d57 100644
--- a/Test/baseLegalResults/hlsl.flattenOpaqueInitMix.vert.out
+++ b/Test/baseLegalResults/hlsl.flattenOpaqueInitMix.vert.out
@@ -1,49 +1,43 @@
 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
+// Generated by (magic number): 80006
+// Id's are bound by 97
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Vertex 4  "main" 68
+                              EntryPoint Vertex 4  "main" 57
                               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
+                              Name 44  "g_tInputTexture_sampler"
+                              Name 47  "g_tInputTexture"
+                              Name 57  "@entryPointOutput"
+                              Decorate 44(g_tInputTexture_sampler) DescriptorSet 0
+                              Decorate 47(g_tInputTexture) DescriptorSet 0
+                              Decorate 57(@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
+               7:             TypeFloat 32
+               8:             TypeImage 7(float) 2D sampled format:Unknown
+              11:             TypeVector 7(float) 4
+              28:             TypeSampledImage 8
+              36:             TypeVector 7(float) 2
+              38:    7(float) Constant 0
+              43:             TypePointer UniformConstant 6
+44(g_tInputTexture_sampler):     43(ptr) Variable UniformConstant
+              46:             TypePointer UniformConstant 8
+47(g_tInputTexture):     46(ptr) Variable UniformConstant
+              49:    7(float) Constant 1056964608
+              56:             TypePointer Output 11(fvec4)
+57(@entryPointOutput):     56(ptr) Variable Output
+              96:   36(fvec2) ConstantComposite 49 49
          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
+              63:           6 Load 44(g_tInputTexture_sampler)
+              64:           8 Load 47(g_tInputTexture)
+              73:          28 SampledImage 64 63
+              79:   11(fvec4) ImageSampleExplicitLod 73 96 Lod 38
+                              Store 57(@entryPointOutput) 79
                               Return
                               FunctionEnd
diff --git a/Test/baseLegalResults/hlsl.flattenSubset.frag.out b/Test/baseLegalResults/hlsl.flattenSubset.frag.out
index 20aedec..617c719 100755
--- a/Test/baseLegalResults/hlsl.flattenSubset.frag.out
+++ b/Test/baseLegalResults/hlsl.flattenSubset.frag.out
@@ -1,48 +1,47 @@
 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
+// Generated by (magic number): 80006
+// Id's are bound by 66
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 54 57
+                              EntryPoint Fragment 4  "main" 47 50
                               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
+                              Name 21  "samp"
+                              Name 33  "tex"
+                              Name 47  "vpos"
+                              Name 50  "@entryPointOutput"
+                              Decorate 21(samp) DescriptorSet 0
+                              Decorate 33(tex) DescriptorSet 0
+                              Decorate 47(vpos) Location 0
+                              Decorate 50(@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
+              20:             TypePointer UniformConstant 13
+        21(samp):     20(ptr) Variable UniformConstant
+              31:             TypeImage 6(float) 2D sampled format:Unknown
+              32:             TypePointer UniformConstant 31
+         33(tex):     32(ptr) Variable UniformConstant
+              37:             TypeSampledImage 31
+              39:             TypeVector 6(float) 2
+              40:    6(float) Constant 1056964608
+              41:   39(fvec2) ConstantComposite 40 40
+              46:             TypePointer Input 7(fvec4)
+        47(vpos):     46(ptr) Variable Input
+              49:             TypePointer Output 7(fvec4)
+50(@entryPointOutput):     49(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
+              57:          13 Load 21(samp)
+              61:          31 Load 33(tex)
+              64:          37 SampledImage 61 57
+              65:    7(fvec4) ImageSampleImplicitLod 64 41
+                              Store 50(@entryPointOutput) 65
                               Return
                               FunctionEnd
diff --git a/Test/baseLegalResults/hlsl.flattenSubset2.frag.out b/Test/baseLegalResults/hlsl.flattenSubset2.frag.out
new file mode 100755
index 0000000..ef661ba
--- /dev/null
+++ b/Test/baseLegalResults/hlsl.flattenSubset2.frag.out
@@ -0,0 +1,31 @@
+hlsl.flattenSubset2.frag
+// Module Version 10000
+// Generated by (magic number): 80006
+// Id's are bound by 53
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 49 52
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 500
+                              Name 4  "main"
+                              Name 49  "vpos"
+                              Name 52  "@entryPointOutput"
+                              Decorate 49(vpos) Location 0
+                              Decorate 52(@entryPointOutput) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+              43:    6(float) Constant 0
+              44:    7(fvec4) ConstantComposite 43 43 43 43
+              48:             TypePointer Input 7(fvec4)
+        49(vpos):     48(ptr) Variable Input
+              51:             TypePointer Output 7(fvec4)
+52(@entryPointOutput):     51(ptr) Variable Output
+         4(main):           2 Function None 3
+               5:             Label
+                              Store 52(@entryPointOutput) 44
+                              Return
+                              FunctionEnd
diff --git a/Test/baseLegalResults/hlsl.partialFlattenLocal.vert.out b/Test/baseLegalResults/hlsl.partialFlattenLocal.vert.out
new file mode 100755
index 0000000..8bf9614
--- /dev/null
+++ b/Test/baseLegalResults/hlsl.partialFlattenLocal.vert.out
@@ -0,0 +1,81 @@
+hlsl.partialFlattenLocal.vert
+// Module Version 10000
+// Generated by (magic number): 80006
+// Id's are bound by 169
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4  "main" 83 86
+                              Source HLSL 500
+                              Name 4  "main"
+                              Name 83  "pos"
+                              Name 86  "@entryPointOutput"
+                              Decorate 83(pos) Location 0
+                              Decorate 86(@entryPointOutput) BuiltIn Position
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+              14:             TypeVector 6(float) 3
+              15:             TypeInt 32 0
+              16:     15(int) Constant 3
+              17:             TypeArray 14(fvec3) 16
+              18:             TypeVector 6(float) 2
+              19:     15(int) Constant 2
+              20:             TypeArray 18(fvec2) 19
+              21:             TypeInt 32 1
+              25:     21(int) Constant 0
+              31:     21(int) Constant 1
+              32:    6(float) Constant 0
+              33:   14(fvec3) ConstantComposite 32 32 32
+              34:             TypePointer Function 14(fvec3)
+              37:    6(float) Constant 1065353216
+              38:   18(fvec2) ConstantComposite 32 37
+              39:             TypePointer Function 18(fvec2)
+              54:             TypeBool
+              82:             TypePointer Input 7(fvec4)
+         83(pos):     82(ptr) Variable Input
+              85:             TypePointer Output 7(fvec4)
+86(@entryPointOutput):     85(ptr) Variable Output
+             130:             TypePointer Function 17
+             132:             TypePointer Function 20
+         4(main):           2 Function None 3
+               5:             Label
+             133:    132(ptr) Variable Function
+             131:    130(ptr) Variable Function
+              84:    7(fvec4) Load 83(pos)
+             136:     34(ptr) AccessChain 131 25
+                              Store 136 33
+             137:     39(ptr) AccessChain 133 25
+                              Store 137 38
+                              Branch 100
+             100:             Label
+             168:     21(int) Phi 25 5 119 106
+             105:    54(bool) SLessThan 168 31
+                              LoopMerge 101 106 None
+                              BranchConditional 105 106 101
+             106:               Label
+             138:     39(ptr)   AccessChain 133 168
+             110:   18(fvec2)   Load 138
+             139:     34(ptr)   AccessChain 131 168
+             112:   14(fvec3)   Load 139
+             113:   18(fvec2)   VectorShuffle 112 112 0 1
+             114:   18(fvec2)   FAdd 113 110
+             140:     34(ptr)   AccessChain 131 168
+             116:   14(fvec3)   Load 140
+             117:   14(fvec3)   VectorShuffle 116 114 3 4 2
+                                Store 140 117
+             119:     21(int)   IAdd 168 31
+                                Branch 100
+             101:             Label
+             142:          17 Load 131
+             161:   14(fvec3) CompositeExtract 142 0
+             124:    6(float) CompositeExtract 161 0
+             125:    6(float) CompositeExtract 161 1
+             126:    6(float) CompositeExtract 161 2
+             127:    7(fvec4) CompositeConstruct 124 125 126 32
+             128:    7(fvec4) FAdd 84 127
+                              Store 86(@entryPointOutput) 128
+                              Return
+                              FunctionEnd
diff --git a/Test/baseLegalResults/hlsl.partialFlattenMixed.vert.out b/Test/baseLegalResults/hlsl.partialFlattenMixed.vert.out
new file mode 100755
index 0000000..7e36eb9
--- /dev/null
+++ b/Test/baseLegalResults/hlsl.partialFlattenMixed.vert.out
@@ -0,0 +1,29 @@
+hlsl.partialFlattenMixed.vert
+// Module Version 10000
+// Generated by (magic number): 80006
+// Id's are bound by 36
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4  "main" 32 35
+                              Source HLSL 500
+                              Name 4  "main"
+                              Name 32  "pos"
+                              Name 35  "@entryPointOutput"
+                              Decorate 32(pos) Location 0
+                              Decorate 35(@entryPointOutput) BuiltIn Position
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+              31:             TypePointer Input 7(fvec4)
+         32(pos):     31(ptr) Variable Input
+              34:             TypePointer Output 7(fvec4)
+35(@entryPointOutput):     34(ptr) Variable Output
+         4(main):           2 Function None 3
+               5:             Label
+              33:    7(fvec4) Load 32(pos)
+                              Store 35(@entryPointOutput) 33
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/100.frag.out b/Test/baseResults/100.frag.out
index 3464dcb..5e702e8 100644
--- a/Test/baseResults/100.frag.out
+++ b/Test/baseResults/100.frag.out
@@ -395,7 +395,7 @@
 0:?     'v' ( smooth in 3-element array of mediump 4-component vector of float)
 0:?     'f' ( invariant global mediump float)
 0:?     'anon@0' (layout( column_major shared) uniform block{layout( column_major shared) uniform mediump int x})
-0:?     'fa' ( global implicitly-sized array of mediump float)
+0:?     'fa' ( global unsized 1-element array of mediump float)
 0:?     'f13' ( invariant global mediump float)
 0:?     'fi' ( invariant temp mediump float)
 0:?     'av' ( invariant smooth in mediump 4-component vector of float)
diff --git a/Test/baseResults/120.frag.out b/Test/baseResults/120.frag.out
index b516724..e63c001 100644
--- a/Test/baseResults/120.frag.out
+++ b/Test/baseResults/120.frag.out
@@ -19,7 +19,7 @@
 ERROR: 0:83: 'xyxyx' : vector swizzle too long 
 ERROR: 0:84: 'z' : vector swizzle selection out of range 
 ERROR: 0:85: 'assign' :  l-value required 
-ERROR: 0:91: 'int' : overloaded functions must have the same return type 
+ERROR: 0:91: 'main' : overloaded functions must have the same return type 
 ERROR: 0:91: 'main' : function already has a body 
 ERROR: 0:91: 'int' :  entry point cannot return a value
 ERROR: 0:92: 'main' : function cannot take any parameter(s) 
@@ -52,8 +52,13 @@
 ERROR: 0:212: 'sampler2DRect' : Reserved word. 
 ERROR: 0:244: ':' :  wrong operand types: no operation ':' exists that takes a left-hand operand of type ' global void' and a right operand of type ' const int' (or there is no acceptable conversion)
 ERROR: 0:245: ':' :  wrong operand types: no operation ':' exists that takes a left-hand operand of type ' const int' and a right operand of type ' global void' (or there is no acceptable conversion)
+ERROR: 0:248: 'explicit types' : required extension not requested: Possible extensions include:
+GL_AMD_gpu_shader_half_float
+GL_KHX_shader_explicit_arithmetic_types
+GL_KHX_shader_explicit_arithmetic_types_float16
+ERROR: 0:248: 'half floating-point suffix' : not supported with this profile: none
 ERROR: 0:248: '' :  syntax error, unexpected IDENTIFIER, expecting COMMA or SEMICOLON
-ERROR: 54 compilation errors.  No code generated.
+ERROR: 56 compilation errors.  No code generated.
 
 
 Shader version: 120
diff --git a/Test/baseResults/120.vert.out b/Test/baseResults/120.vert.out
index c89be98..5a91ed6 100644
--- a/Test/baseResults/120.vert.out
+++ b/Test/baseResults/120.vert.out
@@ -19,6 +19,7 @@
 ERROR: 0:35: 'arrays of arrays' : not supported with this profile: none
 ERROR: 0:36: 'arrays of arrays' : not supported with this profile: none
 ERROR: 0:37: 'arrays of arrays' : not supported with this profile: none
+ERROR: 0:37: 'arrays of arrays' : not supported with this profile: none
 ERROR: 0:38: 'arrays of arrays' : not supported with this profile: none
 ERROR: 0:39: 'arrays of arrays' : not supported with this profile: none
 ERROR: 0:40: 'arrays of arrays' : not supported with this profile: none
@@ -34,7 +35,7 @@
 ERROR: 0:52: 'arrays of arrays' : not supported with this profile: none
 ERROR: 0:53: 'arrays of arrays' : not supported with this profile: none
 ERROR: 0:56: 'out' : overloaded functions must have the same parameter storage qualifiers for argument 1
-ERROR: 0:57: 'float' : overloaded functions must have the same return type 
+ERROR: 0:57: 'overloadA' : overloaded functions must have the same return type 
 ERROR: 0:87: 'overloadC' : no matching overloaded function found 
 ERROR: 0:90: 'overloadC' : no matching overloaded function found 
 ERROR: 0:95: 'overloadD' : ambiguous function signature match: multiple signatures match under implicit type conversion 
@@ -78,7 +79,7 @@
 ERROR: 0:195: 'gl_ModelViewMatrix' : identifiers starting with "gl_" are reserved 
 ERROR: 0:200: 'token pasting (##)' : not supported for this version or the enabled extensions 
 ERROR: 0:203: 'token pasting (##)' : not supported for this version or the enabled extensions 
-ERROR: 79 compilation errors.  No code generated.
+ERROR: 80 compilation errors.  No code generated.
 
 
 Shader version: 120
diff --git a/Test/baseResults/130.frag.out b/Test/baseResults/130.frag.out
index c1c479a..81d055b 100644
--- a/Test/baseResults/130.frag.out
+++ b/Test/baseResults/130.frag.out
@@ -49,7 +49,7 @@
 0:18        move second child to first child ( temp float)
 0:18          'clip' ( temp float)
 0:18          direct index ( smooth temp float ClipDistance)
-0:18            'gl_ClipDistance' ( smooth in implicitly-sized array of float ClipDistance)
+0:18            'gl_ClipDistance' ( smooth in unsized 4-element array of float ClipDistance)
 0:18            Constant:
 0:18              3 (const int)
 0:23  Function Definition: foo( ( global void)
@@ -381,7 +381,7 @@
 0:?     'fflat' ( flat in float)
 0:?     'fsmooth' ( smooth in float)
 0:?     'fnop' ( noperspective in float)
-0:?     'gl_ClipDistance' ( smooth in implicitly-sized array of float ClipDistance)
+0:?     'gl_ClipDistance' ( smooth in unsized 4-element array of float ClipDistance)
 0:?     'sampC' ( uniform samplerCube)
 0:?     'gl_Color' ( in 4-component vector of float Color)
 0:?     'samp2D' ( uniform sampler2D)
diff --git a/Test/baseResults/130.vert.out b/Test/baseResults/130.vert.out
index 7ec82ad..e38043c 100644
--- a/Test/baseResults/130.vert.out
+++ b/Test/baseResults/130.vert.out
@@ -113,7 +113,7 @@
 0:45          'gl_VertexID' ( gl_VertexId int VertexId)
 0:46      move second child to first child ( temp float)
 0:46        direct index ( smooth temp float ClipDistance)
-0:46          'gl_ClipDistance' ( smooth out implicitly-sized array of float ClipDistance)
+0:46          'gl_ClipDistance' ( smooth out unsized 2-element array of float ClipDistance)
 0:46          Constant:
 0:46            1 (const int)
 0:46        Constant:
@@ -132,7 +132,7 @@
 0:66        'gl_DepthRange' ( uniform structure{ global float near,  global float far,  global float diff})
 0:66        Constant:
 0:66          1 (const int)
-0:67      'gl_TexCoord' ( smooth out implicitly-sized array of 4-component vector of float TexCoord)
+0:67      'gl_TexCoord' ( smooth out unsized 1-element array of 4-component vector of float TexCoord)
 0:68      'gl_FogFragCoord' ( smooth out float FogFragCoord)
 0:69      'gl_FrontColor' ( smooth out 4-component vector of float FrontColor)
 0:?   Linker Objects
@@ -145,8 +145,8 @@
 0:?     'c3D' ( in 3-component vector of float)
 0:?     'c4D' ( smooth temp 4-component vector of float)
 0:?     'v4' ( uniform 4-component vector of float)
-0:?     'gl_ClipDistance' ( smooth out implicitly-sized array of float ClipDistance)
-0:?     'gl_TexCoord' ( smooth out implicitly-sized array of 4-component vector of float TexCoord)
+0:?     'gl_ClipDistance' ( smooth out unsized 2-element array of float ClipDistance)
+0:?     'gl_TexCoord' ( smooth out unsized 1-element array of 4-component vector of float TexCoord)
 0:?     'abcdef' ( global int)
 0:?     'qrstuv' ( global int)
 0:?     'gl_VertexID' ( gl_VertexId int VertexId)
diff --git a/Test/baseResults/140.vert.out b/Test/baseResults/140.vert.out
index 975c932..020afd0 100644
--- a/Test/baseResults/140.vert.out
+++ b/Test/baseResults/140.vert.out
@@ -52,7 +52,7 @@
 0:17        'gl_DepthRange' ( uniform structure{ global float near,  global float far,  global float diff})
 0:17        Constant:
 0:17          1 (const int)
-0:18      'gl_TexCoord' ( smooth out implicitly-sized array of 4-component vector of float TexCoord)
+0:18      'gl_TexCoord' ( smooth out unsized 1-element array of 4-component vector of float TexCoord)
 0:19      'gl_FogFragCoord' ( smooth out float FogFragCoord)
 0:20      'gl_FrontColor' ( smooth out 4-component vector of float FrontColor)
 0:48  Function Definition: foo( ( global void)
@@ -133,7 +133,7 @@
 0:?   Linker Objects
 0:?     'sbuf' ( uniform isamplerBuffer)
 0:?     'anon@0' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform int anonMem})
-0:?     'gl_TexCoord' ( smooth out implicitly-sized array of 4-component vector of float TexCoord)
+0:?     'gl_TexCoord' ( smooth out unsized 1-element array of 4-component vector of float TexCoord)
 0:?     'gl_Position' ( smooth out 4-component vector of float)
 0:?     'locBad' (layout( location=9) in 4-component vector of float)
 0:?     'loc' (layout( location=9) in 4-component vector of float)
diff --git a/Test/baseResults/150.geom.out b/Test/baseResults/150.geom.out
index e3a78c9..92b8e1a 100644
--- a/Test/baseResults/150.geom.out
+++ b/Test/baseResults/150.geom.out
@@ -67,16 +67,16 @@
 0:32            0 (const int)
 0:33      move second child to first child ( temp float)
 0:33        direct index (layout( stream=0) temp float ClipDistance)
-0:33          gl_ClipDistance: direct index for structure (layout( stream=0) out implicitly-sized array of float ClipDistance)
-0:33            'anon@1' (layout( stream=0) out block{layout( stream=0) gl_Position 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:33          gl_ClipDistance: direct index for structure (layout( stream=0) out unsized 4-element array of float ClipDistance)
+0:33            'anon@1' (layout( stream=0) out block{layout( stream=0) gl_Position 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out unsized 4-element array of float ClipDistance gl_ClipDistance})
 0:33            Constant:
 0:33              2 (const uint)
 0:33          Constant:
 0:33            3 (const int)
 0:33        direct index ( temp float ClipDistance)
-0:33          gl_ClipDistance: direct index for structure ( in implicitly-sized array of float ClipDistance)
-0:33            direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:33              'gl_in' ( in 4-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:33          gl_ClipDistance: direct index for structure ( in unsized 3-element array of float ClipDistance)
+0:33            direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
+0:33              'gl_in' ( in 4-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:33              Constant:
 0:33                1 (const int)
 0:33            Constant:
@@ -85,24 +85,24 @@
 0:33            2 (const int)
 0:34      move second child to first child ( temp 4-component vector of float)
 0:34        gl_Position: direct index for structure (layout( stream=0) gl_Position 4-component vector of float Position)
-0:34          'anon@1' (layout( stream=0) out block{layout( stream=0) gl_Position 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:34          'anon@1' (layout( stream=0) out block{layout( stream=0) gl_Position 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out unsized 4-element array of float ClipDistance gl_ClipDistance})
 0:34          Constant:
 0:34            0 (const uint)
 0:34        gl_Position: direct index for structure ( in 4-component vector of float Position)
-0:34          direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:34            'gl_in' ( in 4-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:34          direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
+0:34            'gl_in' ( in 4-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:34            Constant:
 0:34              0 (const int)
 0:34          Constant:
 0:34            0 (const int)
 0:35      move second child to first child ( temp float)
 0:35        gl_PointSize: direct index for structure (layout( stream=0) gl_PointSize float PointSize)
-0:35          'anon@1' (layout( stream=0) out block{layout( stream=0) gl_Position 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:35          'anon@1' (layout( stream=0) out block{layout( stream=0) gl_Position 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out unsized 4-element array of float ClipDistance gl_ClipDistance})
 0:35          Constant:
 0:35            1 (const uint)
 0:35        gl_PointSize: direct index for structure ( in float PointSize)
-0:35          direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:35            'gl_in' ( in 4-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:35          direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
+0:35            'gl_in' ( in 4-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:35            Constant:
 0:35              3 (const int)
 0:35          Constant:
@@ -151,8 +151,8 @@
 0:?     'fromV' ( in 4-element array of block{ in 3-component vector of float color})
 0:?     'toF' (layout( stream=0) out block{layout( stream=0) out 3-component vector of float color})
 0:?     'anon@0' (layout( stream=0) out block{layout( stream=0) out 3-component vector of float color})
-0:?     'anon@1' (layout( stream=0) out block{layout( stream=0) gl_Position 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:?     'gl_in' ( in 4-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:?     'anon@1' (layout( stream=0) out block{layout( stream=0) gl_Position 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out unsized 4-element array of float ClipDistance gl_ClipDistance})
+0:?     'gl_in' ( in 4-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:?     'ov0' (layout( stream=0) out 4-component vector of float)
 0:?     'ov4' (layout( stream=4) out 4-component vector of float)
 0:?     'o1v0' (layout( stream=0) out 4-component vector of float)
diff --git a/Test/baseResults/150.tesc.out b/Test/baseResults/150.tesc.out
index 25e44ed..d237ee4 100644
--- a/Test/baseResults/150.tesc.out
+++ b/Test/baseResults/150.tesc.out
@@ -16,8 +16,8 @@
 0:20        move second child to first child ( temp 4-component vector of float)
 0:20          'p' ( temp 4-component vector of float)
 0:20          gl_Position: direct index for structure ( in 4-component vector of float Position)
-0:20            direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:20              'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:20            direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
+0:20              'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:20              Constant:
 0:20                1 (const int)
 0:20            Constant:
@@ -26,8 +26,8 @@
 0:21        move second child to first child ( temp float)
 0:21          'ps' ( temp float)
 0:21          gl_PointSize: direct index for structure ( in float PointSize)
-0:21            direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:21              'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:21            direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
+0:21              'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:21              Constant:
 0:21                1 (const int)
 0:21            Constant:
@@ -36,9 +36,9 @@
 0:22        move second child to first child ( temp float)
 0:22          'cd' ( temp float)
 0:22          direct index ( temp float ClipDistance)
-0:22            gl_ClipDistance: direct index for structure ( in implicitly-sized array of float ClipDistance)
-0:22              direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:22                'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:22            gl_ClipDistance: direct index for structure ( in unsized 3-element array of float ClipDistance)
+0:22              direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
+0:22                'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:22                Constant:
 0:22                  1 (const int)
 0:22              Constant:
@@ -59,25 +59,25 @@
 0:26          'gl_InvocationID' ( in int InvocationID)
 0:28      move second child to first child ( temp 4-component vector of float)
 0:28        gl_Position: direct index for structure ( out 4-component vector of float Position)
-0:28          indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:28            'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:28          indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 2-element array of float ClipDistance gl_ClipDistance})
+0:28            'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 2-element array of float ClipDistance gl_ClipDistance})
 0:28            'gl_InvocationID' ( in int InvocationID)
 0:28          Constant:
 0:28            0 (const int)
 0:28        'p' ( temp 4-component vector of float)
 0:29      move second child to first child ( temp float)
 0:29        gl_PointSize: direct index for structure ( out float PointSize)
-0:29          indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:29            'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:29          indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 2-element array of float ClipDistance gl_ClipDistance})
+0:29            'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 2-element array of float ClipDistance gl_ClipDistance})
 0:29            'gl_InvocationID' ( in int InvocationID)
 0:29          Constant:
 0:29            1 (const int)
 0:29        'ps' ( temp float)
 0:30      move second child to first child ( temp float)
 0:30        direct index ( temp float ClipDistance)
-0:30          gl_ClipDistance: direct index for structure ( out implicitly-sized array of float ClipDistance)
-0:30            indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:30              'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:30          gl_ClipDistance: direct index for structure ( out unsized 2-element array of float ClipDistance)
+0:30            indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 2-element array of float ClipDistance gl_ClipDistance})
+0:30              'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 2-element array of float ClipDistance gl_ClipDistance})
 0:30              'gl_InvocationID' ( in int InvocationID)
 0:30            Constant:
 0:30              2 (const int)
@@ -99,7 +99,7 @@
 0:33        Constant:
 0:33          1.300000
 0:?   Linker Objects
-0:?     'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:?     'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 2-element array of float ClipDistance gl_ClipDistance})
 0:?     'outa' ( global 4-element array of int)
 0:?     'patchOut' ( patch out 4-component vector of float)
 
@@ -129,8 +129,8 @@
 0:22        move second child to first child ( temp 4-component vector of float)
 0:22          'p' ( temp 4-component vector of float)
 0:22          gl_Position: direct index for structure ( in 4-component vector of float Position)
-0:22            direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:22              'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:22            direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
+0:22              'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:22              Constant:
 0:22                1 (const int)
 0:22            Constant:
@@ -139,8 +139,8 @@
 0:23        move second child to first child ( temp float)
 0:23          'ps' ( temp float)
 0:23          gl_PointSize: direct index for structure ( in float PointSize)
-0:23            direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:23              'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:23            direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
+0:23              'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:23              Constant:
 0:23                1 (const int)
 0:23            Constant:
@@ -149,9 +149,9 @@
 0:24        move second child to first child ( temp float)
 0:24          'cd' ( temp float)
 0:24          direct index ( temp float ClipDistance)
-0:24            gl_ClipDistance: direct index for structure ( in implicitly-sized array of float ClipDistance)
-0:24              direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:24                'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:24            gl_ClipDistance: direct index for structure ( in unsized 3-element array of float ClipDistance)
+0:24              direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
+0:24                'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:24                Constant:
 0:24                  1 (const int)
 0:24              Constant:
@@ -186,20 +186,20 @@
 0:30              1 (const int)
 0:32      move second child to first child ( temp 4-component vector of float)
 0:32        gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
-0:32          'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:32          'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:32          Constant:
 0:32            0 (const uint)
 0:32        'p' ( temp 4-component vector of float)
 0:33      move second child to first child ( temp float)
 0:33        gl_PointSize: direct index for structure ( gl_PointSize float PointSize)
-0:33          'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:33          'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:33          Constant:
 0:33            1 (const uint)
 0:33        'ps' ( temp float)
 0:34      move second child to first child ( temp float)
 0:34        direct index ( temp float ClipDistance)
-0:34          gl_ClipDistance: direct index for structure ( out implicitly-sized array of float ClipDistance)
-0:34            'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:34          gl_ClipDistance: direct index for structure ( out unsized 3-element array of float ClipDistance)
+0:34            'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:34            Constant:
 0:34              2 (const uint)
 0:34          Constant:
@@ -207,7 +207,7 @@
 0:34        'cd' ( temp float)
 0:?   Linker Objects
 0:?     'patchIn' ( patch in 4-component vector of float)
-0:?     'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:?     'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 3-element array of float ClipDistance gl_ClipDistance})
 
 400.tesc
 ERROR: 0:6: 'quads' : unrecognized layout identifier, or qualifier requires assignment (e.g., binding = 4) 
@@ -255,8 +255,8 @@
 0:23        move second child to first child ( temp 4-component vector of float)
 0:23          'p' ( temp 4-component vector of float)
 0:23          gl_Position: direct index for structure ( in 4-component vector of float Position)
-0:23            direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:23              'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:23            direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
+0:23              'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:23              Constant:
 0:23                1 (const int)
 0:23            Constant:
@@ -265,8 +265,8 @@
 0:24        move second child to first child ( temp float)
 0:24          'ps' ( temp float)
 0:24          gl_PointSize: direct index for structure ( in float PointSize)
-0:24            direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:24              'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:24            direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
+0:24              'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:24              Constant:
 0:24                1 (const int)
 0:24            Constant:
@@ -275,9 +275,9 @@
 0:25        move second child to first child ( temp float)
 0:25          'cd' ( temp float)
 0:25          direct index ( temp float ClipDistance)
-0:25            gl_ClipDistance: direct index for structure ( in implicitly-sized array of float ClipDistance)
-0:25              direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:25                'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:25            gl_ClipDistance: direct index for structure ( in unsized 3-element array of float ClipDistance)
+0:25              direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
+0:25                'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:25                Constant:
 0:25                  1 (const int)
 0:25              Constant:
@@ -298,25 +298,25 @@
 0:29          'gl_InvocationID' ( in int InvocationID)
 0:31      move second child to first child ( temp 4-component vector of float)
 0:31        gl_Position: direct index for structure ( out 4-component vector of float Position)
-0:31          indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:31            'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:31          indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 2-element array of float ClipDistance gl_ClipDistance})
+0:31            'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 2-element array of float ClipDistance gl_ClipDistance})
 0:31            'gl_InvocationID' ( in int InvocationID)
 0:31          Constant:
 0:31            0 (const int)
 0:31        'p' ( temp 4-component vector of float)
 0:32      move second child to first child ( temp float)
 0:32        gl_PointSize: direct index for structure ( out float PointSize)
-0:32          indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:32            'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:32          indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 2-element array of float ClipDistance gl_ClipDistance})
+0:32            'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 2-element array of float ClipDistance gl_ClipDistance})
 0:32            'gl_InvocationID' ( in int InvocationID)
 0:32          Constant:
 0:32            1 (const int)
 0:32        'ps' ( temp float)
 0:33      move second child to first child ( temp float)
 0:33        direct index ( temp float ClipDistance)
-0:33          gl_ClipDistance: direct index for structure ( out implicitly-sized array of float ClipDistance)
-0:33            indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:33              'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:33          gl_ClipDistance: direct index for structure ( out unsized 2-element array of float ClipDistance)
+0:33            indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 2-element array of float ClipDistance gl_ClipDistance})
+0:33              'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 2-element array of float ClipDistance gl_ClipDistance})
 0:33              'gl_InvocationID' ( in int InvocationID)
 0:33            Constant:
 0:33              2 (const int)
@@ -386,8 +386,8 @@
 0:67    Function Parameters: 
 0:69    Sequence
 0:69      gl_PointSize: direct index for structure ( out float PointSize)
-0:69        direct index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:69          'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:69        direct index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 2-element array of float ClipDistance gl_ClipDistance})
+0:69          'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 2-element array of float ClipDistance gl_ClipDistance})
 0:69          Constant:
 0:69            4 (const int)
 0:69        Constant:
@@ -422,7 +422,7 @@
 0:123      'gl_DeviceIndex' ( in int DeviceIndex)
 0:124      'gl_ViewIndex' ( in int ViewIndex)
 0:?   Linker Objects
-0:?     'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:?     'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 2-element array of float ClipDistance gl_ClipDistance})
 0:?     'outa' ( global 4-element array of int)
 0:?     'patchIn' ( patch in 4-component vector of float)
 0:?     'patchOut' ( patch out 4-component vector of float)
@@ -453,7 +453,7 @@
 ERROR: 0:48: 'patch' : cannot use interpolation qualifiers with patch 
 ERROR: 0:49: 'patch' : cannot use interpolation qualifiers with patch 
 ERROR: 0:50: '' : can only have one auxiliary qualifier (centroid, patch, and sample) 
-ERROR: 0:54: 'gl_PerVertex' : block already declared with size, can't redeclare as implicitly-sized 
+ERROR: 0:54: 'gl_PerVertex' : block already declared with size, can't redeclare as unsized 
 ERROR: 0:59: 'gl_PerVertex' : can only redeclare a built-in block once, and before any use 
 ERROR: 0:64: 'quads' : cannot apply to 'out' 
 ERROR: 0:64: 'cw' : can only apply to 'in' 
@@ -499,8 +499,8 @@
 0:32        move second child to first child ( temp 4-component vector of float)
 0:32          'p' ( temp 4-component vector of float)
 0:32          gl_Position: direct index for structure ( in 4-component vector of float Position)
-0:32            direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:32              'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:32            direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
+0:32              'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:32              Constant:
 0:32                1 (const int)
 0:32            Constant:
@@ -509,8 +509,8 @@
 0:33        move second child to first child ( temp float)
 0:33          'ps' ( temp float)
 0:33          gl_PointSize: direct index for structure ( in float PointSize)
-0:33            direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:33              'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:33            direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
+0:33              'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:33              Constant:
 0:33                1 (const int)
 0:33            Constant:
@@ -519,9 +519,9 @@
 0:34        move second child to first child ( temp float)
 0:34          'cd' ( temp float)
 0:34          direct index ( temp float ClipDistance)
-0:34            gl_ClipDistance: direct index for structure ( in implicitly-sized array of float ClipDistance)
-0:34              direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:34                'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:34            gl_ClipDistance: direct index for structure ( in unsized 3-element array of float ClipDistance)
+0:34              direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
+0:34                'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:34                Constant:
 0:34                  1 (const int)
 0:34              Constant:
@@ -556,20 +556,20 @@
 0:40              1 (const int)
 0:42      move second child to first child ( temp 4-component vector of float)
 0:42        gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
-0:42          'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:42          'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:42          Constant:
 0:42            0 (const uint)
 0:42        'p' ( temp 4-component vector of float)
 0:43      move second child to first child ( temp float)
 0:43        gl_PointSize: direct index for structure ( gl_PointSize float PointSize)
-0:43          'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:43          'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:43          Constant:
 0:43            1 (const uint)
 0:43        'ps' ( temp float)
 0:44      move second child to first child ( temp float)
 0:44        direct index ( temp float ClipDistance)
-0:44          gl_ClipDistance: direct index for structure ( out implicitly-sized array of float ClipDistance)
-0:44            'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:44          gl_ClipDistance: direct index for structure ( out unsized 3-element array of float ClipDistance)
+0:44            'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:44            Constant:
 0:44              2 (const uint)
 0:44          Constant:
@@ -588,7 +588,7 @@
 0:?   Linker Objects
 0:?     'patchIn' ( patch in 4-component vector of float)
 0:?     'patchOut' ( patch out 4-component vector of float)
-0:?     'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:?     'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:?     'badp1' ( smooth patch in 4-component vector of float)
 0:?     'badp2' ( flat patch in 4-component vector of float)
 0:?     'badp3' ( noperspective patch in 4-component vector of float)
@@ -620,7 +620,7 @@
 0:8  Function Definition: main( ( global void)
 0:8    Function Parameters: 
 0:?   Linker Objects
-0:?     'gl_out' ( out implicitly-sized array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:?     'gl_out' ( out unsized 1-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance})
 0:?     'outa' ( global 1-element array of int)
 0:?     'patchOut' ( patch out 4-component vector of float)
 
@@ -646,8 +646,8 @@
 0:17        move second child to first child ( temp 4-component vector of float)
 0:17          'p' ( temp 4-component vector of float)
 0:17          gl_Position: direct index for structure ( in 4-component vector of float Position)
-0:17            direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:17              'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:17            direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
+0:17              'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:17              Constant:
 0:17                1 (const int)
 0:17            Constant:
@@ -656,8 +656,8 @@
 0:18        move second child to first child ( temp float)
 0:18          'ps' ( temp float)
 0:18          gl_PointSize: direct index for structure ( in float PointSize)
-0:18            direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:18              'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:18            direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
+0:18              'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:18              Constant:
 0:18                1 (const int)
 0:18            Constant:
@@ -666,9 +666,9 @@
 0:19        move second child to first child ( temp float)
 0:19          'cd' ( temp float)
 0:19          direct index ( temp float ClipDistance)
-0:19            gl_ClipDistance: direct index for structure ( in implicitly-sized array of float ClipDistance)
-0:19              direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:19                'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:19            gl_ClipDistance: direct index for structure ( in unsized 3-element array of float ClipDistance)
+0:19              direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
+0:19                'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:19                Constant:
 0:19                  1 (const int)
 0:19              Constant:
@@ -883,7 +883,7 @@
 0:?     'b3' ( global 2-element array of 4-component vector of float)
 0:?     'b4' ( global 2-element array of 4-component vector of float)
 0:?     'c3' ( global 4X2 matrix of float)
-0:?     'd2' ( global implicitly-sized array of structure{ global float s,  global float t})
+0:?     'd2' ( global unsized 1-element array of structure{ global float s,  global float t})
 0:?     'b5' ( global 5-element array of float)
 0:?     'single1' ( global structure{ global int f})
 0:?     'single2' ( global structure{ global 2-component vector of uint v})
@@ -943,8 +943,6 @@
 ERROR: Linking tessellation control stage: Multiple function bodies in multiple compilation units for the same signature in the same stage:
     main(
 ERROR: Linking tessellation control stage: Types must match:
-    gl_out: " out 4-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance}" versus " out implicitly-sized array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance}"
-ERROR: Linking tessellation control stage: Types must match:
     outa: " global 4-element array of int" versus " global 1-element array of int"
 ERROR: Linking tessellation control stage: can't handle multiple entry points per stage
 ERROR: Linking tessellation control stage: Multiple function bodies in multiple compilation units for the same signature in the same stage:
@@ -956,7 +954,7 @@
 ERROR: Linking tessellation control stage: Multiple function bodies in multiple compilation units for the same signature in the same stage:
     main(
 ERROR: Linking tessellation control stage: Types must match:
-    gl_out: " out 4-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance}" versus " out 3-element array of block{ out 4-component vector of float Position gl_Position}"
+    gl_out: " out 4-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 2-element array of float ClipDistance gl_ClipDistance}" versus " out 3-element array of block{ out 4-component vector of float Position gl_Position}"
 
 Linked tessellation evaluation stage:
 
diff --git a/Test/baseResults/150.vert.out b/Test/baseResults/150.vert.out
index 61a558a..504160d 100644
--- a/Test/baseResults/150.vert.out
+++ b/Test/baseResults/150.vert.out
@@ -11,20 +11,20 @@
 0:15    Sequence
 0:15      move second child to first child ( temp 4-component vector of float)
 0:15        gl_Position: direct index for structure ( invariant gl_Position 4-component vector of float Position)
-0:15          'anon@0' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out implicitly-sized array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
+0:15          'anon@0' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
 0:15          Constant:
 0:15            0 (const uint)
 0:15        'iv4' ( in 4-component vector of float)
 0:16      move second child to first child ( temp float)
 0:16        gl_PointSize: direct index for structure ( gl_PointSize float PointSize)
-0:16          'anon@0' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out implicitly-sized array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
+0:16          'anon@0' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
 0:16          Constant:
 0:16            1 (const uint)
 0:16        'ps' ( uniform float)
 0:17      move second child to first child ( temp float)
 0:17        direct index ( temp float ClipDistance)
 0:17          gl_ClipDistance: direct index for structure ( out 4-element array of float ClipDistance)
-0:17            'anon@0' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out implicitly-sized array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
+0:17            'anon@0' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
 0:17            Constant:
 0:17              2 (const uint)
 0:17          Constant:
@@ -35,14 +35,14 @@
 0:17            0 (const int)
 0:18      move second child to first child ( temp 4-component vector of float)
 0:18        gl_ClipVertex: direct index for structure ( gl_ClipVertex 4-component vector of float ClipVertex)
-0:18          'anon@0' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out implicitly-sized array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
+0:18          'anon@0' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
 0:18          Constant:
 0:18            3 (const uint)
 0:18        'iv4' ( in 4-component vector of float)
 0:?   Linker Objects
 0:?     'iv4' ( in 4-component vector of float)
 0:?     'ps' ( uniform float)
-0:?     'anon@1' (layout( column_major shared) uniform block{layout( column_major shared) uniform implicitly-sized array of int a})
+0:?     'anon@1' (layout( column_major shared) uniform block{layout( column_major shared) uniform unsized 1-element array of int a})
 0:?     'gl_VertexID' ( gl_VertexId int VertexId)
 0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
 
diff --git a/Test/baseResults/300.frag.out b/Test/baseResults/300.frag.out
index 63abec1..ee1b8a5 100644
--- a/Test/baseResults/300.frag.out
+++ b/Test/baseResults/300.frag.out
@@ -1,7 +1,7 @@
 300.frag
 ERROR: 0:2: 'float' : type requires declaration of default precision qualifier 
 ERROR: 0:30: 'noperspective' : Reserved word. 
-ERROR: 0:30: 'noperspective' : not supported with this profile: es
+ERROR: 0:30: 'noperspective' : not supported for this version or the enabled extensions 
 ERROR: 0:31: 'sampler2D' : sampler/image types can only be used in uniform variables or function parameters: bads
 ERROR: 0:32: 'uint' : cannot apply precision statement to this type; use 'float', 'int' or a sampler type 
 ERROR: 0:39: 'structure' : must be qualified as flat in
@@ -26,6 +26,7 @@
 ERROR: 0:102: 'arrays of arrays' : not supported for this version or the enabled extensions 
 ERROR: 0:102: 'arrays of arrays' : not supported for this version or the enabled extensions 
 ERROR: 0:103: 'arrays of arrays' : not supported for this version or the enabled extensions 
+ERROR: 0:103: 'arrays of arrays' : not supported for this version or the enabled extensions 
 ERROR: 0:100: 'arrays of arrays' : not supported for this version or the enabled extensions 
 ERROR: 0:100: 'array-of-array of block' : not supported with this profile: es
 ERROR: 0:111: 'variable indexing fragment shader output array' : not supported with this profile: es
@@ -44,7 +45,7 @@
 ERROR: 0:158: 'invariant' : can only apply to an output 
 ERROR: 0:160: 'imageBuffer' : Reserved word. 
 ERROR: 0:160: '' :  syntax error, unexpected IMAGEBUFFER, expecting COMMA or SEMICOLON
-ERROR: 45 compilation errors.  No code generated.
+ERROR: 46 compilation errors.  No code generated.
 
 
 Shader version: 300
@@ -392,7 +393,7 @@
 0:?     'sc' ( out lowp 3-component vector of float)
 0:?     'sf' ( out lowp float)
 0:?     'arrayedSampler' ( uniform 5-element array of lowp sampler2D)
-0:?     'multiInst' (layout( column_major shared) uniform 2-element array of 3-element array of block{layout( column_major shared) uniform 2-element array of mediump int a, layout( column_major shared) uniform 2-element array of 3-element array of mediump int b, layout( column_major shared) uniform 2-element array of 3-element array of mediump int c})
+0:?     'multiInst' (layout( column_major shared) uniform 2-element array of 3-element array of block{layout( column_major shared) uniform 3-element array of 2-element array of mediump int a, layout( column_major shared) uniform 2-element array of 3-element array of mediump int b, layout( column_major shared) uniform 2-element array of 3-element array of mediump int c})
 0:?     'colors' ( out 4-element array of lowp 4-component vector of float)
 0:?     'st1' ( uniform structure{ global mediump int i,  global lowp sampler2D s})
 0:?     'st2' ( uniform structure{ global mediump int i,  global lowp sampler2D s})
@@ -623,7 +624,7 @@
 0:?     'sc' ( out lowp 3-component vector of float)
 0:?     'sf' ( out lowp float)
 0:?     'arrayedSampler' ( uniform 5-element array of lowp sampler2D)
-0:?     'multiInst' (layout( column_major shared) uniform 2-element array of 3-element array of block{layout( column_major shared) uniform 2-element array of mediump int a, layout( column_major shared) uniform 2-element array of 3-element array of mediump int b, layout( column_major shared) uniform 2-element array of 3-element array of mediump int c})
+0:?     'multiInst' (layout( column_major shared) uniform 2-element array of 3-element array of block{layout( column_major shared) uniform 3-element array of 2-element array of mediump int a, layout( column_major shared) uniform 2-element array of 3-element array of mediump int b, layout( column_major shared) uniform 2-element array of 3-element array of mediump int c})
 0:?     'colors' ( out 4-element array of lowp 4-component vector of float)
 0:?     'st1' ( uniform structure{ global mediump int i,  global lowp sampler2D s})
 0:?     'st2' ( uniform structure{ global mediump int i,  global lowp sampler2D s})
diff --git a/Test/baseResults/300.vert.out b/Test/baseResults/300.vert.out
index 507ad73..95ebb92 100644
--- a/Test/baseResults/300.vert.out
+++ b/Test/baseResults/300.vert.out
@@ -320,9 +320,9 @@
 0:?     'rep2' ( centroid smooth sample out highp 4-component vector of float)
 0:?     'rep3' ( in highp 4-component vector of float)
 0:?     's' ( smooth out structure{ global highp 3-component vector of float c,  global highp float f})
-0:?     'badsize' ( global implicitly-sized array of highp float)
-0:?     'badsize2' ( global implicitly-sized array of highp float)
-0:?     'ubInst' (layout( column_major shared) uniform implicitly-sized array of block{layout( column_major shared) uniform implicitly-sized array of highp int a})
+0:?     'badsize' ( global unsized 1-element array of highp float)
+0:?     'badsize2' ( global unsized 1-element array of highp float)
+0:?     'ubInst' (layout( column_major shared) uniform unsized 1-element array of block{layout( column_major shared) uniform unsized 1-element array of highp int a})
 0:?     'okayA' ( global 2-element array of highp float)
 0:?     'newV' ( invariant smooth out highp 3-component vector of float)
 0:?     'invIn' ( invariant in highp 4-component vector of float)
diff --git a/Test/baseResults/310.comp.out b/Test/baseResults/310.comp.out
index f2d48ef..5a926f6 100644
--- a/Test/baseResults/310.comp.out
+++ b/Test/baseResults/310.comp.out
@@ -40,7 +40,6 @@
 ERROR: 0:128: 'atomic_uint' : samplers and atomic_uints cannot be output parameters 
 ERROR: 0:130: 'return' : type does not match, or is not convertible to, the function's return type 
 ERROR: 0:136: 'atomic_uint' : atomic_uints can only be used in uniform variables or function parameters: non_uniform_counter
-ERROR: 0:136: 'atomic_uint' : layout(binding=X) is required 
 ERROR: 0:141: 'atomic_uint' : atomic counters can only be highp 
 ERROR: 0:141: 'binding' : atomic_uint binding is too large; see gl_MaxAtomicCounterBindings 
 ERROR: 0:143: 'binding' : atomic_uint binding is too large; see gl_MaxAtomicCounterBindings 
@@ -84,7 +83,7 @@
 ERROR: 0:244: 'gl_DeviceIndex' : required extension not requested: GL_EXT_device_group
 ERROR: 0:245: 'gl_ViewIndex' : undeclared identifier 
 ERROR: 0:255: 'gl_ViewIndex' : undeclared identifier 
-ERROR: 83 compilation errors.  No code generated.
+ERROR: 82 compilation errors.  No code generated.
 
 
 Shader version: 310
@@ -103,13 +102,13 @@
 0:35      GroupMemoryBarrier ( global void)
 0:36      move second child to first child ( temp highp int)
 0:36        value: direct index for structure (layout( column_major shared) buffer highp int)
-0:36          'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values})
+0:36          'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer runtime-sized array of highp float values})
 0:36          Constant:
 0:36            0 (const uint)
 0:36        Convert float to int ( temp highp int)
 0:36          indirect index (layout( column_major shared) temp highp float)
-0:36            values: direct index for structure (layout( column_major shared) buffer implicitly-sized array of highp float)
-0:36              'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values})
+0:36            values: direct index for structure (layout( column_major shared) buffer runtime-sized array of highp float)
+0:36              'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer runtime-sized array of highp float values})
 0:36              Constant:
 0:36                1 (const uint)
 0:36            'gl_LocalInvocationIndex' ( in highp uint LocalInvocationIndex)
@@ -118,8 +117,8 @@
 0:61    Sequence
 0:61      move second child to first child ( temp highp float)
 0:61        direct index (layout( column_major shared) temp highp float)
-0:61          values: direct index for structure (layout( column_major shared) buffer implicitly-sized array of highp float)
-0:61            'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values})
+0:61          values: direct index for structure (layout( column_major shared) buffer unsized 3-element array of highp float)
+0:61            'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer unsized 3-element array of highp float values})
 0:61            Constant:
 0:61              1 (const int)
 0:61          Constant:
@@ -127,8 +126,8 @@
 0:61        Constant:
 0:61          4.700000
 0:62      array length ( temp int)
-0:62        values: direct index for structure (layout( column_major shared) buffer implicitly-sized array of highp float)
-0:62          'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values})
+0:62        values: direct index for structure (layout( column_major shared) buffer unsized 3-element array of highp float)
+0:62          'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer unsized 3-element array of highp float values})
 0:62          Constant:
 0:62            1 (const int)
 0:63      Pre-Increment ( temp highp 4-component vector of float)
@@ -281,8 +280,8 @@
 0:194      move second child to first child ( temp highp float)
 0:194        'g' ( temp highp float)
 0:194        direct index (layout( column_major shared) temp highp float)
-0:194          values: direct index for structure (layout( column_major shared) buffer implicitly-sized array of highp float)
-0:194            'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values})
+0:194          values: direct index for structure (layout( column_major shared) buffer unsized 3-element array of highp float)
+0:194            'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer unsized 3-element array of highp float values})
 0:194            Constant:
 0:194              1 (const int)
 0:194          Constant:
@@ -291,24 +290,24 @@
 0:195        move second child to first child ( temp highp float)
 0:195          'f' ( temp highp float)
 0:195          direct index (layout( column_major shared) temp highp float)
-0:195            values: direct index for structure (layout( column_major shared) buffer implicitly-sized array of highp float)
-0:195              'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values})
+0:195            values: direct index for structure (layout( column_major shared) buffer unsized 3-element array of highp float)
+0:195              'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer unsized 3-element array of highp float values})
 0:195              Constant:
 0:195                1 (const int)
 0:195            Constant:
 0:195              2 (const int)
 0:196      Pre-Increment ( temp highp float)
 0:196        direct index (layout( column_major shared) temp highp float)
-0:196          values: direct index for structure (layout( column_major shared) buffer implicitly-sized array of highp float)
-0:196            'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values})
+0:196          values: direct index for structure (layout( column_major shared) buffer unsized 3-element array of highp float)
+0:196            'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer unsized 3-element array of highp float values})
 0:196            Constant:
 0:196              1 (const int)
 0:196          Constant:
 0:196            2 (const int)
 0:197      Post-Decrement ( temp highp float)
 0:197        direct index (layout( column_major shared) temp highp float)
-0:197          values: direct index for structure (layout( column_major shared) buffer implicitly-sized array of highp float)
-0:197            'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values})
+0:197          values: direct index for structure (layout( column_major shared) buffer unsized 3-element array of highp float)
+0:197            'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer unsized 3-element array of highp float values})
 0:197            Constant:
 0:197              1 (const int)
 0:197          Constant:
@@ -316,16 +315,16 @@
 0:198      add ( temp highp float)
 0:198        'f' ( temp highp float)
 0:198        direct index (layout( column_major shared) temp highp float)
-0:198          values: direct index for structure (layout( column_major shared) buffer implicitly-sized array of highp float)
-0:198            'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values})
+0:198          values: direct index for structure (layout( column_major shared) buffer unsized 3-element array of highp float)
+0:198            'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer unsized 3-element array of highp float values})
 0:198            Constant:
 0:198              1 (const int)
 0:198          Constant:
 0:198            2 (const int)
 0:199      subtract ( temp highp float)
 0:199        direct index (layout( column_major shared) temp highp float)
-0:199          values: direct index for structure (layout( column_major shared) buffer implicitly-sized array of highp float)
-0:199            'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values})
+0:199          values: direct index for structure (layout( column_major shared) buffer unsized 3-element array of highp float)
+0:199            'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer unsized 3-element array of highp float values})
 0:199            Constant:
 0:199              1 (const int)
 0:199          Constant:
@@ -338,8 +337,8 @@
 0:201        'f' ( temp highp float)
 0:201        false case
 0:201        direct index (layout( column_major shared) temp highp float)
-0:201          values: direct index for structure (layout( column_major shared) buffer implicitly-sized array of highp float)
-0:201            'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values})
+0:201          values: direct index for structure (layout( column_major shared) buffer unsized 3-element array of highp float)
+0:201            'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer unsized 3-element array of highp float values})
 0:201            Constant:
 0:201              1 (const int)
 0:201          Constant:
@@ -349,8 +348,8 @@
 0:202        'b' ( temp bool)
 0:202        true case
 0:202        direct index (layout( column_major shared) temp highp float)
-0:202          values: direct index for structure (layout( column_major shared) buffer implicitly-sized array of highp float)
-0:202            'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values})
+0:202          values: direct index for structure (layout( column_major shared) buffer unsized 3-element array of highp float)
+0:202            'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer unsized 3-element array of highp float values})
 0:202            Constant:
 0:202              1 (const int)
 0:202          Constant:
@@ -362,8 +361,8 @@
 0:203        Compare Equal ( temp bool)
 0:203          'f' ( temp highp float)
 0:203          direct index (layout( column_major shared) temp highp float)
-0:203            values: direct index for structure (layout( column_major shared) buffer implicitly-sized array of highp float)
-0:203              'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values})
+0:203            values: direct index for structure (layout( column_major shared) buffer unsized 3-element array of highp float)
+0:203              'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer unsized 3-element array of highp float values})
 0:203              Constant:
 0:203                1 (const int)
 0:203            Constant:
@@ -376,8 +375,8 @@
 0:205        Compare Greater Than or Equal ( temp bool)
 0:205          'f' ( temp highp float)
 0:205          direct index (layout( column_major shared) temp highp float)
-0:205            values: direct index for structure (layout( column_major shared) buffer implicitly-sized array of highp float)
-0:205              'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values})
+0:205            values: direct index for structure (layout( column_major shared) buffer unsized 3-element array of highp float)
+0:205              'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer unsized 3-element array of highp float values})
 0:205              Constant:
 0:205                1 (const int)
 0:205            Constant:
@@ -390,8 +389,8 @@
 0:207        direct index ( temp highp float)
 0:207          Construct vec3 ( temp highp 3-component vector of float)
 0:207            direct index (layout( column_major shared) temp highp float)
-0:207              values: direct index for structure (layout( column_major shared) buffer implicitly-sized array of highp float)
-0:207                'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values})
+0:207              values: direct index for structure (layout( column_major shared) buffer unsized 3-element array of highp float)
+0:207                'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer unsized 3-element array of highp float values})
 0:207                Constant:
 0:207                  1 (const int)
 0:207              Constant:
@@ -400,13 +399,13 @@
 0:207            0 (const int)
 0:208      Bitwise not ( temp highp int)
 0:208        value: direct index for structure (layout( column_major shared) buffer highp int)
-0:208          'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values})
+0:208          'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer unsized 3-element array of highp float values})
 0:208          Constant:
 0:208            0 (const int)
 0:209      move second child to first child ( temp highp float)
 0:209        direct index (layout( column_major shared) temp highp float)
-0:209          values: direct index for structure (layout( column_major shared) buffer implicitly-sized array of highp float)
-0:209            'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values})
+0:209          values: direct index for structure (layout( column_major shared) buffer unsized 3-element array of highp float)
+0:209            'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer unsized 3-element array of highp float values})
 0:209            Constant:
 0:209              1 (const int)
 0:209          Constant:
@@ -419,21 +418,21 @@
 0:221      move second child to first child ( temp highp float)
 0:221        'g' ( temp highp float)
 0:221        direct index (layout( column_major shared) temp highp float)
-0:221          values: direct index for structure (layout( column_major shared) buffer implicitly-sized array of highp float)
-0:221            'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values})
+0:221          values: direct index for structure (layout( column_major shared) buffer unsized 3-element array of highp float)
+0:221            'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer unsized 3-element array of highp float values})
 0:221            Constant:
 0:221              1 (const int)
 0:221          Constant:
 0:221            2 (const int)
 0:222      Bitwise not ( temp highp int)
 0:222        value: direct index for structure (layout( column_major shared) buffer highp int)
-0:222          'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values})
+0:222          'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer unsized 3-element array of highp float values})
 0:222          Constant:
 0:222            0 (const int)
 0:223      move second child to first child ( temp highp float)
 0:223        direct index (layout( column_major shared) temp highp float)
-0:223          values: direct index for structure (layout( column_major shared) buffer implicitly-sized array of highp float)
-0:223            'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values})
+0:223          values: direct index for structure (layout( column_major shared) buffer unsized 3-element array of highp float)
+0:223            'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer unsized 3-element array of highp float values})
 0:223            Constant:
 0:223              1 (const int)
 0:223          Constant:
@@ -442,7 +441,7 @@
 0:223          3.400000
 0:224      move second child to first child ( temp highp int)
 0:224        value: direct index for structure (layout( column_major shared) buffer highp int)
-0:224          'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values})
+0:224          'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer unsized 3-element array of highp float values})
 0:224          Constant:
 0:224            0 (const int)
 0:224        Constant:
@@ -464,8 +463,8 @@
 0:?       4096 (const uint)
 0:?     'total' ( const highp int)
 0:?       66592 (const int)
-0:?     'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values})
-0:?     'invalid' (layout( column_major shared) buffer block{layout( column_major shared) buffer implicitly-sized array of highp float values, layout( column_major shared) buffer highp int value})
+0:?     'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer runtime-sized array of highp float values})
+0:?     'invalid' (layout( column_major shared) buffer block{layout( column_major shared) buffer unsized 1-element array of highp float values, layout( column_major shared) buffer highp int value})
 0:?     'v3' (layout( location=2) in highp 3-component vector of float)
 0:?     'f' ( in highp float)
 0:?     'fo' ( out highp float)
@@ -475,7 +474,7 @@
 0:?     'arrX' ( global 2-element array of highp int)
 0:?     'arrY' ( global 1-element array of highp int)
 0:?     'arrZ' ( global 4096-element array of highp int)
-0:?     'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values})
+0:?     'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer unsized 3-element array of highp float values})
 0:?     'v' ( buffer highp 4-component vector of float)
 0:?     'us2dbad' ( uniform mediump usampler2D)
 0:?     'us2d' ( uniform highp usampler2D)
@@ -514,8 +513,8 @@
 0:?     'badQ1' (layout( rgba32f) coherent volatile restrict uniform highp image2D)
 0:?     'badQ2' (layout( rgba8i) coherent volatile restrict uniform highp iimage2D)
 0:?     'badQ3' (layout( rgba16ui) coherent volatile restrict uniform highp uimage2D)
-0:?     'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values})
-0:?     'multio' (layout( column_major shared) buffer block{layout( column_major shared) readonly buffer highp int value, layout( column_major shared) writeonly buffer implicitly-sized array of highp float values})
+0:?     'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer unsized 3-element array of highp float values})
+0:?     'multio' (layout( column_major shared) buffer block{layout( column_major shared) readonly buffer highp int value, layout( column_major shared) writeonly buffer unsized 1-element array of highp float values})
 0:?     'inbi' ( in block{ in highp int a})
 0:?     'outbi' ( out block{ out highp int a})
 0:?     't__' ( global highp float)
@@ -541,13 +540,13 @@
 0:35      GroupMemoryBarrier ( global void)
 0:36      move second child to first child ( temp highp int)
 0:36        value: direct index for structure (layout( column_major shared) buffer highp int)
-0:36          'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values})
+0:36          'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer runtime-sized array of highp float values})
 0:36          Constant:
 0:36            0 (const uint)
 0:36        Convert float to int ( temp highp int)
 0:36          indirect index (layout( column_major shared) temp highp float)
-0:36            values: direct index for structure (layout( column_major shared) buffer implicitly-sized array of highp float)
-0:36              'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values})
+0:36            values: direct index for structure (layout( column_major shared) buffer runtime-sized array of highp float)
+0:36              'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer runtime-sized array of highp float values})
 0:36              Constant:
 0:36                1 (const uint)
 0:36            'gl_LocalInvocationIndex' ( in highp uint LocalInvocationIndex)
@@ -558,8 +557,8 @@
 0:?       4096 (const uint)
 0:?     'total' ( const highp int)
 0:?       66592 (const int)
-0:?     'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values})
-0:?     'invalid' (layout( column_major shared) buffer block{layout( column_major shared) buffer implicitly-sized array of highp float values, layout( column_major shared) buffer highp int value})
+0:?     'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer runtime-sized array of highp float values})
+0:?     'invalid' (layout( column_major shared) buffer block{layout( column_major shared) buffer 1-element array of highp float values, layout( column_major shared) buffer highp int value})
 0:?     'v3' (layout( location=2) in highp 3-component vector of float)
 0:?     'f' ( in highp float)
 0:?     'fo' ( out highp float)
@@ -569,7 +568,7 @@
 0:?     'arrX' ( global 2-element array of highp int)
 0:?     'arrY' ( global 1-element array of highp int)
 0:?     'arrZ' ( global 4096-element array of highp int)
-0:?     'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values})
+0:?     'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer unsized 3-element array of highp float values})
 0:?     'v' ( buffer highp 4-component vector of float)
 0:?     'us2dbad' ( uniform mediump usampler2D)
 0:?     'us2d' ( uniform highp usampler2D)
@@ -608,8 +607,8 @@
 0:?     'badQ1' (layout( rgba32f) coherent volatile restrict uniform highp image2D)
 0:?     'badQ2' (layout( rgba8i) coherent volatile restrict uniform highp iimage2D)
 0:?     'badQ3' (layout( rgba16ui) coherent volatile restrict uniform highp uimage2D)
-0:?     'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values})
-0:?     'multio' (layout( column_major shared) buffer block{layout( column_major shared) readonly buffer highp int value, layout( column_major shared) writeonly buffer implicitly-sized array of highp float values})
+0:?     'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer unsized 3-element array of highp float values})
+0:?     'multio' (layout( column_major shared) buffer block{layout( column_major shared) readonly buffer highp int value, layout( column_major shared) writeonly buffer unsized 1-element array of highp float values})
 0:?     'inbi' ( in block{ in highp int a})
 0:?     'outbi' ( out block{ out highp int a})
 0:?     't__' ( global highp float)
diff --git a/Test/baseResults/310.frag.out b/Test/baseResults/310.frag.out
index 8107556..6763c0a 100644
--- a/Test/baseResults/310.frag.out
+++ b/Test/baseResults/310.frag.out
@@ -105,7 +105,7 @@
 ERROR: 0:347: 'flat/smooth/noperspective' : can't use interpolation qualifier on a fragment output 
 ERROR: 0:348: 'flat/smooth/noperspective' : can't use interpolation qualifier on a fragment output 
 ERROR: 0:349: 'noperspective' : Reserved word. 
-ERROR: 0:349: 'noperspective' : not supported with this profile: es
+ERROR: 0:349: 'noperspective' : not supported for this version or the enabled extensions 
 ERROR: 0:349: 'flat/smooth/noperspective' : can't use interpolation qualifier on a fragment output 
 ERROR: 0:355: 'interpolateAtCentroid' : required extension not requested: GL_OES_shader_multisample_interpolation
 ERROR: 0:356: 'interpolateAtSample' : required extension not requested: GL_OES_shader_multisample_interpolation
@@ -569,12 +569,12 @@
 0:259        move second child to first child ( temp highp int)
 0:259          'a3' ( temp highp int)
 0:259          direct index ( flat temp highp int SampleMaskIn)
-0:259            'gl_SampleMaskIn' ( flat in implicitly-sized array of highp int SampleMaskIn)
+0:259            'gl_SampleMaskIn' ( flat in unsized 1-element array of highp int SampleMaskIn)
 0:259            Constant:
 0:259              0 (const int)
 0:260      move second child to first child ( temp highp int)
 0:260        direct index ( temp highp int SampleMaskIn)
-0:260          'gl_SampleMask' ( out implicitly-sized array of highp int SampleMaskIn)
+0:260          'gl_SampleMask' ( out unsized 1-element array of highp int SampleMaskIn)
 0:260          Constant:
 0:260            0 (const int)
 0:260        'a3' ( temp highp int)
@@ -597,12 +597,12 @@
 0:272        move second child to first child ( temp highp int)
 0:272          'a3' ( temp highp int)
 0:272          direct index ( flat temp highp int SampleMaskIn)
-0:272            'gl_SampleMaskIn' ( flat in implicitly-sized array of highp int SampleMaskIn)
+0:272            'gl_SampleMaskIn' ( flat in unsized 1-element array of highp int SampleMaskIn)
 0:272            Constant:
 0:272              0 (const int)
 0:273      move second child to first child ( temp highp int)
 0:273        direct index ( temp highp int SampleMaskIn)
-0:273          'gl_SampleMask' ( out implicitly-sized array of highp int SampleMaskIn)
+0:273          'gl_SampleMask' ( out unsized 1-element array of highp int SampleMaskIn)
 0:273          Constant:
 0:273            0 (const int)
 0:273        'a3' ( temp highp int)
@@ -1001,8 +1001,8 @@
 0:?     'CA5' ( uniform highp samplerCubeArrayShadow)
 0:?     'CA6' ( uniform highp isamplerCubeArray)
 0:?     'CA7' ( uniform highp usamplerCubeArray)
-0:?     'gl_SampleMaskIn' ( flat in implicitly-sized array of highp int SampleMaskIn)
-0:?     'gl_SampleMask' ( out implicitly-sized array of highp int SampleMaskIn)
+0:?     'gl_SampleMaskIn' ( flat in unsized 1-element array of highp int SampleMaskIn)
+0:?     'gl_SampleMask' ( out unsized 1-element array of highp int SampleMaskIn)
 0:?     'im2Df' (layout( r32f) uniform highp image2D)
 0:?     'im2Du' (layout( r32ui) uniform highp uimage2D)
 0:?     'im2Di' (layout( r32i) uniform highp iimage2D)
diff --git a/Test/baseResults/310.tesc.out b/Test/baseResults/310.tesc.out
index 01d7ecf..433a7dc 100644
--- a/Test/baseResults/310.tesc.out
+++ b/Test/baseResults/310.tesc.out
@@ -70,8 +70,8 @@
 0:25        move second child to first child ( temp highp 4-component vector of float)
 0:25          'p' ( temp highp 4-component vector of float)
 0:25          gl_Position: direct index for structure ( in highp 4-component vector of float Position)
-0:25            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in implicitly-sized array of highp 4-component vector of float gl_PositionPerViewNV})
-0:25              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in implicitly-sized array of highp 4-component vector of float gl_PositionPerViewNV})
+0:25            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
+0:25              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
 0:25              Constant:
 0:25                1 (const int)
 0:25            Constant:
@@ -80,8 +80,8 @@
 0:26        move second child to first child ( temp highp float)
 0:26          'ps' ( temp highp float)
 0:26          gl_PointSize: direct index for structure ( in highp float PointSize)
-0:26            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in implicitly-sized array of highp 4-component vector of float gl_PositionPerViewNV})
-0:26              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in implicitly-sized array of highp 4-component vector of float gl_PositionPerViewNV})
+0:26            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
+0:26              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
 0:26              Constant:
 0:26                1 (const int)
 0:26            Constant:
@@ -209,8 +209,8 @@
 0:114        move second child to first child ( temp highp float)
 0:114          'ps' ( temp highp float)
 0:114          gl_PointSize: direct index for structure ( in highp float PointSize)
-0:114            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in implicitly-sized array of highp 4-component vector of float gl_PositionPerViewNV})
-0:114              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in implicitly-sized array of highp 4-component vector of float gl_PositionPerViewNV})
+0:114            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
+0:114              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
 0:114              Constant:
 0:114                1 (const int)
 0:114            Constant:
@@ -357,7 +357,7 @@
 0:?     'inb' ( in 32-element array of highp 2-component vector of float)
 0:?     'inc' ( in 32-element array of highp 2-component vector of float)
 0:?     'ind' ( in 32-element array of highp 2-component vector of float)
-0:?     'implA' ( patch out implicitly-sized array of highp float)
+0:?     'implA' ( patch out unsized 1-element array of highp float)
 0:?     'ivla' (layout( location=3) in 32-element array of highp 4-component vector of float)
 0:?     'ivlb' (layout( location=4) in 32-element array of highp 4-component vector of float)
 0:?     'ivlc' (layout( location=4) in 32-element array of highp 4-component vector of float)
@@ -372,7 +372,7 @@
 0:?     'misSized' ( out 5-element array of highp float)
 0:?     'okaySize' ( out 4-element array of highp float)
 0:?     'pv3' ( noContraction temp highp 3-component vector of float)
-0:?     'badpatchIName' ( patch out implicitly-sized array of block{ out highp float f})
+0:?     'badpatchIName' ( patch out unsized 1-element array of block{ out highp float f})
 0:?     'patchIName' ( patch out 4-element array of block{ out highp float f})
 
 
diff --git a/Test/baseResults/310.tese.out b/Test/baseResults/310.tese.out
index 52d19b4..7d91e93 100644
--- a/Test/baseResults/310.tese.out
+++ b/Test/baseResults/310.tese.out
@@ -21,11 +21,11 @@
 ERROR: 0:51: 'patch' : cannot use interpolation qualifiers with patch 
 ERROR: 0:52: 'patch' : cannot use interpolation qualifiers with patch 
 ERROR: 0:53: 'noperspective' : Reserved word. 
-ERROR: 0:53: 'noperspective' : not supported with this profile: es
+ERROR: 0:53: 'noperspective' : not supported for this version or the enabled extensions 
 ERROR: 0:53: 'patch' : cannot use interpolation qualifiers with patch 
 ERROR: 0:54: 'sample' : Reserved word. 
 ERROR: 0:54: '' : can only have one auxiliary qualifier (centroid, patch, and sample) 
-ERROR: 0:58: 'gl_PerVertex' : block already declared with size, can't redeclare as implicitly-sized 
+ERROR: 0:58: 'gl_PerVertex' : block already declared with size, can't redeclare as unsized 
 ERROR: 0:63: 'gl_PerVertex' : can only redeclare a built-in block once, and before any use 
 ERROR: 0:68: 'quads' : cannot apply to 'out' 
 ERROR: 0:68: 'cw' : can only apply to 'in' 
@@ -77,8 +77,8 @@
 0:36        move second child to first child ( temp highp 4-component vector of float)
 0:36          'p' ( temp highp 4-component vector of float)
 0:36          gl_Position: direct index for structure ( in highp 4-component vector of float Position)
-0:36            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in implicitly-sized array of highp 4-component vector of float gl_PositionPerViewNV})
-0:36              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in implicitly-sized array of highp 4-component vector of float gl_PositionPerViewNV})
+0:36            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
+0:36              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
 0:36              Constant:
 0:36                1 (const int)
 0:36            Constant:
@@ -87,8 +87,8 @@
 0:37        move second child to first child ( temp highp float)
 0:37          'ps' ( temp highp float)
 0:37          gl_PointSize: direct index for structure ( in highp float PointSize)
-0:37            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in implicitly-sized array of highp 4-component vector of float gl_PositionPerViewNV})
-0:37              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in implicitly-sized array of highp 4-component vector of float gl_PositionPerViewNV})
+0:37            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
+0:37              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
 0:37              Constant:
 0:37                1 (const int)
 0:37            Constant:
diff --git a/Test/baseResults/310AofA.vert.out b/Test/baseResults/310AofA.vert.out
index 882c58a..451cc0b 100644
--- a/Test/baseResults/310AofA.vert.out
+++ b/Test/baseResults/310AofA.vert.out
@@ -7,12 +7,12 @@
 ERROR: 0:49: 'constructor' : array constructor argument not correct type to construct array element 
 ERROR: 0:62: '[' :  array index out of range '4'
 ERROR: 0:78: 'assign' :  cannot convert from ' global 4-element array of 7-element array of highp float' to ' global 5-element array of 7-element array of highp float'
-ERROR: 0:79: 'assign' :  cannot convert from ' global 4-element array of 7-element array of highp float' to ' global implicitly-sized array of 7-element array of highp float'
+ERROR: 0:79: 'assign' :  cannot convert from ' global 4-element array of 7-element array of highp float' to ' global unsized 1-element array of 7-element array of highp float'
 ERROR: 0:81: 'foo' : no matching overloaded function found 
 ERROR: 0:86: '==' :  wrong operand types: no operation '==' exists that takes a left-hand operand of type ' global 4-element array of 7-element array of highp float' and a right operand of type ' global 5-element array of 7-element array of highp float' (or there is no acceptable conversion)
 ERROR: 0:90: '[' :  array index out of range '5'
 ERROR: 0:94: '[' :  index out of range '-1'
-ERROR: 0:96: 'assign' :  cannot convert from ' temp 3-element array of highp 4-component vector of float' to 'layout( column_major shared) buffer implicitly-sized array of highp 4-component vector of float'
+ERROR: 0:96: 'assign' :  cannot convert from ' temp 3-element array of highp 4-component vector of float' to 'layout( column_major shared) buffer unsized 2-element array of highp 4-component vector of float'
 ERROR: 0:103: '' : array size required 
 ERROR: 0:104: '' : array size required 
 ERROR: 0:105: '' : array size required 
@@ -245,7 +245,7 @@
 0:77        Function Call: foo(f1[5][7]; ( global 4-element array of 7-element array of highp float)
 0:77          'g5' ( global 5-element array of 7-element array of highp float)
 0:78      'g5' ( global 5-element array of 7-element array of highp float)
-0:79      'gu' ( global implicitly-sized array of 7-element array of highp float)
+0:79      'gu' ( global unsized 1-element array of 7-element array of highp float)
 0:81      Constant:
 0:81        0.000000
 0:82      Function Call: bar(f1[5][7]; ( global void)
@@ -275,9 +275,9 @@
 0:91      Function Call: foo(f1[5][7]; ( global 4-element array of 7-element array of highp float)
 0:91        'u' ( temp 5-element array of 7-element array of highp float)
 0:94      direct index (layout( column_major shared) temp highp 4-component vector of float)
-0:94        v: direct index for structure (layout( column_major shared) buffer implicitly-sized array of highp 4-component vector of float)
-0:94          direct index (layout( column_major shared) temp block{layout( column_major shared) buffer implicitly-sized array of highp float u, layout( column_major shared) buffer implicitly-sized array of highp 4-component vector of float v})
-0:94            'name' (layout( column_major shared) buffer 3-element array of block{layout( column_major shared) buffer implicitly-sized array of highp float u, layout( column_major shared) buffer implicitly-sized array of highp 4-component vector of float v})
+0:94        v: direct index for structure (layout( column_major shared) buffer unsized 2-element array of highp 4-component vector of float)
+0:94          direct index (layout( column_major shared) temp block{layout( column_major shared) buffer unsized 1-element array of highp float u, layout( column_major shared) buffer unsized 2-element array of highp 4-component vector of float v})
+0:94            'name' (layout( column_major shared) buffer 3-element array of block{layout( column_major shared) buffer unsized 1-element array of highp float u, layout( column_major shared) buffer unsized 2-element array of highp 4-component vector of float v})
 0:94            Constant:
 0:94              1 (const int)
 0:94          Constant:
@@ -286,9 +286,9 @@
 0:94          -1 (const int)
 0:95      move second child to first child ( temp highp 4-component vector of float)
 0:95        direct index (layout( column_major shared) temp highp 4-component vector of float)
-0:95          v: direct index for structure (layout( column_major shared) buffer implicitly-sized array of highp 4-component vector of float)
-0:95            direct index (layout( column_major shared) temp block{layout( column_major shared) buffer implicitly-sized array of highp float u, layout( column_major shared) buffer implicitly-sized array of highp 4-component vector of float v})
-0:95              'name' (layout( column_major shared) buffer 3-element array of block{layout( column_major shared) buffer implicitly-sized array of highp float u, layout( column_major shared) buffer implicitly-sized array of highp 4-component vector of float v})
+0:95          v: direct index for structure (layout( column_major shared) buffer unsized 2-element array of highp 4-component vector of float)
+0:95            direct index (layout( column_major shared) temp block{layout( column_major shared) buffer unsized 1-element array of highp float u, layout( column_major shared) buffer unsized 2-element array of highp 4-component vector of float v})
+0:95              'name' (layout( column_major shared) buffer 3-element array of block{layout( column_major shared) buffer unsized 1-element array of highp float u, layout( column_major shared) buffer unsized 2-element array of highp 4-component vector of float v})
 0:95              Constant:
 0:95                1 (const int)
 0:95            Constant:
@@ -300,9 +300,9 @@
 0:95          4.300000
 0:95          4.300000
 0:95          4.300000
-0:96      v: direct index for structure (layout( column_major shared) buffer implicitly-sized array of highp 4-component vector of float)
-0:96        direct index (layout( column_major shared) temp block{layout( column_major shared) buffer implicitly-sized array of highp float u, layout( column_major shared) buffer implicitly-sized array of highp 4-component vector of float v})
-0:96          'name' (layout( column_major shared) buffer 3-element array of block{layout( column_major shared) buffer implicitly-sized array of highp float u, layout( column_major shared) buffer implicitly-sized array of highp 4-component vector of float v})
+0:96      v: direct index for structure (layout( column_major shared) buffer unsized 2-element array of highp 4-component vector of float)
+0:96        direct index (layout( column_major shared) temp block{layout( column_major shared) buffer unsized 1-element array of highp float u, layout( column_major shared) buffer unsized 2-element array of highp 4-component vector of float v})
+0:96          'name' (layout( column_major shared) buffer 3-element array of block{layout( column_major shared) buffer unsized 1-element array of highp float u, layout( column_major shared) buffer unsized 2-element array of highp 4-component vector of float v})
 0:96          Constant:
 0:96            1 (const int)
 0:96        Constant:
@@ -310,20 +310,39 @@
 0:98      Constant:
 0:98        7 (const int)
 0:99      array length ( temp int)
-0:99        v: direct index for structure (layout( column_major shared) buffer implicitly-sized array of 7-element array of highp 4-component vector of float)
-0:99          direct index (layout( column_major shared) temp block{layout( column_major shared) buffer highp float u, layout( column_major shared) buffer implicitly-sized array of 7-element array of highp 4-component vector of float v})
-0:99            'name3' (layout( column_major shared) buffer 3-element array of block{layout( column_major shared) buffer highp float u, layout( column_major shared) buffer implicitly-sized array of 7-element array of highp 4-component vector of float v})
+0:99        v: direct index for structure (layout( column_major shared) buffer unsized 2-element array of 7-element array of highp 4-component vector of float)
+0:99          direct index (layout( column_major shared) temp block{layout( column_major shared) buffer highp float u, layout( column_major shared) buffer unsized 2-element array of 7-element array of highp 4-component vector of float v})
+0:99            'name3' (layout( column_major shared) buffer 3-element array of block{layout( column_major shared) buffer highp float u, layout( column_major shared) buffer unsized 2-element array of 7-element array of highp 4-component vector of float v})
 0:99            Constant:
 0:99              0 (const int)
 0:99          Constant:
 0:99            1 (const int)
+0:117  Function Definition: func(mf33[3][2]; ( global highp 3-component vector of float)
+0:117    Function Parameters: 
+0:117      'x' ( in 3-element array of 2-element array of highp 3X3 matrix of float)
+0:119    Sequence
+0:119      Sequence
+0:119        move second child to first child ( temp highp 3X3 matrix of float)
+0:119          'a0' ( temp highp 3X3 matrix of float)
+0:119          direct index ( temp highp 3X3 matrix of float)
+0:119            direct index ( temp 2-element array of highp 3X3 matrix of float)
+0:119              'x' ( in 3-element array of 2-element array of highp 3X3 matrix of float)
+0:119              Constant:
+0:119                2 (const int)
+0:119            Constant:
+0:119              1 (const int)
+0:120      Branch: Return with expression
+0:120        direct index ( temp highp 3-component vector of float)
+0:120          'a0' ( temp highp 3X3 matrix of float)
+0:120          Constant:
+0:120            2 (const int)
 0:?   Linker Objects
-0:?     'name' (layout( column_major shared) buffer 3-element array of block{layout( column_major shared) buffer implicitly-sized array of highp float u, layout( column_major shared) buffer implicitly-sized array of highp 4-component vector of float v})
-0:?     'uname' (layout( column_major shared) uniform 3-element array of block{layout( column_major shared) uniform highp float u, layout( column_major shared) uniform implicitly-sized array of highp 4-component vector of float v})
-0:?     'name2' (layout( column_major shared) buffer 3-element array of block{layout( column_major shared) buffer highp float u, layout( column_major shared) buffer implicitly-sized array of implicitly-sized array of highp 4-component vector of float v})
-0:?     'name3' (layout( column_major shared) buffer 3-element array of block{layout( column_major shared) buffer highp float u, layout( column_major shared) buffer implicitly-sized array of 7-element array of highp 4-component vector of float v})
+0:?     'name' (layout( column_major shared) buffer 3-element array of block{layout( column_major shared) buffer unsized 1-element array of highp float u, layout( column_major shared) buffer unsized 2-element array of highp 4-component vector of float v})
+0:?     'uname' (layout( column_major shared) uniform 3-element array of block{layout( column_major shared) uniform highp float u, layout( column_major shared) uniform unsized 1-element array of highp 4-component vector of float v})
+0:?     'name2' (layout( column_major shared) buffer 3-element array of block{layout( column_major shared) buffer highp float u, layout( column_major shared) buffer unsized 1-element array of 1-element array of highp 4-component vector of float v})
+0:?     'name3' (layout( column_major shared) buffer 3-element array of block{layout( column_major shared) buffer highp float u, layout( column_major shared) buffer unsized 2-element array of 7-element array of highp 4-component vector of float v})
 0:?     'many' ( global 1-element array of 2-element array of 3-element array of 4-element array of 5-element array of 6-element array of highp float)
-0:?     'gu' ( global implicitly-sized array of 7-element array of highp float)
+0:?     'gu' ( global unsized 1-element array of 7-element array of highp float)
 0:?     'g4' ( global 4-element array of 7-element array of highp float)
 0:?     'g5' ( global 5-element array of 7-element array of highp float)
 0:?     'inArray' ( in 2-element array of 3-element array of highp float)
@@ -359,10 +378,10 @@
 0:13          2 (const uint)
 0:13        'd' ( temp 3-element array of 2-element array of highp int)
 0:?   Linker Objects
-0:?     'name' (layout( column_major shared) buffer 3-element array of block{layout( column_major shared) buffer implicitly-sized array of highp float u, layout( column_major shared) buffer implicitly-sized array of highp 4-component vector of float v})
+0:?     'name' (layout( column_major shared) buffer 3-element array of block{layout( column_major shared) buffer 1-element array of highp float u, layout( column_major shared) buffer unsized 2-element array of highp 4-component vector of float v})
 0:?     'uname' (layout( column_major shared) uniform 3-element array of block{layout( column_major shared) uniform highp float u, layout( column_major shared) uniform 1-element array of highp 4-component vector of float v})
-0:?     'name2' (layout( column_major shared) buffer 3-element array of block{layout( column_major shared) buffer highp float u, layout( column_major shared) buffer implicitly-sized array of implicitly-sized array of highp 4-component vector of float v})
-0:?     'name3' (layout( column_major shared) buffer 3-element array of block{layout( column_major shared) buffer highp float u, layout( column_major shared) buffer implicitly-sized array of 7-element array of highp 4-component vector of float v})
+0:?     'name2' (layout( column_major shared) buffer 3-element array of block{layout( column_major shared) buffer highp float u, layout( column_major shared) buffer unsized 1-element array of 1-element array of highp 4-component vector of float v})
+0:?     'name3' (layout( column_major shared) buffer 3-element array of block{layout( column_major shared) buffer highp float u, layout( column_major shared) buffer unsized 2-element array of 7-element array of highp 4-component vector of float v})
 0:?     'many' ( global 1-element array of 2-element array of 3-element array of 4-element array of 5-element array of 6-element array of highp float)
 0:?     'gu' ( global 1-element array of 7-element array of highp float)
 0:?     'g4' ( global 4-element array of 7-element array of highp float)
diff --git a/Test/baseResults/310implicitSizeArrayError.vert.out b/Test/baseResults/310implicitSizeArrayError.vert.out
index 1eed457..6975cde 100644
--- a/Test/baseResults/310implicitSizeArrayError.vert.out
+++ b/Test/baseResults/310implicitSizeArrayError.vert.out
@@ -11,14 +11,14 @@
 0:7      move second child to first child ( temp highp int)
 0:7        'o' (layout( location=0) smooth out highp int)
 0:7        direct index (layout( column_major shared) temp highp int)
-0:7          a: direct index for structure (layout( column_major shared) uniform implicitly-sized array of highp int)
-0:7            'uni' (layout( location=0 column_major shared) uniform block{layout( column_major shared) uniform implicitly-sized array of highp int a})
+0:7          a: direct index for structure (layout( column_major shared) uniform unsized 3-element array of highp int)
+0:7            'uni' (layout( binding=0 column_major shared) uniform block{layout( column_major shared) uniform unsized 3-element array of highp int a})
 0:7            Constant:
 0:7              0 (const int)
 0:7          Constant:
 0:7            2 (const int)
 0:?   Linker Objects
-0:?     'uni' (layout( location=0 column_major shared) uniform block{layout( column_major shared) uniform implicitly-sized array of highp int a})
+0:?     'uni' (layout( binding=0 column_major shared) uniform block{layout( column_major shared) uniform unsized 3-element array of highp int a})
 0:?     'o' (layout( location=0) smooth out highp int)
 0:?     'gl_VertexID' ( gl_VertexId highp int VertexId)
 0:?     'gl_InstanceID' ( gl_InstanceId highp int InstanceId)
@@ -35,14 +35,14 @@
 0:7      move second child to first child ( temp highp int)
 0:7        'o' (layout( location=0) smooth out highp int)
 0:7        direct index (layout( column_major shared) temp highp int)
-0:7          a: direct index for structure (layout( column_major shared) uniform 1-element array of highp int)
-0:7            'uni' (layout( location=0 column_major shared) uniform block{layout( column_major shared) uniform 1-element array of highp int a})
+0:7          a: direct index for structure (layout( column_major shared) uniform 3-element array of highp int)
+0:7            'uni' (layout( binding=0 column_major shared) uniform block{layout( column_major shared) uniform 3-element array of highp int a})
 0:7            Constant:
 0:7              0 (const int)
 0:7          Constant:
 0:7            2 (const int)
 0:?   Linker Objects
-0:?     'uni' (layout( location=0 column_major shared) uniform block{layout( column_major shared) uniform 1-element array of highp int a})
+0:?     'uni' (layout( binding=0 column_major shared) uniform block{layout( column_major shared) uniform 3-element array of highp int a})
 0:?     'o' (layout( location=0) smooth out highp int)
 0:?     'gl_VertexID' ( gl_VertexId highp int VertexId)
 0:?     'gl_InstanceID' ( gl_InstanceId highp int InstanceId)
diff --git a/Test/baseResults/310runtimeArray.vert.out b/Test/baseResults/310runtimeArray.vert.out
new file mode 100755
index 0000000..84c731e
--- /dev/null
+++ b/Test/baseResults/310runtimeArray.vert.out
@@ -0,0 +1,145 @@
+310runtimeArray.vert
+ERROR: 0:9: '' : array size required 
+ERROR: 1 compilation errors.  No code generated.
+
+
+Shader version: 310
+ERROR: node is still EOpNull!
+0:12  Function Definition: main( ( global void)
+0:12    Function Parameters: 
+0:14    Sequence
+0:14      move second child to first child ( temp highp float)
+0:14        'o' (layout( location=0) smooth out highp float)
+0:14        f: direct index for structure ( global highp float)
+0:14          direct index (layout( column_major shared) temp structure{ global highp float f})
+0:14            s: direct index for structure (layout( column_major shared) buffer unsized 6-element array of structure{ global highp float f})
+0:14              'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer unsized 6-element array of structure{ global highp float f} s})
+0:14              Constant:
+0:14                0 (const uint)
+0:14            Constant:
+0:14              5 (const int)
+0:14          Constant:
+0:14            0 (const int)
+0:15      add second child into first child ( temp highp float)
+0:15        'o' (layout( location=0) smooth out highp float)
+0:15        f: direct index for structure ( global highp float)
+0:15          direct index (layout( column_major shared) temp structure{ global highp float f})
+0:15            s: direct index for structure (layout( column_major shared) buffer unsized 7-element array of structure{ global highp float f})
+0:15              'b2name' (layout( column_major shared) buffer block{layout( column_major shared) buffer unsized 7-element array of structure{ global highp float f} s})
+0:15              Constant:
+0:15                0 (const int)
+0:15            Constant:
+0:15              6 (const int)
+0:15          Constant:
+0:15            0 (const int)
+0:16      add second child into first child ( temp highp float)
+0:16        'o' (layout( location=0) smooth out highp float)
+0:16        f: direct index for structure ( global highp float)
+0:16          direct index (layout( column_major shared) temp structure{ global highp float f})
+0:16            s: direct index for structure (layout( column_major shared) buffer unsized 8-element array of structure{ global highp float f})
+0:16              direct index (layout( column_major shared) temp block{layout( column_major shared) buffer unsized 8-element array of structure{ global highp float f} s})
+0:16                'b3name' (layout( column_major shared) buffer unsized 4-element array of block{layout( column_major shared) buffer unsized 8-element array of structure{ global highp float f} s})
+0:16                Constant:
+0:16                  3 (const int)
+0:16              Constant:
+0:16                0 (const int)
+0:16            Constant:
+0:16              7 (const int)
+0:16          Constant:
+0:16            0 (const int)
+0:17      add second child into first child ( temp highp float)
+0:17        'o' (layout( location=0) smooth out highp float)
+0:17        f: direct index for structure ( global highp float)
+0:17          direct index (layout( column_major shared) temp structure{ global highp float f})
+0:17            s: direct index for structure (layout( column_major shared) buffer unsized 9-element array of structure{ global highp float f})
+0:17              direct index (layout( column_major shared) temp block{layout( column_major shared) buffer unsized 9-element array of structure{ global highp float f} s})
+0:17                'b4name' (layout( column_major shared) buffer 4-element array of block{layout( column_major shared) buffer unsized 9-element array of structure{ global highp float f} s})
+0:17                Constant:
+0:17                  2 (const int)
+0:17              Constant:
+0:17                0 (const int)
+0:17            Constant:
+0:17              8 (const int)
+0:17          Constant:
+0:17            0 (const int)
+0:?   Linker Objects
+0:?     'o' (layout( location=0) smooth out highp float)
+0:?     'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer unsized 6-element array of structure{ global highp float f} s})
+0:?     'b2name' (layout( column_major shared) buffer block{layout( column_major shared) buffer unsized 7-element array of structure{ global highp float f} s})
+0:?     'b3name' (layout( column_major shared) buffer unsized 4-element array of block{layout( column_major shared) buffer unsized 8-element array of structure{ global highp float f} s})
+0:?     'b4name' (layout( column_major shared) buffer 4-element array of block{layout( column_major shared) buffer unsized 9-element array of structure{ global highp float f} s})
+0:?     'gl_VertexID' ( gl_VertexId highp int VertexId)
+0:?     'gl_InstanceID' ( gl_InstanceId highp int InstanceId)
+
+
+Linked vertex stage:
+
+
+Shader version: 310
+ERROR: node is still EOpNull!
+0:12  Function Definition: main( ( global void)
+0:12    Function Parameters: 
+0:14    Sequence
+0:14      move second child to first child ( temp highp float)
+0:14        'o' (layout( location=0) smooth out highp float)
+0:14        f: direct index for structure ( global highp float)
+0:14          direct index (layout( column_major shared) temp structure{ global highp float f})
+0:14            s: direct index for structure (layout( column_major shared) buffer unsized 6-element array of structure{ global highp float f})
+0:14              'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer unsized 6-element array of structure{ global highp float f} s})
+0:14              Constant:
+0:14                0 (const uint)
+0:14            Constant:
+0:14              5 (const int)
+0:14          Constant:
+0:14            0 (const int)
+0:15      add second child into first child ( temp highp float)
+0:15        'o' (layout( location=0) smooth out highp float)
+0:15        f: direct index for structure ( global highp float)
+0:15          direct index (layout( column_major shared) temp structure{ global highp float f})
+0:15            s: direct index for structure (layout( column_major shared) buffer unsized 7-element array of structure{ global highp float f})
+0:15              'b2name' (layout( column_major shared) buffer block{layout( column_major shared) buffer unsized 7-element array of structure{ global highp float f} s})
+0:15              Constant:
+0:15                0 (const int)
+0:15            Constant:
+0:15              6 (const int)
+0:15          Constant:
+0:15            0 (const int)
+0:16      add second child into first child ( temp highp float)
+0:16        'o' (layout( location=0) smooth out highp float)
+0:16        f: direct index for structure ( global highp float)
+0:16          direct index (layout( column_major shared) temp structure{ global highp float f})
+0:16            s: direct index for structure (layout( column_major shared) buffer unsized 8-element array of structure{ global highp float f})
+0:16              direct index (layout( column_major shared) temp block{layout( column_major shared) buffer unsized 8-element array of structure{ global highp float f} s})
+0:16                'b3name' (layout( column_major shared) buffer 4-element array of block{layout( column_major shared) buffer unsized 8-element array of structure{ global highp float f} s})
+0:16                Constant:
+0:16                  3 (const int)
+0:16              Constant:
+0:16                0 (const int)
+0:16            Constant:
+0:16              7 (const int)
+0:16          Constant:
+0:16            0 (const int)
+0:17      add second child into first child ( temp highp float)
+0:17        'o' (layout( location=0) smooth out highp float)
+0:17        f: direct index for structure ( global highp float)
+0:17          direct index (layout( column_major shared) temp structure{ global highp float f})
+0:17            s: direct index for structure (layout( column_major shared) buffer unsized 9-element array of structure{ global highp float f})
+0:17              direct index (layout( column_major shared) temp block{layout( column_major shared) buffer unsized 9-element array of structure{ global highp float f} s})
+0:17                'b4name' (layout( column_major shared) buffer 4-element array of block{layout( column_major shared) buffer unsized 9-element array of structure{ global highp float f} s})
+0:17                Constant:
+0:17                  2 (const int)
+0:17              Constant:
+0:17                0 (const int)
+0:17            Constant:
+0:17              8 (const int)
+0:17          Constant:
+0:17            0 (const int)
+0:?   Linker Objects
+0:?     'o' (layout( location=0) smooth out highp float)
+0:?     'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer unsized 6-element array of structure{ global highp float f} s})
+0:?     'b2name' (layout( column_major shared) buffer block{layout( column_major shared) buffer unsized 7-element array of structure{ global highp float f} s})
+0:?     'b3name' (layout( column_major shared) buffer 4-element array of block{layout( column_major shared) buffer unsized 8-element array of structure{ global highp float f} s})
+0:?     'b4name' (layout( column_major shared) buffer 4-element array of block{layout( column_major shared) buffer unsized 9-element array of structure{ global highp float f} s})
+0:?     'gl_VertexID' ( gl_VertexId highp int VertexId)
+0:?     'gl_InstanceID' ( gl_InstanceId highp int InstanceId)
+
diff --git a/Test/baseResults/320.frag.out b/Test/baseResults/320.frag.out
index 76dbeaf..002aa7f 100755
--- a/Test/baseResults/320.frag.out
+++ b/Test/baseResults/320.frag.out
@@ -23,7 +23,7 @@
 ERROR: 0:158: 'flat/smooth/noperspective' : can't use interpolation qualifier on a fragment output 
 ERROR: 0:159: 'flat/smooth/noperspective' : can't use interpolation qualifier on a fragment output 
 ERROR: 0:160: 'noperspective' : Reserved word. 
-ERROR: 0:160: 'noperspective' : not supported with this profile: es
+ERROR: 0:160: 'noperspective' : not supported for this version or the enabled extensions 
 ERROR: 0:160: 'flat/smooth/noperspective' : can't use interpolation qualifier on a fragment output 
 ERROR: 0:165: 'centroid/sample/patch' : can't use auxiliary qualifier on a fragment output 
 ERROR: 0:180: 'interpolateAtCentroid' : no matching overloaded function found 
@@ -211,12 +211,12 @@
 0:113        move second child to first child ( temp highp int)
 0:113          'a3' ( temp highp int)
 0:113          direct index ( flat temp highp int SampleMaskIn)
-0:113            'gl_SampleMaskIn' ( flat in implicitly-sized array of highp int SampleMaskIn)
+0:113            'gl_SampleMaskIn' ( flat in unsized 1-element array of highp int SampleMaskIn)
 0:113            Constant:
 0:113              0 (const int)
 0:114      move second child to first child ( temp highp int)
 0:114        direct index ( temp highp int SampleMaskIn)
-0:114          'gl_SampleMask' ( out implicitly-sized array of highp int SampleMaskIn)
+0:114          'gl_SampleMask' ( out unsized 1-element array of highp int SampleMaskIn)
 0:114          Constant:
 0:114            0 (const int)
 0:114        'a3' ( temp highp int)
@@ -473,8 +473,8 @@
 0:?     'CA5' ( uniform highp samplerCubeArrayShadow)
 0:?     'CA6' ( uniform highp isamplerCubeArray)
 0:?     'CA7' ( uniform highp usamplerCubeArray)
-0:?     'gl_SampleMaskIn' ( flat in implicitly-sized array of highp int SampleMaskIn)
-0:?     'gl_SampleMask' ( out implicitly-sized array of highp int SampleMaskIn)
+0:?     'gl_SampleMaskIn' ( flat in unsized 1-element array of highp int SampleMaskIn)
+0:?     'gl_SampleMask' ( out unsized 1-element array of highp int SampleMaskIn)
 0:?     'im2Df' (layout( r32f) uniform highp image2D)
 0:?     'im2Du' (layout( r32ui) uniform highp uimage2D)
 0:?     'im2Di' (layout( r32i) uniform highp iimage2D)
diff --git a/Test/baseResults/320.tesc.out b/Test/baseResults/320.tesc.out
index ff8012b..41ee29c 100755
--- a/Test/baseResults/320.tesc.out
+++ b/Test/baseResults/320.tesc.out
@@ -62,8 +62,8 @@
 0:23        move second child to first child ( temp highp 4-component vector of float)
 0:23          'p' ( temp highp 4-component vector of float)
 0:23          gl_Position: direct index for structure ( in highp 4-component vector of float Position)
-0:23            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in implicitly-sized array of highp 4-component vector of float gl_PositionPerViewNV})
-0:23              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in implicitly-sized array of highp 4-component vector of float gl_PositionPerViewNV})
+0:23            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
+0:23              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
 0:23              Constant:
 0:23                1 (const int)
 0:23            Constant:
@@ -72,8 +72,8 @@
 0:24        move second child to first child ( temp highp float)
 0:24          'ps' ( temp highp float)
 0:24          gl_PointSize: direct index for structure ( in highp float PointSize)
-0:24            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in implicitly-sized array of highp 4-component vector of float gl_PositionPerViewNV})
-0:24              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in implicitly-sized array of highp 4-component vector of float gl_PositionPerViewNV})
+0:24            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
+0:24              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
 0:24              Constant:
 0:24                1 (const int)
 0:24            Constant:
@@ -192,8 +192,8 @@
 0:104        move second child to first child ( temp highp float)
 0:104          'ps' ( temp highp float)
 0:104          gl_PointSize: direct index for structure ( in highp float PointSize)
-0:104            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in implicitly-sized array of highp 4-component vector of float gl_PositionPerViewNV})
-0:104              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in implicitly-sized array of highp 4-component vector of float gl_PositionPerViewNV})
+0:104            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
+0:104              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
 0:104              Constant:
 0:104                1 (const int)
 0:104            Constant:
@@ -336,7 +336,7 @@
 0:?     'inb' ( in 32-element array of highp 2-component vector of float)
 0:?     'inc' ( in 32-element array of highp 2-component vector of float)
 0:?     'ind' ( in 32-element array of highp 2-component vector of float)
-0:?     'implA' ( patch out implicitly-sized array of highp float)
+0:?     'implA' ( patch out unsized 1-element array of highp float)
 0:?     'ivla' (layout( location=3) in 32-element array of highp 4-component vector of float)
 0:?     'ivlb' (layout( location=4) in 32-element array of highp 4-component vector of float)
 0:?     'ivlc' (layout( location=4) in 32-element array of highp 4-component vector of float)
@@ -351,7 +351,7 @@
 0:?     'misSized' ( out 5-element array of highp float)
 0:?     'okaySize' ( out 4-element array of highp float)
 0:?     'pv3' ( noContraction temp highp 3-component vector of float)
-0:?     'badpatchIName' ( patch out implicitly-sized array of block{ out highp float f})
+0:?     'badpatchIName' ( patch out unsized 1-element array of block{ out highp float f})
 0:?     'patchIName' ( patch out 4-element array of block{ out highp float f})
 
 
diff --git a/Test/baseResults/320.tese.out b/Test/baseResults/320.tese.out
index ad8fe72..456bd88 100755
--- a/Test/baseResults/320.tese.out
+++ b/Test/baseResults/320.tese.out
@@ -21,10 +21,10 @@
 ERROR: 0:47: 'patch' : cannot use interpolation qualifiers with patch 
 ERROR: 0:48: 'patch' : cannot use interpolation qualifiers with patch 
 ERROR: 0:49: 'noperspective' : Reserved word. 
-ERROR: 0:49: 'noperspective' : not supported with this profile: es
+ERROR: 0:49: 'noperspective' : not supported for this version or the enabled extensions 
 ERROR: 0:49: 'patch' : cannot use interpolation qualifiers with patch 
 ERROR: 0:50: '' : can only have one auxiliary qualifier (centroid, patch, and sample) 
-ERROR: 0:54: 'gl_PerVertex' : block already declared with size, can't redeclare as implicitly-sized 
+ERROR: 0:54: 'gl_PerVertex' : block already declared with size, can't redeclare as unsized 
 ERROR: 0:59: 'gl_PerVertex' : can only redeclare a built-in block once, and before any use 
 ERROR: 0:64: 'quads' : cannot apply to 'out' 
 ERROR: 0:64: 'cw' : can only apply to 'in' 
@@ -67,8 +67,8 @@
 0:32        move second child to first child ( temp highp 4-component vector of float)
 0:32          'p' ( temp highp 4-component vector of float)
 0:32          gl_Position: direct index for structure ( in highp 4-component vector of float Position)
-0:32            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in implicitly-sized array of highp 4-component vector of float gl_PositionPerViewNV})
-0:32              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in implicitly-sized array of highp 4-component vector of float gl_PositionPerViewNV})
+0:32            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
+0:32              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
 0:32              Constant:
 0:32                1 (const int)
 0:32            Constant:
@@ -77,8 +77,8 @@
 0:33        move second child to first child ( temp highp float)
 0:33          'ps' ( temp highp float)
 0:33          gl_PointSize: direct index for structure ( in highp float PointSize)
-0:33            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in implicitly-sized array of highp 4-component vector of float gl_PositionPerViewNV})
-0:33              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in implicitly-sized array of highp 4-component vector of float gl_PositionPerViewNV})
+0:33            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
+0:33              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
 0:33              Constant:
 0:33                1 (const int)
 0:33            Constant:
diff --git a/Test/baseResults/330.frag.out b/Test/baseResults/330.frag.out
index 5919c76..7745631 100644
--- a/Test/baseResults/330.frag.out
+++ b/Test/baseResults/330.frag.out
@@ -16,6 +16,7 @@
 ERROR: 0:62: 'location on block member' : can only use in an in/out block 
 ERROR: 0:62: 'location qualifier on uniform or buffer' : not supported for this version or the enabled extensions 
 ERROR: 0:60: 'location qualifier on uniform or buffer' : not supported for this version or the enabled extensions 
+ERROR: 0:60: 'location' : cannot apply to uniform or buffer block 
 ERROR: 0:68: 'layout-id value' : cannot be negative 
 ERROR: 0:69: 'layout-id value' : cannot be negative 
 ERROR: 0:76: 'f2' : cannot use layout qualifiers on structure members 
@@ -23,6 +24,7 @@
 ERROR: 0:91: 'location qualifier on uniform or buffer' : not supported for this version or the enabled extensions 
 ERROR: 0:91: 'location' : overlapping use of location 3
 ERROR: 0:89: 'location qualifier on uniform or buffer' : not supported for this version or the enabled extensions 
+ERROR: 0:89: 'location' : cannot apply to uniform or buffer block 
 ERROR: 0:94: 'location' : either the block needs a location, or all members need a location, or no members have a location 
 ERROR: 0:108: 'A' : cannot use layout qualifiers on structure members 
 ERROR: 0:119: 'location' : overlapping use of location 44
@@ -38,7 +40,7 @@
 ERROR: 0:141: 'textureQueryLod' : no matching overloaded function found 
 ERROR: 0:141: 'assign' :  cannot convert from ' const float' to ' temp 2-component vector of float'
 ERROR: 0:152: 'index' : value must be 0 or 1 
-ERROR: 39 compilation errors.  No code generated.
+ERROR: 41 compilation errors.  No code generated.
 
 
 Shader version: 330
diff --git a/Test/baseResults/400.frag.out b/Test/baseResults/400.frag.out
index 443b102..90f73dc 100644
--- a/Test/baseResults/400.frag.out
+++ b/Test/baseResults/400.frag.out
@@ -516,7 +516,7 @@
 0:?     'vl' (layout( location=4) smooth in 4-component vector of float)
 0:?     'vl2' (layout( location=6) smooth in 4-component vector of float)
 0:?     'uv3' (layout( location=3) uniform 3-component vector of float)
-0:?     'anon@0' ( in block{ in float FogFragCoord gl_FogFragCoord,  in implicitly-sized array of 4-component vector of float TexCoord gl_TexCoord,  smooth in 4-component vector of float Color gl_Color,  in 4-component vector of float SecondaryColor gl_SecondaryColor})
+0:?     'anon@0' ( in block{ in float FogFragCoord gl_FogFragCoord,  in unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord,  smooth in 4-component vector of float Color gl_Color,  in 4-component vector of float SecondaryColor gl_SecondaryColor})
 0:?     'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord)
 0:?     'u2drs' ( uniform sampler2DRectShadow)
 0:?     'patchIn' ( smooth patch in 4-component vector of float)
diff --git a/Test/baseResults/400.geom.out b/Test/baseResults/400.geom.out
index 1d009d9..52ebebc 100644
--- a/Test/baseResults/400.geom.out
+++ b/Test/baseResults/400.geom.out
@@ -1,7 +1,7 @@
 400.geom
 ERROR: 0:12: 'invocations' : can only apply to a standalone qualifier 
 ERROR: 0:20: 'patch' : not supported in this stage: geometry
-ERROR: 0:20: 'gl_PointSize' : cannot add layout to redeclared block member 
+ERROR: 0:20: 'gl_PointSize' : cannot add non-XFB layout to redeclared block member 
 ERROR: 0:20: 'gl_PointSize' : cannot add patch to redeclared block member 
 ERROR: 0:25: 'length' :  array must first be sized by a redeclaration or layout qualifier
 ERROR: 0:36: 'length' :  array must first be sized by a redeclaration or layout qualifier
diff --git a/Test/baseResults/400.tesc.out b/Test/baseResults/400.tesc.out
index 762f0b8..0475741 100644
--- a/Test/baseResults/400.tesc.out
+++ b/Test/baseResults/400.tesc.out
@@ -44,8 +44,8 @@
 0:23        move second child to first child ( temp 4-component vector of float)
 0:23          'p' ( temp 4-component vector of float)
 0:23          gl_Position: direct index for structure ( in 4-component vector of float Position)
-0:23            direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:23              'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:23            direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
+0:23              'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:23              Constant:
 0:23                1 (const int)
 0:23            Constant:
@@ -54,8 +54,8 @@
 0:24        move second child to first child ( temp float)
 0:24          'ps' ( temp float)
 0:24          gl_PointSize: direct index for structure ( in float PointSize)
-0:24            direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:24              'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:24            direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
+0:24              'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:24              Constant:
 0:24                1 (const int)
 0:24            Constant:
@@ -64,9 +64,9 @@
 0:25        move second child to first child ( temp float)
 0:25          'cd' ( temp float)
 0:25          direct index ( temp float ClipDistance)
-0:25            gl_ClipDistance: direct index for structure ( in implicitly-sized array of float ClipDistance)
-0:25              direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:25                'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:25            gl_ClipDistance: direct index for structure ( in unsized 3-element array of float ClipDistance)
+0:25              direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
+0:25                'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:25                Constant:
 0:25                  1 (const int)
 0:25              Constant:
@@ -87,25 +87,25 @@
 0:29          'gl_InvocationID' ( in int InvocationID)
 0:31      move second child to first child ( temp 4-component vector of float)
 0:31        gl_Position: direct index for structure ( out 4-component vector of float Position)
-0:31          indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:31            'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:31          indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 2-element array of float ClipDistance gl_ClipDistance})
+0:31            'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 2-element array of float ClipDistance gl_ClipDistance})
 0:31            'gl_InvocationID' ( in int InvocationID)
 0:31          Constant:
 0:31            0 (const int)
 0:31        'p' ( temp 4-component vector of float)
 0:32      move second child to first child ( temp float)
 0:32        gl_PointSize: direct index for structure ( out float PointSize)
-0:32          indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:32            'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:32          indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 2-element array of float ClipDistance gl_ClipDistance})
+0:32            'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 2-element array of float ClipDistance gl_ClipDistance})
 0:32            'gl_InvocationID' ( in int InvocationID)
 0:32          Constant:
 0:32            1 (const int)
 0:32        'ps' ( temp float)
 0:33      move second child to first child ( temp float)
 0:33        direct index ( temp float ClipDistance)
-0:33          gl_ClipDistance: direct index for structure ( out implicitly-sized array of float ClipDistance)
-0:33            indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:33              'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:33          gl_ClipDistance: direct index for structure ( out unsized 2-element array of float ClipDistance)
+0:33            indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 2-element array of float ClipDistance gl_ClipDistance})
+0:33              'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 2-element array of float ClipDistance gl_ClipDistance})
 0:33              'gl_InvocationID' ( in int InvocationID)
 0:33            Constant:
 0:33              2 (const int)
@@ -175,8 +175,8 @@
 0:67    Function Parameters: 
 0:69    Sequence
 0:69      gl_PointSize: direct index for structure ( out float PointSize)
-0:69        direct index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:69          'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:69        direct index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 2-element array of float ClipDistance gl_ClipDistance})
+0:69          'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 2-element array of float ClipDistance gl_ClipDistance})
 0:69          Constant:
 0:69            4 (const int)
 0:69        Constant:
@@ -211,7 +211,7 @@
 0:123      'gl_DeviceIndex' ( in int DeviceIndex)
 0:124      'gl_ViewIndex' ( in int ViewIndex)
 0:?   Linker Objects
-0:?     'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:?     'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 2-element array of float ClipDistance gl_ClipDistance})
 0:?     'outa' ( global 4-element array of int)
 0:?     'patchIn' ( patch in 4-component vector of float)
 0:?     'patchOut' ( patch out 4-component vector of float)
diff --git a/Test/baseResults/400.tese.out b/Test/baseResults/400.tese.out
index e9ffcdf..28c4468 100644
--- a/Test/baseResults/400.tese.out
+++ b/Test/baseResults/400.tese.out
@@ -11,7 +11,7 @@
 ERROR: 0:48: 'patch' : cannot use interpolation qualifiers with patch 
 ERROR: 0:49: 'patch' : cannot use interpolation qualifiers with patch 
 ERROR: 0:50: '' : can only have one auxiliary qualifier (centroid, patch, and sample) 
-ERROR: 0:54: 'gl_PerVertex' : block already declared with size, can't redeclare as implicitly-sized 
+ERROR: 0:54: 'gl_PerVertex' : block already declared with size, can't redeclare as unsized 
 ERROR: 0:59: 'gl_PerVertex' : can only redeclare a built-in block once, and before any use 
 ERROR: 0:64: 'quads' : cannot apply to 'out' 
 ERROR: 0:64: 'cw' : can only apply to 'in' 
@@ -57,8 +57,8 @@
 0:32        move second child to first child ( temp 4-component vector of float)
 0:32          'p' ( temp 4-component vector of float)
 0:32          gl_Position: direct index for structure ( in 4-component vector of float Position)
-0:32            direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:32              'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:32            direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
+0:32              'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:32              Constant:
 0:32                1 (const int)
 0:32            Constant:
@@ -67,8 +67,8 @@
 0:33        move second child to first child ( temp float)
 0:33          'ps' ( temp float)
 0:33          gl_PointSize: direct index for structure ( in float PointSize)
-0:33            direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:33              'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:33            direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
+0:33              'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:33              Constant:
 0:33                1 (const int)
 0:33            Constant:
@@ -77,9 +77,9 @@
 0:34        move second child to first child ( temp float)
 0:34          'cd' ( temp float)
 0:34          direct index ( temp float ClipDistance)
-0:34            gl_ClipDistance: direct index for structure ( in implicitly-sized array of float ClipDistance)
-0:34              direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:34                'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:34            gl_ClipDistance: direct index for structure ( in unsized 3-element array of float ClipDistance)
+0:34              direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
+0:34                'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:34                Constant:
 0:34                  1 (const int)
 0:34              Constant:
@@ -114,20 +114,20 @@
 0:40              1 (const int)
 0:42      move second child to first child ( temp 4-component vector of float)
 0:42        gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
-0:42          'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:42          'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:42          Constant:
 0:42            0 (const uint)
 0:42        'p' ( temp 4-component vector of float)
 0:43      move second child to first child ( temp float)
 0:43        gl_PointSize: direct index for structure ( gl_PointSize float PointSize)
-0:43          'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:43          'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:43          Constant:
 0:43            1 (const uint)
 0:43        'ps' ( temp float)
 0:44      move second child to first child ( temp float)
 0:44        direct index ( temp float ClipDistance)
-0:44          gl_ClipDistance: direct index for structure ( out implicitly-sized array of float ClipDistance)
-0:44            'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:44          gl_ClipDistance: direct index for structure ( out unsized 3-element array of float ClipDistance)
+0:44            'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:44            Constant:
 0:44              2 (const uint)
 0:44          Constant:
@@ -146,7 +146,7 @@
 0:?   Linker Objects
 0:?     'patchIn' ( patch in 4-component vector of float)
 0:?     'patchOut' ( patch out 4-component vector of float)
-0:?     'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:?     'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:?     'badp1' ( smooth patch in 4-component vector of float)
 0:?     'badp2' ( flat patch in 4-component vector of float)
 0:?     'badp3' ( noperspective patch in 4-component vector of float)
diff --git a/Test/baseResults/410.geom.out b/Test/baseResults/410.geom.out
index 4d35d52..ab5ad47 100644
--- a/Test/baseResults/410.geom.out
+++ b/Test/baseResults/410.geom.out
@@ -31,7 +31,7 @@
 0:30          'p' ( temp float)
 0:30          gl_PointSize: direct index for structure ( in float PointSize)
 0:30            direct index ( temp block{ in float PointSize gl_PointSize})
-0:30              'gl_in' ( in implicitly-sized array of block{ in float PointSize gl_PointSize})
+0:30              'gl_in' ( in unsized 2-element array of block{ in float PointSize gl_PointSize})
 0:30              Constant:
 0:30                1 (const int)
 0:30            Constant:
@@ -53,7 +53,7 @@
 0:38        Constant:
 0:38          4.000000
 0:?   Linker Objects
-0:?     'gl_in' ( in implicitly-sized array of block{ in float PointSize gl_PointSize})
+0:?     'gl_in' ( in unsized 2-element array of block{ in float PointSize gl_PointSize})
 0:?     'anon@0' (layout( stream=0) out block{layout( stream=0) gl_PointSize float PointSize gl_PointSize, })
 
 
diff --git a/Test/baseResults/410.tesc.out b/Test/baseResults/410.tesc.out
index 68593d0..0a397fd 100644
--- a/Test/baseResults/410.tesc.out
+++ b/Test/baseResults/410.tesc.out
@@ -9,7 +9,7 @@
 0:8  Function Definition: main( ( global void)
 0:8    Function Parameters: 
 0:?   Linker Objects
-0:?     'gl_out' ( out implicitly-sized array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:?     'gl_out' ( out unsized 1-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance})
 0:?     'outa' ( global 1-element array of int)
 0:?     'patchOut' ( patch out 4-component vector of float)
 
diff --git a/Test/baseResults/420.frag.out b/Test/baseResults/420.frag.out
index 5f2b0f7..ffb8f6d 100644
--- a/Test/baseResults/420.frag.out
+++ b/Test/baseResults/420.frag.out
@@ -19,7 +19,7 @@
 0:?   Linker Objects
 0:?     'gl_FragDepth' ( gl_FragDepth float FragDepth)
 0:?     'depth' ( smooth in float)
-0:?     'a' (layout( binding=0 offset=0) uniform implicitly-sized array of atomic_uint)
+0:?     'a' (layout( binding=0 offset=0) uniform unsized 1-element array of atomic_uint)
 
 
 Linked fragment stage:
diff --git a/Test/baseResults/420.geom.out b/Test/baseResults/420.geom.out
index fe9e12f..6bf6eb3 100644
--- a/Test/baseResults/420.geom.out
+++ b/Test/baseResults/420.geom.out
@@ -20,15 +20,15 @@
 0:9      Constant:
 0:9        1 (const int)
 0:10      gl_Position: direct index for structure ( in 4-component vector of float Position)
-0:10        direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:10          'gl_in' ( in 3-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:10        direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 1-element array of float ClipDistance gl_ClipDistance})
+0:10          'gl_in' ( in 3-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 1-element array of float ClipDistance gl_ClipDistance})
 0:10          Constant:
 0:10            1 (const int)
 0:10        Constant:
 0:10          0 (const int)
 0:11      gl_Position: direct index for structure ( in 4-component vector of float Position)
-0:11        indirect index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:11          'gl_in' ( in 3-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:11        indirect index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 1-element array of float ClipDistance gl_ClipDistance})
+0:11          'gl_in' ( in 3-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 1-element array of float ClipDistance gl_ClipDistance})
 0:11          'i' ( global int)
 0:11        Constant:
 0:11          0 (const int)
@@ -38,8 +38,8 @@
 0:20      Constant:
 0:20        3 (const int)
 0:21      gl_Position: direct index for structure ( in 4-component vector of float Position)
-0:21        indirect index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:21          'gl_in' ( in 3-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:21        indirect index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 1-element array of float ClipDistance gl_ClipDistance})
+0:21          'gl_in' ( in 3-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 1-element array of float ClipDistance gl_ClipDistance})
 0:21          'i' ( global int)
 0:21        Constant:
 0:21          0 (const int)
@@ -121,12 +121,12 @@
 0:54          'i' ( global int)
 0:?   Linker Objects
 0:?     'i' ( global int)
-0:?     'gl_in' ( in 3-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:?     'gl_in' ( in 3-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 1-element array of float ClipDistance gl_ClipDistance})
 0:?     'color3' ( in 3-element array of 4-component vector of float)
 0:?     's2D' ( uniform sampler2D)
 0:?     'coord' ( in 3-element array of 2-component vector of float)
 0:?     'v4' ( uniform 4-component vector of float)
-0:?     'anon@0' (layout( stream=0) out block{layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:?     'anon@0' (layout( stream=0) out block{layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out unsized 1-element array of float ClipDistance gl_ClipDistance})
 
 
 Linked geometry stage:
diff --git a/Test/baseResults/420.tesc.out b/Test/baseResults/420.tesc.out
index 7876bd6..a1f881c 100644
--- a/Test/baseResults/420.tesc.out
+++ b/Test/baseResults/420.tesc.out
@@ -20,8 +20,8 @@
 0:17        move second child to first child ( temp 4-component vector of float)
 0:17          'p' ( temp 4-component vector of float)
 0:17          gl_Position: direct index for structure ( in 4-component vector of float Position)
-0:17            direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:17              'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:17            direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
+0:17              'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:17              Constant:
 0:17                1 (const int)
 0:17            Constant:
@@ -30,8 +30,8 @@
 0:18        move second child to first child ( temp float)
 0:18          'ps' ( temp float)
 0:18          gl_PointSize: direct index for structure ( in float PointSize)
-0:18            direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:18              'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:18            direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
+0:18              'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:18              Constant:
 0:18                1 (const int)
 0:18            Constant:
@@ -40,9 +40,9 @@
 0:19        move second child to first child ( temp float)
 0:19          'cd' ( temp float)
 0:19          direct index ( temp float ClipDistance)
-0:19            gl_ClipDistance: direct index for structure ( in implicitly-sized array of float ClipDistance)
-0:19              direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:19                'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:19            gl_ClipDistance: direct index for structure ( in unsized 3-element array of float ClipDistance)
+0:19              direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
+0:19                'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:19                Constant:
 0:19                  1 (const int)
 0:19              Constant:
diff --git a/Test/baseResults/420.tese.out b/Test/baseResults/420.tese.out
index f14e1c0..71fca85 100644
--- a/Test/baseResults/420.tese.out
+++ b/Test/baseResults/420.tese.out
@@ -139,7 +139,7 @@
 0:?     'b3' ( global 2-element array of 4-component vector of float)
 0:?     'b4' ( global 2-element array of 4-component vector of float)
 0:?     'c3' ( global 4X2 matrix of float)
-0:?     'd2' ( global implicitly-sized array of structure{ global float s,  global float t})
+0:?     'd2' ( global unsized 1-element array of structure{ global float s,  global float t})
 0:?     'b5' ( global 5-element array of float)
 0:?     'single1' ( global structure{ global int f})
 0:?     'single2' ( global structure{ global 2-component vector of uint v})
diff --git a/Test/baseResults/420.vert.out b/Test/baseResults/420.vert.out
index b912dc0..25bce16 100644
--- a/Test/baseResults/420.vert.out
+++ b/Test/baseResults/420.vert.out
@@ -51,7 +51,7 @@
 ERROR: 0:157: 'assign' :  cannot convert from ' const float' to ' temp int'
 ERROR: 0:158: 'textureQueryLevels' : no matching overloaded function found 
 ERROR: 0:158: 'assign' :  cannot convert from ' const float' to ' temp int'
-WARNING: 0:161: '[]' : assuming array size of one for compile-time checking of binding numbers for implicitly-sized array 
+WARNING: 0:161: '[]' : assuming binding count of one for compile-time checking of binding numbers for unsized array 
 ERROR: 51 compilation errors.  No code generated.
 
 
@@ -302,7 +302,7 @@
 0:?     'offcheckI' (layout( column_major shared) uniform block{layout( column_major shared offset=16) uniform int foo})
 0:?     'samp1D' ( uniform sampler1D)
 0:?     'samp1Ds' ( uniform sampler1DShadow)
-0:?     'badArray' (layout( binding=0) writeonly uniform implicitly-sized array of image1D)
+0:?     'badArray' (layout( binding=0) writeonly uniform unsized 1-element array of image1D)
 0:?     'gl_VertexID' ( gl_VertexId int VertexId)
 0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
 
diff --git a/Test/baseResults/420_size_gl_in.geom.out b/Test/baseResults/420_size_gl_in.geom.out
index d058013..9d95495 100644
--- a/Test/baseResults/420_size_gl_in.geom.out
+++ b/Test/baseResults/420_size_gl_in.geom.out
@@ -15,8 +15,8 @@
 0:13      Constant:
 0:13        3 (const int)
 0:14      gl_Position: direct index for structure ( in 4-component vector of float Position)
-0:14        direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:14          'gl_in' ( in 3-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:14        direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 1-element array of float ClipDistance gl_ClipDistance})
+0:14          'gl_in' ( in 3-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 1-element array of float ClipDistance gl_ClipDistance})
 0:14          Constant:
 0:14            1 (const int)
 0:14        Constant:
@@ -24,8 +24,8 @@
 0:15      Constant:
 0:15        3 (const int)
 0:16      gl_Position: direct index for structure ( in 4-component vector of float Position)
-0:16        indirect index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:16          'gl_in' ( in 3-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:16        indirect index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 1-element array of float ClipDistance gl_ClipDistance})
+0:16          'gl_in' ( in 3-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 1-element array of float ClipDistance gl_ClipDistance})
 0:16          'i' ( global int)
 0:16        Constant:
 0:16          0 (const int)
@@ -33,7 +33,7 @@
 0:?     'i' ( global int)
 0:?     'colorun' ( in 3-element array of 4-component vector of float)
 0:?     'color3' ( in 3-element array of 4-component vector of float)
-0:?     'gl_in' ( in 3-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:?     'gl_in' ( in 3-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 1-element array of float ClipDistance gl_ClipDistance})
 
 
 Linked geometry stage:
diff --git a/Test/baseResults/430.comp.out b/Test/baseResults/430.comp.out
index c4ad19e..599cd8e 100644
--- a/Test/baseResults/430.comp.out
+++ b/Test/baseResults/430.comp.out
@@ -33,13 +33,13 @@
 0:35      GroupMemoryBarrier ( global void)
 0:36      move second child to first child ( temp int)
 0:36        value: direct index for structure (layout( column_major shared) buffer int)
-0:36          'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer int value, layout( column_major shared) buffer implicitly-sized array of float values})
+0:36          'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer int value, layout( column_major shared) buffer runtime-sized array of float values})
 0:36          Constant:
 0:36            0 (const uint)
 0:36        Convert float to int ( temp int)
 0:36          indirect index (layout( column_major shared) temp float)
-0:36            values: direct index for structure (layout( column_major shared) buffer implicitly-sized array of float)
-0:36              'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer int value, layout( column_major shared) buffer implicitly-sized array of float values})
+0:36            values: direct index for structure (layout( column_major shared) buffer runtime-sized array of float)
+0:36              'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer int value, layout( column_major shared) buffer runtime-sized array of float values})
 0:36              Constant:
 0:36                1 (const uint)
 0:36            'gl_LocalInvocationIndex' ( in uint LocalInvocationIndex)
@@ -56,8 +56,8 @@
 0:65    Sequence
 0:65      move second child to first child ( temp float)
 0:65        direct index (layout( column_major shared) temp float)
-0:65          values: direct index for structure (layout( column_major shared) buffer implicitly-sized array of float)
-0:65            'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) buffer int value, layout( column_major shared) buffer implicitly-sized array of float values})
+0:65          values: direct index for structure (layout( column_major shared) buffer unsized 3-element array of float)
+0:65            'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) buffer int value, layout( column_major shared) buffer unsized 3-element array of float values})
 0:65            Constant:
 0:65              1 (const int)
 0:65          Constant:
@@ -65,8 +65,8 @@
 0:65        Constant:
 0:65          4.700000
 0:66      array length ( temp int)
-0:66        values: direct index for structure (layout( column_major shared) buffer implicitly-sized array of float)
-0:66          'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) buffer int value, layout( column_major shared) buffer implicitly-sized array of float values})
+0:66        values: direct index for structure (layout( column_major shared) buffer unsized 3-element array of float)
+0:66          'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) buffer int value, layout( column_major shared) buffer unsized 3-element array of float values})
 0:66          Constant:
 0:66            1 (const int)
 0:67      Barrier ( global void)
@@ -129,8 +129,8 @@
 0:?       4096 (const uint)
 0:?     'total' ( const int)
 0:?       66592 (const int)
-0:?     'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer int value, layout( column_major shared) buffer implicitly-sized array of float values})
-0:?     'invalid' (layout( column_major shared) buffer block{layout( column_major shared) buffer implicitly-sized array of float values, layout( column_major shared) buffer int value})
+0:?     'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer int value, layout( column_major shared) buffer runtime-sized array of float values})
+0:?     'invalid' (layout( column_major shared) buffer block{layout( column_major shared) buffer unsized 1-element array of float values, layout( column_major shared) buffer int value})
 0:?     'v3' (layout( location=2) in 3-component vector of float)
 0:?     'f' ( in float)
 0:?     'fo' ( out float)
@@ -140,7 +140,7 @@
 0:?     'arrX' ( global 2-element array of int)
 0:?     'arrY' ( global 1-element array of int)
 0:?     'arrZ' ( global 4096-element array of int)
-0:?     'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) buffer int value, layout( column_major shared) buffer implicitly-sized array of float values})
+0:?     'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) buffer int value, layout( column_major shared) buffer unsized 3-element array of float values})
 0:?     'roll' ( uniform double)
 0:?     'destTex' ( writeonly uniform image2D)
 0:?     'inbi' ( in block{ in int a})
@@ -165,13 +165,13 @@
 0:35      GroupMemoryBarrier ( global void)
 0:36      move second child to first child ( temp int)
 0:36        value: direct index for structure (layout( column_major shared) buffer int)
-0:36          'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer int value, layout( column_major shared) buffer implicitly-sized array of float values})
+0:36          'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer int value, layout( column_major shared) buffer runtime-sized array of float values})
 0:36          Constant:
 0:36            0 (const uint)
 0:36        Convert float to int ( temp int)
 0:36          indirect index (layout( column_major shared) temp float)
-0:36            values: direct index for structure (layout( column_major shared) buffer implicitly-sized array of float)
-0:36              'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer int value, layout( column_major shared) buffer implicitly-sized array of float values})
+0:36            values: direct index for structure (layout( column_major shared) buffer runtime-sized array of float)
+0:36              'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer int value, layout( column_major shared) buffer runtime-sized array of float values})
 0:36              Constant:
 0:36                1 (const uint)
 0:36            'gl_LocalInvocationIndex' ( in uint LocalInvocationIndex)
@@ -190,8 +190,8 @@
 0:?       4096 (const uint)
 0:?     'total' ( const int)
 0:?       66592 (const int)
-0:?     'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer int value, layout( column_major shared) buffer implicitly-sized array of float values})
-0:?     'invalid' (layout( column_major shared) buffer block{layout( column_major shared) buffer implicitly-sized array of float values, layout( column_major shared) buffer int value})
+0:?     'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer int value, layout( column_major shared) buffer runtime-sized array of float values})
+0:?     'invalid' (layout( column_major shared) buffer block{layout( column_major shared) buffer 1-element array of float values, layout( column_major shared) buffer int value})
 0:?     'v3' (layout( location=2) in 3-component vector of float)
 0:?     'f' ( in float)
 0:?     'fo' ( out float)
@@ -201,7 +201,7 @@
 0:?     'arrX' ( global 2-element array of int)
 0:?     'arrY' ( global 1-element array of int)
 0:?     'arrZ' ( global 4096-element array of int)
-0:?     'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) buffer int value, layout( column_major shared) buffer implicitly-sized array of float values})
+0:?     'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) buffer int value, layout( column_major shared) buffer unsized 3-element array of float values})
 0:?     'roll' ( uniform double)
 0:?     'destTex' ( writeonly uniform image2D)
 0:?     'inbi' ( in block{ in int a})
diff --git a/Test/baseResults/430AofA.frag.out b/Test/baseResults/430AofA.frag.out
index 788a8d1..ac23dac 100644
--- a/Test/baseResults/430AofA.frag.out
+++ b/Test/baseResults/430AofA.frag.out
@@ -7,7 +7,7 @@
 ERROR: 0:60: 'constructor' :  cannot convert parameter 2 from ' const 2-element array of 4-component vector of float' to ' temp 3-element array of 4-component vector of float'
 ERROR: 0:64: '=' :  cannot convert from ' const 3-element array of 2-element array of 4-component vector of float' to ' temp 4-element array of 2-element array of 4-component vector of float'
 ERROR: 0:70: 'assign' :  cannot convert from ' global 4-element array of 7-element array of float' to ' global 5-element array of 7-element array of float'
-ERROR: 0:71: 'assign' :  cannot convert from ' global 4-element array of 7-element array of float' to ' global implicitly-sized array of 7-element array of float'
+ERROR: 0:71: 'assign' :  cannot convert from ' global 4-element array of 7-element array of float' to ' global unsized 1-element array of 7-element array of float'
 ERROR: 0:73: 'foo' : no matching overloaded function found 
 ERROR: 0:78: '==' :  wrong operand types: no operation '==' exists that takes a left-hand operand of type ' global 4-element array of 7-element array of float' and a right operand of type ' global 5-element array of 7-element array of float' (or there is no acceptable conversion)
 ERROR: 0:84: '[' :  array index out of range '5'
@@ -335,7 +335,7 @@
 0:69        Function Call: foo(f1[5][7]; ( global 4-element array of 7-element array of float)
 0:69          'g5' ( global 5-element array of 7-element array of float)
 0:70      'g5' ( global 5-element array of 7-element array of float)
-0:71      'gu' ( global implicitly-sized array of 7-element array of float)
+0:71      'gu' ( global unsized 1-element array of 7-element array of float)
 0:73      Constant:
 0:73        0.000000
 0:74      Function Call: bar(f1[5][7]; ( global void)
@@ -404,8 +404,8 @@
 0:98        0.000000
 0:?   Linker Objects
 0:?     'many' ( global 1-element array of 2-element array of 3-element array of 4-element array of 5-element array of 6-element array of float)
-0:?     'gu' ( global implicitly-sized array of 7-element array of float)
-0:?     'gimp' ( global implicitly-sized array of implicitly-sized array of float)
+0:?     'gu' ( global unsized 1-element array of 7-element array of float)
+0:?     'gimp' ( global unsized 1-element array of 1-element array of float)
 0:?     'g4' ( global 4-element array of 7-element array of float)
 0:?     'g5' ( global 5-element array of 7-element array of float)
 
@@ -768,7 +768,7 @@
 0:?   Linker Objects
 0:?     'many' ( global 1-element array of 2-element array of 3-element array of 4-element array of 5-element array of 6-element array of float)
 0:?     'gu' ( global 1-element array of 7-element array of float)
-0:?     'gimp' ( global 1-element array of implicitly-sized array of float)
+0:?     'gimp' ( global 1-element array of 1-element array of float)
 0:?     'g4' ( global 4-element array of 7-element array of float)
 0:?     'g5' ( global 5-element array of 7-element array of float)
 
diff --git a/Test/baseResults/430scope.vert.out b/Test/baseResults/430scope.vert.out
index 0d91389..973c21a 100644
--- a/Test/baseResults/430scope.vert.out
+++ b/Test/baseResults/430scope.vert.out
@@ -63,7 +63,7 @@
 0:47          3.000000
 0:49      move second child to first child ( temp 4-component vector of float)
 0:49        gl_Position: direct index for structure ( invariant gl_Position 4-component vector of float Position)
-0:49          'anon@0' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out implicitly-sized array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
+0:49          'anon@0' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
 0:49          Constant:
 0:49            0 (const uint)
 0:49        Construct vec4 ( temp 4-component vector of float)
diff --git a/Test/baseResults/440.vert.out b/Test/baseResults/440.vert.out
index 8eafb0a..41796cb 100644
--- a/Test/baseResults/440.vert.out
+++ b/Test/baseResults/440.vert.out
@@ -46,51 +46,54 @@
 ERROR: 0:169: 'xfb_buffer' : buffer is too large: gl_MaxTransformFeedbackBuffers is 4
 ERROR: 0:169: 'xfb_stride' : 1/4 stride is too large: gl_MaxTransformFeedbackInterleavedComponents is 64
 ERROR: 0:171: 'xfb_buffer' : buffer is too large: gl_MaxTransformFeedbackBuffers is 4
-ERROR: 0:179: 'gl_BaseVertexARB' : required extension not requested: GL_ARB_shader_draw_parameters
-ERROR: 0:179: 'gl_BaseInstanceARB' : required extension not requested: GL_ARB_shader_draw_parameters
-ERROR: 0:179: 'gl_DrawIDARB' : required extension not requested: GL_ARB_shader_draw_parameters
-ERROR: 0:187: 'assign' :  l-value required "gl_BaseVertexARB" (can't modify shader input)
-ERROR: 0:188: 'assign' :  l-value required "gl_BaseInstanceARB" (can't modify shader input)
-ERROR: 0:189: 'assign' :  l-value required "gl_DrawIDARB" (can't modify shader input)
-ERROR: 0:190: 'glBaseInstanceARB' : undeclared identifier 
-ERROR: 54 compilation errors.  No code generated.
+ERROR: 0:178: 'xfb_offset' : overlapping offsets at offset 36 in buffer 3
+ERROR: 0:179: 'xfb_buffer' : member cannot contradict block (or what block inherited from global) 
+ERROR: 0:178: 'xfb_offset' : overlapping offsets at offset 32 in buffer 3
+ERROR: 0:185: 'gl_BaseVertexARB' : required extension not requested: GL_ARB_shader_draw_parameters
+ERROR: 0:185: 'gl_BaseInstanceARB' : required extension not requested: GL_ARB_shader_draw_parameters
+ERROR: 0:185: 'gl_DrawIDARB' : required extension not requested: GL_ARB_shader_draw_parameters
+ERROR: 0:193: 'assign' :  l-value required "gl_BaseVertexARB" (can't modify shader input)
+ERROR: 0:194: 'assign' :  l-value required "gl_BaseInstanceARB" (can't modify shader input)
+ERROR: 0:195: 'assign' :  l-value required "gl_DrawIDARB" (can't modify shader input)
+ERROR: 0:196: 'glBaseInstanceARB' : undeclared identifier 
+ERROR: 57 compilation errors.  No code generated.
 
 
 Shader version: 440
 Requested GL_ARB_shader_draw_parameters
 in xfb mode
 ERROR: node is still EOpNull!
-0:177  Function Definition: drawParamsBad( ( global int)
-0:177    Function Parameters: 
-0:179    Sequence
-0:179      Branch: Return with expression
-0:179        add ( temp int)
-0:179          add ( temp int)
-0:179            'gl_BaseVertexARB' ( in int BaseVertex)
-0:179            'gl_BaseInstanceARB' ( in int BaseInstance)
-0:179          'gl_DrawIDARB' ( in int DrawId)
-0:184  Function Definition: drawParams( ( global int)
-0:184    Function Parameters: 
-0:186    Sequence
-0:186      Branch: Return with expression
-0:186        add ( temp int)
-0:186          add ( temp int)
-0:186            'gl_BaseVertexARB' ( in int BaseVertex)
-0:186            'gl_BaseInstanceARB' ( in int BaseInstance)
-0:186          'gl_DrawIDARB' ( in int DrawId)
-0:187      move second child to first child ( temp int)
-0:187        'gl_BaseVertexARB' ( in int BaseVertex)
-0:187        Constant:
-0:187          3 (const int)
-0:188      move second child to first child ( temp int)
-0:188        'gl_BaseInstanceARB' ( in int BaseInstance)
-0:188        Constant:
-0:188          3 (const int)
-0:189      move second child to first child ( temp int)
-0:189        'gl_DrawIDARB' ( in int DrawId)
-0:189        Constant:
-0:189          3 (const int)
-0:190      'glBaseInstanceARB' ( temp float)
+0:183  Function Definition: drawParamsBad( ( global int)
+0:183    Function Parameters: 
+0:185    Sequence
+0:185      Branch: Return with expression
+0:185        add ( temp int)
+0:185          add ( temp int)
+0:185            'gl_BaseVertexARB' ( in int BaseVertex)
+0:185            'gl_BaseInstanceARB' ( in int BaseInstance)
+0:185          'gl_DrawIDARB' ( in int DrawId)
+0:190  Function Definition: drawParams( ( global int)
+0:190    Function Parameters: 
+0:192    Sequence
+0:192      Branch: Return with expression
+0:192        add ( temp int)
+0:192          add ( temp int)
+0:192            'gl_BaseVertexARB' ( in int BaseVertex)
+0:192            'gl_BaseInstanceARB' ( in int BaseInstance)
+0:192          'gl_DrawIDARB' ( in int DrawId)
+0:193      move second child to first child ( temp int)
+0:193        'gl_BaseVertexARB' ( in int BaseVertex)
+0:193        Constant:
+0:193          3 (const int)
+0:194      move second child to first child ( temp int)
+0:194        'gl_BaseInstanceARB' ( in int BaseInstance)
+0:194        Constant:
+0:194          3 (const int)
+0:195      move second child to first child ( temp int)
+0:195        'gl_DrawIDARB' ( in int DrawId)
+0:195        Constant:
+0:195          3 (const int)
+0:196      'glBaseInstanceARB' ( temp float)
 0:?   Linker Objects
 0:?     'a' (layout( location=2 component=2) in 2-component vector of float)
 0:?     'b' (layout( location=2 component=1) in float)
@@ -153,6 +156,7 @@
 0:?     'bbinst9' ( out block{layout( xfb_buffer=4 xfb_offset=1) out bool b, layout( xfb_buffer=4 xfb_offset=12) out structure{ global bool b,  global structure{ global int i,  global double d,  global float f} s,  global 2-component vector of float v2} t, layout( xfb_buffer=4 xfb_offset=52) out 3X3 matrix of float m3, layout( xfb_buffer=4 xfb_offset=90) out int i, layout( xfb_buffer=4 xfb_offset=98) out double d, layout( xfb_buffer=4 xfb_offset=108) out structure{ global int a} s})
 0:?     'bm' (layout( xfb_buffer=5 xfb_offset=0) smooth out float)
 0:?     'bbinst10' ( out block{layout( xfb_buffer=7 xfb_offset=0) out 4X4 matrix of double m1, layout( xfb_buffer=7 xfb_offset=128) out 4X4 matrix of double m2, layout( xfb_buffer=7 xfb_offset=256) out float f})
+0:?     'anon@0' ( out block{layout( xfb_buffer=3 xfb_offset=36) gl_Position 4-component vector of float Position gl_Position, layout( xfb_buffer=3 xfb_offset=32) gl_PointSize float PointSize gl_PointSize, })
 0:?     'gl_VertexID' ( gl_VertexId int VertexId)
 0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
 
@@ -235,6 +239,7 @@
 0:?     'bbinst9' ( out block{layout( xfb_buffer=4 xfb_offset=1) out bool b, layout( xfb_buffer=4 xfb_offset=12) out structure{ global bool b,  global structure{ global int i,  global double d,  global float f} s,  global 2-component vector of float v2} t, layout( xfb_buffer=4 xfb_offset=52) out 3X3 matrix of float m3, layout( xfb_buffer=4 xfb_offset=90) out int i, layout( xfb_buffer=4 xfb_offset=98) out double d, layout( xfb_buffer=4 xfb_offset=108) out structure{ global int a} s})
 0:?     'bm' (layout( xfb_buffer=5 xfb_offset=0) smooth out float)
 0:?     'bbinst10' ( out block{layout( xfb_buffer=7 xfb_offset=0) out 4X4 matrix of double m1, layout( xfb_buffer=7 xfb_offset=128) out 4X4 matrix of double m2, layout( xfb_buffer=7 xfb_offset=256) out float f})
+0:?     'anon@0' ( out block{layout( xfb_buffer=3 xfb_offset=36) gl_Position 4-component vector of float Position gl_Position, layout( xfb_buffer=3 xfb_offset=32) gl_PointSize float PointSize gl_PointSize, })
 0:?     'gl_VertexID' ( gl_VertexId int VertexId)
 0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
 
diff --git a/Test/baseResults/450.vert.out b/Test/baseResults/450.vert.out
index 64143de..0f5f231 100644
--- a/Test/baseResults/450.vert.out
+++ b/Test/baseResults/450.vert.out
@@ -19,7 +19,9 @@
 ERROR: 0:45: 'allInvocations' : no matching overloaded function found 
 ERROR: 0:46: 'allInvocationsEqual' : no matching overloaded function found 
 ERROR: 0:48: 'extraneous semicolon' : not supported for this version or the enabled extensions 
-ERROR: 20 compilation errors.  No code generated.
+ERROR: 0:50: 'location' : cannot apply to uniform or buffer block 
+ERROR: 0:54: 'location' : cannot apply to uniform or buffer block 
+ERROR: 22 compilation errors.  No code generated.
 
 
 Shader version: 450
@@ -77,6 +79,8 @@
 0:?     'outSS' ( smooth out structure{ global float f,  global structure{ global float f} s})
 0:?     'aui' (layout( binding=0 offset=0) uniform atomic_uint)
 0:?     'ui' ( global uint)
+0:?     'anon@1' (layout( location=0 column_major shared) uniform block{layout( column_major shared) uniform int a})
+0:?     'anon@2' (layout( location=0 column_major shared) buffer block{layout( column_major shared) buffer int b})
 0:?     'gl_VertexID' ( gl_VertexId int VertexId)
 0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
 
@@ -112,6 +116,8 @@
 0:?     'outSS' ( smooth out structure{ global float f,  global structure{ global float f} s})
 0:?     'aui' (layout( binding=0 offset=0) uniform atomic_uint)
 0:?     'ui' ( global uint)
+0:?     'anon@1' (layout( location=0 column_major shared) uniform block{layout( column_major shared) uniform int a})
+0:?     'anon@2' (layout( location=0 column_major shared) buffer block{layout( column_major shared) buffer int b})
 0:?     'gl_VertexID' ( gl_VertexId int VertexId)
 0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
 
diff --git a/Test/baseResults/460.frag.out b/Test/baseResults/460.frag.out
index 883d949..90c4837 100755
--- a/Test/baseResults/460.frag.out
+++ b/Test/baseResults/460.frag.out
@@ -1,6 +1,14 @@
 460.frag
+ERROR: 0:22: 'attribute' : required extension not requested: GL_EXT_control_flow_attributes
+ERROR: 0:23: 'attribute' : required extension not requested: GL_EXT_control_flow_attributes
+ERROR: 0:30: 'dependency_length' : must be positive 
+ERROR: 0:31: 'dependency_length' : must be positive 
+ERROR: 4 compilation errors.  No code generated.
+
+
 Shader version: 460
-0:? Sequence
+Requested GL_EXT_control_flow_attributes
+ERROR: node is still EOpNull!
 0:10  Function Definition: main( ( global void)
 0:10    Function Parameters: 
 0:12    Sequence
@@ -21,6 +29,43 @@
 0:16        'b1' ( temp bool)
 0:16        allInvocationsEqual ( global bool)
 0:16          'b1' ( temp bool)
+0:19  Function Definition: attExtBad( ( global void)
+0:19    Function Parameters: 
+0:22    Sequence
+0:22      Sequence
+0:22        Sequence
+0:22          move second child to first child ( temp int)
+0:22            'i' ( temp int)
+0:22            Constant:
+0:22              0 (const int)
+0:22        Loop with condition tested first: Dependency 4
+0:22          Loop Condition
+0:22          Compare Less Than ( temp bool)
+0:22            'i' ( temp int)
+0:22            Constant:
+0:22              8 (const int)
+0:22          No loop body
+0:22          Loop Terminal Expression
+0:22          Pre-Increment ( temp int)
+0:22            'i' ( temp int)
+0:23      Test condition and select ( temp void): Flatten
+0:23        Condition
+0:23        Constant:
+0:23          true (const bool)
+0:23        true case is null
+0:28  Function Definition: attExt( ( global void)
+0:28    Function Parameters: 
+0:30    Sequence
+0:30      Loop with condition not tested first: Dependency -3
+0:30        Loop Condition
+0:30        Constant:
+0:30          true (const bool)
+0:30        No loop body
+0:31      Loop with condition not tested first
+0:31        Loop Condition
+0:31        Constant:
+0:31          true (const bool)
+0:31        No loop body
 0:?   Linker Objects
 0:?     's' ( smooth in structure{ global float f,  global 4-component vector of float v})
 
@@ -29,7 +74,8 @@
 
 
 Shader version: 460
-0:? Sequence
+Requested GL_EXT_control_flow_attributes
+ERROR: node is still EOpNull!
 0:10  Function Definition: main( ( global void)
 0:10    Function Parameters: 
 0:12    Sequence
diff --git a/Test/baseResults/array.frag.out b/Test/baseResults/array.frag.out
index f41f0af..fadccf5 100644
--- a/Test/baseResults/array.frag.out
+++ b/Test/baseResults/array.frag.out
@@ -2,7 +2,7 @@
 ERROR: 0:21: '[' :  array index out of range '2'
 ERROR: 0:27: '[' :  array must be redeclared with a size before being indexed with a variable
 ERROR: 0:30: 'assign' :  cannot convert from ' global 4-element array of float' to ' global 5-element array of float'
-ERROR: 0:31: 'assign' :  cannot convert from ' global 4-element array of float' to ' global implicitly-sized array of float'
+ERROR: 0:31: 'assign' :  cannot convert from ' global 4-element array of float' to ' global runtime-sized array of float'
 ERROR: 0:33: 'foo' : no matching overloaded function found 
 ERROR: 0:42: '[' :  array index out of range '5'
 ERROR: 0:45: '[' :  array index out of range '1000'
@@ -23,9 +23,11 @@
 ERROR: 0:93: 'length' :  array must be declared with a size before using this method
 ERROR: 0:101: '[' :  array index out of range '5'
 ERROR: 0:104: 'constructor' : array constructor must have at least one argument 
-ERROR: 0:104: '=' :  cannot convert from ' const float' to ' global implicitly-sized array of int'
+ERROR: 0:104: '=' :  cannot convert from ' const float' to ' global unsized 1-element array of int'
 ERROR: 0:106: 'constructor' : array argument must be sized 
-ERROR: 26 compilation errors.  No code generated.
+ERROR: 0:111: 'variable index' : required extension not requested: GL_EXT_nonuniform_qualifier
+ERROR: 0:111: 'variable indexing sampler array' : not supported with this profile: none
+ERROR: 28 compilation errors.  No code generated.
 
 
 Shader version: 130
@@ -68,21 +70,21 @@
 0:21            4.000000
 0:24      move second child to first child ( temp float)
 0:24        direct index ( temp float)
-0:24          'gu' ( global implicitly-sized array of float)
+0:24          'gu' ( global runtime-sized array of float)
 0:24          Constant:
 0:24            2 (const int)
 0:24        Constant:
 0:24          4.000000
 0:26      move second child to first child ( temp float)
 0:26        direct index ( temp float)
-0:26          'gu' ( global implicitly-sized array of float)
+0:26          'gu' ( global runtime-sized array of float)
 0:26          Constant:
 0:26            3 (const int)
 0:26        Constant:
 0:26          3.000000
 0:27      move second child to first child ( temp float)
 0:27        indirect index ( temp float)
-0:27          'gu' ( global implicitly-sized array of float)
+0:27          'gu' ( global runtime-sized array of float)
 0:27          'a' ( uniform int)
 0:27        Constant:
 0:27          5.000000
@@ -91,7 +93,7 @@
 0:29        Function Call: foo(f1[5]; ( global 4-element array of float)
 0:29          'g5' ( global 5-element array of float)
 0:30      'g5' ( global 5-element array of float)
-0:31      'gu' ( global implicitly-sized array of float)
+0:31      'gu' ( global runtime-sized array of float)
 0:33      Constant:
 0:33        0.000000
 0:34      Function Call: bar(f1[5]; ( global void)
@@ -108,7 +110,7 @@
 0:36        true case
 0:37        move second child to first child ( temp float)
 0:37          direct index ( temp float)
-0:37            'gu' ( global implicitly-sized array of float)
+0:37            'gu' ( global runtime-sized array of float)
 0:37            Constant:
 0:37              0 (const int)
 0:37          Constant:
@@ -199,21 +201,21 @@
 0:?     Sequence
 0:71      move second child to first child ( temp int)
 0:71        direct index ( temp int)
-0:71          'uns' ( temp implicitly-sized array of int)
+0:71          'uns' ( temp unsized 4-element array of int)
 0:71          Constant:
 0:71            3 (const int)
 0:71        Constant:
 0:71          40 (const int)
 0:72      move second child to first child ( temp int)
 0:72        direct index ( temp int)
-0:72          'uns' ( temp implicitly-sized array of int)
+0:72          'uns' ( temp unsized 4-element array of int)
 0:72          Constant:
 0:72            1 (const int)
 0:72        Constant:
 0:72          30 (const int)
 0:73      move second child to first child ( temp 3-component vector of float)
 0:73        direct index ( temp 3-component vector of float)
-0:73          'guns' ( global implicitly-sized array of 3-component vector of float)
+0:73          'guns' ( global unsized 8-element array of 3-component vector of float)
 0:73          Constant:
 0:73            2 (const int)
 0:73        Constant:
@@ -222,11 +224,11 @@
 0:73          2.400000
 0:76      Constant:
 0:76        0.000000
-0:79  Function Definition: foo2( ( global implicitly-sized array of float)
+0:79  Function Definition: foo2( ( global unsized 1-element array of float)
 0:79    Function Parameters: 
 0:?     Sequence
 0:82      Branch: Return with expression
-0:82        'f' ( temp implicitly-sized array of float)
+0:82        'f' ( temp unsized 1-element array of float)
 0:84      Branch: Return with expression
 0:84        'g' ( temp 9-element array of float)
 0:89  Function Definition: foo3( ( global void)
@@ -264,17 +266,24 @@
 0:106      'b' ( global float)
 0:106      Constant:
 0:106        0.000000
+0:109  Function Definition: foo4( ( global void)
+0:109    Function Parameters: 
+0:111    Sequence
+0:111      indirect index ( temp sampler2D)
+0:111        's2d' ( uniform runtime-sized array of sampler2D)
+0:111        'a' ( uniform int)
 0:?   Linker Objects
-0:?     'gu' ( global implicitly-sized array of float)
+0:?     'gu' ( global runtime-sized array of float)
 0:?     'g4' ( global 4-element array of float)
 0:?     'g5' ( global 5-element array of float)
 0:?     'a' ( uniform int)
-0:?     'guns' ( global implicitly-sized array of 3-component vector of float)
+0:?     'guns' ( global unsized 8-element array of 3-component vector of float)
 0:?     'f' ( global float)
-0:?     'gUnusedUnsized' ( global implicitly-sized array of float)
-0:?     'i' ( global implicitly-sized array of int)
-0:?     'emptyA' ( global implicitly-sized array of float)
+0:?     'gUnusedUnsized' ( global unsized 1-element array of float)
+0:?     'i' ( global unsized 1-element array of int)
+0:?     'emptyA' ( global unsized 1-element array of float)
 0:?     'b' ( global float)
+0:?     's2d' ( uniform runtime-sized array of sampler2D)
 
 
 Linked fragment stage:
@@ -320,21 +329,21 @@
 0:21            4.000000
 0:24      move second child to first child ( temp float)
 0:24        direct index ( temp float)
-0:24          'gu' ( global 4-element array of float)
+0:24          'gu' ( global runtime-sized array of float)
 0:24          Constant:
 0:24            2 (const int)
 0:24        Constant:
 0:24          4.000000
 0:26      move second child to first child ( temp float)
 0:26        direct index ( temp float)
-0:26          'gu' ( global 4-element array of float)
+0:26          'gu' ( global runtime-sized array of float)
 0:26          Constant:
 0:26            3 (const int)
 0:26        Constant:
 0:26          3.000000
 0:27      move second child to first child ( temp float)
 0:27        indirect index ( temp float)
-0:27          'gu' ( global 4-element array of float)
+0:27          'gu' ( global runtime-sized array of float)
 0:27          'a' ( uniform int)
 0:27        Constant:
 0:27          5.000000
@@ -343,7 +352,7 @@
 0:29        Function Call: foo(f1[5]; ( global 4-element array of float)
 0:29          'g5' ( global 5-element array of float)
 0:30      'g5' ( global 5-element array of float)
-0:31      'gu' ( global 4-element array of float)
+0:31      'gu' ( global runtime-sized array of float)
 0:33      Constant:
 0:33        0.000000
 0:34      Function Call: bar(f1[5]; ( global void)
@@ -360,7 +369,7 @@
 0:36        true case
 0:37        move second child to first child ( temp float)
 0:37          direct index ( temp float)
-0:37            'gu' ( global 4-element array of float)
+0:37            'gu' ( global runtime-sized array of float)
 0:37            Constant:
 0:37              0 (const int)
 0:37          Constant:
@@ -452,7 +461,7 @@
 0:106      Constant:
 0:106        0.000000
 0:?   Linker Objects
-0:?     'gu' ( global 4-element array of float)
+0:?     'gu' ( global runtime-sized array of float)
 0:?     'g4' ( global 4-element array of float)
 0:?     'g5' ( global 5-element array of float)
 0:?     'a' ( uniform int)
@@ -462,4 +471,5 @@
 0:?     'i' ( global 1-element array of int)
 0:?     'emptyA' ( global 1-element array of float)
 0:?     'b' ( global float)
+0:?     's2d' ( uniform runtime-sized array of sampler2D)
 
diff --git a/Test/baseResults/array100.frag.out b/Test/baseResults/array100.frag.out
index b99d817..e6f9f8d 100644
--- a/Test/baseResults/array100.frag.out
+++ b/Test/baseResults/array100.frag.out
@@ -10,7 +10,7 @@
 ERROR: 0:25: 'array assignment' : not supported for this version or the enabled extensions 
 ERROR: 0:25: 'assign' :  cannot convert from ' global 4-element array of mediump float' to ' global 5-element array of mediump float'
 ERROR: 0:26: 'array assignment' : not supported for this version or the enabled extensions 
-ERROR: 0:26: 'assign' :  cannot convert from ' global 4-element array of mediump float' to ' global implicitly-sized array of mediump float'
+ERROR: 0:26: 'assign' :  cannot convert from ' global 4-element array of mediump float' to ' global unsized 1-element array of mediump float'
 ERROR: 0:28: 'foo' : no matching overloaded function found 
 ERROR: 0:31: 'arrayed constructor' : not supported for this version or the enabled extensions 
 ERROR: 0:31: 'array comparison' : not supported for this version or the enabled extensions 
@@ -67,7 +67,7 @@
 0:24        Function Call: foo(f1[5]; ( global 4-element array of mediump float)
 0:24          'g5' ( global 5-element array of mediump float)
 0:25      'g5' ( global 5-element array of mediump float)
-0:26      'gu' ( global implicitly-sized array of mediump float)
+0:26      'gu' ( global unsized 1-element array of mediump float)
 0:28      Constant:
 0:28        0.000000
 0:29      Function Call: bar(f1[5]; ( global void)
@@ -84,7 +84,7 @@
 0:31        true case
 0:32        move second child to first child ( temp mediump float)
 0:32          direct index ( temp mediump float)
-0:32            'gu' ( global implicitly-sized array of mediump float)
+0:32            'gu' ( global unsized 1-element array of mediump float)
 0:32            Constant:
 0:32              0 (const int)
 0:32          Constant:
@@ -152,7 +152,7 @@
 0:69          'initSb' ( temp structure{ global mediump 4-component vector of float v4,  global structure{ global mediump 3-component vector of float v3,  global 4-element array of mediump 2-component vector of float v2} sa})
 0:69          's1' ( temp structure{ global mediump 4-component vector of float v4,  global structure{ global mediump 3-component vector of float v3,  global 4-element array of mediump 2-component vector of float v2} sa})
 0:?   Linker Objects
-0:?     'gu' ( global implicitly-sized array of mediump float)
+0:?     'gu' ( global unsized 1-element array of mediump float)
 0:?     'g4' ( global 4-element array of mediump float)
 0:?     'g5' ( global 5-element array of mediump float)
 0:?     'a' ( uniform mediump int)
diff --git a/Test/baseResults/atomic_uint.frag.out b/Test/baseResults/atomic_uint.frag.out
index e2773f9..c705a06 100644
--- a/Test/baseResults/atomic_uint.frag.out
+++ b/Test/baseResults/atomic_uint.frag.out
@@ -2,7 +2,6 @@
 ERROR: 0:10: 'atomic_uint' : samplers and atomic_uints cannot be output parameters 
 ERROR: 0:12: 'return' : type does not match, or is not convertible to, the function's return type 
 ERROR: 0:18: 'atomic_uint' : atomic_uints can only be used in uniform variables or function parameters: non_uniform_counter
-ERROR: 0:18: 'atomic_uint' : layout(binding=X) is required 
 ERROR: 0:23: 'binding' : atomic_uint binding is too large; see gl_MaxAtomicCounterBindings 
 ERROR: 0:28: '+' :  wrong operand types: no operation '+' exists that takes a left-hand operand of type 'layout( binding=0 offset=0) uniform atomic_uint' and a right operand of type 'layout( binding=0 offset=0) uniform atomic_uint' (or there is no acceptable conversion)
 ERROR: 0:29: '-' :  wrong operand type no operation '-' exists that takes an operand of type layout( binding=0 offset=0) uniform atomic_uint (or there is no acceptable conversion)
@@ -10,14 +9,10 @@
 ERROR: 0:34: 'assign' :  l-value required "counter" (can't modify a uniform)
 ERROR: 0:34: 'assign' :  cannot convert from ' const int' to 'layout( binding=0 offset=0) uniform atomic_uint'
 ERROR: 0:37: 'atomic_uint' : atomic_uints can only be used in uniform variables or function parameters: acin
-ERROR: 0:37: 'atomic_uint' : layout(binding=X) is required 
 ERROR: 0:38: 'atomic_uint' : atomic_uints can only be used in uniform variables or function parameters: acg
-ERROR: 0:38: 'atomic_uint' : layout(binding=X) is required 
-ERROR: 0:40: 'atomic_uint' : layout(binding=X) is required 
-ERROR: 0:46: 'atomic_uint' : layout(binding=X) is required 
 ERROR: 0:47: 'offset' : atomic counters sharing the same offset: 12
 ERROR: 0:48: 'binding' : atomic_uint binding is too large; see gl_MaxAtomicCounterBindings 
-ERROR: 18 compilation errors.  No code generated.
+ERROR: 13 compilation errors.  No code generated.
 
 
 Shader version: 420
diff --git a/Test/baseResults/constFoldIntMin.frag.out b/Test/baseResults/constFoldIntMin.frag.out
new file mode 100644
index 0000000..2c45ca8
--- /dev/null
+++ b/Test/baseResults/constFoldIntMin.frag.out
@@ -0,0 +1,51 @@
+constFoldIntMin.frag
+Shader version: 460
+Requested GL_AMD_gpu_shader_int16
+Requested GL_ARB_gpu_shader_int64
+0:? Sequence
+0:5  Function Definition: a( ( global void)
+0:5    Function Parameters: 
+0:6    Sequence
+0:6      Sequence
+0:6        move second child to first child ( temp int16_t)
+0:6          'u' ( temp int16_t)
+0:6          Constant:
+0:6            -32768 (const int16_t)
+0:7      Sequence
+0:7        move second child to first child ( temp int)
+0:7          'v' ( temp int)
+0:7          Constant:
+0:7            -2147483648 (const int)
+0:8      Sequence
+0:8        move second child to first child ( temp int64_t)
+0:8          'w' ( temp int64_t)
+0:8          Constant:
+0:8            -9223372036854775808 (const int64_t)
+0:9      Sequence
+0:9        move second child to first child ( temp int16_t)
+0:9          'x' ( temp int16_t)
+0:9          Constant:
+0:9            0 (const int8_t)
+0:10      Sequence
+0:10        move second child to first child ( temp int)
+0:10          'y' ( temp int)
+0:10          Constant:
+0:10            0 (const int)
+0:11      Sequence
+0:11        move second child to first child ( temp int64_t)
+0:11          'z' ( temp int64_t)
+0:11          Constant:
+0:11            0 (const int64_t)
+0:?   Linker Objects
+
+
+Linked fragment stage:
+
+ERROR: Linking fragment stage: Missing entry point: Each stage requires one entry point
+
+Shader version: 460
+Requested GL_AMD_gpu_shader_int16
+Requested GL_ARB_gpu_shader_int64
+0:? Sequence
+0:?   Linker Objects
+
diff --git a/Test/baseResults/cppBad.vert.out b/Test/baseResults/cppBad.vert.out
index 205c29b..1a2286a 100755
--- a/Test/baseResults/cppBad.vert.out
+++ b/Test/baseResults/cppBad.vert.out
@@ -2,10 +2,9 @@
 ERROR: 0:2: 'preprocessor evaluation' : bad expression 
 ERROR: 0:2: '#if' : unexpected tokens following directive 
 ERROR: 0:5: 'string' : End of line in string 
-ERROR: 0:5: 'macro expansion' : expected '(' following n
 ERROR: 0:5: '""' : string literals not supported 
 ERROR: 0:5: '' :  syntax error, unexpected INT, expecting COMMA or SEMICOLON
-ERROR: 6 compilation errors.  No code generated.
+ERROR: 5 compilation errors.  No code generated.
 
 
 Shader version: 100
diff --git a/Test/baseResults/cppPassMacroName.frag.out b/Test/baseResults/cppPassMacroName.frag.out
new file mode 100755
index 0000000..d8459b3
--- /dev/null
+++ b/Test/baseResults/cppPassMacroName.frag.out
@@ -0,0 +1,67 @@
+cppPassMacroName.frag
+Shader version: 100
+0:? Sequence
+0:5  Function Definition: main( ( global void)
+0:5    Function Parameters: 
+0:7    Sequence
+0:7      Sequence
+0:7        move second child to first child ( temp mediump int)
+0:7          'f1' ( temp mediump int)
+0:7          Constant:
+0:7            4 (const int)
+0:8      Sequence
+0:8        move second child to first child ( temp mediump int)
+0:8          'f2' ( temp mediump int)
+0:8          'f1' ( temp mediump int)
+0:9      Sequence
+0:9        move second child to first child ( temp mediump int)
+0:9          'f3' ( temp mediump int)
+0:9          Constant:
+0:9            9 (const int)
+0:10      Sequence
+0:10        move second child to first child ( temp mediump int)
+0:10          'f4' ( temp mediump int)
+0:10          Constant:
+0:10            1 (const int)
+0:11      Sequence
+0:11        move second child to first child ( temp mediump int)
+0:11          'f5' ( temp mediump int)
+0:11          Constant:
+0:11            5 (const int)
+0:?   Linker Objects
+
+
+Linked fragment stage:
+
+
+Shader version: 100
+0:? Sequence
+0:5  Function Definition: main( ( global void)
+0:5    Function Parameters: 
+0:7    Sequence
+0:7      Sequence
+0:7        move second child to first child ( temp mediump int)
+0:7          'f1' ( temp mediump int)
+0:7          Constant:
+0:7            4 (const int)
+0:8      Sequence
+0:8        move second child to first child ( temp mediump int)
+0:8          'f2' ( temp mediump int)
+0:8          'f1' ( temp mediump int)
+0:9      Sequence
+0:9        move second child to first child ( temp mediump int)
+0:9          'f3' ( temp mediump int)
+0:9          Constant:
+0:9            9 (const int)
+0:10      Sequence
+0:10        move second child to first child ( temp mediump int)
+0:10          'f4' ( temp mediump int)
+0:10          Constant:
+0:10            1 (const int)
+0:11      Sequence
+0:11        move second child to first child ( temp mediump int)
+0:11          'f5' ( temp mediump int)
+0:11          Constant:
+0:11            5 (const int)
+0:?   Linker Objects
+
diff --git a/Test/baseResults/cppRelaxSkipTokensErrors.vert.out b/Test/baseResults/cppRelaxSkipTokensErrors.vert.out
new file mode 100755
index 0000000..e9b4b1b
--- /dev/null
+++ b/Test/baseResults/cppRelaxSkipTokensErrors.vert.out
@@ -0,0 +1,14 @@
+cppRelaxSkipTokensErrors.vert
+Shader version: 110
+0:? Sequence
+0:?   Linker Objects
+
+
+Linked vertex stage:
+
+ERROR: Linking vertex stage: Missing entry point: Each stage requires one entry point
+
+Shader version: 110
+0:? Sequence
+0:?   Linker Objects
+
diff --git a/Test/baseResults/cppSimple.vert.out b/Test/baseResults/cppSimple.vert.out
index 1b6e6b5..8da3ae6 100644
--- a/Test/baseResults/cppSimple.vert.out
+++ b/Test/baseResults/cppSimple.vert.out
@@ -75,10 +75,8 @@
 ERROR: 12:20055: '#error' : good evaluation 2  
 ERROR: 12:9000: 'preprocessor evaluation' : expected ')' 
 ERROR: 12:9002: '#if' : unexpected tokens following directive 
-ERROR: 12:9014: 'macro expansion' : expected '(' following FOOOM
 ERROR: 12:9014: 'FOOOM' : undeclared identifier 
 ERROR: 12:9014: '=' :  cannot convert from ' temp float' to ' global int'
-ERROR: 12:9015: 'macro expansion' : expected '(' following FOOOM
 ERROR: 12:9016: 'preprocessor evaluation' : can't evaluate expression 
 ERROR: 12:9016: 'preprocessor evaluation' : bad expression 
 ERROR: 12:9500: 'preprocessor evaluation' : bad expression 
@@ -93,7 +91,7 @@
 ERROR: 12:9602: 'defined' : cannot use in preprocessor expression when expanded from macros 
 ERROR: 12:9603: '#error' : DEF_DEFINED then  
 ERROR: 12:10002: '' : missing #endif 
-ERROR: 90 compilation errors.  No code generated.
+ERROR: 88 compilation errors.  No code generated.
 
 
 Shader version: 400
@@ -136,7 +134,7 @@
 0:65          0.050000
 0:69      move second child to first child ( temp 4-component vector of float)
 0:69        gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
-0:69          'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out implicitly-sized array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
+0:69          'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
 0:69          Constant:
 0:69            0 (const uint)
 0:69        Construct vec4 ( temp 4-component vector of float)
@@ -176,7 +174,7 @@
 12:20033    Sequence
 12:20033      move second child to first child ( temp 4-component vector of float)
 12:20033        gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
-12:20033          'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out implicitly-sized array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
+12:20033          'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
 12:20033          Constant:
 12:20033            0 (const uint)
 12:20033        Constant:
@@ -190,7 +188,7 @@
 12:9011      'RECURSE' ( global int)
 0:?   Linker Objects
 0:?     'sum' ( global float)
-0:?     'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out implicitly-sized array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
+0:?     'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
 0:?     'linenumber' ( global int)
 0:?     'filenumber' ( global int)
 0:?     'version' ( global int)
diff --git a/Test/baseResults/findFunction.frag.out b/Test/baseResults/findFunction.frag.out
new file mode 100644
index 0000000..ec4f3e4
--- /dev/null
+++ b/Test/baseResults/findFunction.frag.out
@@ -0,0 +1,233 @@
+findFunction.frag
+ERROR: 0:39: 'func' : ambiguous best function under implicit type conversion 
+ERROR: 0:40: 'func' : no matching overloaded function found 
+ERROR: 0:40: '=' :  cannot convert from ' const float' to ' temp int64_t'
+ERROR: 0:41: 'func' : no matching overloaded function found 
+ERROR: 0:41: '=' :  cannot convert from ' const float' to ' temp int64_t'
+ERROR: 0:44: 'func' : no matching overloaded function found 
+ERROR: 0:44: '=' :  cannot convert from ' const float' to ' temp int64_t'
+ERROR: 0:45: 'func' : ambiguous best function under implicit type conversion 
+ERROR: 8 compilation errors.  No code generated.
+
+
+Shader version: 450
+Requested GL_KHX_shader_explicit_arithmetic_types
+ERROR: node is still EOpNull!
+0:5  Function Definition: func(i81;i161;i161; ( global int64_t)
+0:5    Function Parameters: 
+0:5      'a' ( in int8_t)
+0:5      'b' ( in int16_t)
+0:5      'c' ( in int16_t)
+0:7    Sequence
+0:7      Branch: Return with expression
+0:7        Convert int16_t to int64 ( temp int64_t)
+0:7          inclusive-or ( temp int16_t)
+0:7            Convert int8_t to int16_t ( temp int16_t)
+0:7              'a' ( in int8_t)
+0:7            add ( temp int16_t)
+0:7              'b' ( in int16_t)
+0:7              'c' ( in int16_t)
+0:10  Function Definition: func(i81;i161;i1; ( global int64_t)
+0:10    Function Parameters: 
+0:10      'a' ( in int8_t)
+0:10      'b' ( in int16_t)
+0:10      'c' ( in int)
+0:12    Sequence
+0:12      Branch: Return with expression
+0:12        Convert int to int64 ( temp int64_t)
+0:12          inclusive-or ( temp int)
+0:12            Convert int8_t to int ( temp int)
+0:12              'a' ( in int8_t)
+0:12            subtract ( temp int)
+0:12              Convert int16_t to int ( temp int)
+0:12                'b' ( in int16_t)
+0:12              'c' ( in int)
+0:15  Function Definition: func(i1;i1;i1; ( global int64_t)
+0:15    Function Parameters: 
+0:15      'a' ( in int)
+0:15      'b' ( in int)
+0:15      'c' ( in int)
+0:17    Sequence
+0:17      Branch: Return with expression
+0:17        Convert int to int64 ( temp int64_t)
+0:17          add ( temp int)
+0:17            divide ( temp int)
+0:17              'a' ( in int)
+0:17              'b' ( in int)
+0:17            'c' ( in int)
+0:20  Function Definition: func(f161;f161;f1; ( global int64_t)
+0:20    Function Parameters: 
+0:20      'a' ( in float16_t)
+0:20      'b' ( in float16_t)
+0:20      'c' ( in float)
+0:22    Sequence
+0:22      Branch: Return with expression
+0:22        Convert float to int64 ( temp int64_t)
+0:22          subtract ( temp float)
+0:22            Convert float16_t to float ( temp float)
+0:22              'a' ( in float16_t)
+0:22            component-wise multiply ( temp float)
+0:22              Convert float16_t to float ( temp float)
+0:22                'b' ( in float16_t)
+0:22              'c' ( in float)
+0:25  Function Definition: func(f161;i161;f1; ( global int64_t)
+0:25    Function Parameters: 
+0:25      'a' ( in float16_t)
+0:25      'b' ( in int16_t)
+0:25      'c' ( in float)
+0:27    Sequence
+0:27      Branch: Return with expression
+0:27        Convert float to int64 ( temp int64_t)
+0:27          subtract ( temp float)
+0:27            Convert float16_t to float ( temp float)
+0:27              'a' ( in float16_t)
+0:27            component-wise multiply ( temp float)
+0:27              Convert int16_t to float ( temp float)
+0:27                'b' ( in int16_t)
+0:27              'c' ( in float)
+0:30  Function Definition: main( ( global void)
+0:30    Function Parameters: 
+0:?     Sequence
+0:38      Sequence
+0:38        move second child to first child ( temp int64_t)
+0:38          'b1' ( temp int64_t)
+0:38          Function Call: func(i81;i161;i1; ( global int64_t)
+0:38            'x' ( temp int8_t)
+0:38            'y' ( temp int16_t)
+0:38            'z' ( temp int)
+0:39      Sequence
+0:39        move second child to first child ( temp int64_t)
+0:39          'b2' ( temp int64_t)
+0:39          Function Call: func(f161;i161;f1; ( global int64_t)
+0:39            Convert int16_t to float16_t ( temp float16_t)
+0:39              'y' ( temp int16_t)
+0:39            'y' ( temp int16_t)
+0:39            Convert int to float ( temp float)
+0:39              'z' ( temp int)
+0:42      Sequence
+0:42        move second child to first child ( temp int64_t)
+0:42          'b5' ( temp int64_t)
+0:42          Function Call: func(f161;i161;f1; ( global int64_t)
+0:42            Convert int16_t to float16_t ( temp float16_t)
+0:42              'y' ( temp int16_t)
+0:42            'y' ( temp int16_t)
+0:42            Convert float16_t to float ( temp float)
+0:42              'f16' ( temp float16_t)
+0:43      Sequence
+0:43        move second child to first child ( temp int64_t)
+0:43          'b7' ( temp int64_t)
+0:43          Function Call: func(f161;f161;f1; ( global int64_t)
+0:43            'f16' ( temp float16_t)
+0:43            'f16' ( temp float16_t)
+0:43            Convert int16_t to float ( temp float)
+0:43              'y' ( temp int16_t)
+0:45      Sequence
+0:45        move second child to first child ( temp int64_t)
+0:45          'b9' ( temp int64_t)
+0:45          Function Call: func(f161;f161;f1; ( global int64_t)
+0:45            'f16' ( temp float16_t)
+0:45            Convert int8_t to float16_t ( temp float16_t)
+0:45              'x' ( temp int8_t)
+0:45            Convert float16_t to float ( temp float)
+0:45              'f16' ( temp float16_t)
+0:?   Linker Objects
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+Requested GL_KHX_shader_explicit_arithmetic_types
+ERROR: node is still EOpNull!
+0:10  Function Definition: func(i81;i161;i1; ( global int64_t)
+0:10    Function Parameters: 
+0:10      'a' ( in int8_t)
+0:10      'b' ( in int16_t)
+0:10      'c' ( in int)
+0:12    Sequence
+0:12      Branch: Return with expression
+0:12        Convert int to int64 ( temp int64_t)
+0:12          inclusive-or ( temp int)
+0:12            Convert int8_t to int ( temp int)
+0:12              'a' ( in int8_t)
+0:12            subtract ( temp int)
+0:12              Convert int16_t to int ( temp int)
+0:12                'b' ( in int16_t)
+0:12              'c' ( in int)
+0:20  Function Definition: func(f161;f161;f1; ( global int64_t)
+0:20    Function Parameters: 
+0:20      'a' ( in float16_t)
+0:20      'b' ( in float16_t)
+0:20      'c' ( in float)
+0:22    Sequence
+0:22      Branch: Return with expression
+0:22        Convert float to int64 ( temp int64_t)
+0:22          subtract ( temp float)
+0:22            Convert float16_t to float ( temp float)
+0:22              'a' ( in float16_t)
+0:22            component-wise multiply ( temp float)
+0:22              Convert float16_t to float ( temp float)
+0:22                'b' ( in float16_t)
+0:22              'c' ( in float)
+0:25  Function Definition: func(f161;i161;f1; ( global int64_t)
+0:25    Function Parameters: 
+0:25      'a' ( in float16_t)
+0:25      'b' ( in int16_t)
+0:25      'c' ( in float)
+0:27    Sequence
+0:27      Branch: Return with expression
+0:27        Convert float to int64 ( temp int64_t)
+0:27          subtract ( temp float)
+0:27            Convert float16_t to float ( temp float)
+0:27              'a' ( in float16_t)
+0:27            component-wise multiply ( temp float)
+0:27              Convert int16_t to float ( temp float)
+0:27                'b' ( in int16_t)
+0:27              'c' ( in float)
+0:30  Function Definition: main( ( global void)
+0:30    Function Parameters: 
+0:?     Sequence
+0:38      Sequence
+0:38        move second child to first child ( temp int64_t)
+0:38          'b1' ( temp int64_t)
+0:38          Function Call: func(i81;i161;i1; ( global int64_t)
+0:38            'x' ( temp int8_t)
+0:38            'y' ( temp int16_t)
+0:38            'z' ( temp int)
+0:39      Sequence
+0:39        move second child to first child ( temp int64_t)
+0:39          'b2' ( temp int64_t)
+0:39          Function Call: func(f161;i161;f1; ( global int64_t)
+0:39            Convert int16_t to float16_t ( temp float16_t)
+0:39              'y' ( temp int16_t)
+0:39            'y' ( temp int16_t)
+0:39            Convert int to float ( temp float)
+0:39              'z' ( temp int)
+0:42      Sequence
+0:42        move second child to first child ( temp int64_t)
+0:42          'b5' ( temp int64_t)
+0:42          Function Call: func(f161;i161;f1; ( global int64_t)
+0:42            Convert int16_t to float16_t ( temp float16_t)
+0:42              'y' ( temp int16_t)
+0:42            'y' ( temp int16_t)
+0:42            Convert float16_t to float ( temp float)
+0:42              'f16' ( temp float16_t)
+0:43      Sequence
+0:43        move second child to first child ( temp int64_t)
+0:43          'b7' ( temp int64_t)
+0:43          Function Call: func(f161;f161;f1; ( global int64_t)
+0:43            'f16' ( temp float16_t)
+0:43            'f16' ( temp float16_t)
+0:43            Convert int16_t to float ( temp float)
+0:43              'y' ( temp int16_t)
+0:45      Sequence
+0:45        move second child to first child ( temp int64_t)
+0:45          'b9' ( temp int64_t)
+0:45          Function Call: func(f161;f161;f1; ( global int64_t)
+0:45            'f16' ( temp float16_t)
+0:45            Convert int8_t to float16_t ( temp float16_t)
+0:45              'x' ( temp int8_t)
+0:45            Convert float16_t to float ( temp float)
+0:45              'f16' ( temp float16_t)
+0:?   Linker Objects
+
diff --git a/Test/baseResults/glsl.entryPointRename.vert.bad.out b/Test/baseResults/glsl.entryPointRename.vert.bad.out
index 6f4c9ae..0162324 100644
--- a/Test/baseResults/glsl.entryPointRename.vert.bad.out
+++ b/Test/baseResults/glsl.entryPointRename.vert.bad.out
@@ -2,7 +2,7 @@
 ERROR: Source entry point must be "main"
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 20
 
                               Capability Shader
diff --git a/Test/baseResults/glsl.entryPointRename.vert.out b/Test/baseResults/glsl.entryPointRename.vert.out
index 7cc825b..3dc296c 100644
--- a/Test/baseResults/glsl.entryPointRename.vert.out
+++ b/Test/baseResults/glsl.entryPointRename.vert.out
@@ -1,6 +1,6 @@
 glsl.entryPointRename.vert
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 20
 
                               Capability Shader
diff --git a/Test/baseResults/glspv.frag.out b/Test/baseResults/glspv.frag.out
index 5622d01..db75213 100755
--- a/Test/baseResults/glspv.frag.out
+++ b/Test/baseResults/glspv.frag.out
@@ -1,9 +1,15 @@
 glspv.frag
 ERROR: 0:4: '#error' : GL_SPIRV is set ( correct , not an error )  
 ERROR: 0:6: '#error' : GL_SPIR is 100  
-ERROR: 0:19: 'input_attachment_index' : only allowed when using GLSL for Vulkan 
-ERROR: 0:19: '' :  syntax error, unexpected IDENTIFIER, expecting LEFT_BRACE or COMMA or SEMICOLON
-ERROR: 4 compilation errors.  No code generated.
+ERROR: 0:14: 'f' : non-opaque uniform variables need a layout(location=L) 
+ERROR: 0:21: 'noise1' : no matching overloaded function found 
+ERROR: 0:22: 'noise2' : no matching overloaded function found 
+ERROR: 0:23: 'noise3' : no matching overloaded function found 
+ERROR: 0:24: 'noise4' : no matching overloaded function found 
+ERROR: 0:27: 'atomic_uint' : layout(binding=X) is required 
+ERROR: 0:28: 'input_attachment_index' : only allowed when using GLSL for Vulkan 
+ERROR: 0:28: '' :  syntax error, unexpected IDENTIFIER, expecting LEFT_BRACE or COMMA or SEMICOLON
+ERROR: 10 compilation errors.  No code generated.
 
 
 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 30eb445..7805cfc 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): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 6
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.PointSize.geom.out b/Test/baseResults/hlsl.PointSize.geom.out
new file mode 100755
index 0000000..c92bc31
--- /dev/null
+++ b/Test/baseResults/hlsl.PointSize.geom.out
@@ -0,0 +1,143 @@
+hlsl.PointSize.geom
+Shader version: 500
+invocations = -1
+max_vertices = 4
+input primitive = triangles
+output primitive = line_strip
+0:? Sequence
+0:8  Function Definition: @main(u1[3];struct-S-f11; ( temp void)
+0:8    Function Parameters: 
+0:8      'ps' ( in 3-element array of uint)
+0:8      'OutputStream' ( out structure{ temp float ps})
+0:?     Sequence
+0:10      Sequence
+0:10        Sequence
+0:10          move second child to first child ( temp float)
+0:?             'OutputStream.ps' ( out float PointSize)
+0:10            ps: direct index for structure ( temp float)
+0:10              's' ( temp structure{ temp float ps})
+0:10              Constant:
+0:10                0 (const int)
+0:10        EmitVertex ( temp void)
+0:8  Function Definition: main( ( temp void)
+0:8    Function Parameters: 
+0:?     Sequence
+0:8      move second child to first child ( temp 3-element array of uint)
+0:?         'ps' ( temp 3-element array of uint)
+0:?         'ps' ( in 3-element array of uint PointSize)
+0:8      Function Call: @main(u1[3];struct-S-f11; ( temp void)
+0:?         'ps' ( temp 3-element array of uint)
+0:?         'OutputStream' ( temp structure{ temp float ps})
+0:?   Linker Objects
+0:?     'ps' ( in 3-element array of uint PointSize)
+0:?     'OutputStream.ps' ( out float PointSize)
+
+
+Linked geometry stage:
+
+
+Shader version: 500
+invocations = 1
+max_vertices = 4
+input primitive = triangles
+output primitive = line_strip
+0:? Sequence
+0:8  Function Definition: @main(u1[3];struct-S-f11; ( temp void)
+0:8    Function Parameters: 
+0:8      'ps' ( in 3-element array of uint)
+0:8      'OutputStream' ( out structure{ temp float ps})
+0:?     Sequence
+0:10      Sequence
+0:10        Sequence
+0:10          move second child to first child ( temp float)
+0:?             'OutputStream.ps' ( out float PointSize)
+0:10            ps: direct index for structure ( temp float)
+0:10              's' ( temp structure{ temp float ps})
+0:10              Constant:
+0:10                0 (const int)
+0:10        EmitVertex ( temp void)
+0:8  Function Definition: main( ( temp void)
+0:8    Function Parameters: 
+0:?     Sequence
+0:8      move second child to first child ( temp 3-element array of uint)
+0:?         'ps' ( temp 3-element array of uint)
+0:?         'ps' ( in 3-element array of uint PointSize)
+0:8      Function Call: @main(u1[3];struct-S-f11; ( temp void)
+0:?         'ps' ( temp 3-element array of uint)
+0:?         'OutputStream' ( temp structure{ temp float ps})
+0:?   Linker Objects
+0:?     'ps' ( in 3-element array of uint PointSize)
+0:?     'OutputStream.ps' ( out float PointSize)
+
+// Module Version 10000
+// Generated by (magic number): 80006
+// Id's are bound by 36
+
+                              Capability Geometry
+                              Capability GeometryPointSize
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Geometry 4  "main" 19 28
+                              ExecutionMode 4 Triangles
+                              ExecutionMode 4 Invocations 1
+                              ExecutionMode 4 OutputLineStrip
+                              ExecutionMode 4 OutputVertices 4
+                              Source HLSL 500
+                              Name 4  "main"
+                              Name 11  "S"
+                              MemberName 11(S) 0  "ps"
+                              Name 16  "@main(u1[3];struct-S-f11;"
+                              Name 14  "ps"
+                              Name 15  "OutputStream"
+                              Name 19  "OutputStream.ps"
+                              Name 20  "s"
+                              Name 26  "ps"
+                              Name 28  "ps"
+                              Name 30  "OutputStream"
+                              Name 31  "param"
+                              Name 33  "param"
+                              Decorate 19(OutputStream.ps) BuiltIn PointSize
+                              Decorate 28(ps) BuiltIn PointSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:      6(int) Constant 3
+               8:             TypeArray 6(int) 7
+               9:             TypePointer Function 8
+              10:             TypeFloat 32
+           11(S):             TypeStruct 10(float)
+              12:             TypePointer Function 11(S)
+              13:             TypeFunction 2 9(ptr) 12(ptr)
+              18:             TypePointer Output 10(float)
+19(OutputStream.ps):     18(ptr) Variable Output
+              21:             TypeInt 32 1
+              22:     21(int) Constant 0
+              23:             TypePointer Function 10(float)
+              27:             TypePointer Input 8
+          28(ps):     27(ptr) Variable Input
+         4(main):           2 Function None 3
+               5:             Label
+          26(ps):      9(ptr) Variable Function
+30(OutputStream):     12(ptr) Variable Function
+       31(param):      9(ptr) Variable Function
+       33(param):     12(ptr) Variable Function
+              29:           8 Load 28(ps)
+                              Store 26(ps) 29
+              32:           8 Load 26(ps)
+                              Store 31(param) 32
+              34:           2 FunctionCall 16(@main(u1[3];struct-S-f11;) 31(param) 33(param)
+              35:       11(S) Load 33(param)
+                              Store 30(OutputStream) 35
+                              Return
+                              FunctionEnd
+16(@main(u1[3];struct-S-f11;):           2 Function None 13
+          14(ps):      9(ptr) FunctionParameter
+15(OutputStream):     12(ptr) FunctionParameter
+              17:             Label
+           20(s):     12(ptr) Variable Function
+              24:     23(ptr) AccessChain 20(s) 22
+              25:   10(float) Load 24
+                              Store 19(OutputStream.ps) 25
+                              EmitVertex
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.PointSize.vert.out b/Test/baseResults/hlsl.PointSize.vert.out
new file mode 100755
index 0000000..f2221ad
--- /dev/null
+++ b/Test/baseResults/hlsl.PointSize.vert.out
@@ -0,0 +1,69 @@
+hlsl.PointSize.vert
+Shader version: 500
+0:? Sequence
+0:2  Function Definition: @main( ( temp float)
+0:2    Function Parameters: 
+0:?     Sequence
+0:3      Branch: Return with expression
+0:3        Constant:
+0:3          2.300000
+0:2  Function Definition: main( ( temp void)
+0:2    Function Parameters: 
+0:?     Sequence
+0:2      move second child to first child ( temp float)
+0:?         '@entryPointOutput' ( out float PointSize)
+0:2        Function Call: @main( ( temp float)
+0:?   Linker Objects
+0:?     '@entryPointOutput' ( out float PointSize)
+
+
+Linked vertex stage:
+
+
+Shader version: 500
+0:? Sequence
+0:2  Function Definition: @main( ( temp float)
+0:2    Function Parameters: 
+0:?     Sequence
+0:3      Branch: Return with expression
+0:3        Constant:
+0:3          2.300000
+0:2  Function Definition: main( ( temp void)
+0:2    Function Parameters: 
+0:?     Sequence
+0:2      move second child to first child ( temp float)
+0:?         '@entryPointOutput' ( out float PointSize)
+0:2        Function Call: @main( ( temp float)
+0:?   Linker Objects
+0:?     '@entryPointOutput' ( out float PointSize)
+
+// Module Version 10000
+// Generated by (magic number): 80006
+// Id's are bound by 16
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4  "main" 14
+                              Source HLSL 500
+                              Name 4  "main"
+                              Name 8  "@main("
+                              Name 14  "@entryPointOutput"
+                              Decorate 14(@entryPointOutput) BuiltIn PointSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeFunction 6(float)
+              10:    6(float) Constant 1075000115
+              13:             TypePointer Output 6(float)
+14(@entryPointOutput):     13(ptr) Variable Output
+         4(main):           2 Function None 3
+               5:             Label
+              15:    6(float) FunctionCall 8(@main()
+                              Store 14(@entryPointOutput) 15
+                              Return
+                              FunctionEnd
+       8(@main():    6(float) Function None 7
+               9:             Label
+                              ReturnValue 10
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.aliasOpaque.frag.out b/Test/baseResults/hlsl.aliasOpaque.frag.out
index 694d404..b4980ab 100755
--- a/Test/baseResults/hlsl.aliasOpaque.frag.out
+++ b/Test/baseResults/hlsl.aliasOpaque.frag.out
@@ -5,17 +5,24 @@
 0:? Sequence
 0:12  Function Definition: osCall(struct-OS-p1-f1-t211; ( temp 4-component vector of float)
 0:12    Function Parameters: 
-0:?       's.ss' ( in sampler)
-0:?       's.a' ( in float)
-0:?       's.tex' ( in texture2D)
+0:12      's' ( in structure{ temp sampler ss,  temp float a,  temp texture2D tex})
 0:?     Sequence
 0:13      Branch: Return with expression
 0:13        vector-scale ( temp 4-component vector of float)
-0:?           's.a' ( in float)
+0:13          a: direct index for structure ( temp float)
+0:13            's' ( in structure{ temp sampler ss,  temp float a,  temp texture2D tex})
+0:13            Constant:
+0:13              1 (const int)
 0:13          texture ( temp 4-component vector of float)
 0:13            Construct combined texture-sampler ( temp sampler2D)
-0:?               's.tex' ( in texture2D)
-0:?               's.ss' ( in sampler)
+0:13              tex: direct index for structure ( temp texture2D)
+0:13                's' ( in structure{ temp sampler ss,  temp float a,  temp texture2D tex})
+0:13                Constant:
+0:13                  2 (const int)
+0:13              ss: direct index for structure ( temp sampler)
+0:13                's' ( in structure{ temp sampler ss,  temp float a,  temp texture2D tex})
+0:13                Constant:
+0:13                  0 (const int)
 0:?             Constant:
 0:?               0.200000
 0:?               0.300000
@@ -23,23 +30,33 @@
 0:17    Function Parameters: 
 0:?     Sequence
 0:19      move second child to first child ( temp sampler)
-0:?         'os.ss' ( temp sampler)
+0:19        ss: direct index for structure ( temp sampler)
+0:19          'os' ( temp structure{ temp sampler ss,  temp float a,  temp texture2D tex})
+0:19          Constant:
+0:19            0 (const int)
 0:19        'gss2' ( uniform sampler)
 0:20      move second child to first child ( temp sampler)
-0:?         'os.ss' ( temp sampler)
+0:20        ss: direct index for structure ( temp sampler)
+0:20          'os' ( temp structure{ temp sampler ss,  temp float a,  temp texture2D tex})
+0:20          Constant:
+0:20            0 (const int)
 0:20        'gss' ( uniform sampler)
 0:21      move second child to first child ( temp texture2D)
-0:?         'os.tex' ( temp texture2D)
+0:21        tex: direct index for structure ( temp texture2D)
+0:21          'os' ( temp structure{ temp sampler ss,  temp float a,  temp texture2D tex})
+0:21          Constant:
+0:21            2 (const int)
 0:21        'gtex' ( uniform texture2D)
 0:22      move second child to first child ( temp float)
-0:?         'os.a' ( temp float)
+0:22        a: direct index for structure ( temp float)
+0:22          'os' ( temp structure{ temp sampler ss,  temp float a,  temp texture2D tex})
+0:22          Constant:
+0:22            1 (const int)
 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:?           'os.ss' ( temp sampler)
-0:?           'os.a' ( temp float)
-0:?           'os.tex' ( temp texture2D)
+0:28          'os' ( temp structure{ temp sampler ss,  temp float a,  temp texture2D tex})
 0:17  Function Definition: main( ( temp void)
 0:17    Function Parameters: 
 0:?     Sequence
@@ -61,17 +78,24 @@
 0:? Sequence
 0:12  Function Definition: osCall(struct-OS-p1-f1-t211; ( temp 4-component vector of float)
 0:12    Function Parameters: 
-0:?       's.ss' ( in sampler)
-0:?       's.a' ( in float)
-0:?       's.tex' ( in texture2D)
+0:12      's' ( in structure{ temp sampler ss,  temp float a,  temp texture2D tex})
 0:?     Sequence
 0:13      Branch: Return with expression
 0:13        vector-scale ( temp 4-component vector of float)
-0:?           's.a' ( in float)
+0:13          a: direct index for structure ( temp float)
+0:13            's' ( in structure{ temp sampler ss,  temp float a,  temp texture2D tex})
+0:13            Constant:
+0:13              1 (const int)
 0:13          texture ( temp 4-component vector of float)
 0:13            Construct combined texture-sampler ( temp sampler2D)
-0:?               's.tex' ( in texture2D)
-0:?               's.ss' ( in sampler)
+0:13              tex: direct index for structure ( temp texture2D)
+0:13                's' ( in structure{ temp sampler ss,  temp float a,  temp texture2D tex})
+0:13                Constant:
+0:13                  2 (const int)
+0:13              ss: direct index for structure ( temp sampler)
+0:13                's' ( in structure{ temp sampler ss,  temp float a,  temp texture2D tex})
+0:13                Constant:
+0:13                  0 (const int)
 0:?             Constant:
 0:?               0.200000
 0:?               0.300000
@@ -79,23 +103,33 @@
 0:17    Function Parameters: 
 0:?     Sequence
 0:19      move second child to first child ( temp sampler)
-0:?         'os.ss' ( temp sampler)
+0:19        ss: direct index for structure ( temp sampler)
+0:19          'os' ( temp structure{ temp sampler ss,  temp float a,  temp texture2D tex})
+0:19          Constant:
+0:19            0 (const int)
 0:19        'gss2' ( uniform sampler)
 0:20      move second child to first child ( temp sampler)
-0:?         'os.ss' ( temp sampler)
+0:20        ss: direct index for structure ( temp sampler)
+0:20          'os' ( temp structure{ temp sampler ss,  temp float a,  temp texture2D tex})
+0:20          Constant:
+0:20            0 (const int)
 0:20        'gss' ( uniform sampler)
 0:21      move second child to first child ( temp texture2D)
-0:?         'os.tex' ( temp texture2D)
+0:21        tex: direct index for structure ( temp texture2D)
+0:21          'os' ( temp structure{ temp sampler ss,  temp float a,  temp texture2D tex})
+0:21          Constant:
+0:21            2 (const int)
 0:21        'gtex' ( uniform texture2D)
 0:22      move second child to first child ( temp float)
-0:?         'os.a' ( temp float)
+0:22        a: direct index for structure ( temp float)
+0:22          'os' ( temp structure{ temp sampler ss,  temp float a,  temp texture2D tex})
+0:22          Constant:
+0:22            1 (const int)
 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:?           'os.ss' ( temp sampler)
-0:?           'os.a' ( temp float)
-0:?           'os.tex' ( temp texture2D)
+0:28          'os' ( temp structure{ temp sampler ss,  temp float a,  temp texture2D tex})
 0:17  Function Definition: main( ( temp void)
 0:17    Function Parameters: 
 0:?     Sequence
@@ -109,99 +143,100 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80002
-// Id's are bound by 59
+// Generated by (magic number): 80006
+// Id's are bound by 64
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 57
+                              EntryPoint Fragment 4  "main" 62
                               ExecutionMode 4 OriginUpperLeft
                               Source HLSL 500
                               Name 4  "main"
-                              Name 17  "osCall(struct-OS-p1-f1-t211;"
-                              Name 14  "s.ss"
-                              Name 15  "s.a"
-                              Name 16  "s.tex"
-                              Name 20  "@main("
-                              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
+                              Name 9  "OS"
+                              MemberName 9(OS) 0  "ss"
+                              MemberName 9(OS) 1  "a"
+                              MemberName 9(OS) 2  "tex"
+                              Name 14  "osCall(struct-OS-p1-f1-t211;"
+                              Name 13  "s"
+                              Name 17  "@main("
+                              Name 42  "os"
+                              Name 44  "gss2"
+                              Name 47  "gss"
+                              Name 51  "gtex"
+                              Name 56  "param"
+                              Name 62  "@entryPointOutput"
+                              Decorate 44(gss2) DescriptorSet 0
+                              Decorate 47(gss) DescriptorSet 0
+                              Decorate 51(gtex) DescriptorSet 0
+                              Decorate 62(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeSampler
-               7:             TypePointer Function 6
-               8:             TypeFloat 32
-               9:             TypePointer Function 8(float)
-              10:             TypeImage 8(float) 2D sampled format:Unknown
-              11:             TypePointer Function 10
-              12:             TypeVector 8(float) 4
-              13:             TypeFunction 12(fvec4) 7(ptr) 9(ptr) 11(ptr)
-              19:             TypeFunction 12(fvec4)
-              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
+               7:             TypeFloat 32
+               8:             TypeImage 7(float) 2D sampled format:Unknown
+           9(OS):             TypeStruct 6 7(float) 8
+              10:             TypePointer Function 9(OS)
+              11:             TypeVector 7(float) 4
+              12:             TypeFunction 11(fvec4) 10(ptr)
+              16:             TypeFunction 11(fvec4)
+              19:             TypeInt 32 1
+              20:     19(int) Constant 1
+              21:             TypePointer Function 7(float)
+              24:     19(int) Constant 2
+              25:             TypePointer Function 8
+              28:     19(int) Constant 0
+              29:             TypePointer Function 6
+              32:             TypeSampledImage 8
+              34:             TypeVector 7(float) 2
+              35:    7(float) Constant 1045220557
+              36:    7(float) Constant 1050253722
+              37:   34(fvec2) ConstantComposite 35 36
+              43:             TypePointer UniformConstant 6
+        44(gss2):     43(ptr) Variable UniformConstant
+         47(gss):     43(ptr) Variable UniformConstant
+              50:             TypePointer UniformConstant 8
+        51(gtex):     50(ptr) Variable UniformConstant
+              54:    7(float) Constant 1077936128
+              61:             TypePointer Output 11(fvec4)
+62(@entryPointOutput):     61(ptr) Variable Output
          4(main):           2 Function None 3
                5:             Label
-              58:   12(fvec4) FunctionCall 20(@main()
-                              Store 57(@entryPointOutput) 58
+              63:   11(fvec4) FunctionCall 17(@main()
+                              Store 62(@entryPointOutput) 63
                               Return
                               FunctionEnd
-17(osCall(struct-OS-p1-f1-t211;):   12(fvec4) Function None 13
-        14(s.ss):      7(ptr) FunctionParameter
-         15(s.a):      9(ptr) FunctionParameter
-       16(s.tex):     11(ptr) FunctionParameter
-              18:             Label
-              22:    8(float) Load 15(s.a)
-              23:          10 Load 16(s.tex)
-              24:           6 Load 14(s.ss)
-              26:          25 SampledImage 23 24
-              31:   12(fvec4) ImageSampleImplicitLod 26 30
-              32:   12(fvec4) VectorTimesScalar 31 22
-                              ReturnValue 32
+14(osCall(struct-OS-p1-f1-t211;):   11(fvec4) Function None 12
+           13(s):     10(ptr) FunctionParameter
+              15:             Label
+              22:     21(ptr) AccessChain 13(s) 20
+              23:    7(float) Load 22
+              26:     25(ptr) AccessChain 13(s) 24
+              27:           8 Load 26
+              30:     29(ptr) AccessChain 13(s) 28
+              31:           6 Load 30
+              33:          32 SampledImage 27 31
+              38:   11(fvec4) ImageSampleImplicitLod 33 37
+              39:   11(fvec4) VectorTimesScalar 38 23
+                              ReturnValue 39
                               FunctionEnd
-      20(@main():   12(fvec4) Function None 19
-              21:             Label
-       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
+      17(@main():   11(fvec4) Function None 16
+              18:             Label
+          42(os):     10(ptr) Variable Function
+       56(param):     10(ptr) Variable Function
+              45:           6 Load 44(gss2)
+              46:     29(ptr) AccessChain 42(os) 28
+                              Store 46 45
+              48:           6 Load 47(gss)
+              49:     29(ptr) AccessChain 42(os) 28
+                              Store 49 48
+              52:           8 Load 51(gtex)
+              53:     25(ptr) AccessChain 42(os) 24
+                              Store 53 52
+              55:     21(ptr) AccessChain 42(os) 20
+                              Store 55 54
+              57:       9(OS) Load 42(os)
+                              Store 56(param) 57
+              58:   11(fvec4) FunctionCall 14(osCall(struct-OS-p1-f1-t211;) 56(param)
+                              ReturnValue 58
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.amend.frag.out b/Test/baseResults/hlsl.amend.frag.out
index 9830385..75c0104 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): 80002
+// Generated by (magic number): 80006
 // 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 e32eb15..71cd23b 100644
--- a/Test/baseResults/hlsl.array.flatten.frag.out
+++ b/Test/baseResults/hlsl.array.flatten.frag.out
@@ -345,7 +345,7 @@
 0:?     'ps_output.color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 143
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.array.frag.out b/Test/baseResults/hlsl.array.frag.out
index dc48f6f..aef21e0 100755
--- a/Test/baseResults/hlsl.array.frag.out
+++ b/Test/baseResults/hlsl.array.frag.out
@@ -290,7 +290,7 @@
 0:?     'input' (layout( location=1) in 3-element array of 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 126
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.array.implicit-size.frag.out b/Test/baseResults/hlsl.array.implicit-size.frag.out
index cfd6562..118531c 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): 80002
+// Generated by (magic number): 80006
 // 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 133c71f..339a78a 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): 80002
+// Generated by (magic number): 80006
 // 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 7f071e4..3abe7b1 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): 80002
+// Generated by (magic number): 80006
 // 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 5fcf10d..52de102 100644
--- a/Test/baseResults/hlsl.attribute.expression.comp.out
+++ b/Test/baseResults/hlsl.attribute.expression.comp.out
@@ -10,7 +10,7 @@
 0:11          'x' ( temp int)
 0:11          Constant:
 0:11            0 (const int)
-0:11        Loop with condition tested first
+0:11        Loop with condition tested first: Unroll
 0:11          Loop Condition
 0:11          Compare Less Than ( temp bool)
 0:11            'x' ( temp int)
@@ -53,7 +53,7 @@
 0:11          'x' ( temp int)
 0:11          Constant:
 0:11            0 (const int)
-0:11        Loop with condition tested first
+0:11        Loop with condition tested first: Unroll
 0:11          Loop Condition
 0:11          Compare Less Than ( temp bool)
 0:11            'x' ( temp int)
@@ -82,7 +82,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // 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 99471c4..6a3b170 100755
--- a/Test/baseResults/hlsl.attribute.frag.out
+++ b/Test/baseResults/hlsl.attribute.frag.out
@@ -6,7 +6,7 @@
 0:2    Function Parameters: 
 0:2      'input' ( in 4-component vector of float)
 0:?     Sequence
-0:11      Test condition and select ( temp void)
+0:11      Test condition and select ( temp void): DontFlatten
 0:11        Condition
 0:11        Constant:
 0:11          false (const bool)
@@ -33,7 +33,7 @@
 0:2    Function Parameters: 
 0:2      'input' ( in 4-component vector of float)
 0:?     Sequence
-0:11      Test condition and select ( temp void)
+0:11      Test condition and select ( temp void): DontFlatten
 0:11        Condition
 0:11        Constant:
 0:11          false (const bool)
@@ -50,7 +50,7 @@
 0:?     'input' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 24
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.attributeC11.frag.out b/Test/baseResults/hlsl.attributeC11.frag.out
index 02b0ede..19b8c0d 100755
--- a/Test/baseResults/hlsl.attributeC11.frag.out
+++ b/Test/baseResults/hlsl.attributeC11.frag.out
@@ -2,42 +2,45 @@
 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:20  Function Definition: @main(vf4; ( temp 4-component vector of float)
+0:20    Function Parameters: 
+0:20      '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:21      Branch: Return with expression
+0:21        add ( temp 4-component vector of float)
+0:21          'input' ( in 4-component vector of float)
+0:21          textureFetch ( temp 4-component vector of float)
+0:21            'attach' ( uniform texture2D)
+0:21            vector swizzle ( temp int)
+0:21              Constant:
+0:21                0 (const int)
+0:21                0 (const int)
+0:21              Sequence
+0:21                Constant:
+0:21                  0 (const int)
+0:21            direct index ( temp int)
+0:21              Constant:
+0:21                0 (const int)
+0:21                0 (const int)
+0:21              Constant:
+0:21                1 (const int)
+0:20  Function Definition: main( ( temp void)
+0:20    Function Parameters: 
 0:?     Sequence
-0:16      move second child to first child ( temp 4-component vector of float)
+0:20      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:20      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:20        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:?     'buffer1' (layout( set=0 binding=1 row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element 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 unsized 1-element array of structure{ temp 2-component vector of float f} @data})
 0:?     'attach' ( uniform texture2D)
+0:?     'ci' ( specialization-constant const int)
+0:?       11 (const int)
+0:?     'anon@0' (layout( row_major std430 push_constant) uniform block{layout( row_major std430 offset=0) uniform int a})
 0:?     '@entryPointOutput' (layout( location=7) out 4-component vector of float)
 0:?     'input' (layout( location=8) in 4-component vector of float)
 
@@ -48,48 +51,51 @@
 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:20  Function Definition: @main(vf4; ( temp 4-component vector of float)
+0:20    Function Parameters: 
+0:20      '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:21      Branch: Return with expression
+0:21        add ( temp 4-component vector of float)
+0:21          'input' ( in 4-component vector of float)
+0:21          textureFetch ( temp 4-component vector of float)
+0:21            'attach' ( uniform texture2D)
+0:21            vector swizzle ( temp int)
+0:21              Constant:
+0:21                0 (const int)
+0:21                0 (const int)
+0:21              Sequence
+0:21                Constant:
+0:21                  0 (const int)
+0:21            direct index ( temp int)
+0:21              Constant:
+0:21                0 (const int)
+0:21                0 (const int)
+0:21              Constant:
+0:21                1 (const int)
+0:20  Function Definition: main( ( temp void)
+0:20    Function Parameters: 
 0:?     Sequence
-0:16      move second child to first child ( temp 4-component vector of float)
+0:20      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:20      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:20        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:?     'buffer1' (layout( set=0 binding=1 row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element 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 unsized 1-element array of structure{ temp 2-component vector of float f} @data})
 0:?     'attach' ( uniform texture2D)
+0:?     'ci' ( specialization-constant const int)
+0:?       11 (const int)
+0:?     'anon@0' (layout( row_major std430 push_constant) uniform block{layout( row_major std430 offset=0) uniform int a})
 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
+// Generated by (magic number): 80006
+// Id's are bound by 51
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
@@ -111,6 +117,10 @@
                               MemberName 43(buffer1) 0  "@data"
                               Name 45  "buffer1"
                               Name 46  "buffer3"
+                              Name 47  "ci"
+                              Name 48  "pcBuf"
+                              MemberName 48(pcBuf) 0  "a"
+                              Name 50  ""
                               Decorate 16(attach) DescriptorSet 0
                               Decorate 16(attach) InputAttachmentIndex 4
                               Decorate 33(input) Location 8
@@ -124,6 +134,9 @@
                               Decorate 45(buffer1) Binding 1
                               Decorate 46(buffer3) DescriptorSet 2
                               Decorate 46(buffer3) Binding 3
+                              Decorate 47(ci) SpecId 13
+                              MemberDecorate 48(pcBuf) 0 Offset 0
+                              Decorate 48(pcBuf) Block
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -151,6 +164,10 @@
               44:             TypePointer Uniform 43(buffer1)
      45(buffer1):     44(ptr) Variable Uniform
      46(buffer3):     44(ptr) Variable Uniform
+          47(ci):     18(int) SpecConstant 11
+       48(pcBuf):             TypeStruct 18(int)
+              49:             TypePointer PushConstant 48(pcBuf)
+              50:     49(ptr) Variable PushConstant
          4(main):           2 Function None 3
                5:             Label
        31(input):      8(ptr) Variable Function
diff --git a/Test/baseResults/hlsl.attributeGlobalBuffer.frag.out b/Test/baseResults/hlsl.attributeGlobalBuffer.frag.out
index e00ae52..365f4e8 100755
--- a/Test/baseResults/hlsl.attributeGlobalBuffer.frag.out
+++ b/Test/baseResults/hlsl.attributeGlobalBuffer.frag.out
@@ -56,7 +56,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 28
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.basic.comp.out b/Test/baseResults/hlsl.basic.comp.out
index b72c848..48cd680 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): 80002
+// Generated by (magic number): 80006
 // 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 9d9aaa7..55d8541 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): 80002
+// Generated by (magic number): 80006
 // 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 5d94fe9..231ebf6 100755
--- a/Test/baseResults/hlsl.boolConv.vert.out
+++ b/Test/baseResults/hlsl.boolConv.vert.out
@@ -16,84 +16,74 @@
 0:4            0 (const int)
 0:6      add second child into first child ( temp int)
 0:6        'r' ( temp int)
-0:6        Convert bool to int ( temp int)
-0:6          add ( temp bool)
-0:6            Convert bool to int ( temp int)
-0:6              'a' ( global bool)
-0:6            Convert bool to int ( temp int)
-0:6              'b' ( global bool)
+0:6        add ( temp int)
+0:6          Convert bool to int ( temp int)
+0:6            'a' ( global bool)
+0:6          Convert bool to int ( temp int)
+0:6            'b' ( global bool)
 0:7      add second child into first child ( temp int)
 0:7        'r' ( temp int)
-0:7        Convert bool to int ( temp int)
-0:7          subtract ( temp bool)
-0:7            Convert bool to int ( temp int)
-0:7              'a' ( global bool)
-0:7            Convert bool to int ( temp int)
-0:7              'b' ( global bool)
+0:7        subtract ( temp int)
+0:7          Convert bool to int ( temp int)
+0:7            'a' ( global bool)
+0:7          Convert bool to int ( temp int)
+0:7            'b' ( global bool)
 0:8      add second child into first child ( temp int)
 0:8        'r' ( temp int)
-0:8        Convert bool to int ( temp int)
-0:8          component-wise multiply ( temp bool)
-0:8            Convert bool to int ( temp int)
-0:8              'a' ( global bool)
-0:8            Convert bool to int ( temp int)
-0:8              'b' ( global bool)
+0:8        component-wise multiply ( temp int)
+0:8          Convert bool to int ( temp int)
+0:8            'a' ( global bool)
+0:8          Convert bool to int ( temp int)
+0:8            'b' ( global bool)
 0:9      add second child into first child ( temp int)
 0:9        'r' ( temp int)
-0:9        Convert bool to int ( temp int)
-0:9          divide ( temp bool)
-0:9            Convert bool to int ( temp int)
-0:9              'a' ( global bool)
-0:9            Convert bool to int ( temp int)
-0:9              'b' ( global bool)
+0:9        divide ( temp int)
+0:9          Convert bool to int ( temp int)
+0:9            'a' ( global bool)
+0:9          Convert bool to int ( temp int)
+0:9            'b' ( global bool)
 0:10      add second child into first child ( temp int)
 0:10        'r' ( temp int)
-0:10        Convert bool to int ( temp int)
-0:10          mod ( temp bool)
-0:10            Convert bool to int ( temp int)
-0:10              'a' ( global bool)
-0:10            Convert bool to int ( temp int)
-0:10              'b' ( global bool)
+0:10        mod ( temp int)
+0:10          Convert bool to int ( temp int)
+0:10            'a' ( global bool)
+0:10          Convert bool to int ( temp int)
+0:10            'b' ( global bool)
 0:12      add second child into first child ( temp int)
 0:12        'r' ( temp int)
-0:12        Convert bool to int ( temp int)
-0:12          bitwise and ( temp bool)
-0:12            Convert bool to int ( temp int)
-0:12              'a' ( global bool)
-0:12            Convert bool to int ( temp int)
-0:12              'b' ( global bool)
+0:12        bitwise and ( temp int)
+0:12          Convert bool to int ( temp int)
+0:12            'a' ( global bool)
+0:12          Convert bool to int ( temp int)
+0:12            'b' ( global bool)
 0:13      add second child into first child ( temp int)
 0:13        'r' ( temp int)
-0:13        Convert bool to int ( temp int)
-0:13          inclusive-or ( temp bool)
-0:13            Convert bool to int ( temp int)
-0:13              'a' ( global bool)
-0:13            Convert bool to int ( temp int)
-0:13              'b' ( global bool)
+0:13        inclusive-or ( temp int)
+0:13          Convert bool to int ( temp int)
+0:13            'a' ( global bool)
+0:13          Convert bool to int ( temp int)
+0:13            'b' ( global bool)
 0:14      add second child into first child ( temp int)
 0:14        'r' ( temp int)
-0:14        Convert bool to int ( temp int)
-0:14          exclusive-or ( temp bool)
-0:14            Convert bool to int ( temp int)
-0:14              'a' ( global bool)
-0:14            Convert bool to int ( temp int)
-0:14              'b' ( global bool)
+0:14        exclusive-or ( temp int)
+0:14          Convert bool to int ( temp int)
+0:14            'a' ( global bool)
+0:14          Convert bool to int ( temp int)
+0:14            'b' ( global bool)
 0:16      add second child into first child ( temp int)
 0:16        'r' ( temp int)
-0:16        Convert bool to int ( temp int)
-0:16          left-shift ( temp bool)
-0:16            Convert bool to int ( temp int)
-0:16              'a' ( global bool)
-0:16            Convert bool to int ( temp int)
-0:16              'b' ( global bool)
+0:16        left-shift ( temp int)
+0:16          Convert bool to int ( temp int)
+0:16            'a' ( global bool)
+0:16          Convert bool to int ( temp int)
+0:16            'b' ( global bool)
 0:17      add second child into first child ( temp int)
 0:17        'r' ( temp int)
-0:17        Convert bool to int ( temp int)
-0:17          right-shift ( temp bool)
-0:17            Convert bool to int ( temp int)
-0:17              'a' ( global bool)
-0:17            Convert bool to int ( temp int)
-0:17              'b' ( global bool)
+0:17        right-shift ( temp int)
+0:17          Convert bool to int ( temp int)
+0:17            'a' ( global bool)
+0:17          Convert bool to int ( temp int)
+0:17            'b' ( global bool)
 0:19      Branch: Return with expression
 0:19        Construct vec4 ( temp 4-component vector of float)
 0:19          Convert int to float ( temp float)
@@ -130,84 +120,74 @@
 0:4            0 (const int)
 0:6      add second child into first child ( temp int)
 0:6        'r' ( temp int)
-0:6        Convert bool to int ( temp int)
-0:6          add ( temp bool)
-0:6            Convert bool to int ( temp int)
-0:6              'a' ( global bool)
-0:6            Convert bool to int ( temp int)
-0:6              'b' ( global bool)
+0:6        add ( temp int)
+0:6          Convert bool to int ( temp int)
+0:6            'a' ( global bool)
+0:6          Convert bool to int ( temp int)
+0:6            'b' ( global bool)
 0:7      add second child into first child ( temp int)
 0:7        'r' ( temp int)
-0:7        Convert bool to int ( temp int)
-0:7          subtract ( temp bool)
-0:7            Convert bool to int ( temp int)
-0:7              'a' ( global bool)
-0:7            Convert bool to int ( temp int)
-0:7              'b' ( global bool)
+0:7        subtract ( temp int)
+0:7          Convert bool to int ( temp int)
+0:7            'a' ( global bool)
+0:7          Convert bool to int ( temp int)
+0:7            'b' ( global bool)
 0:8      add second child into first child ( temp int)
 0:8        'r' ( temp int)
-0:8        Convert bool to int ( temp int)
-0:8          component-wise multiply ( temp bool)
-0:8            Convert bool to int ( temp int)
-0:8              'a' ( global bool)
-0:8            Convert bool to int ( temp int)
-0:8              'b' ( global bool)
+0:8        component-wise multiply ( temp int)
+0:8          Convert bool to int ( temp int)
+0:8            'a' ( global bool)
+0:8          Convert bool to int ( temp int)
+0:8            'b' ( global bool)
 0:9      add second child into first child ( temp int)
 0:9        'r' ( temp int)
-0:9        Convert bool to int ( temp int)
-0:9          divide ( temp bool)
-0:9            Convert bool to int ( temp int)
-0:9              'a' ( global bool)
-0:9            Convert bool to int ( temp int)
-0:9              'b' ( global bool)
+0:9        divide ( temp int)
+0:9          Convert bool to int ( temp int)
+0:9            'a' ( global bool)
+0:9          Convert bool to int ( temp int)
+0:9            'b' ( global bool)
 0:10      add second child into first child ( temp int)
 0:10        'r' ( temp int)
-0:10        Convert bool to int ( temp int)
-0:10          mod ( temp bool)
-0:10            Convert bool to int ( temp int)
-0:10              'a' ( global bool)
-0:10            Convert bool to int ( temp int)
-0:10              'b' ( global bool)
+0:10        mod ( temp int)
+0:10          Convert bool to int ( temp int)
+0:10            'a' ( global bool)
+0:10          Convert bool to int ( temp int)
+0:10            'b' ( global bool)
 0:12      add second child into first child ( temp int)
 0:12        'r' ( temp int)
-0:12        Convert bool to int ( temp int)
-0:12          bitwise and ( temp bool)
-0:12            Convert bool to int ( temp int)
-0:12              'a' ( global bool)
-0:12            Convert bool to int ( temp int)
-0:12              'b' ( global bool)
+0:12        bitwise and ( temp int)
+0:12          Convert bool to int ( temp int)
+0:12            'a' ( global bool)
+0:12          Convert bool to int ( temp int)
+0:12            'b' ( global bool)
 0:13      add second child into first child ( temp int)
 0:13        'r' ( temp int)
-0:13        Convert bool to int ( temp int)
-0:13          inclusive-or ( temp bool)
-0:13            Convert bool to int ( temp int)
-0:13              'a' ( global bool)
-0:13            Convert bool to int ( temp int)
-0:13              'b' ( global bool)
+0:13        inclusive-or ( temp int)
+0:13          Convert bool to int ( temp int)
+0:13            'a' ( global bool)
+0:13          Convert bool to int ( temp int)
+0:13            'b' ( global bool)
 0:14      add second child into first child ( temp int)
 0:14        'r' ( temp int)
-0:14        Convert bool to int ( temp int)
-0:14          exclusive-or ( temp bool)
-0:14            Convert bool to int ( temp int)
-0:14              'a' ( global bool)
-0:14            Convert bool to int ( temp int)
-0:14              'b' ( global bool)
+0:14        exclusive-or ( temp int)
+0:14          Convert bool to int ( temp int)
+0:14            'a' ( global bool)
+0:14          Convert bool to int ( temp int)
+0:14            'b' ( global bool)
 0:16      add second child into first child ( temp int)
 0:16        'r' ( temp int)
-0:16        Convert bool to int ( temp int)
-0:16          left-shift ( temp bool)
-0:16            Convert bool to int ( temp int)
-0:16              'a' ( global bool)
-0:16            Convert bool to int ( temp int)
-0:16              'b' ( global bool)
+0:16        left-shift ( temp int)
+0:16          Convert bool to int ( temp int)
+0:16            'a' ( global bool)
+0:16          Convert bool to int ( temp int)
+0:16            'b' ( global bool)
 0:17      add second child into first child ( temp int)
 0:17        'r' ( temp int)
-0:17        Convert bool to int ( temp int)
-0:17          right-shift ( temp bool)
-0:17            Convert bool to int ( temp int)
-0:17              'a' ( global bool)
-0:17            Convert bool to int ( temp int)
-0:17              'b' ( global bool)
+0:17        right-shift ( temp int)
+0:17          Convert bool to int ( temp int)
+0:17            'a' ( global bool)
+0:17          Convert bool to int ( temp int)
+0:17            'b' ( global bool)
 0:19      Branch: Return with expression
 0:19        Construct vec4 ( temp 4-component vector of float)
 0:19          Convert int to float ( temp float)
@@ -224,21 +204,21 @@
 0:?     '@entryPointOutput' ( out 4-component vector of float Position)
 
 // Module Version 10000
-// Generated by (magic number): 80002
-// Id's are bound by 109
+// Generated by (magic number): 80006
+// Id's are bound by 99
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Vertex 4  "main" 107
+                              EntryPoint Vertex 4  "main" 97
                               Source HLSL 500
                               Name 4  "main"
                               Name 9  "@main("
                               Name 13  "b"
                               Name 17  "r"
                               Name 19  "a"
-                              Name 107  "@entryPointOutput"
-                              Decorate 107(@entryPointOutput) BuiltIn Position
+                              Name 97  "@entryPointOutput"
+                              Decorate 97(@entryPointOutput) BuiltIn Position
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -253,13 +233,13 @@
               18:     15(int) Constant 0
            19(a):     12(ptr) Variable Private
               21:     15(int) Constant 1
-             106:             TypePointer Output 7(fvec4)
-107(@entryPointOutput):    106(ptr) Variable Output
+              96:             TypePointer Output 7(fvec4)
+97(@entryPointOutput):     96(ptr) Variable Output
          4(main):           2 Function None 3
                5:             Label
                               Store 13(b) 14
-             108:    7(fvec4) FunctionCall 9(@main()
-                              Store 107(@entryPointOutput) 108
+              98:    7(fvec4) FunctionCall 9(@main()
+                              Store 97(@entryPointOutput) 98
                               Return
                               FunctionEnd
        9(@main():    7(fvec4) Function None 8
@@ -270,62 +250,63 @@
               22:     15(int) Select 20 21 18
               23:    11(bool) Load 13(b)
               24:     15(int) Select 23 21 18
-              25:    11(bool) IAdd 22 24
-              26:     15(int) Select 25 21 18
-              27:     15(int) Load 17(r)
-              28:     15(int) IAdd 27 26
-                              Store 17(r) 28
-              29:    11(bool) Load 19(a)
-              30:     15(int) Select 29 21 18
-              31:    11(bool) Load 13(b)
-              32:     15(int) Select 31 21 18
-              33:    11(bool) ISub 30 32
-              34:     15(int) Select 33 21 18
-              35:     15(int) Load 17(r)
-              36:     15(int) IAdd 35 34
-                              Store 17(r) 36
-              37:    11(bool) Load 19(a)
+              25:     15(int) IAdd 22 24
+              26:     15(int) Load 17(r)
+              27:     15(int) IAdd 26 25
+                              Store 17(r) 27
+              28:    11(bool) Load 19(a)
+              29:     15(int) Select 28 21 18
+              30:    11(bool) Load 13(b)
+              31:     15(int) Select 30 21 18
+              32:     15(int) ISub 29 31
+              33:     15(int) Load 17(r)
+              34:     15(int) IAdd 33 32
+                              Store 17(r) 34
+              35:    11(bool) Load 19(a)
+              36:     15(int) Select 35 21 18
+              37:    11(bool) Load 13(b)
               38:     15(int) Select 37 21 18
-              39:    11(bool) Load 13(b)
-              40:     15(int) Select 39 21 18
-              41:    11(bool) IMul 38 40
-              42:     15(int) Select 41 21 18
-              43:     15(int) Load 17(r)
-              44:     15(int) IAdd 43 42
-                              Store 17(r) 44
-              45:    11(bool) Load 19(a)
-              46:     15(int) Select 45 21 18
-              47:    11(bool) Load 13(b)
-              48:     15(int) Select 47 21 18
-              49:    11(bool) SDiv 46 48
+              39:     15(int) IMul 36 38
+              40:     15(int) Load 17(r)
+              41:     15(int) IAdd 40 39
+                              Store 17(r) 41
+              42:    11(bool) Load 19(a)
+              43:     15(int) Select 42 21 18
+              44:    11(bool) Load 13(b)
+              45:     15(int) Select 44 21 18
+              46:     15(int) SDiv 43 45
+              47:     15(int) Load 17(r)
+              48:     15(int) IAdd 47 46
+                              Store 17(r) 48
+              49:    11(bool) Load 19(a)
               50:     15(int) Select 49 21 18
-              51:     15(int) Load 17(r)
-              52:     15(int) IAdd 51 50
-                              Store 17(r) 52
-              53:    11(bool) Load 19(a)
-              54:     15(int) Select 53 21 18
-              55:    11(bool) Load 13(b)
-              56:     15(int) Select 55 21 18
-              57:    11(bool) SMod 54 56
-              58:     15(int) Select 57 21 18
-              59:     15(int) Load 17(r)
-              60:     15(int) IAdd 59 58
-                              Store 17(r) 60
-              61:    11(bool) Load 19(a)
-              62:     15(int) Select 61 21 18
-              63:    11(bool) Load 13(b)
+              51:    11(bool) Load 13(b)
+              52:     15(int) Select 51 21 18
+              53:     15(int) SMod 50 52
+              54:     15(int) Load 17(r)
+              55:     15(int) IAdd 54 53
+                              Store 17(r) 55
+              56:    11(bool) Load 19(a)
+              57:     15(int) Select 56 21 18
+              58:    11(bool) Load 13(b)
+              59:     15(int) Select 58 21 18
+              60:     15(int) BitwiseAnd 57 59
+              61:     15(int) Load 17(r)
+              62:     15(int) IAdd 61 60
+                              Store 17(r) 62
+              63:    11(bool) Load 19(a)
               64:     15(int) Select 63 21 18
-              65:    11(bool) BitwiseAnd 62 64
+              65:    11(bool) Load 13(b)
               66:     15(int) Select 65 21 18
-              67:     15(int) Load 17(r)
-              68:     15(int) IAdd 67 66
-                              Store 17(r) 68
-              69:    11(bool) Load 19(a)
-              70:     15(int) Select 69 21 18
-              71:    11(bool) Load 13(b)
-              72:     15(int) Select 71 21 18
-              73:    11(bool) BitwiseOr 70 72
-              74:     15(int) Select 73 21 18
+              67:     15(int) BitwiseOr 64 66
+              68:     15(int) Load 17(r)
+              69:     15(int) IAdd 68 67
+                              Store 17(r) 69
+              70:    11(bool) Load 19(a)
+              71:     15(int) Select 70 21 18
+              72:    11(bool) Load 13(b)
+              73:     15(int) Select 72 21 18
+              74:     15(int) BitwiseXor 71 73
               75:     15(int) Load 17(r)
               76:     15(int) IAdd 75 74
                               Store 17(r) 76
@@ -333,31 +314,20 @@
               78:     15(int) Select 77 21 18
               79:    11(bool) Load 13(b)
               80:     15(int) Select 79 21 18
-              81:    11(bool) BitwiseXor 78 80
-              82:     15(int) Select 81 21 18
-              83:     15(int) Load 17(r)
-              84:     15(int) IAdd 83 82
-                              Store 17(r) 84
-              85:    11(bool) Load 19(a)
-              86:     15(int) Select 85 21 18
-              87:    11(bool) Load 13(b)
-              88:     15(int) Select 87 21 18
-              89:    11(bool) ShiftLeftLogical 86 88
-              90:     15(int) Select 89 21 18
+              81:     15(int) ShiftLeftLogical 78 80
+              82:     15(int) Load 17(r)
+              83:     15(int) IAdd 82 81
+                              Store 17(r) 83
+              84:    11(bool) Load 19(a)
+              85:     15(int) Select 84 21 18
+              86:    11(bool) Load 13(b)
+              87:     15(int) Select 86 21 18
+              88:     15(int) ShiftRightArithmetic 85 87
+              89:     15(int) Load 17(r)
+              90:     15(int) IAdd 89 88
+                              Store 17(r) 90
               91:     15(int) Load 17(r)
-              92:     15(int) IAdd 91 90
-                              Store 17(r) 92
-              93:    11(bool) Load 19(a)
-              94:     15(int) Select 93 21 18
-              95:    11(bool) Load 13(b)
-              96:     15(int) Select 95 21 18
-              97:    11(bool) ShiftRightArithmetic 94 96
-              98:     15(int) Select 97 21 18
-              99:     15(int) Load 17(r)
-             100:     15(int) IAdd 99 98
-                              Store 17(r) 100
-             101:     15(int) Load 17(r)
-             102:    6(float) ConvertSToF 101
-             103:    7(fvec4) CompositeConstruct 102 102 102 102
-                              ReturnValue 103
+              92:    6(float) ConvertSToF 91
+              93:    7(fvec4) CompositeConstruct 92 92 92 92
+                              ReturnValue 93
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.buffer.frag.out b/Test/baseResults/hlsl.buffer.frag.out
index 0b73f8d..454c8ae 100755
--- a/Test/baseResults/hlsl.buffer.frag.out
+++ b/Test/baseResults/hlsl.buffer.frag.out
@@ -8,50 +8,66 @@
 0:31      Branch: Return with expression
 0:31        Constant:
 0:31          1.000000
-0:35  Function Definition: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
-0:35    Function Parameters: 
-0:35      'input' ( in 4-component vector of float)
+0:43  Function Definition: @PixelShaderFunction(vf4; ( temp structure{ temp 4-component vector of float a})
+0:43    Function Parameters: 
+0:43      'input' ( in 4-component vector of float)
 0:?     Sequence
-0:36      Branch: Return with expression
-0:36        vector-scale ( temp 4-component vector of float)
-0:36          add ( temp 4-component vector of float)
-0:36            add ( temp 4-component vector of float)
-0:36              add ( temp 4-component vector of float)
-0:36                add ( temp 4-component vector of float)
-0:36                  'input' ( in 4-component vector of float)
-0:36                  v1: direct index for structure (layout( row_major std140) uniform 4-component vector of float)
-0:36                    'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4-component vector of float v1})
-0:36                    Constant:
-0:36                      0 (const uint)
-0:36                v2: direct index for structure (layout( row_major std430) buffer 4-component vector of float)
-0:36                  'anon@1' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer 4-component vector of float v2})
-0:36                  Constant:
-0:36                    0 (const uint)
-0:36              v3: direct index for structure (layout( row_major std140 offset=0) uniform 4-component vector of float)
-0:36                'anon@2' (layout( row_major std140) uniform block{layout( row_major std140 offset=0) uniform 4-component vector of float v3, layout( row_major std140 offset=20) uniform int i3})
-0:36                Constant:
-0:36                  0 (const uint)
-0:36            v4: direct index for structure (layout( row_major std430 offset=16) buffer 4-component vector of float)
-0:36              'anon@3' (layout( binding=8 row_major std430) readonly buffer block{layout( row_major std430 offset=16) buffer 4-component vector of float v4, layout( row_major std430 offset=48) buffer int i4, layout( row_major std430 offset=60) buffer float f1, layout( row_major std430 offset=64) buffer float f3, layout( row_major std430 offset=68) buffer float f4, layout( row_major std430 offset=72) buffer float f5, layout( row_major std430) buffer float f6, layout( row_major std430 offset=128) buffer float f7, layout( row_major std430 offset=112) buffer 3X4 matrix of float m1, layout( column_major std430 offset=176) buffer 3X4 matrix of float m2, layout( row_major std430 offset=240) buffer 3X4 matrix of float m3, layout( row_major std430 offset=304) buffer 3X4 matrix of float m4})
-0:36              Constant:
-0:36                0 (const uint)
-0:36          Function Call: foo( ( temp float)
-0:35  Function Definition: PixelShaderFunction( ( temp void)
-0:35    Function Parameters: 
+0:45      move second child to first child ( temp 4-component vector of float)
+0:45        a: direct index for structure ( temp 4-component vector of float)
+0:45          'ret' ( temp structure{ temp 4-component vector of float a})
+0:45          Constant:
+0:45            0 (const int)
+0:45        add ( temp 4-component vector of float)
+0:45          v24: direct index for structure (layout( row_major std140) uniform 4-component vector of float)
+0:45            'anon@4' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4-component vector of float v24})
+0:45            Constant:
+0:45              0 (const uint)
+0:45          vector-scale ( temp 4-component vector of float)
+0:45            add ( temp 4-component vector of float)
+0:45              add ( temp 4-component vector of float)
+0:45                add ( temp 4-component vector of float)
+0:45                  add ( temp 4-component vector of float)
+0:45                    'input' ( in 4-component vector of float)
+0:45                    v1: direct index for structure (layout( row_major std140) uniform 4-component vector of float)
+0:45                      'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4-component vector of float v1})
+0:45                      Constant:
+0:45                        0 (const uint)
+0:45                  v2: direct index for structure (layout( row_major std430) buffer 4-component vector of float)
+0:45                    'anon@1' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer 4-component vector of float v2})
+0:45                    Constant:
+0:45                      0 (const uint)
+0:45                v3: direct index for structure (layout( row_major std140 offset=0) uniform 4-component vector of float)
+0:45                  'anon@2' (layout( row_major std140) uniform block{layout( row_major std140 offset=0) uniform 4-component vector of float v3, layout( row_major std140 offset=20) uniform int i3})
+0:45                  Constant:
+0:45                    0 (const uint)
+0:45              v4: direct index for structure (layout( row_major std430 offset=16) buffer 4-component vector of float)
+0:45                'anon@3' (layout( binding=8 row_major std430) readonly buffer block{layout( row_major std430 offset=16) buffer 4-component vector of float v4, layout( row_major std430 offset=48) buffer int i4, layout( row_major std430 offset=60) buffer float f1, layout( row_major std430 offset=64) buffer float f3, layout( row_major std430 offset=68) buffer float f4, layout( row_major std430 offset=72) buffer float f5, layout( row_major std430) buffer float f6, layout( row_major std430 offset=128) buffer float f7, layout( row_major std430 offset=112) buffer 3X4 matrix of float m1, layout( column_major std430 offset=176) buffer 3X4 matrix of float m2, layout( row_major std430 offset=240) buffer 3X4 matrix of float m3, layout( row_major std430 offset=304) buffer 3X4 matrix of float m4})
+0:45                Constant:
+0:45                  0 (const uint)
+0:45            Function Call: foo( ( temp float)
+0:46      Branch: Return with expression
+0:46        'ret' ( temp structure{ temp 4-component vector of float a})
+0:43  Function Definition: PixelShaderFunction( ( temp void)
+0:43    Function Parameters: 
 0:?     Sequence
-0:35      move second child to first child ( temp 4-component vector of float)
+0:43      move second child to first child ( temp 4-component vector of float)
 0:?         'input' ( temp 4-component vector of float)
 0:?         'input' ( in 4-component vector of float FragCoord)
-0:35      move second child to first child ( temp 4-component vector of float)
-0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
-0:35        Function Call: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
-0:?           'input' ( temp 4-component vector of float)
+0:43      Sequence
+0:43        move second child to first child ( temp 4-component vector of float)
+0:?           '@entryPointOutput.a' (layout( location=0) out 4-component vector of float)
+0:43          a: direct index for structure ( temp 4-component vector of float)
+0:43            Function Call: @PixelShaderFunction(vf4; ( temp structure{ temp 4-component vector of float a})
+0:?               'input' ( temp 4-component vector of float)
+0:43            Constant:
+0:43              0 (const int)
 0:?   Linker Objects
 0:?     'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4-component vector of float v1})
 0:?     'anon@1' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer 4-component vector of float v2})
 0:?     'anon@2' (layout( row_major std140) uniform block{layout( row_major std140 offset=0) uniform 4-component vector of float v3, layout( row_major std140 offset=20) uniform int i3})
 0:?     'anon@3' (layout( binding=8 row_major std430) readonly buffer block{layout( row_major std430 offset=16) buffer 4-component vector of float v4, layout( row_major std430 offset=48) buffer int i4, layout( row_major std430 offset=60) buffer float f1, layout( row_major std430 offset=64) buffer float f3, layout( row_major std430 offset=68) buffer float f4, layout( row_major std430 offset=72) buffer float f5, layout( row_major std430) buffer float f6, layout( row_major std430 offset=128) buffer float f7, layout( row_major std430 offset=112) buffer 3X4 matrix of float m1, layout( column_major std430 offset=176) buffer 3X4 matrix of float m2, layout( row_major std430 offset=240) buffer 3X4 matrix of float m3, layout( row_major std430 offset=304) buffer 3X4 matrix of float m4})
-0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:?     'anon@4' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4-component vector of float v24})
+0:?     '@entryPointOutput.a' (layout( location=0) out 4-component vector of float)
 0:?     'input' ( in 4-component vector of float FragCoord)
 
 
@@ -67,203 +83,241 @@
 0:31      Branch: Return with expression
 0:31        Constant:
 0:31          1.000000
-0:35  Function Definition: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
-0:35    Function Parameters: 
-0:35      'input' ( in 4-component vector of float)
+0:43  Function Definition: @PixelShaderFunction(vf4; ( temp structure{ temp 4-component vector of float a})
+0:43    Function Parameters: 
+0:43      'input' ( in 4-component vector of float)
 0:?     Sequence
-0:36      Branch: Return with expression
-0:36        vector-scale ( temp 4-component vector of float)
-0:36          add ( temp 4-component vector of float)
-0:36            add ( temp 4-component vector of float)
-0:36              add ( temp 4-component vector of float)
-0:36                add ( temp 4-component vector of float)
-0:36                  'input' ( in 4-component vector of float)
-0:36                  v1: direct index for structure (layout( row_major std140) uniform 4-component vector of float)
-0:36                    'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4-component vector of float v1})
-0:36                    Constant:
-0:36                      0 (const uint)
-0:36                v2: direct index for structure (layout( row_major std430) buffer 4-component vector of float)
-0:36                  'anon@1' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer 4-component vector of float v2})
-0:36                  Constant:
-0:36                    0 (const uint)
-0:36              v3: direct index for structure (layout( row_major std140 offset=0) uniform 4-component vector of float)
-0:36                'anon@2' (layout( row_major std140) uniform block{layout( row_major std140 offset=0) uniform 4-component vector of float v3, layout( row_major std140 offset=20) uniform int i3})
-0:36                Constant:
-0:36                  0 (const uint)
-0:36            v4: direct index for structure (layout( row_major std430 offset=16) buffer 4-component vector of float)
-0:36              'anon@3' (layout( binding=8 row_major std430) readonly buffer block{layout( row_major std430 offset=16) buffer 4-component vector of float v4, layout( row_major std430 offset=48) buffer int i4, layout( row_major std430 offset=60) buffer float f1, layout( row_major std430 offset=64) buffer float f3, layout( row_major std430 offset=68) buffer float f4, layout( row_major std430 offset=72) buffer float f5, layout( row_major std430) buffer float f6, layout( row_major std430 offset=128) buffer float f7, layout( row_major std430 offset=112) buffer 3X4 matrix of float m1, layout( column_major std430 offset=176) buffer 3X4 matrix of float m2, layout( row_major std430 offset=240) buffer 3X4 matrix of float m3, layout( row_major std430 offset=304) buffer 3X4 matrix of float m4})
-0:36              Constant:
-0:36                0 (const uint)
-0:36          Function Call: foo( ( temp float)
-0:35  Function Definition: PixelShaderFunction( ( temp void)
-0:35    Function Parameters: 
+0:45      move second child to first child ( temp 4-component vector of float)
+0:45        a: direct index for structure ( temp 4-component vector of float)
+0:45          'ret' ( temp structure{ temp 4-component vector of float a})
+0:45          Constant:
+0:45            0 (const int)
+0:45        add ( temp 4-component vector of float)
+0:45          v24: direct index for structure (layout( row_major std140) uniform 4-component vector of float)
+0:45            'anon@4' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4-component vector of float v24})
+0:45            Constant:
+0:45              0 (const uint)
+0:45          vector-scale ( temp 4-component vector of float)
+0:45            add ( temp 4-component vector of float)
+0:45              add ( temp 4-component vector of float)
+0:45                add ( temp 4-component vector of float)
+0:45                  add ( temp 4-component vector of float)
+0:45                    'input' ( in 4-component vector of float)
+0:45                    v1: direct index for structure (layout( row_major std140) uniform 4-component vector of float)
+0:45                      'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4-component vector of float v1})
+0:45                      Constant:
+0:45                        0 (const uint)
+0:45                  v2: direct index for structure (layout( row_major std430) buffer 4-component vector of float)
+0:45                    'anon@1' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer 4-component vector of float v2})
+0:45                    Constant:
+0:45                      0 (const uint)
+0:45                v3: direct index for structure (layout( row_major std140 offset=0) uniform 4-component vector of float)
+0:45                  'anon@2' (layout( row_major std140) uniform block{layout( row_major std140 offset=0) uniform 4-component vector of float v3, layout( row_major std140 offset=20) uniform int i3})
+0:45                  Constant:
+0:45                    0 (const uint)
+0:45              v4: direct index for structure (layout( row_major std430 offset=16) buffer 4-component vector of float)
+0:45                'anon@3' (layout( binding=8 row_major std430) readonly buffer block{layout( row_major std430 offset=16) buffer 4-component vector of float v4, layout( row_major std430 offset=48) buffer int i4, layout( row_major std430 offset=60) buffer float f1, layout( row_major std430 offset=64) buffer float f3, layout( row_major std430 offset=68) buffer float f4, layout( row_major std430 offset=72) buffer float f5, layout( row_major std430) buffer float f6, layout( row_major std430 offset=128) buffer float f7, layout( row_major std430 offset=112) buffer 3X4 matrix of float m1, layout( column_major std430 offset=176) buffer 3X4 matrix of float m2, layout( row_major std430 offset=240) buffer 3X4 matrix of float m3, layout( row_major std430 offset=304) buffer 3X4 matrix of float m4})
+0:45                Constant:
+0:45                  0 (const uint)
+0:45            Function Call: foo( ( temp float)
+0:46      Branch: Return with expression
+0:46        'ret' ( temp structure{ temp 4-component vector of float a})
+0:43  Function Definition: PixelShaderFunction( ( temp void)
+0:43    Function Parameters: 
 0:?     Sequence
-0:35      move second child to first child ( temp 4-component vector of float)
+0:43      move second child to first child ( temp 4-component vector of float)
 0:?         'input' ( temp 4-component vector of float)
 0:?         'input' ( in 4-component vector of float FragCoord)
-0:35      move second child to first child ( temp 4-component vector of float)
-0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
-0:35        Function Call: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
-0:?           'input' ( temp 4-component vector of float)
+0:43      Sequence
+0:43        move second child to first child ( temp 4-component vector of float)
+0:?           '@entryPointOutput.a' (layout( location=0) out 4-component vector of float)
+0:43          a: direct index for structure ( temp 4-component vector of float)
+0:43            Function Call: @PixelShaderFunction(vf4; ( temp structure{ temp 4-component vector of float a})
+0:?               'input' ( temp 4-component vector of float)
+0:43            Constant:
+0:43              0 (const int)
 0:?   Linker Objects
 0:?     'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4-component vector of float v1})
 0:?     'anon@1' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer 4-component vector of float v2})
 0:?     'anon@2' (layout( row_major std140) uniform block{layout( row_major std140 offset=0) uniform 4-component vector of float v3, layout( row_major std140 offset=20) uniform int i3})
 0:?     'anon@3' (layout( binding=8 row_major std430) readonly buffer block{layout( row_major std430 offset=16) buffer 4-component vector of float v4, layout( row_major std430 offset=48) buffer int i4, layout( row_major std430 offset=60) buffer float f1, layout( row_major std430 offset=64) buffer float f3, layout( row_major std430 offset=68) buffer float f4, layout( row_major std430 offset=72) buffer float f5, layout( row_major std430) buffer float f6, layout( row_major std430 offset=128) buffer float f7, layout( row_major std430 offset=112) buffer 3X4 matrix of float m1, layout( column_major std430 offset=176) buffer 3X4 matrix of float m2, layout( row_major std430 offset=240) buffer 3X4 matrix of float m3, layout( row_major std430 offset=304) buffer 3X4 matrix of float m4})
-0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:?     'anon@4' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4-component vector of float v24})
+0:?     '@entryPointOutput.a' (layout( location=0) out 4-component vector of float)
 0:?     'input' ( in 4-component vector of float FragCoord)
 
 // Module Version 10000
-// Generated by (magic number): 80002
-// Id's are bound by 61
+// Generated by (magic number): 80006
+// Id's are bound by 73
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "PixelShaderFunction" 54 57
+                              EntryPoint Fragment 4  "PixelShaderFunction" 65 68
                               ExecutionMode 4 OriginUpperLeft
                               Source HLSL 500
                               Name 4  "PixelShaderFunction"
                               Name 8  "foo("
-                              Name 14  "@PixelShaderFunction(vf4;"
-                              Name 13  "input"
-                              Name 20  "buf1"
-                              MemberName 20(buf1) 0  "v1"
-                              Name 22  ""
-                              Name 29  "buf2"
-                              MemberName 29(buf2) 0  "v2"
-                              Name 31  ""
-                              Name 35  "cbufName"
-                              MemberName 35(cbufName) 0  "v3"
-                              MemberName 35(cbufName) 1  "i3"
-                              Name 37  ""
-                              Name 42  "tbufName"
-                              MemberName 42(tbufName) 0  "v4"
-                              MemberName 42(tbufName) 1  "i4"
-                              MemberName 42(tbufName) 2  "f1"
-                              MemberName 42(tbufName) 3  "f3"
-                              MemberName 42(tbufName) 4  "f4"
-                              MemberName 42(tbufName) 5  "f5"
-                              MemberName 42(tbufName) 6  "f6"
-                              MemberName 42(tbufName) 7  "f7"
-                              MemberName 42(tbufName) 8  "m1"
-                              MemberName 42(tbufName) 9  "m2"
-                              MemberName 42(tbufName) 10  "m3"
-                              MemberName 42(tbufName) 11  "m4"
-                              Name 44  ""
-                              Name 52  "input"
-                              Name 54  "input"
-                              Name 57  "@entryPointOutput"
-                              Name 58  "param"
-                              MemberDecorate 20(buf1) 0 Offset 0
-                              Decorate 20(buf1) Block
-                              Decorate 22 DescriptorSet 0
-                              MemberDecorate 29(buf2) 0 NonWritable
-                              MemberDecorate 29(buf2) 0 Offset 0
-                              Decorate 29(buf2) BufferBlock
-                              Decorate 31 DescriptorSet 0
-                              MemberDecorate 35(cbufName) 0 Offset 0
-                              MemberDecorate 35(cbufName) 1 Offset 20
-                              Decorate 35(cbufName) Block
-                              Decorate 37 DescriptorSet 0
-                              MemberDecorate 42(tbufName) 0 NonWritable
-                              MemberDecorate 42(tbufName) 0 Offset 16
-                              MemberDecorate 42(tbufName) 1 NonWritable
-                              MemberDecorate 42(tbufName) 1 Offset 48
-                              MemberDecorate 42(tbufName) 2 NonWritable
-                              MemberDecorate 42(tbufName) 2 Offset 60
-                              MemberDecorate 42(tbufName) 3 NonWritable
-                              MemberDecorate 42(tbufName) 3 Offset 64
-                              MemberDecorate 42(tbufName) 4 NonWritable
-                              MemberDecorate 42(tbufName) 4 Offset 68
-                              MemberDecorate 42(tbufName) 5 NonWritable
-                              MemberDecorate 42(tbufName) 5 Offset 72
-                              MemberDecorate 42(tbufName) 6 NonWritable
-                              MemberDecorate 42(tbufName) 6 Offset 76
-                              MemberDecorate 42(tbufName) 7 NonWritable
-                              MemberDecorate 42(tbufName) 7 Offset 128
-                              MemberDecorate 42(tbufName) 8 RowMajor
-                              MemberDecorate 42(tbufName) 8 NonWritable
-                              MemberDecorate 42(tbufName) 8 Offset 112
-                              MemberDecorate 42(tbufName) 8 MatrixStride 16
-                              MemberDecorate 42(tbufName) 9 ColMajor
-                              MemberDecorate 42(tbufName) 9 NonWritable
-                              MemberDecorate 42(tbufName) 9 Offset 176
-                              MemberDecorate 42(tbufName) 9 MatrixStride 16
-                              MemberDecorate 42(tbufName) 10 RowMajor
-                              MemberDecorate 42(tbufName) 10 NonWritable
-                              MemberDecorate 42(tbufName) 10 Offset 240
-                              MemberDecorate 42(tbufName) 10 MatrixStride 16
-                              MemberDecorate 42(tbufName) 11 RowMajor
-                              MemberDecorate 42(tbufName) 11 NonWritable
-                              MemberDecorate 42(tbufName) 11 Offset 304
-                              MemberDecorate 42(tbufName) 11 MatrixStride 16
-                              Decorate 42(tbufName) BufferBlock
-                              Decorate 44 DescriptorSet 0
-                              Decorate 44 Binding 8
-                              Decorate 54(input) BuiltIn FragCoord
-                              Decorate 57(@entryPointOutput) Location 0
+                              Name 12  "id"
+                              MemberName 12(id) 0  "a"
+                              Name 15  "@PixelShaderFunction(vf4;"
+                              Name 14  "input"
+                              Name 21  "ret"
+                              Name 24  "cbufName2"
+                              MemberName 24(cbufName2) 0  "v24"
+                              Name 26  ""
+                              Name 31  "buf1"
+                              MemberName 31(buf1) 0  "v1"
+                              Name 33  ""
+                              Name 37  "buf2"
+                              MemberName 37(buf2) 0  "v2"
+                              Name 39  ""
+                              Name 43  "cbufName"
+                              MemberName 43(cbufName) 0  "v3"
+                              MemberName 43(cbufName) 1  "i3"
+                              Name 45  ""
+                              Name 50  "tbufName"
+                              MemberName 50(tbufName) 0  "v4"
+                              MemberName 50(tbufName) 1  "i4"
+                              MemberName 50(tbufName) 2  "f1"
+                              MemberName 50(tbufName) 3  "f3"
+                              MemberName 50(tbufName) 4  "f4"
+                              MemberName 50(tbufName) 5  "f5"
+                              MemberName 50(tbufName) 6  "f6"
+                              MemberName 50(tbufName) 7  "f7"
+                              MemberName 50(tbufName) 8  "m1"
+                              MemberName 50(tbufName) 9  "m2"
+                              MemberName 50(tbufName) 10  "m3"
+                              MemberName 50(tbufName) 11  "m4"
+                              Name 52  ""
+                              Name 63  "input"
+                              Name 65  "input"
+                              Name 68  "@entryPointOutput.a"
+                              Name 69  "param"
+                              MemberDecorate 24(cbufName2) 0 Offset 0
+                              Decorate 24(cbufName2) Block
+                              Decorate 26 DescriptorSet 0
+                              MemberDecorate 31(buf1) 0 Offset 0
+                              Decorate 31(buf1) Block
+                              Decorate 33 DescriptorSet 0
+                              MemberDecorate 37(buf2) 0 NonWritable
+                              MemberDecorate 37(buf2) 0 Offset 0
+                              Decorate 37(buf2) BufferBlock
+                              Decorate 39 DescriptorSet 0
+                              MemberDecorate 43(cbufName) 0 Offset 0
+                              MemberDecorate 43(cbufName) 1 Offset 20
+                              Decorate 43(cbufName) Block
+                              Decorate 45 DescriptorSet 0
+                              MemberDecorate 50(tbufName) 0 NonWritable
+                              MemberDecorate 50(tbufName) 0 Offset 16
+                              MemberDecorate 50(tbufName) 1 NonWritable
+                              MemberDecorate 50(tbufName) 1 Offset 48
+                              MemberDecorate 50(tbufName) 2 NonWritable
+                              MemberDecorate 50(tbufName) 2 Offset 60
+                              MemberDecorate 50(tbufName) 3 NonWritable
+                              MemberDecorate 50(tbufName) 3 Offset 64
+                              MemberDecorate 50(tbufName) 4 NonWritable
+                              MemberDecorate 50(tbufName) 4 Offset 68
+                              MemberDecorate 50(tbufName) 5 NonWritable
+                              MemberDecorate 50(tbufName) 5 Offset 72
+                              MemberDecorate 50(tbufName) 6 NonWritable
+                              MemberDecorate 50(tbufName) 6 Offset 76
+                              MemberDecorate 50(tbufName) 7 NonWritable
+                              MemberDecorate 50(tbufName) 7 Offset 128
+                              MemberDecorate 50(tbufName) 8 RowMajor
+                              MemberDecorate 50(tbufName) 8 NonWritable
+                              MemberDecorate 50(tbufName) 8 Offset 112
+                              MemberDecorate 50(tbufName) 8 MatrixStride 16
+                              MemberDecorate 50(tbufName) 9 ColMajor
+                              MemberDecorate 50(tbufName) 9 NonWritable
+                              MemberDecorate 50(tbufName) 9 Offset 176
+                              MemberDecorate 50(tbufName) 9 MatrixStride 16
+                              MemberDecorate 50(tbufName) 10 RowMajor
+                              MemberDecorate 50(tbufName) 10 NonWritable
+                              MemberDecorate 50(tbufName) 10 Offset 240
+                              MemberDecorate 50(tbufName) 10 MatrixStride 16
+                              MemberDecorate 50(tbufName) 11 RowMajor
+                              MemberDecorate 50(tbufName) 11 NonWritable
+                              MemberDecorate 50(tbufName) 11 Offset 304
+                              MemberDecorate 50(tbufName) 11 MatrixStride 16
+                              Decorate 50(tbufName) BufferBlock
+                              Decorate 52 DescriptorSet 0
+                              Decorate 52 Binding 8
+                              Decorate 65(input) BuiltIn FragCoord
+                              Decorate 68(@entryPointOutput.a) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
                7:             TypeFunction 6(float)
               10:             TypeVector 6(float) 4
               11:             TypePointer Function 10(fvec4)
-              12:             TypeFunction 10(fvec4) 11(ptr)
-              16:    6(float) Constant 1065353216
-        20(buf1):             TypeStruct 10(fvec4)
-              21:             TypePointer Uniform 20(buf1)
-              22:     21(ptr) Variable Uniform
-              23:             TypeInt 32 1
-              24:     23(int) Constant 0
-              25:             TypePointer Uniform 10(fvec4)
-        29(buf2):             TypeStruct 10(fvec4)
-              30:             TypePointer Uniform 29(buf2)
-              31:     30(ptr) Variable Uniform
-    35(cbufName):             TypeStruct 10(fvec4) 23(int)
-              36:             TypePointer Uniform 35(cbufName)
-              37:     36(ptr) Variable Uniform
-              41:             TypeMatrix 10(fvec4) 3
-    42(tbufName):             TypeStruct 10(fvec4) 23(int) 6(float) 6(float) 6(float) 6(float) 6(float) 6(float) 41 41 41 41
-              43:             TypePointer Uniform 42(tbufName)
-              44:     43(ptr) Variable Uniform
-              53:             TypePointer Input 10(fvec4)
-       54(input):     53(ptr) Variable Input
-              56:             TypePointer Output 10(fvec4)
-57(@entryPointOutput):     56(ptr) Variable Output
+          12(id):             TypeStruct 10(fvec4)
+              13:             TypeFunction 12(id) 11(ptr)
+              17:    6(float) Constant 1065353216
+              20:             TypePointer Function 12(id)
+              22:             TypeInt 32 1
+              23:     22(int) Constant 0
+   24(cbufName2):             TypeStruct 10(fvec4)
+              25:             TypePointer Uniform 24(cbufName2)
+              26:     25(ptr) Variable Uniform
+              27:             TypePointer Uniform 10(fvec4)
+        31(buf1):             TypeStruct 10(fvec4)
+              32:             TypePointer Uniform 31(buf1)
+              33:     32(ptr) Variable Uniform
+        37(buf2):             TypeStruct 10(fvec4)
+              38:             TypePointer Uniform 37(buf2)
+              39:     38(ptr) Variable Uniform
+    43(cbufName):             TypeStruct 10(fvec4) 22(int)
+              44:             TypePointer Uniform 43(cbufName)
+              45:     44(ptr) Variable Uniform
+              49:             TypeMatrix 10(fvec4) 3
+    50(tbufName):             TypeStruct 10(fvec4) 22(int) 6(float) 6(float) 6(float) 6(float) 6(float) 6(float) 49 49 49 49
+              51:             TypePointer Uniform 50(tbufName)
+              52:     51(ptr) Variable Uniform
+              64:             TypePointer Input 10(fvec4)
+       65(input):     64(ptr) Variable Input
+              67:             TypePointer Output 10(fvec4)
+68(@entryPointOutput.a):     67(ptr) Variable Output
 4(PixelShaderFunction):           2 Function None 3
                5:             Label
-       52(input):     11(ptr) Variable Function
-       58(param):     11(ptr) Variable Function
-              55:   10(fvec4) Load 54(input)
-                              Store 52(input) 55
-              59:   10(fvec4) Load 52(input)
-                              Store 58(param) 59
-              60:   10(fvec4) FunctionCall 14(@PixelShaderFunction(vf4;) 58(param)
-                              Store 57(@entryPointOutput) 60
+       63(input):     11(ptr) Variable Function
+       69(param):     11(ptr) Variable Function
+              66:   10(fvec4) Load 65(input)
+                              Store 63(input) 66
+              70:   10(fvec4) Load 63(input)
+                              Store 69(param) 70
+              71:      12(id) FunctionCall 15(@PixelShaderFunction(vf4;) 69(param)
+              72:   10(fvec4) CompositeExtract 71 0
+                              Store 68(@entryPointOutput.a) 72
                               Return
                               FunctionEnd
          8(foo():    6(float) Function None 7
                9:             Label
-                              ReturnValue 16
+                              ReturnValue 17
                               FunctionEnd
-14(@PixelShaderFunction(vf4;):   10(fvec4) Function None 12
-       13(input):     11(ptr) FunctionParameter
-              15:             Label
-              19:   10(fvec4) Load 13(input)
-              26:     25(ptr) AccessChain 22 24
-              27:   10(fvec4) Load 26
-              28:   10(fvec4) FAdd 19 27
-              32:     25(ptr) AccessChain 31 24
-              33:   10(fvec4) Load 32
-              34:   10(fvec4) FAdd 28 33
-              38:     25(ptr) AccessChain 37 24
-              39:   10(fvec4) Load 38
-              40:   10(fvec4) FAdd 34 39
-              45:     25(ptr) AccessChain 44 24
-              46:   10(fvec4) Load 45
-              47:   10(fvec4) FAdd 40 46
-              48:    6(float) FunctionCall 8(foo()
-              49:   10(fvec4) VectorTimesScalar 47 48
-                              ReturnValue 49
+15(@PixelShaderFunction(vf4;):      12(id) Function None 13
+       14(input):     11(ptr) FunctionParameter
+              16:             Label
+         21(ret):     20(ptr) Variable Function
+              28:     27(ptr) AccessChain 26 23
+              29:   10(fvec4) Load 28
+              30:   10(fvec4) Load 14(input)
+              34:     27(ptr) AccessChain 33 23
+              35:   10(fvec4) Load 34
+              36:   10(fvec4) FAdd 30 35
+              40:     27(ptr) AccessChain 39 23
+              41:   10(fvec4) Load 40
+              42:   10(fvec4) FAdd 36 41
+              46:     27(ptr) AccessChain 45 23
+              47:   10(fvec4) Load 46
+              48:   10(fvec4) FAdd 42 47
+              53:     27(ptr) AccessChain 52 23
+              54:   10(fvec4) Load 53
+              55:   10(fvec4) FAdd 48 54
+              56:    6(float) FunctionCall 8(foo()
+              57:   10(fvec4) VectorTimesScalar 55 56
+              58:   10(fvec4) FAdd 29 57
+              59:     11(ptr) AccessChain 21(ret) 23
+                              Store 59 58
+              60:      12(id) Load 21(ret)
+                              ReturnValue 60
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.calculatelod.dx10.frag.out b/Test/baseResults/hlsl.calculatelod.dx10.frag.out
index bbdd216..cdaf3bf 100644
--- a/Test/baseResults/hlsl.calculatelod.dx10.frag.out
+++ b/Test/baseResults/hlsl.calculatelod.dx10.frag.out
@@ -1,6 +1,7 @@
 hlsl.calculatelod.dx10.frag
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:24  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:24    Function Parameters: 
@@ -181,6 +182,7 @@
 
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:24  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:24    Function Parameters: 
@@ -356,7 +358,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 148
 
                               Capability Shader
@@ -367,6 +369,7 @@
                               MemoryModel Logical GLSL450
                               EntryPoint Fragment 4  "main" 140 144
                               ExecutionMode 4 OriginUpperLeft
+                              ExecutionMode 4 DepthReplacing
                               Source HLSL 500
                               Name 4  "main"
                               Name 8  "PS_OUTPUT"
diff --git a/Test/baseResults/hlsl.calculatelodunclamped.dx10.frag.out b/Test/baseResults/hlsl.calculatelodunclamped.dx10.frag.out
index f85d9b5..160c095 100644
--- a/Test/baseResults/hlsl.calculatelodunclamped.dx10.frag.out
+++ b/Test/baseResults/hlsl.calculatelodunclamped.dx10.frag.out
@@ -13,6 +13,7 @@
 
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 ERROR: node is still EOpNull!
 0:24  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:24    Function Parameters: 
@@ -193,6 +194,7 @@
 
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 ERROR: node is still EOpNull!
 0:24  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:24    Function Parameters: 
diff --git a/Test/baseResults/hlsl.cast.frag.out b/Test/baseResults/hlsl.cast.frag.out
index 5d7cd71..2fb3769 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): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 39
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.cbuffer-identifier.vert.out b/Test/baseResults/hlsl.cbuffer-identifier.vert.out
new file mode 100644
index 0000000..1d2b9f6
--- /dev/null
+++ b/Test/baseResults/hlsl.cbuffer-identifier.vert.out
@@ -0,0 +1,417 @@
+hlsl.cbuffer-identifier.vert
+WARNING: 0:29: '' : mul() matrix size mismatch 
+
+Shader version: 500
+0:? Sequence
+0:22  Function Definition: @main(struct-VS_INPUT-vf4-vf31; ( temp structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:22    Function Parameters: 
+0:22      'input' ( in structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:?     Sequence
+0:23      Sequence
+0:23        move second child to first child ( temp int)
+0:23          'ConstantBuffer' ( temp int)
+0:23          Constant:
+0:23            42 (const int)
+0:25      Sequence
+0:25        move second child to first child ( temp structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:25          'output' ( temp structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:25          Constant:
+0:25            0.000000
+0:25            0.000000
+0:25            0.000000
+0:25            0.000000
+0:25            0.000000
+0:25            0.000000
+0:25            0.000000
+0:26      move second child to first child ( temp 4-component vector of float)
+0:26        Pos: direct index for structure ( temp 4-component vector of float)
+0:26          'output' ( temp structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:26          Constant:
+0:26            0 (const int)
+0:26        matrix-times-vector ( temp 4-component vector of float)
+0:26          World: direct index for structure (layout( row_major std140) uniform 4X4 matrix of float)
+0:26            'anon@0' (layout( binding=0 row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float World, layout( row_major std140) uniform 4X4 matrix of float View, layout( row_major std140) uniform 4X4 matrix of float Projection})
+0:26            Constant:
+0:26              0 (const uint)
+0:26          Pos: direct index for structure ( temp 4-component vector of float)
+0:26            'input' ( in structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:26            Constant:
+0:26              0 (const int)
+0:27      move second child to first child ( temp 4-component vector of float)
+0:27        Pos: direct index for structure ( temp 4-component vector of float)
+0:27          'output' ( temp structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:27          Constant:
+0:27            0 (const int)
+0:27        matrix-times-vector ( temp 4-component vector of float)
+0:27          View: direct index for structure (layout( row_major std140) uniform 4X4 matrix of float)
+0:27            'anon@0' (layout( binding=0 row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float World, layout( row_major std140) uniform 4X4 matrix of float View, layout( row_major std140) uniform 4X4 matrix of float Projection})
+0:27            Constant:
+0:27              1 (const uint)
+0:27          Pos: direct index for structure ( temp 4-component vector of float)
+0:27            'output' ( temp structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:27            Constant:
+0:27              0 (const int)
+0:28      move second child to first child ( temp 4-component vector of float)
+0:28        Pos: direct index for structure ( temp 4-component vector of float)
+0:28          'output' ( temp structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:28          Constant:
+0:28            0 (const int)
+0:28        matrix-times-vector ( temp 4-component vector of float)
+0:28          Projection: direct index for structure (layout( row_major std140) uniform 4X4 matrix of float)
+0:28            'anon@0' (layout( binding=0 row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float World, layout( row_major std140) uniform 4X4 matrix of float View, layout( row_major std140) uniform 4X4 matrix of float Projection})
+0:28            Constant:
+0:28              2 (const uint)
+0:28          Pos: direct index for structure ( temp 4-component vector of float)
+0:28            'output' ( temp structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:28            Constant:
+0:28              0 (const int)
+0:29      move second child to first child ( temp 3-component vector of float)
+0:29        Norm: direct index for structure ( temp 3-component vector of float)
+0:29          'output' ( temp structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:29          Constant:
+0:29            1 (const int)
+0:29        Construct vec3 ( temp 3-component vector of float)
+0:29          matrix-times-vector ( temp 4-component vector of float)
+0:29            Construct mat3x4 ( uniform 3X4 matrix of float)
+0:29              World: direct index for structure (layout( row_major std140) uniform 4X4 matrix of float)
+0:29                'anon@0' (layout( binding=0 row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float World, layout( row_major std140) uniform 4X4 matrix of float View, layout( row_major std140) uniform 4X4 matrix of float Projection})
+0:29                Constant:
+0:29                  0 (const uint)
+0:29            Norm: direct index for structure ( temp 3-component vector of float)
+0:29              'input' ( in structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:29              Constant:
+0:29                1 (const int)
+0:31      Branch: Return with expression
+0:31        'output' ( temp structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:22  Function Definition: main( ( temp void)
+0:22    Function Parameters: 
+0:?     Sequence
+0:22      Sequence
+0:22        move second child to first child ( temp 4-component vector of float)
+0:22          Pos: direct index for structure ( temp 4-component vector of float)
+0:?             'input' ( temp structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:22            Constant:
+0:22              0 (const int)
+0:?           'input.Pos' (layout( location=0) in 4-component vector of float)
+0:22        move second child to first child ( temp 3-component vector of float)
+0:22          Norm: direct index for structure ( temp 3-component vector of float)
+0:?             'input' ( temp structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:22            Constant:
+0:22              1 (const int)
+0:?           'input.Norm' (layout( location=1) in 3-component vector of float)
+0:22      Sequence
+0:22        move second child to first child ( temp structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:22          'flattenTemp' ( temp structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:22          Function Call: @main(struct-VS_INPUT-vf4-vf31; ( temp structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:?             'input' ( temp structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:22        move second child to first child ( temp 4-component vector of float)
+0:?           '@entryPointOutput.Pos' ( out 4-component vector of float Position)
+0:22          Pos: direct index for structure ( temp 4-component vector of float)
+0:22            'flattenTemp' ( temp structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:22            Constant:
+0:22              0 (const int)
+0:22        move second child to first child ( temp 3-component vector of float)
+0:?           '@entryPointOutput.Norm' (layout( location=0) out 3-component vector of float)
+0:22          Norm: direct index for structure ( temp 3-component vector of float)
+0:22            'flattenTemp' ( temp structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:22            Constant:
+0:22              1 (const int)
+0:?   Linker Objects
+0:?     'anon@0' (layout( binding=0 row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float World, layout( row_major std140) uniform 4X4 matrix of float View, layout( row_major std140) uniform 4X4 matrix of float Projection})
+0:?     '@entryPointOutput.Pos' ( out 4-component vector of float Position)
+0:?     '@entryPointOutput.Norm' (layout( location=0) out 3-component vector of float)
+0:?     'input.Pos' (layout( location=0) in 4-component vector of float)
+0:?     'input.Norm' (layout( location=1) in 3-component vector of float)
+
+
+Linked vertex stage:
+
+
+Shader version: 500
+0:? Sequence
+0:22  Function Definition: @main(struct-VS_INPUT-vf4-vf31; ( temp structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:22    Function Parameters: 
+0:22      'input' ( in structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:?     Sequence
+0:23      Sequence
+0:23        move second child to first child ( temp int)
+0:23          'ConstantBuffer' ( temp int)
+0:23          Constant:
+0:23            42 (const int)
+0:25      Sequence
+0:25        move second child to first child ( temp structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:25          'output' ( temp structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:25          Constant:
+0:25            0.000000
+0:25            0.000000
+0:25            0.000000
+0:25            0.000000
+0:25            0.000000
+0:25            0.000000
+0:25            0.000000
+0:26      move second child to first child ( temp 4-component vector of float)
+0:26        Pos: direct index for structure ( temp 4-component vector of float)
+0:26          'output' ( temp structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:26          Constant:
+0:26            0 (const int)
+0:26        matrix-times-vector ( temp 4-component vector of float)
+0:26          World: direct index for structure (layout( row_major std140) uniform 4X4 matrix of float)
+0:26            'anon@0' (layout( binding=0 row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float World, layout( row_major std140) uniform 4X4 matrix of float View, layout( row_major std140) uniform 4X4 matrix of float Projection})
+0:26            Constant:
+0:26              0 (const uint)
+0:26          Pos: direct index for structure ( temp 4-component vector of float)
+0:26            'input' ( in structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:26            Constant:
+0:26              0 (const int)
+0:27      move second child to first child ( temp 4-component vector of float)
+0:27        Pos: direct index for structure ( temp 4-component vector of float)
+0:27          'output' ( temp structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:27          Constant:
+0:27            0 (const int)
+0:27        matrix-times-vector ( temp 4-component vector of float)
+0:27          View: direct index for structure (layout( row_major std140) uniform 4X4 matrix of float)
+0:27            'anon@0' (layout( binding=0 row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float World, layout( row_major std140) uniform 4X4 matrix of float View, layout( row_major std140) uniform 4X4 matrix of float Projection})
+0:27            Constant:
+0:27              1 (const uint)
+0:27          Pos: direct index for structure ( temp 4-component vector of float)
+0:27            'output' ( temp structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:27            Constant:
+0:27              0 (const int)
+0:28      move second child to first child ( temp 4-component vector of float)
+0:28        Pos: direct index for structure ( temp 4-component vector of float)
+0:28          'output' ( temp structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:28          Constant:
+0:28            0 (const int)
+0:28        matrix-times-vector ( temp 4-component vector of float)
+0:28          Projection: direct index for structure (layout( row_major std140) uniform 4X4 matrix of float)
+0:28            'anon@0' (layout( binding=0 row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float World, layout( row_major std140) uniform 4X4 matrix of float View, layout( row_major std140) uniform 4X4 matrix of float Projection})
+0:28            Constant:
+0:28              2 (const uint)
+0:28          Pos: direct index for structure ( temp 4-component vector of float)
+0:28            'output' ( temp structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:28            Constant:
+0:28              0 (const int)
+0:29      move second child to first child ( temp 3-component vector of float)
+0:29        Norm: direct index for structure ( temp 3-component vector of float)
+0:29          'output' ( temp structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:29          Constant:
+0:29            1 (const int)
+0:29        Construct vec3 ( temp 3-component vector of float)
+0:29          matrix-times-vector ( temp 4-component vector of float)
+0:29            Construct mat3x4 ( uniform 3X4 matrix of float)
+0:29              World: direct index for structure (layout( row_major std140) uniform 4X4 matrix of float)
+0:29                'anon@0' (layout( binding=0 row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float World, layout( row_major std140) uniform 4X4 matrix of float View, layout( row_major std140) uniform 4X4 matrix of float Projection})
+0:29                Constant:
+0:29                  0 (const uint)
+0:29            Norm: direct index for structure ( temp 3-component vector of float)
+0:29              'input' ( in structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:29              Constant:
+0:29                1 (const int)
+0:31      Branch: Return with expression
+0:31        'output' ( temp structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:22  Function Definition: main( ( temp void)
+0:22    Function Parameters: 
+0:?     Sequence
+0:22      Sequence
+0:22        move second child to first child ( temp 4-component vector of float)
+0:22          Pos: direct index for structure ( temp 4-component vector of float)
+0:?             'input' ( temp structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:22            Constant:
+0:22              0 (const int)
+0:?           'input.Pos' (layout( location=0) in 4-component vector of float)
+0:22        move second child to first child ( temp 3-component vector of float)
+0:22          Norm: direct index for structure ( temp 3-component vector of float)
+0:?             'input' ( temp structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:22            Constant:
+0:22              1 (const int)
+0:?           'input.Norm' (layout( location=1) in 3-component vector of float)
+0:22      Sequence
+0:22        move second child to first child ( temp structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:22          'flattenTemp' ( temp structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:22          Function Call: @main(struct-VS_INPUT-vf4-vf31; ( temp structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:?             'input' ( temp structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:22        move second child to first child ( temp 4-component vector of float)
+0:?           '@entryPointOutput.Pos' ( out 4-component vector of float Position)
+0:22          Pos: direct index for structure ( temp 4-component vector of float)
+0:22            'flattenTemp' ( temp structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:22            Constant:
+0:22              0 (const int)
+0:22        move second child to first child ( temp 3-component vector of float)
+0:?           '@entryPointOutput.Norm' (layout( location=0) out 3-component vector of float)
+0:22          Norm: direct index for structure ( temp 3-component vector of float)
+0:22            'flattenTemp' ( temp structure{ temp 4-component vector of float Pos,  temp 3-component vector of float Norm})
+0:22            Constant:
+0:22              1 (const int)
+0:?   Linker Objects
+0:?     'anon@0' (layout( binding=0 row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float World, layout( row_major std140) uniform 4X4 matrix of float View, layout( row_major std140) uniform 4X4 matrix of float Projection})
+0:?     '@entryPointOutput.Pos' ( out 4-component vector of float Position)
+0:?     '@entryPointOutput.Norm' (layout( location=0) out 3-component vector of float)
+0:?     'input.Pos' (layout( location=0) in 4-component vector of float)
+0:?     'input.Norm' (layout( location=1) in 3-component vector of float)
+
+// Module Version 10000
+// Generated by (magic number): 80006
+// Id's are bound by 106
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4  "main" 87 91 99 103
+                              Source HLSL 500
+                              Name 4  "main"
+                              Name 9  "VS_INPUT"
+                              MemberName 9(VS_INPUT) 0  "Pos"
+                              MemberName 9(VS_INPUT) 1  "Norm"
+                              Name 11  "PS_INPUT"
+                              MemberName 11(PS_INPUT) 0  "Pos"
+                              MemberName 11(PS_INPUT) 1  "Norm"
+                              Name 14  "@main(struct-VS_INPUT-vf4-vf31;"
+                              Name 13  "input"
+                              Name 18  "ConstantBuffer"
+                              Name 21  "output"
+                              Name 28  "C"
+                              MemberName 28(C) 0  "World"
+                              MemberName 28(C) 1  "View"
+                              MemberName 28(C) 2  "Projection"
+                              Name 30  ""
+                              Name 85  "input"
+                              Name 87  "input.Pos"
+                              Name 91  "input.Norm"
+                              Name 94  "flattenTemp"
+                              Name 95  "param"
+                              Name 99  "@entryPointOutput.Pos"
+                              Name 103  "@entryPointOutput.Norm"
+                              MemberDecorate 28(C) 0 RowMajor
+                              MemberDecorate 28(C) 0 Offset 0
+                              MemberDecorate 28(C) 0 MatrixStride 16
+                              MemberDecorate 28(C) 1 RowMajor
+                              MemberDecorate 28(C) 1 Offset 64
+                              MemberDecorate 28(C) 1 MatrixStride 16
+                              MemberDecorate 28(C) 2 RowMajor
+                              MemberDecorate 28(C) 2 Offset 128
+                              MemberDecorate 28(C) 2 MatrixStride 16
+                              Decorate 28(C) Block
+                              Decorate 30 DescriptorSet 0
+                              Decorate 30 Binding 0
+                              Decorate 87(input.Pos) Location 0
+                              Decorate 91(input.Norm) Location 1
+                              Decorate 99(@entryPointOutput.Pos) BuiltIn Position
+                              Decorate 103(@entryPointOutput.Norm) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypeVector 6(float) 3
+     9(VS_INPUT):             TypeStruct 7(fvec4) 8(fvec3)
+              10:             TypePointer Function 9(VS_INPUT)
+    11(PS_INPUT):             TypeStruct 7(fvec4) 8(fvec3)
+              12:             TypeFunction 11(PS_INPUT) 10(ptr)
+              16:             TypeInt 32 1
+              17:             TypePointer Function 16(int)
+              19:     16(int) Constant 42
+              20:             TypePointer Function 11(PS_INPUT)
+              22:    6(float) Constant 0
+              23:    7(fvec4) ConstantComposite 22 22 22 22
+              24:    8(fvec3) ConstantComposite 22 22 22
+              25:11(PS_INPUT) ConstantComposite 23 24
+              26:     16(int) Constant 0
+              27:             TypeMatrix 7(fvec4) 4
+           28(C):             TypeStruct 27 27 27
+              29:             TypePointer Uniform 28(C)
+              30:     29(ptr) Variable Uniform
+              31:             TypePointer Uniform 27
+              34:             TypePointer Function 7(fvec4)
+              39:     16(int) Constant 1
+              46:     16(int) Constant 2
+              55:             TypeMatrix 7(fvec4) 3
+              56:    6(float) Constant 1065353216
+              73:             TypePointer Function 8(fvec3)
+              86:             TypePointer Input 7(fvec4)
+   87(input.Pos):     86(ptr) Variable Input
+              90:             TypePointer Input 8(fvec3)
+  91(input.Norm):     90(ptr) Variable Input
+              98:             TypePointer Output 7(fvec4)
+99(@entryPointOutput.Pos):     98(ptr) Variable Output
+             102:             TypePointer Output 8(fvec3)
+103(@entryPointOutput.Norm):    102(ptr) Variable Output
+         4(main):           2 Function None 3
+               5:             Label
+       85(input):     10(ptr) Variable Function
+ 94(flattenTemp):     20(ptr) Variable Function
+       95(param):     10(ptr) Variable Function
+              88:    7(fvec4) Load 87(input.Pos)
+              89:     34(ptr) AccessChain 85(input) 26
+                              Store 89 88
+              92:    8(fvec3) Load 91(input.Norm)
+              93:     73(ptr) AccessChain 85(input) 39
+                              Store 93 92
+              96: 9(VS_INPUT) Load 85(input)
+                              Store 95(param) 96
+              97:11(PS_INPUT) FunctionCall 14(@main(struct-VS_INPUT-vf4-vf31;) 95(param)
+                              Store 94(flattenTemp) 97
+             100:     34(ptr) AccessChain 94(flattenTemp) 26
+             101:    7(fvec4) Load 100
+                              Store 99(@entryPointOutput.Pos) 101
+             104:     73(ptr) AccessChain 94(flattenTemp) 39
+             105:    8(fvec3) Load 104
+                              Store 103(@entryPointOutput.Norm) 105
+                              Return
+                              FunctionEnd
+14(@main(struct-VS_INPUT-vf4-vf31;):11(PS_INPUT) Function None 12
+       13(input):     10(ptr) FunctionParameter
+              15:             Label
+18(ConstantBuffer):     17(ptr) Variable Function
+      21(output):     20(ptr) Variable Function
+                              Store 18(ConstantBuffer) 19
+                              Store 21(output) 25
+              32:     31(ptr) AccessChain 30 26
+              33:          27 Load 32
+              35:     34(ptr) AccessChain 13(input) 26
+              36:    7(fvec4) Load 35
+              37:    7(fvec4) MatrixTimesVector 33 36
+              38:     34(ptr) AccessChain 21(output) 26
+                              Store 38 37
+              40:     31(ptr) AccessChain 30 39
+              41:          27 Load 40
+              42:     34(ptr) AccessChain 21(output) 26
+              43:    7(fvec4) Load 42
+              44:    7(fvec4) MatrixTimesVector 41 43
+              45:     34(ptr) AccessChain 21(output) 26
+                              Store 45 44
+              47:     31(ptr) AccessChain 30 46
+              48:          27 Load 47
+              49:     34(ptr) AccessChain 21(output) 26
+              50:    7(fvec4) Load 49
+              51:    7(fvec4) MatrixTimesVector 48 50
+              52:     34(ptr) AccessChain 21(output) 26
+                              Store 52 51
+              53:     31(ptr) AccessChain 30 26
+              54:          27 Load 53
+              57:    6(float) CompositeExtract 54 0 0
+              58:    6(float) CompositeExtract 54 0 1
+              59:    6(float) CompositeExtract 54 0 2
+              60:    6(float) CompositeExtract 54 0 3
+              61:    6(float) CompositeExtract 54 1 0
+              62:    6(float) CompositeExtract 54 1 1
+              63:    6(float) CompositeExtract 54 1 2
+              64:    6(float) CompositeExtract 54 1 3
+              65:    6(float) CompositeExtract 54 2 0
+              66:    6(float) CompositeExtract 54 2 1
+              67:    6(float) CompositeExtract 54 2 2
+              68:    6(float) CompositeExtract 54 2 3
+              69:    7(fvec4) CompositeConstruct 57 58 59 60
+              70:    7(fvec4) CompositeConstruct 61 62 63 64
+              71:    7(fvec4) CompositeConstruct 65 66 67 68
+              72:          55 CompositeConstruct 69 70 71
+              74:     73(ptr) AccessChain 13(input) 39
+              75:    8(fvec3) Load 74
+              76:    7(fvec4) MatrixTimesVector 72 75
+              77:    6(float) CompositeExtract 76 0
+              78:    6(float) CompositeExtract 76 1
+              79:    6(float) CompositeExtract 76 2
+              80:    8(fvec3) CompositeConstruct 77 78 79
+              81:     73(ptr) AccessChain 21(output) 39
+                              Store 81 80
+              82:11(PS_INPUT) Load 21(output)
+                              ReturnValue 82
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.charLit.vert.out b/Test/baseResults/hlsl.charLit.vert.out
index 4555ba6..1e5dcc7 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): 80002
+// Generated by (magic number): 80006
 // 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 e2e1a0a..4e383f9 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): 80002
+// Generated by (magic number): 80006
 // 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 8327898..6a90616 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): 80002
+// Generated by (magic number): 80006
 // 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 5fd9aec..35382ea 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): 80002
+// Generated by (magic number): 80006
 // 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 94b1c7f..f95fd78 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): 80002
+// Generated by (magic number): 80006
 // 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 cbda87c..447dfaa 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): 80002
+// Generated by (magic number): 80006
 // 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 1b9f020..0b85e59 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): 80002
+// Generated by (magic number): 80006
 // 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 9afe2ed..e1480c9 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): 80002
+// Generated by (magic number): 80006
 // 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 1faa87e..2f13f61 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): 80002
+// Generated by (magic number): 80006
 // 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 c99a957..8135ab6 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): 80002
+// Generated by (magic number): 80006
 // 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 25ca231..df0a2b7 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): 80002
+// Generated by (magic number): 80006
 // 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 b52d917..7dfc461 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): 80002
+// Generated by (magic number): 80006
 // 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 9518823..a3bee29 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): 80002
+// Generated by (magic number): 80006
 // 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 575f7d1..913355c 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): 80002
+// Generated by (magic number): 80006
 // 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 7a7f985..2ab8df4 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): 80002
+// Generated by (magic number): 80006
 // 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 5e40f88..cd8fa02 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): 80002
+// Generated by (magic number): 80006
 // 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 907122d..f81b250 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): 80002
+// Generated by (magic number): 80006
 // 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 15c987c..8bc06d8 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): 80002
+// Generated by (magic number): 80006
 // 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 03c329f..b563caa 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): 80002
+// Generated by (magic number): 80006
 // 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 468ea66..828efce 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): 80002
+// Generated by (magic number): 80006
 // 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 6abc4b1..0f73dd5 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): 80002
+// Generated by (magic number): 80006
 // 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 6188f6e..c96d428 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): 80002
+// Generated by (magic number): 80006
 // 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 57a722b..2b63450 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): 80002
+// Generated by (magic number): 80006
 // 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 1dc8355..4eff4e0 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): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 67
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.color.hull.tesc.out b/Test/baseResults/hlsl.color.hull.tesc.out
new file mode 100644
index 0000000..84e7794
--- /dev/null
+++ b/Test/baseResults/hlsl.color.hull.tesc.out
@@ -0,0 +1,572 @@
+hlsl.color.hull.tesc
+Shader version: 500
+vertices = 3
+vertex spacing = equal_spacing
+triangle order = cw
+0:? Sequence
+0:37  Function Definition: ColorPatchConstantFunction(struct-HullInputType-vf3-vf41[3];u1; ( temp structure{ temp 3-element array of float edges,  temp float inside})
+0:37    Function Parameters: 
+0:37      'inputPatch' ( in 3-element array of structure{ temp 3-component vector of float position,  temp 4-component vector of float color})
+0:37      'patchId' ( in uint)
+0:?     Sequence
+0:42      move second child to first child ( temp float)
+0:42        direct index ( temp float)
+0:42          edges: direct index for structure ( temp 3-element array of float)
+0:42            'output' ( temp structure{ temp 3-element array of float edges,  temp float inside})
+0:42            Constant:
+0:42              0 (const int)
+0:42          Constant:
+0:42            0 (const int)
+0:42        tessellationAmount: direct index for structure (layout( row_major std140) uniform float)
+0:42          'anon@0' (layout( binding=0 row_major std140) uniform block{layout( row_major std140) uniform float tessellationAmount, layout( row_major std140) uniform 3-component vector of float padding})
+0:42          Constant:
+0:42            0 (const uint)
+0:43      move second child to first child ( temp float)
+0:43        direct index ( temp float)
+0:43          edges: direct index for structure ( temp 3-element array of float)
+0:43            'output' ( temp structure{ temp 3-element array of float edges,  temp float inside})
+0:43            Constant:
+0:43              0 (const int)
+0:43          Constant:
+0:43            1 (const int)
+0:43        tessellationAmount: direct index for structure (layout( row_major std140) uniform float)
+0:43          'anon@0' (layout( binding=0 row_major std140) uniform block{layout( row_major std140) uniform float tessellationAmount, layout( row_major std140) uniform 3-component vector of float padding})
+0:43          Constant:
+0:43            0 (const uint)
+0:44      move second child to first child ( temp float)
+0:44        direct index ( temp float)
+0:44          edges: direct index for structure ( temp 3-element array of float)
+0:44            'output' ( temp structure{ temp 3-element array of float edges,  temp float inside})
+0:44            Constant:
+0:44              0 (const int)
+0:44          Constant:
+0:44            2 (const int)
+0:44        tessellationAmount: direct index for structure (layout( row_major std140) uniform float)
+0:44          'anon@0' (layout( binding=0 row_major std140) uniform block{layout( row_major std140) uniform float tessellationAmount, layout( row_major std140) uniform 3-component vector of float padding})
+0:44          Constant:
+0:44            0 (const uint)
+0:47      move second child to first child ( temp float)
+0:47        inside: direct index for structure ( temp float)
+0:47          'output' ( temp structure{ temp 3-element array of float edges,  temp float inside})
+0:47          Constant:
+0:47            1 (const int)
+0:47        tessellationAmount: direct index for structure (layout( row_major std140) uniform float)
+0:47          'anon@0' (layout( binding=0 row_major std140) uniform block{layout( row_major std140) uniform float tessellationAmount, layout( row_major std140) uniform 3-component vector of float padding})
+0:47          Constant:
+0:47            0 (const uint)
+0:49      Branch: Return with expression
+0:49        'output' ( temp structure{ temp 3-element array of float edges,  temp float inside})
+0:63  Function Definition: @main(struct-HullInputType-vf3-vf41[3];u1;u1; ( temp structure{ temp 3-component vector of float position,  temp 4-component vector of float color})
+0:63    Function Parameters: 
+0:63      'patch' ( in 3-element array of structure{ temp 3-component vector of float position,  temp 4-component vector of float color})
+0:63      'pointId' ( in uint)
+0:63      'patchId' ( in uint)
+0:?     Sequence
+0:67      move second child to first child ( temp 3-component vector of float)
+0:67        position: direct index for structure ( temp 3-component vector of float)
+0:67          'output' ( temp structure{ temp 3-component vector of float position,  temp 4-component vector of float color})
+0:67          Constant:
+0:67            0 (const int)
+0:67        position: direct index for structure ( temp 3-component vector of float)
+0:67          indirect index ( temp structure{ temp 3-component vector of float position,  temp 4-component vector of float color})
+0:67            'patch' ( in 3-element array of structure{ temp 3-component vector of float position,  temp 4-component vector of float color})
+0:67            'pointId' ( in uint)
+0:67          Constant:
+0:67            0 (const int)
+0:70      move second child to first child ( temp 4-component vector of float)
+0:70        color: direct index for structure ( temp 4-component vector of float)
+0:70          'output' ( temp structure{ temp 3-component vector of float position,  temp 4-component vector of float color})
+0:70          Constant:
+0:70            1 (const int)
+0:70        color: direct index for structure ( temp 4-component vector of float)
+0:70          indirect index ( temp structure{ temp 3-component vector of float position,  temp 4-component vector of float color})
+0:70            'patch' ( in 3-element array of structure{ temp 3-component vector of float position,  temp 4-component vector of float color})
+0:70            'pointId' ( in uint)
+0:70          Constant:
+0:70            1 (const int)
+0:72      Branch: Return with expression
+0:72        'output' ( temp structure{ temp 3-component vector of float position,  temp 4-component vector of float color})
+0:63  Function Definition: main( ( temp void)
+0:63    Function Parameters: 
+0:?     Sequence
+0:63      move second child to first child ( temp 3-element array of structure{ temp 3-component vector of float position,  temp 4-component vector of float color})
+0:?         'patch' ( temp 3-element array of structure{ temp 3-component vector of float position,  temp 4-component vector of float color})
+0:?         'patch' (layout( location=0) in 3-element array of structure{ temp 3-component vector of float position,  temp 4-component vector of float color})
+0:63      move second child to first child ( temp uint)
+0:?         'pointId' ( temp uint)
+0:?         'pointId' ( in uint InvocationID)
+0:63      move second child to first child ( temp uint)
+0:?         'patchId' ( temp uint)
+0:?         'patchId' ( in uint PrimitiveID)
+0:63      move second child to first child ( temp structure{ temp 3-component vector of float position,  temp 4-component vector of float color})
+0:63        indirect index (layout( location=0) out structure{ temp 3-component vector of float position,  temp 4-component vector of float color})
+0:?           '@entryPointOutput' (layout( location=0) out 3-element array of structure{ temp 3-component vector of float position,  temp 4-component vector of float color})
+0:?           'pointId' ( in uint InvocationID)
+0:63        Function Call: @main(struct-HullInputType-vf3-vf41[3];u1;u1; ( temp structure{ temp 3-component vector of float position,  temp 4-component vector of float color})
+0:?           'patch' ( temp 3-element array of structure{ temp 3-component vector of float position,  temp 4-component vector of float color})
+0:?           'pointId' ( temp uint)
+0:?           'patchId' ( temp uint)
+0:?       Barrier ( temp void)
+0:?       Test condition and select ( temp void)
+0:?         Condition
+0:?         Compare Equal ( temp bool)
+0:?           'pointId' ( 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 edges,  temp float inside})
+0:?             '@patchConstantResult' ( temp structure{ temp 3-element array of float edges,  temp float inside})
+0:?             Function Call: ColorPatchConstantFunction(struct-HullInputType-vf3-vf41[3];u1; ( temp structure{ temp 3-element array of float edges,  temp float inside})
+0:?               'patch' ( temp 3-element array of structure{ temp 3-component vector of float position,  temp 4-component vector of float color})
+0:?               'patchId' ( in uint PrimitiveID)
+0:?           Sequence
+0:?             move second child to first child ( temp float)
+0:?               direct index ( patch out float TessLevelOuter)
+0:?                 '@patchConstantOutput.edges' ( patch out 4-element array of float TessLevelOuter)
+0:?                 Constant:
+0:?                   0 (const int)
+0:?               direct index ( temp float)
+0:?                 edges: direct index for structure ( temp 3-element array of float)
+0:?                   '@patchConstantResult' ( temp structure{ temp 3-element array of float edges,  temp float inside})
+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.edges' ( patch out 4-element array of float TessLevelOuter)
+0:?                 Constant:
+0:?                   1 (const int)
+0:?               direct index ( temp float)
+0:?                 edges: direct index for structure ( temp 3-element array of float)
+0:?                   '@patchConstantResult' ( temp structure{ temp 3-element array of float edges,  temp float inside})
+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.edges' ( patch out 4-element array of float TessLevelOuter)
+0:?                 Constant:
+0:?                   2 (const int)
+0:?               direct index ( temp float)
+0:?                 edges: direct index for structure ( temp 3-element array of float)
+0:?                   '@patchConstantResult' ( temp structure{ temp 3-element array of float edges,  temp float inside})
+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.inside' ( patch out 2-element array of float TessLevelInner)
+0:?                 Constant:
+0:?                   0 (const int)
+0:?               inside: direct index for structure ( temp float)
+0:?                 '@patchConstantResult' ( temp structure{ temp 3-element array of float edges,  temp float inside})
+0:?                 Constant:
+0:?                   1 (const int)
+0:?   Linker Objects
+0:?     'anon@0' (layout( binding=0 row_major std140) uniform block{layout( row_major std140) uniform float tessellationAmount, layout( row_major std140) uniform 3-component vector of float padding})
+0:?     '@entryPointOutput' (layout( location=0) out 3-element array of structure{ temp 3-component vector of float position,  temp 4-component vector of float color})
+0:?     'patch' (layout( location=0) in 3-element array of structure{ temp 3-component vector of float position,  temp 4-component vector of float color})
+0:?     'pointId' ( in uint InvocationID)
+0:?     'patchId' ( in uint PrimitiveID)
+0:?     '@patchConstantOutput.edges' ( patch out 4-element array of float TessLevelOuter)
+0:?     '@patchConstantOutput.inside' ( patch out 2-element array of float TessLevelInner)
+
+
+Linked tessellation control stage:
+
+
+Shader version: 500
+vertices = 3
+vertex spacing = equal_spacing
+triangle order = cw
+0:? Sequence
+0:37  Function Definition: ColorPatchConstantFunction(struct-HullInputType-vf3-vf41[3];u1; ( temp structure{ temp 3-element array of float edges,  temp float inside})
+0:37    Function Parameters: 
+0:37      'inputPatch' ( in 3-element array of structure{ temp 3-component vector of float position,  temp 4-component vector of float color})
+0:37      'patchId' ( in uint)
+0:?     Sequence
+0:42      move second child to first child ( temp float)
+0:42        direct index ( temp float)
+0:42          edges: direct index for structure ( temp 3-element array of float)
+0:42            'output' ( temp structure{ temp 3-element array of float edges,  temp float inside})
+0:42            Constant:
+0:42              0 (const int)
+0:42          Constant:
+0:42            0 (const int)
+0:42        tessellationAmount: direct index for structure (layout( row_major std140) uniform float)
+0:42          'anon@0' (layout( binding=0 row_major std140) uniform block{layout( row_major std140) uniform float tessellationAmount, layout( row_major std140) uniform 3-component vector of float padding})
+0:42          Constant:
+0:42            0 (const uint)
+0:43      move second child to first child ( temp float)
+0:43        direct index ( temp float)
+0:43          edges: direct index for structure ( temp 3-element array of float)
+0:43            'output' ( temp structure{ temp 3-element array of float edges,  temp float inside})
+0:43            Constant:
+0:43              0 (const int)
+0:43          Constant:
+0:43            1 (const int)
+0:43        tessellationAmount: direct index for structure (layout( row_major std140) uniform float)
+0:43          'anon@0' (layout( binding=0 row_major std140) uniform block{layout( row_major std140) uniform float tessellationAmount, layout( row_major std140) uniform 3-component vector of float padding})
+0:43          Constant:
+0:43            0 (const uint)
+0:44      move second child to first child ( temp float)
+0:44        direct index ( temp float)
+0:44          edges: direct index for structure ( temp 3-element array of float)
+0:44            'output' ( temp structure{ temp 3-element array of float edges,  temp float inside})
+0:44            Constant:
+0:44              0 (const int)
+0:44          Constant:
+0:44            2 (const int)
+0:44        tessellationAmount: direct index for structure (layout( row_major std140) uniform float)
+0:44          'anon@0' (layout( binding=0 row_major std140) uniform block{layout( row_major std140) uniform float tessellationAmount, layout( row_major std140) uniform 3-component vector of float padding})
+0:44          Constant:
+0:44            0 (const uint)
+0:47      move second child to first child ( temp float)
+0:47        inside: direct index for structure ( temp float)
+0:47          'output' ( temp structure{ temp 3-element array of float edges,  temp float inside})
+0:47          Constant:
+0:47            1 (const int)
+0:47        tessellationAmount: direct index for structure (layout( row_major std140) uniform float)
+0:47          'anon@0' (layout( binding=0 row_major std140) uniform block{layout( row_major std140) uniform float tessellationAmount, layout( row_major std140) uniform 3-component vector of float padding})
+0:47          Constant:
+0:47            0 (const uint)
+0:49      Branch: Return with expression
+0:49        'output' ( temp structure{ temp 3-element array of float edges,  temp float inside})
+0:63  Function Definition: @main(struct-HullInputType-vf3-vf41[3];u1;u1; ( temp structure{ temp 3-component vector of float position,  temp 4-component vector of float color})
+0:63    Function Parameters: 
+0:63      'patch' ( in 3-element array of structure{ temp 3-component vector of float position,  temp 4-component vector of float color})
+0:63      'pointId' ( in uint)
+0:63      'patchId' ( in uint)
+0:?     Sequence
+0:67      move second child to first child ( temp 3-component vector of float)
+0:67        position: direct index for structure ( temp 3-component vector of float)
+0:67          'output' ( temp structure{ temp 3-component vector of float position,  temp 4-component vector of float color})
+0:67          Constant:
+0:67            0 (const int)
+0:67        position: direct index for structure ( temp 3-component vector of float)
+0:67          indirect index ( temp structure{ temp 3-component vector of float position,  temp 4-component vector of float color})
+0:67            'patch' ( in 3-element array of structure{ temp 3-component vector of float position,  temp 4-component vector of float color})
+0:67            'pointId' ( in uint)
+0:67          Constant:
+0:67            0 (const int)
+0:70      move second child to first child ( temp 4-component vector of float)
+0:70        color: direct index for structure ( temp 4-component vector of float)
+0:70          'output' ( temp structure{ temp 3-component vector of float position,  temp 4-component vector of float color})
+0:70          Constant:
+0:70            1 (const int)
+0:70        color: direct index for structure ( temp 4-component vector of float)
+0:70          indirect index ( temp structure{ temp 3-component vector of float position,  temp 4-component vector of float color})
+0:70            'patch' ( in 3-element array of structure{ temp 3-component vector of float position,  temp 4-component vector of float color})
+0:70            'pointId' ( in uint)
+0:70          Constant:
+0:70            1 (const int)
+0:72      Branch: Return with expression
+0:72        'output' ( temp structure{ temp 3-component vector of float position,  temp 4-component vector of float color})
+0:63  Function Definition: main( ( temp void)
+0:63    Function Parameters: 
+0:?     Sequence
+0:63      move second child to first child ( temp 3-element array of structure{ temp 3-component vector of float position,  temp 4-component vector of float color})
+0:?         'patch' ( temp 3-element array of structure{ temp 3-component vector of float position,  temp 4-component vector of float color})
+0:?         'patch' (layout( location=0) in 3-element array of structure{ temp 3-component vector of float position,  temp 4-component vector of float color})
+0:63      move second child to first child ( temp uint)
+0:?         'pointId' ( temp uint)
+0:?         'pointId' ( in uint InvocationID)
+0:63      move second child to first child ( temp uint)
+0:?         'patchId' ( temp uint)
+0:?         'patchId' ( in uint PrimitiveID)
+0:63      move second child to first child ( temp structure{ temp 3-component vector of float position,  temp 4-component vector of float color})
+0:63        indirect index (layout( location=0) out structure{ temp 3-component vector of float position,  temp 4-component vector of float color})
+0:?           '@entryPointOutput' (layout( location=0) out 3-element array of structure{ temp 3-component vector of float position,  temp 4-component vector of float color})
+0:?           'pointId' ( in uint InvocationID)
+0:63        Function Call: @main(struct-HullInputType-vf3-vf41[3];u1;u1; ( temp structure{ temp 3-component vector of float position,  temp 4-component vector of float color})
+0:?           'patch' ( temp 3-element array of structure{ temp 3-component vector of float position,  temp 4-component vector of float color})
+0:?           'pointId' ( temp uint)
+0:?           'patchId' ( temp uint)
+0:?       Barrier ( temp void)
+0:?       Test condition and select ( temp void)
+0:?         Condition
+0:?         Compare Equal ( temp bool)
+0:?           'pointId' ( 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 edges,  temp float inside})
+0:?             '@patchConstantResult' ( temp structure{ temp 3-element array of float edges,  temp float inside})
+0:?             Function Call: ColorPatchConstantFunction(struct-HullInputType-vf3-vf41[3];u1; ( temp structure{ temp 3-element array of float edges,  temp float inside})
+0:?               'patch' ( temp 3-element array of structure{ temp 3-component vector of float position,  temp 4-component vector of float color})
+0:?               'patchId' ( in uint PrimitiveID)
+0:?           Sequence
+0:?             move second child to first child ( temp float)
+0:?               direct index ( patch out float TessLevelOuter)
+0:?                 '@patchConstantOutput.edges' ( patch out 4-element array of float TessLevelOuter)
+0:?                 Constant:
+0:?                   0 (const int)
+0:?               direct index ( temp float)
+0:?                 edges: direct index for structure ( temp 3-element array of float)
+0:?                   '@patchConstantResult' ( temp structure{ temp 3-element array of float edges,  temp float inside})
+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.edges' ( patch out 4-element array of float TessLevelOuter)
+0:?                 Constant:
+0:?                   1 (const int)
+0:?               direct index ( temp float)
+0:?                 edges: direct index for structure ( temp 3-element array of float)
+0:?                   '@patchConstantResult' ( temp structure{ temp 3-element array of float edges,  temp float inside})
+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.edges' ( patch out 4-element array of float TessLevelOuter)
+0:?                 Constant:
+0:?                   2 (const int)
+0:?               direct index ( temp float)
+0:?                 edges: direct index for structure ( temp 3-element array of float)
+0:?                   '@patchConstantResult' ( temp structure{ temp 3-element array of float edges,  temp float inside})
+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.inside' ( patch out 2-element array of float TessLevelInner)
+0:?                 Constant:
+0:?                   0 (const int)
+0:?               inside: direct index for structure ( temp float)
+0:?                 '@patchConstantResult' ( temp structure{ temp 3-element array of float edges,  temp float inside})
+0:?                 Constant:
+0:?                   1 (const int)
+0:?   Linker Objects
+0:?     'anon@0' (layout( binding=0 row_major std140) uniform block{layout( row_major std140) uniform float tessellationAmount, layout( row_major std140) uniform 3-component vector of float padding})
+0:?     '@entryPointOutput' (layout( location=0) out 3-element array of structure{ temp 3-component vector of float position,  temp 4-component vector of float color})
+0:?     'patch' (layout( location=0) in 3-element array of structure{ temp 3-component vector of float position,  temp 4-component vector of float color})
+0:?     'pointId' ( in uint InvocationID)
+0:?     'patchId' ( in uint PrimitiveID)
+0:?     '@patchConstantOutput.edges' ( patch out 4-element array of float TessLevelOuter)
+0:?     '@patchConstantOutput.inside' ( patch out 2-element array of float TessLevelInner)
+
+// Module Version 10000
+// Generated by (magic number): 80006
+// Id's are bound by 127
+
+                              Capability Tessellation
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint TessellationControl 4  "main" 72 76 79 83 110 123
+                              ExecutionMode 4 OutputVertices 3
+                              ExecutionMode 4 Triangles
+                              ExecutionMode 4 SpacingEqual
+                              ExecutionMode 4 VertexOrderCw
+                              Source HLSL 500
+                              Name 4  "main"
+                              Name 9  "HullInputType"
+                              MemberName 9(HullInputType) 0  "position"
+                              MemberName 9(HullInputType) 1  "color"
+                              Name 16  "ConstantOutputType"
+                              MemberName 16(ConstantOutputType) 0  "edges"
+                              MemberName 16(ConstantOutputType) 1  "inside"
+                              Name 20  "ColorPatchConstantFunction(struct-HullInputType-vf3-vf41[3];u1;"
+                              Name 18  "inputPatch"
+                              Name 19  "patchId"
+                              Name 22  "HullOutputType"
+                              MemberName 22(HullOutputType) 0  "position"
+                              MemberName 22(HullOutputType) 1  "color"
+                              Name 27  "@main(struct-HullInputType-vf3-vf41[3];u1;u1;"
+                              Name 24  "patch"
+                              Name 25  "pointId"
+                              Name 26  "patchId"
+                              Name 30  "output"
+                              Name 33  "TessellationBuffer"
+                              MemberName 33(TessellationBuffer) 0  "tessellationAmount"
+                              MemberName 33(TessellationBuffer) 1  "padding"
+                              Name 35  ""
+                              Name 56  "output"
+                              Name 70  "patch"
+                              Name 72  "patch"
+                              Name 74  "pointId"
+                              Name 76  "pointId"
+                              Name 78  "patchId"
+                              Name 79  "patchId"
+                              Name 83  "@entryPointOutput"
+                              Name 85  "param"
+                              Name 87  "param"
+                              Name 89  "param"
+                              Name 102  "@patchConstantResult"
+                              Name 103  "param"
+                              Name 105  "param"
+                              Name 110  "@patchConstantOutput.edges"
+                              Name 123  "@patchConstantOutput.inside"
+                              MemberDecorate 33(TessellationBuffer) 0 Offset 0
+                              MemberDecorate 33(TessellationBuffer) 1 Offset 4
+                              Decorate 33(TessellationBuffer) Block
+                              Decorate 35 DescriptorSet 0
+                              Decorate 35 Binding 0
+                              Decorate 72(patch) Location 0
+                              Decorate 76(pointId) BuiltIn InvocationId
+                              Decorate 79(patchId) BuiltIn PrimitiveId
+                              Decorate 83(@entryPointOutput) Location 0
+                              Decorate 110(@patchConstantOutput.edges) Patch
+                              Decorate 110(@patchConstantOutput.edges) BuiltIn TessLevelOuter
+                              Decorate 123(@patchConstantOutput.inside) Patch
+                              Decorate 123(@patchConstantOutput.inside) BuiltIn TessLevelInner
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 3
+               8:             TypeVector 6(float) 4
+9(HullInputType):             TypeStruct 7(fvec3) 8(fvec4)
+              10:             TypeInt 32 0
+              11:     10(int) Constant 3
+              12:             TypeArray 9(HullInputType) 11
+              13:             TypePointer Function 12
+              14:             TypePointer Function 10(int)
+              15:             TypeArray 6(float) 11
+16(ConstantOutputType):             TypeStruct 15 6(float)
+              17:             TypeFunction 16(ConstantOutputType) 13(ptr) 14(ptr)
+22(HullOutputType):             TypeStruct 7(fvec3) 8(fvec4)
+              23:             TypeFunction 22(HullOutputType) 13(ptr) 14(ptr) 14(ptr)
+              29:             TypePointer Function 16(ConstantOutputType)
+              31:             TypeInt 32 1
+              32:     31(int) Constant 0
+33(TessellationBuffer):             TypeStruct 6(float) 7(fvec3)
+              34:             TypePointer Uniform 33(TessellationBuffer)
+              35:     34(ptr) Variable Uniform
+              36:             TypePointer Uniform 6(float)
+              39:             TypePointer Function 6(float)
+              41:     31(int) Constant 1
+              45:     31(int) Constant 2
+              55:             TypePointer Function 22(HullOutputType)
+              58:             TypePointer Function 7(fvec3)
+              63:             TypePointer Function 8(fvec4)
+              71:             TypePointer Input 12
+       72(patch):     71(ptr) Variable Input
+              75:             TypePointer Input 10(int)
+     76(pointId):     75(ptr) Variable Input
+     79(patchId):     75(ptr) Variable Input
+              81:             TypeArray 22(HullOutputType) 11
+              82:             TypePointer Output 81
+83(@entryPointOutput):     82(ptr) Variable Output
+              92:             TypePointer Output 22(HullOutputType)
+              94:     10(int) Constant 2
+              95:     10(int) Constant 4
+              96:     10(int) Constant 0
+              98:             TypeBool
+             108:             TypeArray 6(float) 95
+             109:             TypePointer Output 108
+110(@patchConstantOutput.edges):    109(ptr) Variable Output
+             113:             TypePointer Output 6(float)
+             121:             TypeArray 6(float) 94
+             122:             TypePointer Output 121
+123(@patchConstantOutput.inside):    122(ptr) Variable Output
+         4(main):           2 Function None 3
+               5:             Label
+       70(patch):     13(ptr) Variable Function
+     74(pointId):     14(ptr) Variable Function
+     78(patchId):     14(ptr) Variable Function
+       85(param):     13(ptr) Variable Function
+       87(param):     14(ptr) Variable Function
+       89(param):     14(ptr) Variable Function
+102(@patchConstantResult):     29(ptr) Variable Function
+      103(param):     13(ptr) Variable Function
+      105(param):     14(ptr) Variable Function
+              73:          12 Load 72(patch)
+                              Store 70(patch) 73
+              77:     10(int) Load 76(pointId)
+                              Store 74(pointId) 77
+              80:     10(int) Load 79(patchId)
+                              Store 78(patchId) 80
+              84:     10(int) Load 76(pointId)
+              86:          12 Load 70(patch)
+                              Store 85(param) 86
+              88:     10(int) Load 74(pointId)
+                              Store 87(param) 88
+              90:     10(int) Load 78(patchId)
+                              Store 89(param) 90
+              91:22(HullOutputType) FunctionCall 27(@main(struct-HullInputType-vf3-vf41[3];u1;u1;) 85(param) 87(param) 89(param)
+              93:     92(ptr) AccessChain 83(@entryPointOutput) 84
+                              Store 93 91
+                              ControlBarrier 94 95 96
+              97:     10(int) Load 76(pointId)
+              99:    98(bool) IEqual 97 32
+                              SelectionMerge 101 None
+                              BranchConditional 99 100 101
+             100:               Label
+             104:          12   Load 70(patch)
+                                Store 103(param) 104
+             106:     10(int)   Load 79(patchId)
+                                Store 105(param) 106
+             107:16(ConstantOutputType)   FunctionCall 20(ColorPatchConstantFunction(struct-HullInputType-vf3-vf41[3];u1;) 103(param) 105(param)
+                                Store 102(@patchConstantResult) 107
+             111:     39(ptr)   AccessChain 102(@patchConstantResult) 32 32
+             112:    6(float)   Load 111
+             114:    113(ptr)   AccessChain 110(@patchConstantOutput.edges) 32
+                                Store 114 112
+             115:     39(ptr)   AccessChain 102(@patchConstantResult) 32 41
+             116:    6(float)   Load 115
+             117:    113(ptr)   AccessChain 110(@patchConstantOutput.edges) 41
+                                Store 117 116
+             118:     39(ptr)   AccessChain 102(@patchConstantResult) 32 45
+             119:    6(float)   Load 118
+             120:    113(ptr)   AccessChain 110(@patchConstantOutput.edges) 45
+                                Store 120 119
+             124:     39(ptr)   AccessChain 102(@patchConstantResult) 41
+             125:    6(float)   Load 124
+             126:    113(ptr)   AccessChain 123(@patchConstantOutput.inside) 32
+                                Store 126 125
+                                Branch 101
+             101:             Label
+                              Return
+                              FunctionEnd
+20(ColorPatchConstantFunction(struct-HullInputType-vf3-vf41[3];u1;):16(ConstantOutputType) Function None 17
+  18(inputPatch):     13(ptr) FunctionParameter
+     19(patchId):     14(ptr) FunctionParameter
+              21:             Label
+      30(output):     29(ptr) Variable Function
+              37:     36(ptr) AccessChain 35 32
+              38:    6(float) Load 37
+              40:     39(ptr) AccessChain 30(output) 32 32
+                              Store 40 38
+              42:     36(ptr) AccessChain 35 32
+              43:    6(float) Load 42
+              44:     39(ptr) AccessChain 30(output) 32 41
+                              Store 44 43
+              46:     36(ptr) AccessChain 35 32
+              47:    6(float) Load 46
+              48:     39(ptr) AccessChain 30(output) 32 45
+                              Store 48 47
+              49:     36(ptr) AccessChain 35 32
+              50:    6(float) Load 49
+              51:     39(ptr) AccessChain 30(output) 41
+                              Store 51 50
+              52:16(ConstantOutputType) Load 30(output)
+                              ReturnValue 52
+                              FunctionEnd
+27(@main(struct-HullInputType-vf3-vf41[3];u1;u1;):22(HullOutputType) Function None 23
+       24(patch):     13(ptr) FunctionParameter
+     25(pointId):     14(ptr) FunctionParameter
+     26(patchId):     14(ptr) FunctionParameter
+              28:             Label
+      56(output):     55(ptr) Variable Function
+              57:     10(int) Load 25(pointId)
+              59:     58(ptr) AccessChain 24(patch) 57 32
+              60:    7(fvec3) Load 59
+              61:     58(ptr) AccessChain 56(output) 32
+                              Store 61 60
+              62:     10(int) Load 25(pointId)
+              64:     63(ptr) AccessChain 24(patch) 62 41
+              65:    8(fvec4) Load 64
+              66:     63(ptr) AccessChain 56(output) 41
+                              Store 66 65
+              67:22(HullOutputType) Load 56(output)
+                              ReturnValue 67
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.comparison.vec.frag.out b/Test/baseResults/hlsl.comparison.vec.frag.out
index e2d4637..868e8d6 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): 80002
+// Generated by (magic number): 80006
 // 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 bbcfd55..de264bb 100755
--- a/Test/baseResults/hlsl.conditional.frag.out
+++ b/Test/baseResults/hlsl.conditional.frag.out
@@ -78,7 +78,7 @@
 0:17      Sequence
 0:17        move second child to first child ( temp 4-component vector of float)
 0:17          'ret' ( temp 4-component vector of float)
-0:17          Test condition and select ( temp 4-component vector of float)
+0:17          Test condition and select ( temp 4-component vector of float): no shortcircuit
 0:17            Condition
 0:17            Compare Not Equal ( temp bool)
 0:17              t: direct index for structure ( uniform float)
@@ -169,7 +169,7 @@
 0:37          'e' ( temp int)
 0:37          move second child to first child ( temp int)
 0:37            'a' ( temp int)
-0:37            Test condition and select ( temp int)
+0:37            Test condition and select ( temp int): no shortcircuit
 0:37              Condition
 0:37              Convert int to bool ( temp bool)
 0:37                'b' ( temp int)
@@ -182,7 +182,7 @@
 0:37                10 (const int)
 0:37        move second child to first child ( temp int)
 0:37          'b' ( temp int)
-0:37          Test condition and select ( temp int)
+0:37          Test condition and select ( temp int): no shortcircuit
 0:37            Condition
 0:37            Convert int to bool ( temp bool)
 0:37              'a' ( temp int)
@@ -195,7 +195,7 @@
 0:37              11 (const int)
 0:39      move second child to first child ( temp 4-component vector of float)
 0:39        'f' ( temp 4-component vector of float)
-0:39        Test condition and select ( temp 4-component vector of float)
+0:39        Test condition and select ( temp 4-component vector of float): no shortcircuit
 0:39          Condition
 0:39          Compare Less Than ( temp bool)
 0:39            direct index ( temp float)
@@ -341,7 +341,7 @@
 0:17      Sequence
 0:17        move second child to first child ( temp 4-component vector of float)
 0:17          'ret' ( temp 4-component vector of float)
-0:17          Test condition and select ( temp 4-component vector of float)
+0:17          Test condition and select ( temp 4-component vector of float): no shortcircuit
 0:17            Condition
 0:17            Compare Not Equal ( temp bool)
 0:17              t: direct index for structure ( uniform float)
@@ -432,7 +432,7 @@
 0:37          'e' ( temp int)
 0:37          move second child to first child ( temp int)
 0:37            'a' ( temp int)
-0:37            Test condition and select ( temp int)
+0:37            Test condition and select ( temp int): no shortcircuit
 0:37              Condition
 0:37              Convert int to bool ( temp bool)
 0:37                'b' ( temp int)
@@ -445,7 +445,7 @@
 0:37                10 (const int)
 0:37        move second child to first child ( temp int)
 0:37          'b' ( temp int)
-0:37          Test condition and select ( temp int)
+0:37          Test condition and select ( temp int): no shortcircuit
 0:37            Condition
 0:37            Convert int to bool ( temp bool)
 0:37              'a' ( temp int)
@@ -458,7 +458,7 @@
 0:37              11 (const int)
 0:39      move second child to first child ( temp 4-component vector of float)
 0:39        'f' ( temp 4-component vector of float)
-0:39        Test condition and select ( temp 4-component vector of float)
+0:39        Test condition and select ( temp 4-component vector of float): no shortcircuit
 0:39          Condition
 0:39          Compare Less Than ( temp bool)
 0:39            direct index ( temp float)
@@ -522,13 +522,13 @@
 0:?     'input' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80002
-// Id's are bound by 220
+// Generated by (magic number): 80006
+// Id's are bound by 206
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "PixelShaderFunction" 213 216
+                              EntryPoint Fragment 4  "PixelShaderFunction" 199 202
                               ExecutionMode 4 OriginUpperLeft
                               Source HLSL 500
                               Name 4  "PixelShaderFunction"
@@ -548,20 +548,20 @@
                               MemberName 29($Global) 4  "f"
                               Name 31  ""
                               Name 85  "ret"
-                              Name 113  "a"
-                              Name 115  "b"
-                              Name 117  "c"
-                              Name 119  "d"
-                              Name 120  "ret"
-                              Name 140  "e"
-                              Name 161  "f"
-                              Name 200  "param"
-                              Name 201  "param"
-                              Name 202  "param"
-                              Name 211  "input"
-                              Name 213  "input"
-                              Name 216  "@entryPointOutput"
-                              Name 217  "param"
+                              Name 110  "a"
+                              Name 112  "b"
+                              Name 114  "c"
+                              Name 116  "d"
+                              Name 117  "ret"
+                              Name 137  "e"
+                              Name 150  "f"
+                              Name 186  "param"
+                              Name 187  "param"
+                              Name 188  "param"
+                              Name 197  "input"
+                              Name 199  "input"
+                              Name 202  "@entryPointOutput"
+                              Name 203  "param"
                               MemberDecorate 29($Global) 0 Offset 0
                               MemberDecorate 29($Global) 1 Offset 16
                               MemberDecorate 29($Global) 2 Offset 32
@@ -569,8 +569,8 @@
                               MemberDecorate 29($Global) 4 Offset 52
                               Decorate 29($Global) Block
                               Decorate 31 DescriptorSet 0
-                              Decorate 213(input) Location 0
-                              Decorate 216(@entryPointOutput) Location 0
+                              Decorate 199(input) Location 0
+                              Decorate 202(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -598,41 +598,41 @@
               48:     32(int) Constant 4
               49:             TypePointer Uniform 6(float)
               53:     32(int) Constant 3
-             100:    6(float) Constant 1065353216
-             101:    7(fvec4) ConstantComposite 100 100 100 100
-             112:             TypePointer Function 32(int)
-             114:     32(int) Constant 5
-             116:     32(int) Constant 6
-             118:     32(int) Constant 7
-             143:             TypeInt 32 0
-             144:    143(int) Constant 0
-             150:     32(int) Constant 10
-             159:     32(int) Constant 11
-             163:             TypePointer Function 6(float)
-             166:    143(int) Constant 1
-             192:    13(bool) ConstantTrue
-             193:    13(bool) ConstantFalse
-             194:   14(bvec2) ConstantComposite 192 193
-             195:    6(float) Constant 1073741824
-             196:   16(fvec2) ConstantComposite 100 195
-             197:    6(float) Constant 1077936128
-             198:    6(float) Constant 1082130432
-             199:   16(fvec2) ConstantComposite 197 198
-             204:    6(float) Constant 1092616192
-             212:             TypePointer Input 7(fvec4)
-      213(input):    212(ptr) Variable Input
-             215:             TypePointer Output 7(fvec4)
-216(@entryPointOutput):    215(ptr) Variable Output
+              96:    6(float) Constant 1065353216
+              97:    7(fvec4) ConstantComposite 96 96 96 96
+             109:             TypePointer Function 32(int)
+             111:     32(int) Constant 5
+             113:     32(int) Constant 6
+             115:     32(int) Constant 7
+             139:             TypeInt 32 0
+             140:    139(int) Constant 0
+             143:     32(int) Constant 10
+             148:     32(int) Constant 11
+             151:             TypePointer Function 6(float)
+             154:    139(int) Constant 1
+             178:    13(bool) ConstantTrue
+             179:    13(bool) ConstantFalse
+             180:   14(bvec2) ConstantComposite 178 179
+             181:    6(float) Constant 1073741824
+             182:   16(fvec2) ConstantComposite 96 181
+             183:    6(float) Constant 1077936128
+             184:    6(float) Constant 1082130432
+             185:   16(fvec2) ConstantComposite 183 184
+             190:    6(float) Constant 1092616192
+             198:             TypePointer Input 7(fvec4)
+      199(input):    198(ptr) Variable Input
+             201:             TypePointer Output 7(fvec4)
+202(@entryPointOutput):    201(ptr) Variable Output
 4(PixelShaderFunction):           2 Function None 3
                5:             Label
-      211(input):     24(ptr) Variable Function
-      217(param):     24(ptr) Variable Function
-             214:    7(fvec4) Load 213(input)
-                              Store 211(input) 214
-             218:    7(fvec4) Load 211(input)
-                              Store 217(param) 218
-             219:    7(fvec4) FunctionCall 27(@PixelShaderFunction(vf4;) 217(param)
-                              Store 216(@entryPointOutput) 219
+      197(input):     24(ptr) Variable Function
+      203(param):     24(ptr) Variable Function
+             200:    7(fvec4) Load 199(input)
+                              Store 197(input) 200
+             204:    7(fvec4) Load 197(input)
+                              Store 203(param) 204
+             205:    7(fvec4) FunctionCall 27(@PixelShaderFunction(vf4;) 203(param)
+                              Store 202(@entryPointOutput) 205
                               Return
                               FunctionEnd
   9(vectorCond():    7(fvec4) Function None 8
@@ -682,154 +682,116 @@
  11(scalarCond():    7(fvec4) Function None 8
               12:             Label
          85(ret):     24(ptr) Variable Function
-              86:     24(ptr) Variable Function
-              87:     49(ptr) AccessChain 31 53
-              88:    6(float) Load 87
-              89:     49(ptr) AccessChain 31 48
-              90:    6(float) Load 89
-              91:    13(bool) FOrdNotEqual 88 90
-                              SelectionMerge 93 None
-                              BranchConditional 91 92 99
-              92:               Label
-              94:     49(ptr)   AccessChain 31 53
-              95:    6(float)   Load 94
-              96:     34(ptr)   AccessChain 31 33
-              97:    7(fvec4)   Load 96
-              98:    7(fvec4)   VectorTimesScalar 97 95
-                                Store 86 98
-                                Branch 93
-              99:               Label
-                                Store 86 101
-                                Branch 93
-              93:             Label
-             102:    7(fvec4) Load 86
-                              Store 85(ret) 102
-             103:    7(fvec4) Load 85(ret)
-                              ReturnValue 103
+              86:     49(ptr) AccessChain 31 53
+              87:    6(float) Load 86
+              88:     49(ptr) AccessChain 31 48
+              89:    6(float) Load 88
+              90:    13(bool) FOrdNotEqual 87 89
+              91:     49(ptr) AccessChain 31 53
+              92:    6(float) Load 91
+              93:     34(ptr) AccessChain 31 33
+              94:    7(fvec4) Load 93
+              95:    7(fvec4) VectorTimesScalar 94 92
+              98:   43(bvec4) CompositeConstruct 90 90 90 90
+              99:    7(fvec4) Select 98 95 97
+                              Store 85(ret) 99
+             100:    7(fvec4) Load 85(ret)
+                              ReturnValue 100
                               FunctionEnd
 22(fbSelect(vb2;vf2;vf2;):   16(fvec2) Function None 18
          19(cnd):     15(ptr) FunctionParameter
         20(src0):     17(ptr) FunctionParameter
         21(src1):     17(ptr) FunctionParameter
               23:             Label
-             106:   16(fvec2) Load 21(src1)
-             107:   16(fvec2) Load 20(src0)
-             108:   14(bvec2) Load 19(cnd)
-             109:   16(fvec2) Select 108 107 106
-                              ReturnValue 109
+             103:   16(fvec2) Load 21(src1)
+             104:   16(fvec2) Load 20(src0)
+             105:   14(bvec2) Load 19(cnd)
+             106:   16(fvec2) Select 105 104 103
+                              ReturnValue 106
                               FunctionEnd
 27(@PixelShaderFunction(vf4;):    7(fvec4) Function None 25
        26(input):     24(ptr) FunctionParameter
               28:             Label
-          113(a):    112(ptr) Variable Function
-          115(b):    112(ptr) Variable Function
-          117(c):    112(ptr) Variable Function
-          119(d):    112(ptr) Variable Function
-        120(ret):     24(ptr) Variable Function
-          140(e):    112(ptr) Variable Function
-             141:    112(ptr) Variable Function
-             152:    112(ptr) Variable Function
-          161(f):     24(ptr) Variable Function
-             162:     24(ptr) Variable Function
-      200(param):     15(ptr) Variable Function
-      201(param):     17(ptr) Variable Function
-      202(param):     17(ptr) Variable Function
-                              Store 113(a) 114
-                              Store 115(b) 116
-                              Store 117(c) 118
-                              Store 119(d) 118
-             121:     32(int) Load 113(a)
-             122:    6(float) ConvertSToF 121
-             123:    7(fvec4) Load 26(input)
-             124:    7(fvec4) VectorTimesScalar 123 122
-             125:     32(int) Load 115(b)
-             126:    6(float) ConvertSToF 125
-             127:    7(fvec4) Load 26(input)
-             128:    7(fvec4) VectorTimesScalar 127 126
-             129:    7(fvec4) FAdd 124 128
-             130:     32(int) Load 117(c)
-             131:    6(float) ConvertSToF 130
-             132:    7(fvec4) Load 26(input)
-             133:    7(fvec4) VectorTimesScalar 132 131
-             134:    7(fvec4) FAdd 129 133
-             135:     32(int) Load 119(d)
-             136:    6(float) ConvertSToF 135
-             137:    7(fvec4) Load 26(input)
-             138:    7(fvec4) VectorTimesScalar 137 136
-             139:    7(fvec4) FAdd 134 138
-                              Store 120(ret) 139
-             142:     32(int) Load 115(b)
-             145:    13(bool) INotEqual 142 144
-                              SelectionMerge 147 None
-                              BranchConditional 145 146 149
-             146:               Label
-             148:     32(int)   Load 119(d)
-                                Store 117(c) 148
-                                Store 141 148
-                                Branch 147
-             149:               Label
-                                Store 141 150
-                                Branch 147
-             147:             Label
-             151:     32(int) Load 141
-                              Store 113(a) 151
-                              Store 140(e) 151
-             153:     32(int) Load 113(a)
-             154:    13(bool) INotEqual 153 144
-                              SelectionMerge 156 None
-                              BranchConditional 154 155 158
-             155:               Label
-             157:     32(int)   Load 117(c)
-                                Store 119(d) 157
-                                Store 152 157
-                                Branch 156
-             158:               Label
-                                Store 152 159
-                                Branch 156
-             156:             Label
-             160:     32(int) Load 152
-                              Store 115(b) 160
-             164:    163(ptr) AccessChain 120(ret) 144
-             165:    6(float) Load 164
-             167:    163(ptr) AccessChain 26(input) 166
-             168:    6(float) Load 167
-             169:    13(bool) FOrdLessThan 165 168
-                              SelectionMerge 171 None
-                              BranchConditional 169 170 176
-             170:               Label
-             172:     32(int)   Load 117(c)
-             173:    6(float)   ConvertSToF 172
-             174:    7(fvec4)   Load 26(input)
-             175:    7(fvec4)   VectorTimesScalar 174 173
-                                Store 162 175
-                                Branch 171
-             176:               Label
-             177:     32(int)   Load 119(d)
-             178:    6(float)   ConvertSToF 177
-             179:    7(fvec4)   Load 26(input)
-             180:    7(fvec4)   VectorTimesScalar 179 178
-                                Store 162 180
-                                Branch 171
-             171:             Label
-             181:    7(fvec4) Load 162
-                              Store 161(f) 181
-             182:     32(int) Load 140(e)
-             183:    6(float) ConvertSToF 182
-             184:    7(fvec4) Load 120(ret)
-             185:    7(fvec4) VectorTimesScalar 184 183
-             186:    7(fvec4) Load 161(f)
-             187:    7(fvec4) FAdd 185 186
-             188:    7(fvec4) FunctionCall 9(vectorCond()
-             189:    7(fvec4) FAdd 187 188
-             190:    7(fvec4) FunctionCall 11(scalarCond()
-             191:    7(fvec4) FAdd 189 190
-                              Store 200(param) 194
-                              Store 201(param) 196
-                              Store 202(param) 199
-             203:   16(fvec2) FunctionCall 22(fbSelect(vb2;vf2;vf2;) 200(param) 201(param) 202(param)
-             205:    6(float) CompositeExtract 203 0
-             206:    6(float) CompositeExtract 203 1
-             207:    7(fvec4) CompositeConstruct 205 206 204 204
-             208:    7(fvec4) FAdd 191 207
-                              ReturnValue 208
+          110(a):    109(ptr) Variable Function
+          112(b):    109(ptr) Variable Function
+          114(c):    109(ptr) Variable Function
+          116(d):    109(ptr) Variable Function
+        117(ret):     24(ptr) Variable Function
+          137(e):    109(ptr) Variable Function
+          150(f):     24(ptr) Variable Function
+      186(param):     15(ptr) Variable Function
+      187(param):     17(ptr) Variable Function
+      188(param):     17(ptr) Variable Function
+                              Store 110(a) 111
+                              Store 112(b) 113
+                              Store 114(c) 115
+                              Store 116(d) 115
+             118:     32(int) Load 110(a)
+             119:    6(float) ConvertSToF 118
+             120:    7(fvec4) Load 26(input)
+             121:    7(fvec4) VectorTimesScalar 120 119
+             122:     32(int) Load 112(b)
+             123:    6(float) ConvertSToF 122
+             124:    7(fvec4) Load 26(input)
+             125:    7(fvec4) VectorTimesScalar 124 123
+             126:    7(fvec4) FAdd 121 125
+             127:     32(int) Load 114(c)
+             128:    6(float) ConvertSToF 127
+             129:    7(fvec4) Load 26(input)
+             130:    7(fvec4) VectorTimesScalar 129 128
+             131:    7(fvec4) FAdd 126 130
+             132:     32(int) Load 116(d)
+             133:    6(float) ConvertSToF 132
+             134:    7(fvec4) Load 26(input)
+             135:    7(fvec4) VectorTimesScalar 134 133
+             136:    7(fvec4) FAdd 131 135
+                              Store 117(ret) 136
+             138:     32(int) Load 112(b)
+             141:    13(bool) INotEqual 138 140
+             142:     32(int) Load 116(d)
+                              Store 114(c) 142
+             144:     32(int) Select 141 142 143
+                              Store 110(a) 144
+                              Store 137(e) 144
+             145:     32(int) Load 110(a)
+             146:    13(bool) INotEqual 145 140
+             147:     32(int) Load 114(c)
+                              Store 116(d) 147
+             149:     32(int) Select 146 147 148
+                              Store 112(b) 149
+             152:    151(ptr) AccessChain 117(ret) 140
+             153:    6(float) Load 152
+             155:    151(ptr) AccessChain 26(input) 154
+             156:    6(float) Load 155
+             157:    13(bool) FOrdLessThan 153 156
+             158:     32(int) Load 114(c)
+             159:    6(float) ConvertSToF 158
+             160:    7(fvec4) Load 26(input)
+             161:    7(fvec4) VectorTimesScalar 160 159
+             162:     32(int) Load 116(d)
+             163:    6(float) ConvertSToF 162
+             164:    7(fvec4) Load 26(input)
+             165:    7(fvec4) VectorTimesScalar 164 163
+             166:   43(bvec4) CompositeConstruct 157 157 157 157
+             167:    7(fvec4) Select 166 161 165
+                              Store 150(f) 167
+             168:     32(int) Load 137(e)
+             169:    6(float) ConvertSToF 168
+             170:    7(fvec4) Load 117(ret)
+             171:    7(fvec4) VectorTimesScalar 170 169
+             172:    7(fvec4) Load 150(f)
+             173:    7(fvec4) FAdd 171 172
+             174:    7(fvec4) FunctionCall 9(vectorCond()
+             175:    7(fvec4) FAdd 173 174
+             176:    7(fvec4) FunctionCall 11(scalarCond()
+             177:    7(fvec4) FAdd 175 176
+                              Store 186(param) 180
+                              Store 187(param) 182
+                              Store 188(param) 185
+             189:   16(fvec2) FunctionCall 22(fbSelect(vb2;vf2;vf2;) 186(param) 187(param) 188(param)
+             191:    6(float) CompositeExtract 189 0
+             192:    6(float) CompositeExtract 189 1
+             193:    7(fvec4) CompositeConstruct 191 192 190 190
+             194:    7(fvec4) FAdd 177 193
+                              ReturnValue 194
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.constantbuffer.frag.out b/Test/baseResults/hlsl.constantbuffer.frag.out
index 58e9ed8..0cabf8e 100644
--- a/Test/baseResults/hlsl.constantbuffer.frag.out
+++ b/Test/baseResults/hlsl.constantbuffer.frag.out
@@ -132,7 +132,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 66
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.constructArray.vert.out b/Test/baseResults/hlsl.constructArray.vert.out
index 7140bea..3099539 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): 80002
+// Generated by (magic number): 80006
 // 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 1321bfe..22dd4fb 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): 80002
+// Generated by (magic number): 80006
 // 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 f54945a..8a5d0e8 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): 80002
+// Generated by (magic number): 80006
 // 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 e8c1dc6..67e7f21 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): 80002
+// Generated by (magic number): 80006
 // 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 a54c98d..5f922e3 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): 80002
+// Generated by (magic number): 80006
 // 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 44c414c..d6e2669 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): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 20
 
                               Capability Shader
@@ -59,6 +59,7 @@
                               EntryPoint Fragment 4  "PixelShaderFunction" 18
                               ExecutionMode 4 OriginUpperLeft
                               ExecutionMode 4 DepthGreater
+                              ExecutionMode 4 DepthReplacing
                               Source HLSL 500
                               Name 4  "PixelShaderFunction"
                               Name 10  "@PixelShaderFunction(f1;"
diff --git a/Test/baseResults/hlsl.depthLess.frag.out b/Test/baseResults/hlsl.depthLess.frag.out
index f97f1be..462e8ee 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): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 16
 
                               Capability Shader
@@ -51,6 +51,7 @@
                               EntryPoint Fragment 4  "PixelShaderFunction" 14
                               ExecutionMode 4 OriginUpperLeft
                               ExecutionMode 4 DepthLess
+                              ExecutionMode 4 DepthReplacing
                               Source HLSL 500
                               Name 4  "PixelShaderFunction"
                               Name 8  "@PixelShaderFunction("
diff --git a/Test/baseResults/hlsl.discard.frag.out b/Test/baseResults/hlsl.discard.frag.out
index 7a6ed45..d96bd9b 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): 80002
+// Generated by (magic number): 80006
 // 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 bee6c29..2d6d04f 100755
--- a/Test/baseResults/hlsl.doLoop.frag.out
+++ b/Test/baseResults/hlsl.doLoop.frag.out
@@ -6,12 +6,12 @@
 0:2    Function Parameters: 
 0:2      'input' ( in float)
 0:?     Sequence
-0:3      Loop with condition not tested first
+0:3      Loop with condition not tested first: Unroll
 0:3        Loop Condition
 0:3        Constant:
 0:3          false (const bool)
 0:3        No loop body
-0:4      Loop with condition not tested first
+0:4      Loop with condition not tested first: Unroll
 0:4        Loop Condition
 0:4        Constant:
 0:4          false (const bool)
@@ -80,12 +80,12 @@
 0:2    Function Parameters: 
 0:2      'input' ( in float)
 0:?     Sequence
-0:3      Loop with condition not tested first
+0:3      Loop with condition not tested first: Unroll
 0:3        Loop Condition
 0:3        Constant:
 0:3          false (const bool)
 0:3        No loop body
-0:4      Loop with condition not tested first
+0:4      Loop with condition not tested first: Unroll
 0:4        Loop Condition
 0:4        Constant:
 0:4          false (const bool)
@@ -144,7 +144,7 @@
 0:?     'input' (layout( location=0) in float)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // 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 e0fa528..317d71d 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): 80002
+// Generated by (magic number): 80006
 // 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 02c86ae..e0d13c1 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): 80002
+// Generated by (magic number): 80006
 // 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 6330d08..2f86473 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): 80002
+// Generated by (magic number): 80006
 // 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 295fb04..12e539b 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): 80002
+// Generated by (magic number): 80006
 // 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 ee20b7d..ba72b79 100644
--- a/Test/baseResults/hlsl.emptystructreturn.frag.out
+++ b/Test/baseResults/hlsl.emptystructreturn.frag.out
@@ -50,7 +50,7 @@
 0:?   Linker Objects
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 27
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.emptystructreturn.vert.out b/Test/baseResults/hlsl.emptystructreturn.vert.out
index 7ff09dd..1625be5 100644
--- a/Test/baseResults/hlsl.emptystructreturn.vert.out
+++ b/Test/baseResults/hlsl.emptystructreturn.vert.out
@@ -48,7 +48,7 @@
 0:?   Linker Objects
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 27
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.entry-in.frag.out b/Test/baseResults/hlsl.entry-in.frag.out
index 10d8544..1de8687 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): 80002
+// Generated by (magic number): 80006
 // 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 40fc164..4c06e06 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): 80002
+// Generated by (magic number): 80006
 // 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 9972ec0..077b755 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): 80002
+// Generated by (magic number): 80006
 // 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 6b05ef2..6835eab 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): 80002
+// Generated by (magic number): 80006
 // 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 2f09280..1ee90b4 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): 80002
+// Generated by (magic number): 80006
 // 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 730a989..1c88f77 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): 80002
+// Generated by (magic number): 80006
 // 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 8eafba8..0b51975 100755
--- a/Test/baseResults/hlsl.flattenOpaque.frag.out
+++ b/Test/baseResults/hlsl.flattenOpaque.frag.out
@@ -1,54 +1,71 @@
 hlsl.flattenOpaque.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:15  Function Definition: osCall1(struct-os-p11; ( temp 4-component vector of float)
 0:15    Function Parameters: 
-0:?       's.s2D' ( in sampler)
+0:15      's' ( in structure{ temp sampler s2D})
 0:?     Sequence
 0:16      Branch: Return with expression
 0:16        texture ( temp 4-component vector of float)
 0:16          Construct combined texture-sampler ( temp sampler2D)
 0:16            'tex' ( uniform texture2D)
-0:?             's.s2D' ( in sampler)
+0:16            s2D: direct index for structure ( temp sampler)
+0:16              's' ( in structure{ temp sampler s2D})
+0:16              Constant:
+0:16                0 (const int)
 0:?           Constant:
 0:?             0.200000
 0:?             0.300000
 0:20  Function Definition: osCall2(struct-os-p11;vf2; ( temp 4-component vector of float)
 0:20    Function Parameters: 
-0:?       's.s2D' ( in sampler)
+0:20      's' ( in structure{ temp sampler s2D})
 0:20      'f2' ( in 2-component vector of float)
 0:?     Sequence
 0:21      Branch: Return with expression
 0:21        texture ( temp 4-component vector of float)
 0:21          Construct combined texture-sampler ( temp sampler2D)
 0:21            'tex' ( uniform texture2D)
-0:?             's.s2D' ( in sampler)
+0:21            s2D: direct index for structure ( temp sampler)
+0:21              's' ( in structure{ temp sampler s2D})
+0:21              Constant:
+0:21                0 (const int)
 0:21          'f2' ( in 2-component vector of float)
 0:25  Function Definition: os2Call1(struct-os2-p1-t211; ( temp 4-component vector of float)
 0:25    Function Parameters: 
-0:?       's.s2D' ( in sampler)
-0:?       's.tex' ( in texture2D)
+0:25      's' ( in structure{ temp sampler s2D,  temp texture2D tex})
 0:?     Sequence
 0:26      Branch: Return with expression
 0:26        texture ( temp 4-component vector of float)
 0:26          Construct combined texture-sampler ( temp sampler2D)
-0:?             's.tex' ( in texture2D)
-0:?             's.s2D' ( in sampler)
+0:26            tex: direct index for structure ( temp texture2D)
+0:26              's' ( in structure{ temp sampler s2D,  temp texture2D tex})
+0:26              Constant:
+0:26                1 (const int)
+0:26            s2D: direct index for structure ( temp sampler)
+0:26              's' ( in structure{ temp sampler s2D,  temp texture2D tex})
+0:26              Constant:
+0:26                0 (const int)
 0:?           Constant:
 0:?             0.200000
 0:?             0.300000
 0:30  Function Definition: os2Call2(struct-os2-p1-t211;vf2; ( temp 4-component vector of float)
 0:30    Function Parameters: 
-0:?       's.s2D' ( in sampler)
-0:?       's.tex' ( in texture2D)
+0:30      's' ( in structure{ temp sampler s2D,  temp texture2D tex})
 0:30      'f2' ( in 2-component vector of float)
 0:?     Sequence
 0:31      Branch: Return with expression
 0:31        texture ( temp 4-component vector of float)
 0:31          Construct combined texture-sampler ( temp sampler2D)
-0:?             's.tex' ( in texture2D)
-0:?             's.s2D' ( in sampler)
+0:31            tex: direct index for structure ( temp texture2D)
+0:31              's' ( in structure{ temp sampler s2D,  temp texture2D tex})
+0:31              Constant:
+0:31                1 (const int)
+0:31            s2D: direct index for structure ( temp sampler)
+0:31              's' ( in structure{ temp sampler s2D,  temp texture2D tex})
+0:31              Constant:
+0:31                0 (const int)
 0:31          'f2' ( in 2-component vector of float)
 0:35  Function Definition: @main( ( temp 4-component vector of float)
 0:35    Function Parameters: 
@@ -58,18 +75,60 @@
 0:37          add ( temp 4-component vector of float)
 0:36            add ( temp 4-component vector of float)
 0:36              Function Call: osCall1(struct-os-p11; ( temp 4-component vector of float)
-0:?                 's.s2D' ( uniform sampler)
+0:36                Comma ( temp structure{ temp sampler s2D})
+0:36                  Sequence
+0:36                    move second child to first child ( temp sampler)
+0:36                      s2D: direct index for structure ( temp sampler)
+0:36                        'aggShadow' ( temp structure{ temp sampler s2D})
+0:36                        Constant:
+0:36                          0 (const int)
+0:?                       's.s2D' ( uniform sampler)
+0:36                  'aggShadow' ( temp structure{ temp sampler s2D})
 0:37              Function Call: osCall2(struct-os-p11;vf2; ( temp 4-component vector of float)
-0:?                 's.s2D' ( uniform sampler)
+0:37                Comma ( temp structure{ temp sampler s2D})
+0:37                  Sequence
+0:37                    move second child to first child ( temp sampler)
+0:37                      s2D: direct index for structure ( temp sampler)
+0:37                        'aggShadow' ( temp structure{ temp sampler s2D})
+0:37                        Constant:
+0:37                          0 (const int)
+0:?                       's.s2D' ( uniform sampler)
+0:37                  'aggShadow' ( temp structure{ temp sampler s2D})
 0:?                 Constant:
 0:?                   0.200000
 0:?                   0.300000
 0:38            Function Call: os2Call1(struct-os2-p1-t211; ( temp 4-component vector of float)
-0:?               's2.s2D' ( uniform sampler)
-0:?               's2.tex' ( uniform texture2D)
+0:38              Comma ( temp structure{ temp sampler s2D,  temp texture2D tex})
+0:38                Sequence
+0:38                  move second child to first child ( temp sampler)
+0:38                    s2D: direct index for structure ( temp sampler)
+0:38                      'aggShadow' ( temp structure{ temp sampler s2D,  temp texture2D tex})
+0:38                      Constant:
+0:38                        0 (const int)
+0:?                     's2.s2D' ( uniform sampler)
+0:38                  move second child to first child ( temp texture2D)
+0:38                    tex: direct index for structure ( temp texture2D)
+0:38                      'aggShadow' ( temp structure{ temp sampler s2D,  temp texture2D tex})
+0:38                      Constant:
+0:38                        1 (const int)
+0:?                     's2.tex' ( uniform texture2D)
+0:38                'aggShadow' ( temp structure{ temp sampler s2D,  temp texture2D tex})
 0:39          Function Call: os2Call2(struct-os2-p1-t211;vf2; ( temp 4-component vector of float)
-0:?             's2.s2D' ( uniform sampler)
-0:?             's2.tex' ( uniform texture2D)
+0:39            Comma ( temp structure{ temp sampler s2D,  temp texture2D tex})
+0:39              Sequence
+0:39                move second child to first child ( temp sampler)
+0:39                  s2D: direct index for structure ( temp sampler)
+0:39                    'aggShadow' ( temp structure{ temp sampler s2D,  temp texture2D tex})
+0:39                    Constant:
+0:39                      0 (const int)
+0:?                   's2.s2D' ( uniform sampler)
+0:39                move second child to first child ( temp texture2D)
+0:39                  tex: direct index for structure ( temp texture2D)
+0:39                    'aggShadow' ( temp structure{ temp sampler s2D,  temp texture2D tex})
+0:39                    Constant:
+0:39                      1 (const int)
+0:?                   's2.tex' ( uniform texture2D)
+0:39              'aggShadow' ( temp structure{ temp sampler s2D,  temp texture2D tex})
 0:?             Constant:
 0:?               0.200000
 0:?               0.300000
@@ -95,51 +154,67 @@
 0:? Sequence
 0:15  Function Definition: osCall1(struct-os-p11; ( temp 4-component vector of float)
 0:15    Function Parameters: 
-0:?       's.s2D' ( in sampler)
+0:15      's' ( in structure{ temp sampler s2D})
 0:?     Sequence
 0:16      Branch: Return with expression
 0:16        texture ( temp 4-component vector of float)
 0:16          Construct combined texture-sampler ( temp sampler2D)
 0:16            'tex' ( uniform texture2D)
-0:?             's.s2D' ( in sampler)
+0:16            s2D: direct index for structure ( temp sampler)
+0:16              's' ( in structure{ temp sampler s2D})
+0:16              Constant:
+0:16                0 (const int)
 0:?           Constant:
 0:?             0.200000
 0:?             0.300000
 0:20  Function Definition: osCall2(struct-os-p11;vf2; ( temp 4-component vector of float)
 0:20    Function Parameters: 
-0:?       's.s2D' ( in sampler)
+0:20      's' ( in structure{ temp sampler s2D})
 0:20      'f2' ( in 2-component vector of float)
 0:?     Sequence
 0:21      Branch: Return with expression
 0:21        texture ( temp 4-component vector of float)
 0:21          Construct combined texture-sampler ( temp sampler2D)
 0:21            'tex' ( uniform texture2D)
-0:?             's.s2D' ( in sampler)
+0:21            s2D: direct index for structure ( temp sampler)
+0:21              's' ( in structure{ temp sampler s2D})
+0:21              Constant:
+0:21                0 (const int)
 0:21          'f2' ( in 2-component vector of float)
 0:25  Function Definition: os2Call1(struct-os2-p1-t211; ( temp 4-component vector of float)
 0:25    Function Parameters: 
-0:?       's.s2D' ( in sampler)
-0:?       's.tex' ( in texture2D)
+0:25      's' ( in structure{ temp sampler s2D,  temp texture2D tex})
 0:?     Sequence
 0:26      Branch: Return with expression
 0:26        texture ( temp 4-component vector of float)
 0:26          Construct combined texture-sampler ( temp sampler2D)
-0:?             's.tex' ( in texture2D)
-0:?             's.s2D' ( in sampler)
+0:26            tex: direct index for structure ( temp texture2D)
+0:26              's' ( in structure{ temp sampler s2D,  temp texture2D tex})
+0:26              Constant:
+0:26                1 (const int)
+0:26            s2D: direct index for structure ( temp sampler)
+0:26              's' ( in structure{ temp sampler s2D,  temp texture2D tex})
+0:26              Constant:
+0:26                0 (const int)
 0:?           Constant:
 0:?             0.200000
 0:?             0.300000
 0:30  Function Definition: os2Call2(struct-os2-p1-t211;vf2; ( temp 4-component vector of float)
 0:30    Function Parameters: 
-0:?       's.s2D' ( in sampler)
-0:?       's.tex' ( in texture2D)
+0:30      's' ( in structure{ temp sampler s2D,  temp texture2D tex})
 0:30      'f2' ( in 2-component vector of float)
 0:?     Sequence
 0:31      Branch: Return with expression
 0:31        texture ( temp 4-component vector of float)
 0:31          Construct combined texture-sampler ( temp sampler2D)
-0:?             's.tex' ( in texture2D)
-0:?             's.s2D' ( in sampler)
+0:31            tex: direct index for structure ( temp texture2D)
+0:31              's' ( in structure{ temp sampler s2D,  temp texture2D tex})
+0:31              Constant:
+0:31                1 (const int)
+0:31            s2D: direct index for structure ( temp sampler)
+0:31              's' ( in structure{ temp sampler s2D,  temp texture2D tex})
+0:31              Constant:
+0:31                0 (const int)
 0:31          'f2' ( in 2-component vector of float)
 0:35  Function Definition: @main( ( temp 4-component vector of float)
 0:35    Function Parameters: 
@@ -149,18 +224,60 @@
 0:37          add ( temp 4-component vector of float)
 0:36            add ( temp 4-component vector of float)
 0:36              Function Call: osCall1(struct-os-p11; ( temp 4-component vector of float)
-0:?                 's.s2D' ( uniform sampler)
+0:36                Comma ( temp structure{ temp sampler s2D})
+0:36                  Sequence
+0:36                    move second child to first child ( temp sampler)
+0:36                      s2D: direct index for structure ( temp sampler)
+0:36                        'aggShadow' ( temp structure{ temp sampler s2D})
+0:36                        Constant:
+0:36                          0 (const int)
+0:?                       's.s2D' ( uniform sampler)
+0:36                  'aggShadow' ( temp structure{ temp sampler s2D})
 0:37              Function Call: osCall2(struct-os-p11;vf2; ( temp 4-component vector of float)
-0:?                 's.s2D' ( uniform sampler)
+0:37                Comma ( temp structure{ temp sampler s2D})
+0:37                  Sequence
+0:37                    move second child to first child ( temp sampler)
+0:37                      s2D: direct index for structure ( temp sampler)
+0:37                        'aggShadow' ( temp structure{ temp sampler s2D})
+0:37                        Constant:
+0:37                          0 (const int)
+0:?                       's.s2D' ( uniform sampler)
+0:37                  'aggShadow' ( temp structure{ temp sampler s2D})
 0:?                 Constant:
 0:?                   0.200000
 0:?                   0.300000
 0:38            Function Call: os2Call1(struct-os2-p1-t211; ( temp 4-component vector of float)
-0:?               's2.s2D' ( uniform sampler)
-0:?               's2.tex' ( uniform texture2D)
+0:38              Comma ( temp structure{ temp sampler s2D,  temp texture2D tex})
+0:38                Sequence
+0:38                  move second child to first child ( temp sampler)
+0:38                    s2D: direct index for structure ( temp sampler)
+0:38                      'aggShadow' ( temp structure{ temp sampler s2D,  temp texture2D tex})
+0:38                      Constant:
+0:38                        0 (const int)
+0:?                     's2.s2D' ( uniform sampler)
+0:38                  move second child to first child ( temp texture2D)
+0:38                    tex: direct index for structure ( temp texture2D)
+0:38                      'aggShadow' ( temp structure{ temp sampler s2D,  temp texture2D tex})
+0:38                      Constant:
+0:38                        1 (const int)
+0:?                     's2.tex' ( uniform texture2D)
+0:38                'aggShadow' ( temp structure{ temp sampler s2D,  temp texture2D tex})
 0:39          Function Call: os2Call2(struct-os2-p1-t211;vf2; ( temp 4-component vector of float)
-0:?             's2.s2D' ( uniform sampler)
-0:?             's2.tex' ( uniform texture2D)
+0:39            Comma ( temp structure{ temp sampler s2D,  temp texture2D tex})
+0:39              Sequence
+0:39                move second child to first child ( temp sampler)
+0:39                  s2D: direct index for structure ( temp sampler)
+0:39                    'aggShadow' ( temp structure{ temp sampler s2D,  temp texture2D tex})
+0:39                    Constant:
+0:39                      0 (const int)
+0:?                   's2.s2D' ( uniform sampler)
+0:39                move second child to first child ( temp texture2D)
+0:39                  tex: direct index for structure ( temp texture2D)
+0:39                    'aggShadow' ( temp structure{ temp sampler s2D,  temp texture2D tex})
+0:39                    Constant:
+0:39                      1 (const int)
+0:?                   's2.tex' ( uniform texture2D)
+0:39              'aggShadow' ( temp structure{ temp sampler s2D,  temp texture2D tex})
 0:?             Constant:
 0:?               0.200000
 0:?               0.300000
@@ -178,152 +295,184 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80002
-// Id's are bound by 99
+// Generated by (magic number): 80006
+// Id's are bound by 122
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 97
+                              EntryPoint Fragment 4  "main" 120
                               ExecutionMode 4 OriginUpperLeft
                               Source HLSL 500
                               Name 4  "main"
-                              Name 12  "osCall1(struct-os-p11;"
-                              Name 11  "s.s2D"
-                              Name 19  "osCall2(struct-os-p11;vf2;"
-                              Name 17  "s.s2D"
-                              Name 18  "f2"
-                              Name 26  "os2Call1(struct-os2-p1-t211;"
-                              Name 24  "s.s2D"
-                              Name 25  "s.tex"
+                              Name 7  "os"
+                              MemberName 7(os) 0  "s2D"
+                              Name 13  "osCall1(struct-os-p11;"
+                              Name 12  "s"
+                              Name 20  "osCall2(struct-os-p11;vf2;"
+                              Name 18  "s"
+                              Name 19  "f2"
+                              Name 23  "os2"
+                              MemberName 23(os2) 0  "s2D"
+                              MemberName 23(os2) 1  "tex"
+                              Name 27  "os2Call1(struct-os2-p1-t211;"
+                              Name 26  "s"
                               Name 32  "os2Call2(struct-os2-p1-t211;vf2;"
-                              Name 29  "s.s2D"
-                              Name 30  "s.tex"
+                              Name 30  "s"
                               Name 31  "f2"
                               Name 35  "@main("
                               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 80  "aggShadow"
+                              Name 82  "s.s2D"
+                              Name 85  "param"
+                              Name 88  "aggShadow"
                               Name 91  "param"
-                              Name 97  "@entryPointOutput"
+                              Name 93  "param"
+                              Name 96  "aggShadow"
+                              Name 97  "s2.s2D"
+                              Name 100  "s2.tex"
+                              Name 103  "param"
+                              Name 107  "aggShadow"
+                              Name 112  "param"
+                              Name 114  "param"
+                              Name 120  "@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
+                              Decorate 82(s.s2D) DescriptorSet 0
+                              Decorate 97(s2.s2D) DescriptorSet 0
+                              Decorate 100(s2.tex) DescriptorSet 0
+                              Decorate 120(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeSampler
-               7:             TypePointer Function 6
-               8:             TypeFloat 32
-               9:             TypeVector 8(float) 4
-              10:             TypeFunction 9(fvec4) 7(ptr)
-              14:             TypeVector 8(float) 2
-              15:             TypePointer Function 14(fvec2)
-              16:             TypeFunction 9(fvec4) 7(ptr) 15(ptr)
-              21:             TypeImage 8(float) 2D sampled format:Unknown
-              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:             TypePointer UniformConstant 21
+           7(os):             TypeStruct 6
+               8:             TypePointer Function 7(os)
+               9:             TypeFloat 32
+              10:             TypeVector 9(float) 4
+              11:             TypeFunction 10(fvec4) 8(ptr)
+              15:             TypeVector 9(float) 2
+              16:             TypePointer Function 15(fvec2)
+              17:             TypeFunction 10(fvec4) 8(ptr) 16(ptr)
+              22:             TypeImage 9(float) 2D sampled format:Unknown
+         23(os2):             TypeStruct 6 22
+              24:             TypePointer Function 23(os2)
+              25:             TypeFunction 10(fvec4) 24(ptr)
+              29:             TypeFunction 10(fvec4) 24(ptr) 16(ptr)
+              34:             TypeFunction 10(fvec4)
+              37:             TypePointer UniformConstant 22
          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
+              40:             TypeInt 32 1
+              41:     40(int) Constant 0
+              42:             TypePointer Function 6
+              45:             TypeSampledImage 22
+              47:    9(float) Constant 1045220557
+              48:    9(float) Constant 1050253722
+              49:   15(fvec2) ConstantComposite 47 48
+              61:     40(int) Constant 1
+              62:             TypePointer Function 22
+              81:             TypePointer UniformConstant 6
+       82(s.s2D):     81(ptr) Variable UniformConstant
+      97(s2.s2D):     81(ptr) Variable UniformConstant
+     100(s2.tex):     37(ptr) Variable UniformConstant
+             119:             TypePointer Output 10(fvec4)
+120(@entryPointOutput):    119(ptr) Variable Output
          4(main):           2 Function None 3
                5:             Label
-              98:    9(fvec4) FunctionCall 35(@main()
-                              Store 97(@entryPointOutput) 98
+             121:   10(fvec4) FunctionCall 35(@main()
+                              Store 120(@entryPointOutput) 121
                               Return
                               FunctionEnd
-12(osCall1(struct-os-p11;):    9(fvec4) Function None 10
-       11(s.s2D):      7(ptr) FunctionParameter
-              13:             Label
-              39:          21 Load 38(tex)
-              40:           6 Load 11(s.s2D)
-              42:          41 SampledImage 39 40
-              46:    9(fvec4) ImageSampleImplicitLod 42 45
-                              ReturnValue 46
+13(osCall1(struct-os-p11;):   10(fvec4) Function None 11
+           12(s):      8(ptr) FunctionParameter
+              14:             Label
+              39:          22 Load 38(tex)
+              43:     42(ptr) AccessChain 12(s) 41
+              44:           6 Load 43
+              46:          45 SampledImage 39 44
+              50:   10(fvec4) ImageSampleImplicitLod 46 49
+                              ReturnValue 50
                               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
-              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
+20(osCall2(struct-os-p11;vf2;):   10(fvec4) Function None 17
+           18(s):      8(ptr) FunctionParameter
+          19(f2):     16(ptr) FunctionParameter
+              21:             Label
+              53:          22 Load 38(tex)
+              54:     42(ptr) AccessChain 18(s) 41
+              55:           6 Load 54
+              56:          45 SampledImage 53 55
+              57:   15(fvec2) Load 19(f2)
+              58:   10(fvec4) ImageSampleImplicitLod 56 57
+                              ReturnValue 58
                               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
-              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
+27(os2Call1(struct-os2-p1-t211;):   10(fvec4) Function None 25
+           26(s):     24(ptr) FunctionParameter
+              28:             Label
+              63:     62(ptr) AccessChain 26(s) 61
+              64:          22 Load 63
+              65:     42(ptr) AccessChain 26(s) 41
+              66:           6 Load 65
+              67:          45 SampledImage 64 66
+              68:   10(fvec4) ImageSampleImplicitLod 67 49
+                              ReturnValue 68
                               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
+32(os2Call2(struct-os2-p1-t211;vf2;):   10(fvec4) Function None 29
+           30(s):     24(ptr) FunctionParameter
+          31(f2):     16(ptr) FunctionParameter
               33:             Label
-              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
+              71:     62(ptr) AccessChain 30(s) 61
+              72:          22 Load 71
+              73:     42(ptr) AccessChain 30(s) 41
+              74:           6 Load 73
+              75:          45 SampledImage 72 74
+              76:   15(fvec2) Load 31(f2)
+              77:   10(fvec4) ImageSampleImplicitLod 75 76
+                              ReturnValue 77
                               FunctionEnd
-      35(@main():    9(fvec4) Function None 34
+      35(@main():   10(fvec4) Function None 34
               36:             Label
-       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
+   80(aggShadow):      8(ptr) Variable Function
+       85(param):      8(ptr) Variable Function
+   88(aggShadow):      8(ptr) Variable Function
+       91(param):      8(ptr) Variable Function
+       93(param):     16(ptr) Variable Function
+   96(aggShadow):     24(ptr) Variable Function
+      103(param):     24(ptr) Variable Function
+  107(aggShadow):     24(ptr) Variable Function
+      112(param):     24(ptr) Variable Function
+      114(param):     16(ptr) Variable Function
+              83:           6 Load 82(s.s2D)
+              84:     42(ptr) AccessChain 80(aggShadow) 41
+                              Store 84 83
+              86:       7(os) Load 80(aggShadow)
+                              Store 85(param) 86
+              87:   10(fvec4) FunctionCall 13(osCall1(struct-os-p11;) 85(param)
+              89:           6 Load 82(s.s2D)
+              90:     42(ptr) AccessChain 88(aggShadow) 41
+                              Store 90 89
+              92:       7(os) Load 88(aggShadow)
+                              Store 91(param) 92
+                              Store 93(param) 49
+              94:   10(fvec4) FunctionCall 20(osCall2(struct-os-p11;vf2;) 91(param) 93(param)
+              95:   10(fvec4) FAdd 87 94
+              98:           6 Load 97(s2.s2D)
+              99:     42(ptr) AccessChain 96(aggShadow) 41
+                              Store 99 98
+             101:          22 Load 100(s2.tex)
+             102:     62(ptr) AccessChain 96(aggShadow) 61
+                              Store 102 101
+             104:     23(os2) Load 96(aggShadow)
+                              Store 103(param) 104
+             105:   10(fvec4) FunctionCall 27(os2Call1(struct-os2-p1-t211;) 103(param)
+             106:   10(fvec4) FAdd 95 105
+             108:           6 Load 97(s2.s2D)
+             109:     42(ptr) AccessChain 107(aggShadow) 41
+                              Store 109 108
+             110:          22 Load 100(s2.tex)
+             111:     62(ptr) AccessChain 107(aggShadow) 61
+                              Store 111 110
+             113:     23(os2) Load 107(aggShadow)
+                              Store 112(param) 113
+                              Store 114(param) 49
+             115:   10(fvec4) FunctionCall 32(os2Call2(struct-os2-p1-t211;vf2;) 112(param) 114(param)
+             116:   10(fvec4) FAdd 106 115
+                              ReturnValue 116
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.flattenOpaqueInit.vert.out b/Test/baseResults/hlsl.flattenOpaqueInit.vert.out
index b82cfff..0a95545 100755
--- a/Test/baseResults/hlsl.flattenOpaqueInit.vert.out
+++ b/Test/baseResults/hlsl.flattenOpaqueInit.vert.out
@@ -4,14 +4,19 @@
 0:? Sequence
 0:5  Function Definition: lookUp(struct-FxaaTex-p1-t211; ( temp 4-component vector of float)
 0:5    Function Parameters: 
-0:?       'tex.smpl' ( in sampler)
-0:?       'tex.tex' ( in texture2D)
+0:5      'tex' ( in structure{ temp sampler smpl,  temp texture2D tex})
 0:?     Sequence
 0:6      Branch: Return with expression
 0:6        texture ( temp 4-component vector of float)
 0:6          Construct combined texture-sampler ( temp sampler2D)
-0:?             'tex.tex' ( in texture2D)
-0:?             'tex.smpl' ( in sampler)
+0:6            tex: direct index for structure ( temp texture2D)
+0:6              'tex' ( in structure{ temp sampler smpl,  temp texture2D tex})
+0:6              Constant:
+0:6                1 (const int)
+0:6            smpl: direct index for structure ( temp sampler)
+0:6              'tex' ( in structure{ temp sampler smpl,  temp texture2D tex})
+0:6              Constant:
+0:6                0 (const int)
 0:?           Constant:
 0:?             0.300000
 0:?             0.400000
@@ -19,10 +24,16 @@
 0:10    Function Parameters: 
 0:?     Sequence
 0:12      move second child to first child ( temp sampler)
-0:?         't.smpl' ( temp sampler)
+0:12        smpl: direct index for structure ( temp sampler)
+0:12          't' ( temp structure{ temp sampler smpl,  temp texture2D tex})
+0:12          Constant:
+0:12            0 (const int)
 0:12        'g_tInputTexture_sampler' ( uniform sampler)
 0:13      move second child to first child ( temp texture2D)
-0:?         't.tex' ( temp texture2D)
+0:13        tex: direct index for structure ( temp texture2D)
+0:13          't' ( temp structure{ temp sampler smpl,  temp texture2D tex})
+0:13          Constant:
+0:13            1 (const int)
 0:13        'g_tInputTexture' ( uniform texture2D)
 0:14      Branch: Return with expression
 0:14        't' ( temp structure{ temp sampler smpl,  temp texture2D tex})
@@ -30,53 +41,34 @@
 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:19        move second child to first child ( temp structure{ temp sampler smpl,  temp texture2D tex})
+0:19          'tex1' ( 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:20      Sequence
-0:20        Sequence
-0:20          move second child to first child ( temp structure{ temp sampler smpl,  temp texture2D tex})
-0:20            'flattenTemp' ( temp structure{ temp sampler smpl,  temp texture2D tex})
-0:20            Function Call: fillOpaque( ( temp structure{ temp sampler smpl,  temp texture2D tex})
-0:20          move second child to first child ( temp sampler)
-0:?             'tex2.smpl' ( temp sampler)
-0:20            smpl: direct index for structure ( temp sampler)
-0:20              'flattenTemp' ( temp structure{ temp sampler smpl,  temp texture2D tex})
-0:20              Constant:
-0:20                0 (const int)
-0:20          move second child to first child ( temp texture2D)
-0:?             'tex2.tex' ( temp texture2D)
-0:20            tex: direct index for structure ( temp texture2D)
-0:20              'flattenTemp' ( temp structure{ temp sampler smpl,  temp texture2D tex})
-0:20              Constant:
-0:20                1 (const int)
+0:20        move second child to first child ( temp 4-component vector of float)
+0:20          'res' ( temp 4-component vector of float)
+0:20          Function Call: lookUp(struct-FxaaTex-p1-t211; ( temp 4-component vector of float)
+0:20            'tex1' ( temp structure{ temp sampler smpl,  temp texture2D tex})
 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:21        move second child to first child ( temp structure{ temp sampler smpl,  temp texture2D tex})
+0:21          'tex2' ( temp structure{ temp sampler smpl,  temp texture2D tex})
+0:21          Function Call: fillOpaque( ( temp structure{ temp sampler smpl,  temp texture2D tex})
+0:22      add second child into first child ( temp 4-component vector of float)
+0:22        'res' ( temp 4-component vector of float)
 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:22          'tex2' ( temp structure{ temp sampler smpl,  temp texture2D tex})
+0:23      Sequence
+0:23        move second child to first child ( temp structure{ temp sampler smpl,  temp texture2D tex})
+0:23          'tex3' ( temp structure{ temp sampler smpl,  temp texture2D tex})
+0:23          'tex1' ( temp structure{ temp sampler smpl,  temp texture2D tex})
+0:24      add second child into first child ( temp 4-component vector of float)
+0:24        'res' ( temp 4-component vector of float)
+0:24        Function Call: lookUp(struct-FxaaTex-p1-t211; ( temp 4-component vector of float)
+0:24          'tex3' ( temp structure{ temp sampler smpl,  temp texture2D tex})
+0:26      Branch: Return with expression
+0:26        'res' ( temp 4-component vector of float)
 0:18  Function Definition: main( ( temp void)
 0:18    Function Parameters: 
 0:?     Sequence
@@ -96,14 +88,19 @@
 0:? Sequence
 0:5  Function Definition: lookUp(struct-FxaaTex-p1-t211; ( temp 4-component vector of float)
 0:5    Function Parameters: 
-0:?       'tex.smpl' ( in sampler)
-0:?       'tex.tex' ( in texture2D)
+0:5      'tex' ( in structure{ temp sampler smpl,  temp texture2D tex})
 0:?     Sequence
 0:6      Branch: Return with expression
 0:6        texture ( temp 4-component vector of float)
 0:6          Construct combined texture-sampler ( temp sampler2D)
-0:?             'tex.tex' ( in texture2D)
-0:?             'tex.smpl' ( in sampler)
+0:6            tex: direct index for structure ( temp texture2D)
+0:6              'tex' ( in structure{ temp sampler smpl,  temp texture2D tex})
+0:6              Constant:
+0:6                1 (const int)
+0:6            smpl: direct index for structure ( temp sampler)
+0:6              'tex' ( in structure{ temp sampler smpl,  temp texture2D tex})
+0:6              Constant:
+0:6                0 (const int)
 0:?           Constant:
 0:?             0.300000
 0:?             0.400000
@@ -111,10 +108,16 @@
 0:10    Function Parameters: 
 0:?     Sequence
 0:12      move second child to first child ( temp sampler)
-0:?         't.smpl' ( temp sampler)
+0:12        smpl: direct index for structure ( temp sampler)
+0:12          't' ( temp structure{ temp sampler smpl,  temp texture2D tex})
+0:12          Constant:
+0:12            0 (const int)
 0:12        'g_tInputTexture_sampler' ( uniform sampler)
 0:13      move second child to first child ( temp texture2D)
-0:?         't.tex' ( temp texture2D)
+0:13        tex: direct index for structure ( temp texture2D)
+0:13          't' ( temp structure{ temp sampler smpl,  temp texture2D tex})
+0:13          Constant:
+0:13            1 (const int)
 0:13        'g_tInputTexture' ( uniform texture2D)
 0:14      Branch: Return with expression
 0:14        't' ( temp structure{ temp sampler smpl,  temp texture2D tex})
@@ -122,53 +125,34 @@
 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:19        move second child to first child ( temp structure{ temp sampler smpl,  temp texture2D tex})
+0:19          'tex1' ( 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:20      Sequence
-0:20        Sequence
-0:20          move second child to first child ( temp structure{ temp sampler smpl,  temp texture2D tex})
-0:20            'flattenTemp' ( temp structure{ temp sampler smpl,  temp texture2D tex})
-0:20            Function Call: fillOpaque( ( temp structure{ temp sampler smpl,  temp texture2D tex})
-0:20          move second child to first child ( temp sampler)
-0:?             'tex2.smpl' ( temp sampler)
-0:20            smpl: direct index for structure ( temp sampler)
-0:20              'flattenTemp' ( temp structure{ temp sampler smpl,  temp texture2D tex})
-0:20              Constant:
-0:20                0 (const int)
-0:20          move second child to first child ( temp texture2D)
-0:?             'tex2.tex' ( temp texture2D)
-0:20            tex: direct index for structure ( temp texture2D)
-0:20              'flattenTemp' ( temp structure{ temp sampler smpl,  temp texture2D tex})
-0:20              Constant:
-0:20                1 (const int)
+0:20        move second child to first child ( temp 4-component vector of float)
+0:20          'res' ( temp 4-component vector of float)
+0:20          Function Call: lookUp(struct-FxaaTex-p1-t211; ( temp 4-component vector of float)
+0:20            'tex1' ( temp structure{ temp sampler smpl,  temp texture2D tex})
 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:21        move second child to first child ( temp structure{ temp sampler smpl,  temp texture2D tex})
+0:21          'tex2' ( temp structure{ temp sampler smpl,  temp texture2D tex})
+0:21          Function Call: fillOpaque( ( temp structure{ temp sampler smpl,  temp texture2D tex})
+0:22      add second child into first child ( temp 4-component vector of float)
+0:22        'res' ( temp 4-component vector of float)
 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:22          'tex2' ( temp structure{ temp sampler smpl,  temp texture2D tex})
+0:23      Sequence
+0:23        move second child to first child ( temp structure{ temp sampler smpl,  temp texture2D tex})
+0:23          'tex3' ( temp structure{ temp sampler smpl,  temp texture2D tex})
+0:23          'tex1' ( temp structure{ temp sampler smpl,  temp texture2D tex})
+0:24      add second child into first child ( temp 4-component vector of float)
+0:24        'res' ( temp 4-component vector of float)
+0:24        Function Call: lookUp(struct-FxaaTex-p1-t211; ( temp 4-component vector of float)
+0:24          'tex3' ( temp structure{ temp sampler smpl,  temp texture2D tex})
+0:26      Branch: Return with expression
+0:26        'res' ( temp 4-component vector of float)
 0:18  Function Definition: main( ( temp void)
 0:18    Function Parameters: 
 0:?     Sequence
@@ -181,136 +165,127 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80002
-// Id's are bound by 84
+// Generated by (magic number): 80006
+// Id's are bound by 82
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Vertex 4  "main" 82
+                              EntryPoint Vertex 4  "main" 80
                               Source HLSL 500
                               Name 4  "main"
-                              Name 15  "lookUp(struct-FxaaTex-p1-t211;"
-                              Name 13  "tex.smpl"
-                              Name 14  "tex.tex"
-                              Name 17  "FxaaTex"
-                              MemberName 17(FxaaTex) 0  "smpl"
-                              MemberName 17(FxaaTex) 1  "tex"
-                              Name 19  "fillOpaque("
-                              Name 22  "@main("
-                              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
+                              Name 9  "FxaaTex"
+                              MemberName 9(FxaaTex) 0  "smpl"
+                              MemberName 9(FxaaTex) 1  "tex"
+                              Name 14  "lookUp(struct-FxaaTex-p1-t211;"
+                              Name 13  "tex"
+                              Name 17  "fillOpaque("
+                              Name 20  "@main("
+                              Name 41  "t"
+                              Name 43  "g_tInputTexture_sampler"
+                              Name 47  "g_tInputTexture"
+                              Name 53  "tex1"
+                              Name 58  "res"
+                              Name 59  "param"
+                              Name 62  "tex2"
+                              Name 64  "param"
+                              Name 69  "tex3"
+                              Name 71  "param"
+                              Name 80  "@entryPointOutput"
+                              Decorate 43(g_tInputTexture_sampler) DescriptorSet 0
+                              Decorate 47(g_tInputTexture) DescriptorSet 0
+                              Decorate 80(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeSampler
-               7:             TypePointer Function 6
-               8:             TypeFloat 32
-               9:             TypeImage 8(float) 2D sampled format:Unknown
-              10:             TypePointer Function 9
-              11:             TypeVector 8(float) 4
-              12:             TypeFunction 11(fvec4) 7(ptr) 10(ptr)
-     17(FxaaTex):             TypeStruct 6 9
-              18:             TypeFunction 17(FxaaTex)
-              21:             TypeFunction 11(fvec4)
-              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
-              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
+               7:             TypeFloat 32
+               8:             TypeImage 7(float) 2D sampled format:Unknown
+      9(FxaaTex):             TypeStruct 6 8
+              10:             TypePointer Function 9(FxaaTex)
+              11:             TypeVector 7(float) 4
+              12:             TypeFunction 11(fvec4) 10(ptr)
+              16:             TypeFunction 9(FxaaTex)
+              19:             TypeFunction 11(fvec4)
+              22:             TypeInt 32 1
+              23:     22(int) Constant 1
+              24:             TypePointer Function 8
+              27:     22(int) Constant 0
+              28:             TypePointer Function 6
+              31:             TypeSampledImage 8
+              33:             TypeVector 7(float) 2
+              34:    7(float) Constant 1050253722
+              35:    7(float) Constant 1053609165
+              36:   33(fvec2) ConstantComposite 34 35
+              37:    7(float) Constant 0
+              42:             TypePointer UniformConstant 6
+43(g_tInputTexture_sampler):     42(ptr) Variable UniformConstant
+              46:             TypePointer UniformConstant 8
+47(g_tInputTexture):     46(ptr) Variable UniformConstant
+              57:             TypePointer Function 11(fvec4)
+              79:             TypePointer Output 11(fvec4)
+80(@entryPointOutput):     79(ptr) Variable Output
          4(main):           2 Function None 3
                5:             Label
-              83:   11(fvec4) FunctionCall 22(@main()
-                              Store 82(@entryPointOutput) 83
+              81:   11(fvec4) FunctionCall 20(@main()
+                              Store 80(@entryPointOutput) 81
                               Return
                               FunctionEnd
-15(lookUp(struct-FxaaTex-p1-t211;):   11(fvec4) Function None 12
-    13(tex.smpl):      7(ptr) FunctionParameter
-     14(tex.tex):     10(ptr) FunctionParameter
-              16:             Label
-              24:           9 Load 14(tex.tex)
-              25:           6 Load 13(tex.smpl)
-              27:          26 SampledImage 24 25
-              33:   11(fvec4) ImageSampleExplicitLod 27 31 Lod 32
-                              ReturnValue 33
+14(lookUp(struct-FxaaTex-p1-t211;):   11(fvec4) Function None 12
+         13(tex):     10(ptr) FunctionParameter
+              15:             Label
+              25:     24(ptr) AccessChain 13(tex) 23
+              26:           8 Load 25
+              29:     28(ptr) AccessChain 13(tex) 27
+              30:           6 Load 29
+              32:          31 SampledImage 26 30
+              38:   11(fvec4) ImageSampleExplicitLod 32 36 Lod 37
+                              ReturnValue 38
                               FunctionEnd
- 19(fillOpaque(): 17(FxaaTex) Function None 18
-              20:             Label
-      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
+ 17(fillOpaque():  9(FxaaTex) Function None 16
+              18:             Label
+           41(t):     10(ptr) Variable Function
+              44:           6 Load 43(g_tInputTexture_sampler)
+              45:     28(ptr) AccessChain 41(t) 27
+                              Store 45 44
+              48:           8 Load 47(g_tInputTexture)
+              49:     24(ptr) AccessChain 41(t) 23
+                              Store 49 48
+              50:  9(FxaaTex) Load 41(t)
+                              ReturnValue 50
                               FunctionEnd
-      22(@main():   11(fvec4) Function None 21
-              23:             Label
- 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
+      20(@main():   11(fvec4) Function None 19
+              21:             Label
+        53(tex1):     10(ptr) Variable Function
+         58(res):     57(ptr) Variable Function
+       59(param):     10(ptr) Variable Function
+        62(tex2):     10(ptr) Variable Function
+       64(param):     10(ptr) Variable Function
+        69(tex3):     10(ptr) Variable Function
+       71(param):     10(ptr) Variable Function
+              54:           6 Load 43(g_tInputTexture_sampler)
+              55:           8 Load 47(g_tInputTexture)
+              56:  9(FxaaTex) CompositeConstruct 54 55
+                              Store 53(tex1) 56
+              60:  9(FxaaTex) Load 53(tex1)
+                              Store 59(param) 60
+              61:   11(fvec4) FunctionCall 14(lookUp(struct-FxaaTex-p1-t211;) 59(param)
+                              Store 58(res) 61
+              63:  9(FxaaTex) FunctionCall 17(fillOpaque()
+                              Store 62(tex2) 63
+              65:  9(FxaaTex) Load 62(tex2)
+                              Store 64(param) 65
+              66:   11(fvec4) FunctionCall 14(lookUp(struct-FxaaTex-p1-t211;) 64(param)
+              67:   11(fvec4) Load 58(res)
+              68:   11(fvec4) FAdd 67 66
+                              Store 58(res) 68
+              70:  9(FxaaTex) Load 53(tex1)
+                              Store 69(tex3) 70
+              72:  9(FxaaTex) Load 69(tex3)
+                              Store 71(param) 72
+              73:   11(fvec4) FunctionCall 14(lookUp(struct-FxaaTex-p1-t211;) 71(param)
+              74:   11(fvec4) Load 58(res)
+              75:   11(fvec4) FAdd 74 73
+                              Store 58(res) 75
+              76:   11(fvec4) Load 58(res)
+                              ReturnValue 76
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.flattenOpaqueInitMix.vert.out b/Test/baseResults/hlsl.flattenOpaqueInitMix.vert.out
index 2de3483..5a2cbdc 100755
--- a/Test/baseResults/hlsl.flattenOpaqueInitMix.vert.out
+++ b/Test/baseResults/hlsl.flattenOpaqueInitMix.vert.out
@@ -4,53 +4,42 @@
 0:? Sequence
 0:5  Function Definition: lookUp(struct-FxaaTex-p1-t21-f11; ( temp 4-component vector of float)
 0:5    Function Parameters: 
-0:?       'tex.smpl' ( in sampler)
-0:?       'tex.tex' ( in texture2D)
-0:?       'tex.f' ( in float)
+0:5      'tex' ( in structure{ temp sampler smpl,  temp texture2D tex,  temp float f})
 0:?     Sequence
 0:6      Branch: Return with expression
 0:6        texture ( temp 4-component vector of float)
 0:6          Construct combined texture-sampler ( temp sampler2D)
-0:?             'tex.tex' ( in texture2D)
-0:?             'tex.smpl' ( in sampler)
+0:6            tex: direct index for structure ( temp texture2D)
+0:6              'tex' ( in structure{ temp sampler smpl,  temp texture2D tex,  temp float f})
+0:6              Constant:
+0:6                1 (const int)
+0:6            smpl: direct index for structure ( temp sampler)
+0:6              'tex' ( in structure{ temp sampler smpl,  temp texture2D tex,  temp float f})
+0:6              Constant:
+0:6                0 (const int)
 0:?           Construct vec2 ( temp 2-component vector of float)
-0:?             'tex.f' ( in float)
-0:?             'tex.f' ( in float)
+0:6            f: direct index for structure ( temp float)
+0:6              'tex' ( in structure{ temp sampler smpl,  temp texture2D tex,  temp float f})
+0:6              Constant:
+0:6                2 (const int)
+0:6            f: direct index for structure ( temp float)
+0:6              'tex' ( in structure{ temp sampler smpl,  temp texture2D tex,  temp float f})
+0:6              Constant:
+0:6                2 (const int)
 0:10  Function Definition: @main( ( temp 4-component vector of float)
 0:10    Function Parameters: 
 0:?     Sequence
 0:11      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            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:11        move second child to first child ( temp structure{ temp sampler smpl,  temp texture2D tex,  temp float f})
+0:11          'tex' ( 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:12      Branch: Return with expression
 0:12        Function Call: lookUp(struct-FxaaTex-p1-t21-f11; ( temp 4-component vector of float)
-0:?           'tex.smpl' ( temp sampler)
-0:?           'tex.tex' ( temp texture2D)
-0:?           'tex.f' ( temp float)
+0:12          'tex' ( temp structure{ temp sampler smpl,  temp texture2D tex,  temp float f})
 0:10  Function Definition: main( ( temp void)
 0:10    Function Parameters: 
 0:?     Sequence
@@ -70,53 +59,42 @@
 0:? Sequence
 0:5  Function Definition: lookUp(struct-FxaaTex-p1-t21-f11; ( temp 4-component vector of float)
 0:5    Function Parameters: 
-0:?       'tex.smpl' ( in sampler)
-0:?       'tex.tex' ( in texture2D)
-0:?       'tex.f' ( in float)
+0:5      'tex' ( in structure{ temp sampler smpl,  temp texture2D tex,  temp float f})
 0:?     Sequence
 0:6      Branch: Return with expression
 0:6        texture ( temp 4-component vector of float)
 0:6          Construct combined texture-sampler ( temp sampler2D)
-0:?             'tex.tex' ( in texture2D)
-0:?             'tex.smpl' ( in sampler)
+0:6            tex: direct index for structure ( temp texture2D)
+0:6              'tex' ( in structure{ temp sampler smpl,  temp texture2D tex,  temp float f})
+0:6              Constant:
+0:6                1 (const int)
+0:6            smpl: direct index for structure ( temp sampler)
+0:6              'tex' ( in structure{ temp sampler smpl,  temp texture2D tex,  temp float f})
+0:6              Constant:
+0:6                0 (const int)
 0:?           Construct vec2 ( temp 2-component vector of float)
-0:?             'tex.f' ( in float)
-0:?             'tex.f' ( in float)
+0:6            f: direct index for structure ( temp float)
+0:6              'tex' ( in structure{ temp sampler smpl,  temp texture2D tex,  temp float f})
+0:6              Constant:
+0:6                2 (const int)
+0:6            f: direct index for structure ( temp float)
+0:6              'tex' ( in structure{ temp sampler smpl,  temp texture2D tex,  temp float f})
+0:6              Constant:
+0:6                2 (const int)
 0:10  Function Definition: @main( ( temp 4-component vector of float)
 0:10    Function Parameters: 
 0:?     Sequence
 0:11      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            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:11        move second child to first child ( temp structure{ temp sampler smpl,  temp texture2D tex,  temp float f})
+0:11          'tex' ( 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:12      Branch: Return with expression
 0:12        Function Call: lookUp(struct-FxaaTex-p1-t21-f11; ( temp 4-component vector of float)
-0:?           'tex.smpl' ( temp sampler)
-0:?           'tex.tex' ( temp texture2D)
-0:?           'tex.f' ( temp float)
+0:12          'tex' ( temp structure{ temp sampler smpl,  temp texture2D tex,  temp float f})
 0:10  Function Definition: main( ( temp void)
 0:10    Function Parameters: 
 0:?     Sequence
@@ -129,112 +107,89 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80002
-// Id's are bound by 70
+// Generated by (magic number): 80006
+// Id's are bound by 59
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Vertex 4  "main" 68
+                              EntryPoint Vertex 4  "main" 57
                               Source HLSL 500
                               Name 4  "main"
-                              Name 17  "lookUp(struct-FxaaTex-p1-t21-f11;"
-                              Name 14  "tex.smpl"
-                              Name 15  "tex.tex"
-                              Name 16  "tex.f"
-                              Name 20  "@main("
-                              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
+                              Name 9  "FxaaTex"
+                              MemberName 9(FxaaTex) 0  "smpl"
+                              MemberName 9(FxaaTex) 1  "tex"
+                              MemberName 9(FxaaTex) 2  "f"
+                              Name 14  "lookUp(struct-FxaaTex-p1-t21-f11;"
+                              Name 13  "tex"
+                              Name 17  "@main("
+                              Name 42  "tex"
+                              Name 44  "g_tInputTexture_sampler"
+                              Name 47  "g_tInputTexture"
+                              Name 51  "param"
+                              Name 57  "@entryPointOutput"
+                              Decorate 44(g_tInputTexture_sampler) DescriptorSet 0
+                              Decorate 47(g_tInputTexture) DescriptorSet 0
+                              Decorate 57(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeSampler
-               7:             TypePointer Function 6
-               8:             TypeFloat 32
-               9:             TypeImage 8(float) 2D sampled format:Unknown
-              10:             TypePointer Function 9
-              11:             TypePointer Function 8(float)
-              12:             TypeVector 8(float) 4
-              13:             TypeFunction 12(fvec4) 7(ptr) 10(ptr) 11(ptr)
-              19:             TypeFunction 12(fvec4)
-              24:             TypeSampledImage 9
-              28:             TypeVector 8(float) 2
-              30:    8(float) Constant 0
-     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
+               7:             TypeFloat 32
+               8:             TypeImage 7(float) 2D sampled format:Unknown
+      9(FxaaTex):             TypeStruct 6 8 7(float)
+              10:             TypePointer Function 9(FxaaTex)
+              11:             TypeVector 7(float) 4
+              12:             TypeFunction 11(fvec4) 10(ptr)
+              16:             TypeFunction 11(fvec4)
+              19:             TypeInt 32 1
+              20:     19(int) Constant 1
+              21:             TypePointer Function 8
+              24:     19(int) Constant 0
+              25:             TypePointer Function 6
+              28:             TypeSampledImage 8
+              30:     19(int) Constant 2
+              31:             TypePointer Function 7(float)
+              36:             TypeVector 7(float) 2
+              38:    7(float) Constant 0
+              43:             TypePointer UniformConstant 6
+44(g_tInputTexture_sampler):     43(ptr) Variable UniformConstant
+              46:             TypePointer UniformConstant 8
+47(g_tInputTexture):     46(ptr) Variable UniformConstant
+              49:    7(float) Constant 1056964608
+              56:             TypePointer Output 11(fvec4)
+57(@entryPointOutput):     56(ptr) Variable Output
          4(main):           2 Function None 3
                5:             Label
-              69:   12(fvec4) FunctionCall 20(@main()
-                              Store 68(@entryPointOutput) 69
+              58:   11(fvec4) FunctionCall 17(@main()
+                              Store 57(@entryPointOutput) 58
                               Return
                               FunctionEnd
-17(lookUp(struct-FxaaTex-p1-t21-f11;):   12(fvec4) Function None 13
-    14(tex.smpl):      7(ptr) FunctionParameter
-     15(tex.tex):     10(ptr) FunctionParameter
-       16(tex.f):     11(ptr) FunctionParameter
-              18:             Label
-              22:           9 Load 15(tex.tex)
-              23:           6 Load 14(tex.smpl)
-              25:          24 SampledImage 22 23
-              26:    8(float) Load 16(tex.f)
-              27:    8(float) Load 16(tex.f)
-              29:   28(fvec2) CompositeConstruct 26 27
-              31:   12(fvec4) ImageSampleExplicitLod 25 29 Lod 30
-                              ReturnValue 31
+14(lookUp(struct-FxaaTex-p1-t21-f11;):   11(fvec4) Function None 12
+         13(tex):     10(ptr) FunctionParameter
+              15:             Label
+              22:     21(ptr) AccessChain 13(tex) 20
+              23:           8 Load 22
+              26:     25(ptr) AccessChain 13(tex) 24
+              27:           6 Load 26
+              29:          28 SampledImage 23 27
+              32:     31(ptr) AccessChain 13(tex) 30
+              33:    7(float) Load 32
+              34:     31(ptr) AccessChain 13(tex) 30
+              35:    7(float) Load 34
+              37:   36(fvec2) CompositeConstruct 33 35
+              39:   11(fvec4) ImageSampleExplicitLod 29 37 Lod 38
+                              ReturnValue 39
                               FunctionEnd
-      20(@main():   12(fvec4) Function None 19
-              21:             Label
- 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
+      17(@main():   11(fvec4) Function None 16
+              18:             Label
+         42(tex):     10(ptr) Variable Function
+       51(param):     10(ptr) Variable Function
+              45:           6 Load 44(g_tInputTexture_sampler)
+              48:           8 Load 47(g_tInputTexture)
+              50:  9(FxaaTex) CompositeConstruct 45 48 49
+                              Store 42(tex) 50
+              52:  9(FxaaTex) Load 42(tex)
+                              Store 51(param) 52
+              53:   11(fvec4) FunctionCall 14(lookUp(struct-FxaaTex-p1-t21-f11;) 51(param)
+                              ReturnValue 53
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.flattenSubset.frag.out b/Test/baseResults/hlsl.flattenSubset.frag.out
index f6d867f..8562a69 100755
--- a/Test/baseResults/hlsl.flattenSubset.frag.out
+++ b/Test/baseResults/hlsl.flattenSubset.frag.out
@@ -8,32 +8,34 @@
 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        ss: direct index for structure ( temp sampler)
+0:33          s0: direct index for structure ( temp structure{ temp int x,  temp int y,  temp sampler ss})
+0:33            's1' ( temp structure{ temp float b,  temp sampler samplerState,  temp structure{ temp int x,  temp int y,  temp sampler ss} s0,  temp int a})
+0:33            Constant:
+0:33              2 (const int)
+0:33          Constant:
+0:33            2 (const int)
 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:34      move second child to first child ( temp structure{ temp float b,  temp sampler samplerState,  temp structure{ temp int x,  temp int y,  temp sampler ss} s0,  temp int a})
+0:34        resources: direct index for structure ( temp structure{ temp float b,  temp sampler samplerState,  temp structure{ temp int x,  temp int y,  temp sampler ss} s0,  temp int a})
+0:34          's2' ( temp structure{ temp int a1,  temp int a2,  temp int a3,  temp int a4,  temp int a5,  temp structure{ temp float b,  temp sampler samplerState,  temp structure{ temp int x,  temp int y,  temp sampler ss} s0,  temp int a} resources})
+0:34          Constant:
+0:34            5 (const int)
+0:34        's1' ( temp structure{ temp float b,  temp sampler samplerState,  temp structure{ temp int x,  temp int y,  temp sampler ss} s0,  temp int a})
 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            ss: direct index for structure ( temp sampler)
+0:35              s0: direct index for structure ( temp structure{ temp int x,  temp int y,  temp sampler ss})
+0:35                resources: direct index for structure ( temp structure{ temp float b,  temp sampler samplerState,  temp structure{ temp int x,  temp int y,  temp sampler ss} s0,  temp int a})
+0:35                  's2' ( temp structure{ temp int a1,  temp int a2,  temp int a3,  temp int a4,  temp int a5,  temp structure{ temp float b,  temp sampler samplerState,  temp structure{ temp int x,  temp int y,  temp sampler ss} s0,  temp int a} resources})
+0:35                  Constant:
+0:35                    5 (const int)
+0:35                Constant:
+0:35                  2 (const int)
+0:35              Constant:
+0:35                2 (const int)
 0:35          Constant:
 0:35            0.500000
 0:35            0.500000
@@ -65,32 +67,34 @@
 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        ss: direct index for structure ( temp sampler)
+0:33          s0: direct index for structure ( temp structure{ temp int x,  temp int y,  temp sampler ss})
+0:33            's1' ( temp structure{ temp float b,  temp sampler samplerState,  temp structure{ temp int x,  temp int y,  temp sampler ss} s0,  temp int a})
+0:33            Constant:
+0:33              2 (const int)
+0:33          Constant:
+0:33            2 (const int)
 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:34      move second child to first child ( temp structure{ temp float b,  temp sampler samplerState,  temp structure{ temp int x,  temp int y,  temp sampler ss} s0,  temp int a})
+0:34        resources: direct index for structure ( temp structure{ temp float b,  temp sampler samplerState,  temp structure{ temp int x,  temp int y,  temp sampler ss} s0,  temp int a})
+0:34          's2' ( temp structure{ temp int a1,  temp int a2,  temp int a3,  temp int a4,  temp int a5,  temp structure{ temp float b,  temp sampler samplerState,  temp structure{ temp int x,  temp int y,  temp sampler ss} s0,  temp int a} resources})
+0:34          Constant:
+0:34            5 (const int)
+0:34        's1' ( temp structure{ temp float b,  temp sampler samplerState,  temp structure{ temp int x,  temp int y,  temp sampler ss} s0,  temp int a})
 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            ss: direct index for structure ( temp sampler)
+0:35              s0: direct index for structure ( temp structure{ temp int x,  temp int y,  temp sampler ss})
+0:35                resources: direct index for structure ( temp structure{ temp float b,  temp sampler samplerState,  temp structure{ temp int x,  temp int y,  temp sampler ss} s0,  temp int a})
+0:35                  's2' ( temp structure{ temp int a1,  temp int a2,  temp int a3,  temp int a4,  temp int a5,  temp structure{ temp float b,  temp sampler samplerState,  temp structure{ temp int x,  temp int y,  temp sampler ss} s0,  temp int a} resources})
+0:35                  Constant:
+0:35                    5 (const int)
+0:35                Constant:
+0:35                  2 (const int)
+0:35              Constant:
+0:35                2 (const int)
 0:35          Constant:
 0:35            0.500000
 0:35            0.500000
@@ -111,40 +115,46 @@
 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
+// Generated by (magic number): 80006
+// Id's are bound by 54
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 54 57
+                              EntryPoint Fragment 4  "main" 47 50
                               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
+                              Name 15  "S0"
+                              MemberName 15(S0) 0  "x"
+                              MemberName 15(S0) 1  "y"
+                              MemberName 15(S0) 2  "ss"
+                              Name 16  "S1"
+                              MemberName 16(S1) 0  "b"
+                              MemberName 16(S1) 1  "samplerState"
+                              MemberName 16(S1) 2  "s0"
+                              MemberName 16(S1) 3  "a"
+                              Name 18  "s1"
+                              Name 21  "samp"
+                              Name 25  "S2"
+                              MemberName 25(S2) 0  "a1"
+                              MemberName 25(S2) 1  "a2"
+                              MemberName 25(S2) 2  "a3"
+                              MemberName 25(S2) 3  "a4"
+                              MemberName 25(S2) 4  "a5"
+                              MemberName 25(S2) 5  "resources"
+                              Name 27  "s2"
+                              Name 33  "tex"
+                              Name 45  "vpos"
+                              Name 47  "vpos"
+                              Name 50  "@entryPointOutput"
+                              Name 51  "param"
+                              Decorate 21(samp) DescriptorSet 0
+                              Decorate 33(tex) DescriptorSet 0
+                              Decorate 47(vpos) Location 0
+                              Decorate 50(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -152,67 +162,55 @@
                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
+              14:             TypeInt 32 1
+          15(S0):             TypeStruct 14(int) 14(int) 13
+          16(S1):             TypeStruct 6(float) 13 15(S0) 14(int)
+              17:             TypePointer Function 16(S1)
+              19:     14(int) Constant 2
+              20:             TypePointer UniformConstant 13
+        21(samp):     20(ptr) Variable UniformConstant
+              23:             TypePointer Function 13
+          25(S2):             TypeStruct 14(int) 14(int) 14(int) 14(int) 14(int) 16(S1)
+              26:             TypePointer Function 25(S2)
+              28:     14(int) Constant 5
+              31:             TypeImage 6(float) 2D sampled format:Unknown
+              32:             TypePointer UniformConstant 31
+         33(tex):     32(ptr) Variable UniformConstant
+              37:             TypeSampledImage 31
+              39:             TypeVector 6(float) 2
+              40:    6(float) Constant 1056964608
+              41:   39(fvec2) ConstantComposite 40 40
+              46:             TypePointer Input 7(fvec4)
+        47(vpos):     46(ptr) Variable Input
+              49:             TypePointer Output 7(fvec4)
+50(@entryPointOutput):     49(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
+        45(vpos):      8(ptr) Variable Function
+       51(param):      8(ptr) Variable Function
+              48:    7(fvec4) Load 47(vpos)
+                              Store 45(vpos) 48
+              52:    7(fvec4) Load 45(vpos)
+                              Store 51(param) 52
+              53:    7(fvec4) FunctionCall 11(@main(vf4;) 51(param)
+                              Store 50(@entryPointOutput) 53
                               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
+          18(s1):     17(ptr) Variable Function
+          27(s2):     26(ptr) Variable Function
+              22:          13 Load 21(samp)
+              24:     23(ptr) AccessChain 18(s1) 19 19
+                              Store 24 22
+              29:      16(S1) Load 18(s1)
+              30:     17(ptr) AccessChain 27(s2) 28
+                              Store 30 29
+              34:          31 Load 33(tex)
+              35:     23(ptr) AccessChain 27(s2) 28 19 19
+              36:          13 Load 35
+              38:          37 SampledImage 34 36
+              42:    7(fvec4) ImageSampleImplicitLod 38 41
+                              ReturnValue 42
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.flattenSubset2.frag.out b/Test/baseResults/hlsl.flattenSubset2.frag.out
index 4983834..9a01405 100755
--- a/Test/baseResults/hlsl.flattenSubset2.frag.out
+++ b/Test/baseResults/hlsl.flattenSubset2.frag.out
@@ -7,33 +7,48 @@
 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:13      move second child to first child ( temp structure{ temp float y,  temp texture2D texNested})
+0:13        n: direct index for structure ( temp structure{ temp float y,  temp texture2D texNested})
+0:13          'a1' ( temp structure{ temp structure{ temp float y,  temp texture2D texNested} n,  temp float x})
+0:13          Constant:
+0:13            0 (const int)
+0:13        n: direct index for structure ( temp structure{ temp float y,  temp texture2D texNested})
+0:13          'a2' ( temp structure{ temp structure{ temp float y,  temp texture2D texNested} n,  temp float x})
+0:13          Constant:
+0:13            0 (const int)
+0:14      move second child to first child ( temp structure{ temp float y,  temp texture2D texNested})
+0:14        n: direct index for structure ( temp structure{ temp float y,  temp texture2D texNested})
+0:14          'b' ( temp structure{ temp structure{ temp float y,  temp texture2D texNested} n,  temp texture2D tex})
+0:14          Constant:
+0:14            0 (const int)
+0:14        n: direct index for structure ( temp structure{ temp float y,  temp texture2D texNested})
+0:14          'a1' ( temp structure{ temp structure{ temp float y,  temp texture2D texNested} n,  temp float x})
+0:14          Constant:
+0:14            0 (const int)
 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:17        move second child to first child ( temp structure{ temp float y,  temp texture2D texNested})
+0:17          'n' ( temp structure{ temp float y,  temp texture2D texNested})
+0:17          n: direct index for structure ( temp structure{ temp float y,  temp texture2D texNested})
+0:17            'b' ( temp structure{ temp structure{ temp float y,  temp texture2D texNested} n,  temp texture2D tex})
+0:17            Constant:
+0:17              0 (const int)
 0:20      move second child to first child ( temp texture2D)
-0:?         'a2.n.texNested' ( temp texture2D)
+0:20        texNested: direct index for structure ( temp texture2D)
+0:20          n: direct index for structure ( temp structure{ temp float y,  temp texture2D texNested})
+0:20            'a2' ( temp structure{ temp structure{ temp float y,  temp texture2D texNested} n,  temp float x})
+0:20            Constant:
+0:20              0 (const int)
+0:20          Constant:
+0:20            1 (const int)
 0:20        'someTex' ( uniform texture2D)
 0:21      move second child to first child ( temp float)
-0:?         'a1.n.y' ( temp float)
+0:21        y: direct index for structure ( temp float)
+0:21          n: direct index for structure ( temp structure{ temp float y,  temp texture2D texNested})
+0:21            'a1' ( temp structure{ temp structure{ temp float y,  temp texture2D texNested} n,  temp float x})
+0:21            Constant:
+0:21              0 (const int)
+0:21          Constant:
+0:21            0 (const int)
 0:21        Constant:
 0:21          1.000000
 0:23      Branch: Return with expression
@@ -68,33 +83,48 @@
 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:13      move second child to first child ( temp structure{ temp float y,  temp texture2D texNested})
+0:13        n: direct index for structure ( temp structure{ temp float y,  temp texture2D texNested})
+0:13          'a1' ( temp structure{ temp structure{ temp float y,  temp texture2D texNested} n,  temp float x})
+0:13          Constant:
+0:13            0 (const int)
+0:13        n: direct index for structure ( temp structure{ temp float y,  temp texture2D texNested})
+0:13          'a2' ( temp structure{ temp structure{ temp float y,  temp texture2D texNested} n,  temp float x})
+0:13          Constant:
+0:13            0 (const int)
+0:14      move second child to first child ( temp structure{ temp float y,  temp texture2D texNested})
+0:14        n: direct index for structure ( temp structure{ temp float y,  temp texture2D texNested})
+0:14          'b' ( temp structure{ temp structure{ temp float y,  temp texture2D texNested} n,  temp texture2D tex})
+0:14          Constant:
+0:14            0 (const int)
+0:14        n: direct index for structure ( temp structure{ temp float y,  temp texture2D texNested})
+0:14          'a1' ( temp structure{ temp structure{ temp float y,  temp texture2D texNested} n,  temp float x})
+0:14          Constant:
+0:14            0 (const int)
 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:17        move second child to first child ( temp structure{ temp float y,  temp texture2D texNested})
+0:17          'n' ( temp structure{ temp float y,  temp texture2D texNested})
+0:17          n: direct index for structure ( temp structure{ temp float y,  temp texture2D texNested})
+0:17            'b' ( temp structure{ temp structure{ temp float y,  temp texture2D texNested} n,  temp texture2D tex})
+0:17            Constant:
+0:17              0 (const int)
 0:20      move second child to first child ( temp texture2D)
-0:?         'a2.n.texNested' ( temp texture2D)
+0:20        texNested: direct index for structure ( temp texture2D)
+0:20          n: direct index for structure ( temp structure{ temp float y,  temp texture2D texNested})
+0:20            'a2' ( temp structure{ temp structure{ temp float y,  temp texture2D texNested} n,  temp float x})
+0:20            Constant:
+0:20              0 (const int)
+0:20          Constant:
+0:20            1 (const int)
 0:20        'someTex' ( uniform texture2D)
 0:21      move second child to first child ( temp float)
-0:?         'a1.n.y' ( temp float)
+0:21        y: direct index for structure ( temp float)
+0:21          n: direct index for structure ( temp structure{ temp float y,  temp texture2D texNested})
+0:21            'a1' ( temp structure{ temp structure{ temp float y,  temp texture2D texNested} n,  temp float x})
+0:21            Constant:
+0:21              0 (const int)
+0:21          Constant:
+0:21            0 (const int)
 0:21        Constant:
 0:21          1.000000
 0:23      Branch: Return with expression
@@ -119,89 +149,100 @@
 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
+// Generated by (magic number): 80006
+// Id's are bound by 56
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 40 43
+                              EntryPoint Fragment 4  "main" 49 52
                               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
+                              Name 14  "Nested"
+                              MemberName 14(Nested) 0  "y"
+                              MemberName 14(Nested) 1  "texNested"
+                              Name 15  "A"
+                              MemberName 15(A) 0  "n"
+                              MemberName 15(A) 1  "x"
+                              Name 17  "a1"
+                              Name 20  "a2"
+                              Name 25  "B"
+                              MemberName 25(B) 0  "n"
+                              MemberName 25(B) 1  "tex"
+                              Name 27  "b"
+                              Name 31  "n"
+                              Name 36  "someTex"
+                              Name 47  "vpos"
+                              Name 49  "vpos"
+                              Name 52  "@entryPointOutput"
+                              Name 53  "param"
+                              Decorate 36(someTex) DescriptorSet 0
+                              Decorate 49(vpos) Location 0
+                              Decorate 52(@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
+              13:             TypeImage 6(float) 2D sampled format:Unknown
+      14(Nested):             TypeStruct 6(float) 13
+           15(A):             TypeStruct 14(Nested) 6(float)
+              16:             TypePointer Function 15(A)
+              18:             TypeInt 32 1
+              19:     18(int) Constant 0
+              21:             TypePointer Function 14(Nested)
+           25(B):             TypeStruct 14(Nested) 13
+              26:             TypePointer Function 25(B)
+              34:     18(int) Constant 1
+              35:             TypePointer UniformConstant 13
+     36(someTex):     35(ptr) Variable UniformConstant
+              38:             TypePointer Function 13
+              40:    6(float) Constant 1065353216
+              41:             TypePointer Function 6(float)
+              43:    6(float) Constant 0
+              44:    7(fvec4) ConstantComposite 43 43 43 43
+              48:             TypePointer Input 7(fvec4)
+        49(vpos):     48(ptr) Variable Input
+              51:             TypePointer Output 7(fvec4)
+52(@entryPointOutput):     51(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
+        47(vpos):      8(ptr) Variable Function
+       53(param):      8(ptr) Variable Function
+              50:    7(fvec4) Load 49(vpos)
+                              Store 47(vpos) 50
+              54:    7(fvec4) Load 47(vpos)
+                              Store 53(param) 54
+              55:    7(fvec4) FunctionCall 11(@main(vf4;) 53(param)
+                              Store 52(@entryPointOutput) 55
                               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
+          17(a1):     16(ptr) Variable Function
+          20(a2):     16(ptr) Variable Function
+           27(b):     26(ptr) Variable Function
+           31(n):     21(ptr) Variable Function
+              22:     21(ptr) AccessChain 20(a2) 19
+              23:  14(Nested) Load 22
+              24:     21(ptr) AccessChain 17(a1) 19
+                              Store 24 23
+              28:     21(ptr) AccessChain 17(a1) 19
+              29:  14(Nested) Load 28
+              30:     21(ptr) AccessChain 27(b) 19
+                              Store 30 29
+              32:     21(ptr) AccessChain 27(b) 19
+              33:  14(Nested) Load 32
+                              Store 31(n) 33
+              37:          13 Load 36(someTex)
+              39:     38(ptr) AccessChain 20(a2) 19 34
+                              Store 39 37
+              42:     41(ptr) AccessChain 17(a1) 19 19
+                              Store 42 40
+                              ReturnValue 44
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.float1.frag.out b/Test/baseResults/hlsl.float1.frag.out
index ed2b6c9..ff1c485 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): 80002
+// Generated by (magic number): 80006
 // 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 84213ce..d9d6ede 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): 80002
+// Generated by (magic number): 80006
 // 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 c9efc33..e588ced 100755
--- a/Test/baseResults/hlsl.forLoop.frag.out
+++ b/Test/baseResults/hlsl.forLoop.frag.out
@@ -17,7 +17,7 @@
 0:4          No loop condition
 0:4          No loop body
 0:?       Sequence
-0:5        Loop with condition tested first
+0:5        Loop with condition tested first: Unroll
 0:5          Loop Condition
 0:5          any ( temp bool)
 0:5            NotEqual ( temp 4-component vector of bool)
@@ -220,7 +220,7 @@
 0:4          No loop condition
 0:4          No loop body
 0:?       Sequence
-0:5        Loop with condition tested first
+0:5        Loop with condition tested first: Unroll
 0:5          Loop Condition
 0:5          any ( temp bool)
 0:5            NotEqual ( temp 4-component vector of bool)
@@ -402,7 +402,7 @@
 0:?     'input' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // 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 a010b6e..444c07c 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): 80002
+// Generated by (magic number): 80006
 // 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 c2e25ce..c8cd86f 100644
--- a/Test/baseResults/hlsl.gather.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.gather.array.dx10.frag.out
@@ -1,6 +1,7 @@
 hlsl.gather.array.dx10.frag
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:24  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:24    Function Parameters: 
@@ -133,6 +134,7 @@
 
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:24  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:24    Function Parameters: 
@@ -260,7 +262,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 124
 
                               Capability Shader
@@ -270,6 +272,7 @@
                               MemoryModel Logical GLSL450
                               EntryPoint Fragment 4  "main" 107 111
                               ExecutionMode 4 OriginUpperLeft
+                              ExecutionMode 4 DepthReplacing
                               Source HLSL 500
                               Name 4  "main"
                               Name 8  "PS_OUTPUT"
diff --git a/Test/baseResults/hlsl.gather.basic.dx10.frag.out b/Test/baseResults/hlsl.gather.basic.dx10.frag.out
index a41c03a..af19d6b 100644
--- a/Test/baseResults/hlsl.gather.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.gather.basic.dx10.frag.out
@@ -1,6 +1,7 @@
 hlsl.gather.basic.dx10.frag
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:29  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:29    Function Parameters: 
@@ -131,6 +132,7 @@
 
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:29  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:29    Function Parameters: 
@@ -256,7 +258,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 135
 
                               Capability Shader
@@ -265,6 +267,7 @@
                               MemoryModel Logical GLSL450
                               EntryPoint Fragment 4  "main" 108 112
                               ExecutionMode 4 OriginUpperLeft
+                              ExecutionMode 4 DepthReplacing
                               Source HLSL 500
                               Name 4  "main"
                               Name 8  "PS_OUTPUT"
diff --git a/Test/baseResults/hlsl.gather.basic.dx10.vert.out b/Test/baseResults/hlsl.gather.basic.dx10.vert.out
index 432da7b..f3f1bf0 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): 80002
+// Generated by (magic number): 80006
 // 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 77410b0..828a9cb 100644
--- a/Test/baseResults/hlsl.gather.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.gather.offset.dx10.frag.out
@@ -1,6 +1,7 @@
 hlsl.gather.offset.dx10.frag
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:28  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:28    Function Parameters: 
@@ -106,6 +107,7 @@
 
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:28  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:28    Function Parameters: 
@@ -206,7 +208,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 114
 
                               Capability Shader
@@ -215,6 +217,7 @@
                               MemoryModel Logical GLSL450
                               EntryPoint Fragment 4  "main" 79 83
                               ExecutionMode 4 OriginUpperLeft
+                              ExecutionMode 4 DepthReplacing
                               Source HLSL 500
                               Name 4  "main"
                               Name 8  "PS_OUTPUT"
diff --git a/Test/baseResults/hlsl.gather.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.gather.offsetarray.dx10.frag.out
index a6e50ff..140a5b1 100644
--- a/Test/baseResults/hlsl.gather.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.gather.offsetarray.dx10.frag.out
@@ -1,6 +1,7 @@
 hlsl.gather.offsetarray.dx10.frag
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:20  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:20    Function Parameters: 
@@ -103,6 +104,7 @@
 
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:20  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:20    Function Parameters: 
@@ -200,7 +202,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 97
 
                               Capability Shader
@@ -209,6 +211,7 @@
                               MemoryModel Logical GLSL450
                               EntryPoint Fragment 4  "main" 80 84
                               ExecutionMode 4 OriginUpperLeft
+                              ExecutionMode 4 DepthReplacing
                               Source HLSL 500
                               Name 4  "main"
                               Name 8  "PS_OUTPUT"
diff --git a/Test/baseResults/hlsl.gatherRGBA.array.dx10.frag.out b/Test/baseResults/hlsl.gatherRGBA.array.dx10.frag.out
index 2191553..0ad93d0 100644
--- a/Test/baseResults/hlsl.gatherRGBA.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.gatherRGBA.array.dx10.frag.out
@@ -1,6 +1,7 @@
 hlsl.gatherRGBA.array.dx10.frag
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:28  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:28    Function Parameters: 
@@ -377,6 +378,7 @@
 
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:28  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:28    Function Parameters: 
@@ -748,7 +750,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 255
 
                               Capability Shader
@@ -758,6 +760,7 @@
                               MemoryModel Logical GLSL450
                               EntryPoint Fragment 4  "main" 238 242
                               ExecutionMode 4 OriginUpperLeft
+                              ExecutionMode 4 DepthReplacing
                               Source HLSL 500
                               Name 4  "main"
                               Name 8  "PS_OUTPUT"
diff --git a/Test/baseResults/hlsl.gatherRGBA.basic.dx10.frag.out b/Test/baseResults/hlsl.gatherRGBA.basic.dx10.frag.out
index 6dbdfaa..0513e06 100644
--- a/Test/baseResults/hlsl.gatherRGBA.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.gatherRGBA.basic.dx10.frag.out
@@ -1,6 +1,7 @@
 hlsl.gatherRGBA.basic.dx10.frag
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:34  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:34    Function Parameters: 
@@ -381,6 +382,7 @@
 
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:34  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:34    Function Parameters: 
@@ -756,7 +758,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 265
 
                               Capability Shader
@@ -765,6 +767,7 @@
                               MemoryModel Logical GLSL450
                               EntryPoint Fragment 4  "main" 238 242
                               ExecutionMode 4 OriginUpperLeft
+                              ExecutionMode 4 DepthReplacing
                               Source HLSL 500
                               Name 4  "main"
                               Name 8  "PS_OUTPUT"
diff --git a/Test/baseResults/hlsl.gatherRGBA.offset.dx10.frag.out b/Test/baseResults/hlsl.gatherRGBA.offset.dx10.frag.out
index ddbe283..f23fe87 100644
--- a/Test/baseResults/hlsl.gatherRGBA.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.gatherRGBA.offset.dx10.frag.out
@@ -1,6 +1,7 @@
 hlsl.gatherRGBA.offset.dx10.frag
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:39  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:39    Function Parameters: 
@@ -633,6 +634,7 @@
 
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:39  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:39    Function Parameters: 
@@ -1260,7 +1262,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 399
 
                               Capability Shader
@@ -1270,6 +1272,7 @@
                               MemoryModel Logical GLSL450
                               EntryPoint Fragment 4  "main" 363 367
                               ExecutionMode 4 OriginUpperLeft
+                              ExecutionMode 4 DepthReplacing
                               Source HLSL 500
                               Name 4  "main"
                               Name 8  "PS_OUTPUT"
diff --git a/Test/baseResults/hlsl.gatherRGBA.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.gatherRGBA.offsetarray.dx10.frag.out
index 360f75c..ffc2cdd 100644
--- a/Test/baseResults/hlsl.gatherRGBA.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.gatherRGBA.offsetarray.dx10.frag.out
@@ -1,6 +1,7 @@
 hlsl.gatherRGBA.offsetarray.dx10.frag
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:33  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:33    Function Parameters: 
@@ -629,6 +630,7 @@
 
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:33  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:33    Function Parameters: 
@@ -1252,7 +1254,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 389
 
                               Capability Shader
@@ -1263,6 +1265,7 @@
                               MemoryModel Logical GLSL450
                               EntryPoint Fragment 4  "main" 363 367
                               ExecutionMode 4 OriginUpperLeft
+                              ExecutionMode 4 DepthReplacing
                               Source HLSL 500
                               Name 4  "main"
                               Name 8  "PS_OUTPUT"
diff --git a/Test/baseResults/hlsl.gathercmpRGBA.offset.dx10.frag.out b/Test/baseResults/hlsl.gathercmpRGBA.offset.dx10.frag.out
index 7bfed63..a7710c5 100644
--- a/Test/baseResults/hlsl.gathercmpRGBA.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.gathercmpRGBA.offset.dx10.frag.out
@@ -1,6 +1,7 @@
 hlsl.gathercmpRGBA.offset.dx10.frag
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:38  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:38    Function Parameters: 
@@ -230,6 +231,7 @@
 
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:38  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:38    Function Parameters: 
@@ -454,7 +456,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 164
 
                               Capability Shader
@@ -463,6 +465,7 @@
                               MemoryModel Logical GLSL450
                               EntryPoint Fragment 4  "main" 129 133
                               ExecutionMode 4 OriginUpperLeft
+                              ExecutionMode 4 DepthReplacing
                               Source HLSL 500
                               Name 4  "main"
                               Name 8  "PS_OUTPUT"
diff --git a/Test/baseResults/hlsl.getdimensions.dx10.frag.out b/Test/baseResults/hlsl.getdimensions.dx10.frag.out
index 2fdf4f1..dd789f1 100644
--- a/Test/baseResults/hlsl.getdimensions.dx10.frag.out
+++ b/Test/baseResults/hlsl.getdimensions.dx10.frag.out
@@ -1,6 +1,7 @@
 hlsl.getdimensions.dx10.frag
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:46  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:46    Function Parameters: 
@@ -1161,6 +1162,7 @@
 
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:46  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:46    Function Parameters: 
@@ -2316,7 +2318,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 550
 
                               Capability Shader
@@ -2327,6 +2329,7 @@
                               MemoryModel Logical GLSL450
                               EntryPoint Fragment 4  "main" 540 544
                               ExecutionMode 4 OriginUpperLeft
+                              ExecutionMode 4 DepthReplacing
                               Source HLSL 500
                               Name 4  "main"
                               Name 8  "PS_OUTPUT"
diff --git a/Test/baseResults/hlsl.getdimensions.dx10.vert.out b/Test/baseResults/hlsl.getdimensions.dx10.vert.out
index 8c940fe..4ff0dc2 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): 80002
+// Generated by (magic number): 80006
 // 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 b3d3ce0d..6a5c951 100644
--- a/Test/baseResults/hlsl.getdimensions.rw.dx10.frag.out
+++ b/Test/baseResults/hlsl.getdimensions.rw.dx10.frag.out
@@ -1,6 +1,7 @@
 hlsl.getdimensions.rw.dx10.frag
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:44  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:44    Function Parameters: 
@@ -361,6 +362,7 @@
 
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:44  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:44    Function Parameters: 
@@ -716,7 +718,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 232
 
                               Capability Shader
@@ -727,6 +729,7 @@
                               MemoryModel Logical GLSL450
                               EntryPoint Fragment 4  "main" 216 220
                               ExecutionMode 4 OriginUpperLeft
+                              ExecutionMode 4 DepthReplacing
                               Source HLSL 500
                               Name 4  "main"
                               Name 8  "PS_OUTPUT"
diff --git a/Test/baseResults/hlsl.getsampleposition.dx10.frag.out b/Test/baseResults/hlsl.getsampleposition.dx10.frag.out
index 22d601d..c8cd8a5 100644
--- a/Test/baseResults/hlsl.getsampleposition.dx10.frag.out
+++ b/Test/baseResults/hlsl.getsampleposition.dx10.frag.out
@@ -1,6 +1,7 @@
 hlsl.getsampleposition.dx10.frag
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:13  Function Definition: @main(i1; ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:13    Function Parameters: 
@@ -14,7 +15,7 @@
 0:16              '@sampleCount' ( temp uint)
 0:16              imageQuerySamples ( temp uint)
 0:16                'g_tTex2dmsf4' ( uniform texture2DMS)
-0:16            Test condition and select ( temp 2-component vector of float)
+0:16            Test condition and select ( temp 2-component vector of float): no shortcircuit
 0:16              Condition
 0:16              Compare Equal ( temp bool)
 0:16                '@sampleCount' ( temp uint)
@@ -29,7 +30,7 @@
 0:?                   -0.250000
 0:16                'sample' ( in int)
 0:16              false case
-0:16              Test condition and select ( temp 2-component vector of float)
+0:16              Test condition and select ( temp 2-component vector of float): no shortcircuit
 0:16                Condition
 0:16                Compare Equal ( temp bool)
 0:16                  '@sampleCount' ( temp uint)
@@ -48,7 +49,7 @@
 0:?                     0.375000
 0:16                  'sample' ( in int)
 0:16                false case
-0:16                Test condition and select ( temp 2-component vector of float)
+0:16                Test condition and select ( temp 2-component vector of float): no shortcircuit
 0:16                  Condition
 0:16                  Compare Equal ( temp bool)
 0:16                    '@sampleCount' ( temp uint)
@@ -75,7 +76,7 @@
 0:?                       -0.437500
 0:16                    'sample' ( in int)
 0:16                  false case
-0:16                  Test condition and select ( temp 2-component vector of float)
+0:16                  Test condition and select ( temp 2-component vector of float): no shortcircuit
 0:16                    Condition
 0:16                    Compare Equal ( temp bool)
 0:16                      '@sampleCount' ( temp uint)
@@ -129,7 +130,7 @@
 0:17              '@sampleCount' ( temp uint)
 0:17              imageQuerySamples ( temp uint)
 0:17                'g_tTex2dmsf4a' ( uniform texture2DMSArray)
-0:17            Test condition and select ( temp 2-component vector of float)
+0:17            Test condition and select ( temp 2-component vector of float): no shortcircuit
 0:17              Condition
 0:17              Compare Equal ( temp bool)
 0:17                '@sampleCount' ( temp uint)
@@ -144,7 +145,7 @@
 0:?                   -0.250000
 0:17                'sample' ( in int)
 0:17              false case
-0:17              Test condition and select ( temp 2-component vector of float)
+0:17              Test condition and select ( temp 2-component vector of float): no shortcircuit
 0:17                Condition
 0:17                Compare Equal ( temp bool)
 0:17                  '@sampleCount' ( temp uint)
@@ -163,7 +164,7 @@
 0:?                     0.375000
 0:17                  'sample' ( in int)
 0:17                false case
-0:17                Test condition and select ( temp 2-component vector of float)
+0:17                Test condition and select ( temp 2-component vector of float): no shortcircuit
 0:17                  Condition
 0:17                  Compare Equal ( temp bool)
 0:17                    '@sampleCount' ( temp uint)
@@ -190,7 +191,7 @@
 0:?                       -0.437500
 0:17                    'sample' ( in int)
 0:17                  false case
-0:17                  Test condition and select ( temp 2-component vector of float)
+0:17                  Test condition and select ( temp 2-component vector of float): no shortcircuit
 0:17                    Condition
 0:17                    Compare Equal ( temp bool)
 0:17                      '@sampleCount' ( temp uint)
@@ -292,6 +293,7 @@
 
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:13  Function Definition: @main(i1; ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:13    Function Parameters: 
@@ -305,7 +307,7 @@
 0:16              '@sampleCount' ( temp uint)
 0:16              imageQuerySamples ( temp uint)
 0:16                'g_tTex2dmsf4' ( uniform texture2DMS)
-0:16            Test condition and select ( temp 2-component vector of float)
+0:16            Test condition and select ( temp 2-component vector of float): no shortcircuit
 0:16              Condition
 0:16              Compare Equal ( temp bool)
 0:16                '@sampleCount' ( temp uint)
@@ -320,7 +322,7 @@
 0:?                   -0.250000
 0:16                'sample' ( in int)
 0:16              false case
-0:16              Test condition and select ( temp 2-component vector of float)
+0:16              Test condition and select ( temp 2-component vector of float): no shortcircuit
 0:16                Condition
 0:16                Compare Equal ( temp bool)
 0:16                  '@sampleCount' ( temp uint)
@@ -339,7 +341,7 @@
 0:?                     0.375000
 0:16                  'sample' ( in int)
 0:16                false case
-0:16                Test condition and select ( temp 2-component vector of float)
+0:16                Test condition and select ( temp 2-component vector of float): no shortcircuit
 0:16                  Condition
 0:16                  Compare Equal ( temp bool)
 0:16                    '@sampleCount' ( temp uint)
@@ -366,7 +368,7 @@
 0:?                       -0.437500
 0:16                    'sample' ( in int)
 0:16                  false case
-0:16                  Test condition and select ( temp 2-component vector of float)
+0:16                  Test condition and select ( temp 2-component vector of float): no shortcircuit
 0:16                    Condition
 0:16                    Compare Equal ( temp bool)
 0:16                      '@sampleCount' ( temp uint)
@@ -420,7 +422,7 @@
 0:17              '@sampleCount' ( temp uint)
 0:17              imageQuerySamples ( temp uint)
 0:17                'g_tTex2dmsf4a' ( uniform texture2DMSArray)
-0:17            Test condition and select ( temp 2-component vector of float)
+0:17            Test condition and select ( temp 2-component vector of float): no shortcircuit
 0:17              Condition
 0:17              Compare Equal ( temp bool)
 0:17                '@sampleCount' ( temp uint)
@@ -435,7 +437,7 @@
 0:?                   -0.250000
 0:17                'sample' ( in int)
 0:17              false case
-0:17              Test condition and select ( temp 2-component vector of float)
+0:17              Test condition and select ( temp 2-component vector of float): no shortcircuit
 0:17                Condition
 0:17                Compare Equal ( temp bool)
 0:17                  '@sampleCount' ( temp uint)
@@ -454,7 +456,7 @@
 0:?                     0.375000
 0:17                  'sample' ( in int)
 0:17                false case
-0:17                Test condition and select ( temp 2-component vector of float)
+0:17                Test condition and select ( temp 2-component vector of float): no shortcircuit
 0:17                  Condition
 0:17                  Compare Equal ( temp bool)
 0:17                    '@sampleCount' ( temp uint)
@@ -481,7 +483,7 @@
 0:?                       -0.437500
 0:17                    'sample' ( in int)
 0:17                  false case
-0:17                  Test condition and select ( temp 2-component vector of float)
+0:17                  Test condition and select ( temp 2-component vector of float): no shortcircuit
 0:17                    Condition
 0:17                    Compare Equal ( temp bool)
 0:17                      '@sampleCount' ( temp uint)
@@ -578,15 +580,16 @@
 0:?     'sample' (layout( location=0) flat in int)
 
 // Module Version 10000
-// Generated by (magic number): 80002
-// Id's are bound by 221
+// Generated by (magic number): 80006
+// Id's are bound by 198
 
                               Capability Shader
                               Capability ImageQuery
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 204 211 215
+                              EntryPoint Fragment 4  "main" 181 188 192
                               ExecutionMode 4 OriginUpperLeft
+                              ExecutionMode 4 DepthReplacing
                               Source HLSL 500
                               Name 4  "main"
                               Name 10  "PS_OUTPUT"
@@ -597,33 +600,33 @@
                               Name 17  "r00"
                               Name 20  "@sampleCount"
                               Name 23  "g_tTex2dmsf4"
-                              Name 42  "indexable"
-                              Name 65  "indexable"
-                              Name 96  "indexable"
-                              Name 129  "indexable"
-                              Name 138  "r01"
-                              Name 139  "@sampleCount"
-                              Name 142  "g_tTex2dmsf4a"
-                              Name 151  "indexable"
-                              Name 161  "indexable"
-                              Name 171  "indexable"
-                              Name 181  "indexable"
-                              Name 190  "psout"
-                              Name 202  "sample"
-                              Name 204  "sample"
-                              Name 206  "flattenTemp"
-                              Name 207  "param"
-                              Name 211  "@entryPointOutput.Color"
-                              Name 215  "@entryPointOutput.Depth"
-                              Name 220  "g_sSamp"
+                              Name 39  "indexable"
+                              Name 58  "indexable"
+                              Name 85  "indexable"
+                              Name 114  "indexable"
+                              Name 127  "r01"
+                              Name 128  "@sampleCount"
+                              Name 131  "g_tTex2dmsf4a"
+                              Name 137  "indexable"
+                              Name 143  "indexable"
+                              Name 149  "indexable"
+                              Name 155  "indexable"
+                              Name 167  "psout"
+                              Name 179  "sample"
+                              Name 181  "sample"
+                              Name 183  "flattenTemp"
+                              Name 184  "param"
+                              Name 188  "@entryPointOutput.Color"
+                              Name 192  "@entryPointOutput.Depth"
+                              Name 197  "g_sSamp"
                               Decorate 23(g_tTex2dmsf4) DescriptorSet 0
-                              Decorate 142(g_tTex2dmsf4a) DescriptorSet 0
-                              Decorate 204(sample) Flat
-                              Decorate 204(sample) Location 0
-                              Decorate 211(@entryPointOutput.Color) Location 0
-                              Decorate 215(@entryPointOutput.Depth) BuiltIn FragDepth
-                              Decorate 220(g_sSamp) DescriptorSet 0
-                              Decorate 220(g_sSamp) Binding 0
+                              Decorate 131(g_tTex2dmsf4a) DescriptorSet 0
+                              Decorate 181(sample) Flat
+                              Decorate 181(sample) Location 0
+                              Decorate 188(@entryPointOutput.Color) Location 0
+                              Decorate 192(@entryPointOutput.Depth) BuiltIn FragDepth
+                              Decorate 197(g_sSamp) DescriptorSet 0
+                              Decorate 197(g_sSamp) Binding 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 1
@@ -639,110 +642,111 @@
               21:             TypeImage 8(float) 2D multi-sampled sampled format:Unknown
               22:             TypePointer UniformConstant 21
 23(g_tTex2dmsf4):     22(ptr) Variable UniformConstant
-              28:      6(int) Constant 2
-              29:             TypeBool
-              33:     18(int) Constant 2
-              34:             TypeArray 15(fvec2) 33
-              35:    8(float) Constant 1048576000
-              36:   15(fvec2) ConstantComposite 35 35
-              37:    8(float) Constant 3196059648
-              38:   15(fvec2) ConstantComposite 37 37
-              39:          34 ConstantComposite 36 38
-              41:             TypePointer Function 34
-              48:      6(int) Constant 4
-              52:     18(int) Constant 4
-              53:             TypeArray 15(fvec2) 52
-              54:    8(float) Constant 3187671040
-              55:    8(float) Constant 3200253952
-              56:   15(fvec2) ConstantComposite 54 55
-              57:    8(float) Constant 1052770304
-              58:   15(fvec2) ConstantComposite 57 54
-              59:    8(float) Constant 1040187392
-              60:   15(fvec2) ConstantComposite 55 59
-              61:   15(fvec2) ConstantComposite 59 57
-              62:          53 ConstantComposite 56 58 60 61
-              64:             TypePointer Function 53
-              71:      6(int) Constant 8
-              75:     18(int) Constant 8
-              76:             TypeArray 15(fvec2) 75
-              77:    8(float) Constant 1031798784
-              78:    8(float) Constant 3191865344
-              79:   15(fvec2) ConstantComposite 77 78
-              80:    8(float) Constant 3179282432
-              81:    8(float) Constant 1044381696
-              82:   15(fvec2) ConstantComposite 80 81
-              83:    8(float) Constant 1050673152
-              84:   15(fvec2) ConstantComposite 83 77
-              85:    8(float) Constant 3198156800
-              86:   15(fvec2) ConstantComposite 78 85
-              87:   15(fvec2) ConstantComposite 85 83
-              88:    8(float) Constant 3202351104
-              89:   15(fvec2) ConstantComposite 88 80
-              90:    8(float) Constant 1054867456
-              91:   15(fvec2) ConstantComposite 81 90
-              92:   15(fvec2) ConstantComposite 90 88
-              93:          76 ConstantComposite 79 82 84 86 87 89 91 92
-              95:             TypePointer Function 76
-             102:      6(int) Constant 16
-             106:     18(int) Constant 16
-             107:             TypeArray 15(fvec2) 106
-             108:   15(fvec2) ConstantComposite 77 77
-             109:   15(fvec2) ConstantComposite 80 78
-             110:   15(fvec2) ConstantComposite 78 59
-             111:   15(fvec2) ConstantComposite 35 80
-             112:   15(fvec2) ConstantComposite 85 54
-             113:   15(fvec2) ConstantComposite 59 83
-             114:   15(fvec2) ConstantComposite 83 81
-             115:   15(fvec2) ConstantComposite 81 85
-             116:   15(fvec2) ConstantComposite 54 57
-             117:    8(float) Constant 0
-             118:   15(fvec2) ConstantComposite 117 88
-             119:   15(fvec2) ConstantComposite 37 55
-             120:   15(fvec2) ConstantComposite 55 35
-             121:    8(float) Constant 3204448256
-             122:   15(fvec2) ConstantComposite 121 117
-             123:   15(fvec2) ConstantComposite 90 37
-             124:   15(fvec2) ConstantComposite 57 90
-             125:   15(fvec2) ConstantComposite 88 121
-             126:         107 ConstantComposite 108 109 110 111 112 113 114 115 116 118 119 120 122 123 124 125
-             128:             TypePointer Function 107
-             133:   15(fvec2) ConstantComposite 117 117
-             140:             TypeImage 8(float) 2D array multi-sampled sampled format:Unknown
-             141:             TypePointer UniformConstant 140
-142(g_tTex2dmsf4a):    141(ptr) Variable UniformConstant
-             189:             TypePointer Function 10(PS_OUTPUT)
-             191:      6(int) Constant 0
-             192:    8(float) Constant 1065353216
-             193:    9(fvec4) ConstantComposite 192 192 192 192
-             194:             TypePointer Function 9(fvec4)
-             196:      6(int) Constant 1
-             197:             TypePointer Function 8(float)
-             203:             TypePointer Input 6(int)
-     204(sample):    203(ptr) Variable Input
-             210:             TypePointer Output 9(fvec4)
-211(@entryPointOutput.Color):    210(ptr) Variable Output
-             214:             TypePointer Output 8(float)
-215(@entryPointOutput.Depth):    214(ptr) Variable Output
-             218:             TypeSampler
-             219:             TypePointer UniformConstant 218
-    220(g_sSamp):    219(ptr) Variable UniformConstant
+              27:      6(int) Constant 2
+              28:             TypeBool
+              30:     18(int) Constant 2
+              31:             TypeArray 15(fvec2) 30
+              32:    8(float) Constant 1048576000
+              33:   15(fvec2) ConstantComposite 32 32
+              34:    8(float) Constant 3196059648
+              35:   15(fvec2) ConstantComposite 34 34
+              36:          31 ConstantComposite 33 35
+              38:             TypePointer Function 31
+              43:      6(int) Constant 4
+              45:     18(int) Constant 4
+              46:             TypeArray 15(fvec2) 45
+              47:    8(float) Constant 3187671040
+              48:    8(float) Constant 3200253952
+              49:   15(fvec2) ConstantComposite 47 48
+              50:    8(float) Constant 1052770304
+              51:   15(fvec2) ConstantComposite 50 47
+              52:    8(float) Constant 1040187392
+              53:   15(fvec2) ConstantComposite 48 52
+              54:   15(fvec2) ConstantComposite 52 50
+              55:          46 ConstantComposite 49 51 53 54
+              57:             TypePointer Function 46
+              62:      6(int) Constant 8
+              64:     18(int) Constant 8
+              65:             TypeArray 15(fvec2) 64
+              66:    8(float) Constant 1031798784
+              67:    8(float) Constant 3191865344
+              68:   15(fvec2) ConstantComposite 66 67
+              69:    8(float) Constant 3179282432
+              70:    8(float) Constant 1044381696
+              71:   15(fvec2) ConstantComposite 69 70
+              72:    8(float) Constant 1050673152
+              73:   15(fvec2) ConstantComposite 72 66
+              74:    8(float) Constant 3198156800
+              75:   15(fvec2) ConstantComposite 67 74
+              76:   15(fvec2) ConstantComposite 74 72
+              77:    8(float) Constant 3202351104
+              78:   15(fvec2) ConstantComposite 77 69
+              79:    8(float) Constant 1054867456
+              80:   15(fvec2) ConstantComposite 70 79
+              81:   15(fvec2) ConstantComposite 79 77
+              82:          65 ConstantComposite 68 71 73 75 76 78 80 81
+              84:             TypePointer Function 65
+              89:      6(int) Constant 16
+              91:     18(int) Constant 16
+              92:             TypeArray 15(fvec2) 91
+              93:   15(fvec2) ConstantComposite 66 66
+              94:   15(fvec2) ConstantComposite 69 67
+              95:   15(fvec2) ConstantComposite 67 52
+              96:   15(fvec2) ConstantComposite 32 69
+              97:   15(fvec2) ConstantComposite 74 47
+              98:   15(fvec2) ConstantComposite 52 72
+              99:   15(fvec2) ConstantComposite 72 70
+             100:   15(fvec2) ConstantComposite 70 74
+             101:   15(fvec2) ConstantComposite 47 50
+             102:    8(float) Constant 0
+             103:   15(fvec2) ConstantComposite 102 77
+             104:   15(fvec2) ConstantComposite 34 48
+             105:   15(fvec2) ConstantComposite 48 32
+             106:    8(float) Constant 3204448256
+             107:   15(fvec2) ConstantComposite 106 102
+             108:   15(fvec2) ConstantComposite 79 34
+             109:   15(fvec2) ConstantComposite 50 79
+             110:   15(fvec2) ConstantComposite 77 106
+             111:          92 ConstantComposite 93 94 95 96 97 98 99 100 101 103 104 105 107 108 109 110
+             113:             TypePointer Function 92
+             117:   15(fvec2) ConstantComposite 102 102
+             118:             TypeVector 28(bool) 2
+             129:             TypeImage 8(float) 2D array multi-sampled sampled format:Unknown
+             130:             TypePointer UniformConstant 129
+131(g_tTex2dmsf4a):    130(ptr) Variable UniformConstant
+             166:             TypePointer Function 10(PS_OUTPUT)
+             168:      6(int) Constant 0
+             169:    8(float) Constant 1065353216
+             170:    9(fvec4) ConstantComposite 169 169 169 169
+             171:             TypePointer Function 9(fvec4)
+             173:      6(int) Constant 1
+             174:             TypePointer Function 8(float)
+             180:             TypePointer Input 6(int)
+     181(sample):    180(ptr) Variable Input
+             187:             TypePointer Output 9(fvec4)
+188(@entryPointOutput.Color):    187(ptr) Variable Output
+             191:             TypePointer Output 8(float)
+192(@entryPointOutput.Depth):    191(ptr) Variable Output
+             195:             TypeSampler
+             196:             TypePointer UniformConstant 195
+    197(g_sSamp):    196(ptr) Variable UniformConstant
          4(main):           2 Function None 3
                5:             Label
-     202(sample):      7(ptr) Variable Function
-206(flattenTemp):    189(ptr) Variable Function
-      207(param):      7(ptr) Variable Function
-             205:      6(int) Load 204(sample)
-                              Store 202(sample) 205
-             208:      6(int) Load 202(sample)
-                              Store 207(param) 208
-             209:10(PS_OUTPUT) FunctionCall 13(@main(i1;) 207(param)
-                              Store 206(flattenTemp) 209
-             212:    194(ptr) AccessChain 206(flattenTemp) 191
-             213:    9(fvec4) Load 212
-                              Store 211(@entryPointOutput.Color) 213
-             216:    197(ptr) AccessChain 206(flattenTemp) 196
-             217:    8(float) Load 216
-                              Store 215(@entryPointOutput.Depth) 217
+     179(sample):      7(ptr) Variable Function
+183(flattenTemp):    166(ptr) Variable Function
+      184(param):      7(ptr) Variable Function
+             182:      6(int) Load 181(sample)
+                              Store 179(sample) 182
+             185:      6(int) Load 179(sample)
+                              Store 184(param) 185
+             186:10(PS_OUTPUT) FunctionCall 13(@main(i1;) 184(param)
+                              Store 183(flattenTemp) 186
+             189:    171(ptr) AccessChain 183(flattenTemp) 168
+             190:    9(fvec4) Load 189
+                              Store 188(@entryPointOutput.Color) 190
+             193:    174(ptr) AccessChain 183(flattenTemp) 173
+             194:    8(float) Load 193
+                              Store 192(@entryPointOutput.Depth) 194
                               Return
                               FunctionEnd
    13(@main(i1;):10(PS_OUTPUT) Function None 11
@@ -750,165 +754,93 @@
               14:             Label
          17(r00):     16(ptr) Variable Function
 20(@sampleCount):     19(ptr) Variable Function
-              26:     16(ptr) Variable Function
-   42(indexable):     41(ptr) Variable Function
-              46:     16(ptr) Variable Function
-   65(indexable):     64(ptr) Variable Function
-              69:     16(ptr) Variable Function
-   96(indexable):     95(ptr) Variable Function
-             100:     16(ptr) Variable Function
-  129(indexable):    128(ptr) Variable Function
-        138(r01):     16(ptr) Variable Function
-139(@sampleCount):     19(ptr) Variable Function
-             145:     16(ptr) Variable Function
-  151(indexable):     41(ptr) Variable Function
-             155:     16(ptr) Variable Function
-  161(indexable):     64(ptr) Variable Function
-             165:     16(ptr) Variable Function
-  171(indexable):     95(ptr) Variable Function
-             175:     16(ptr) Variable Function
-  181(indexable):    128(ptr) Variable Function
-      190(psout):    189(ptr) Variable Function
+   39(indexable):     38(ptr) Variable Function
+   58(indexable):     57(ptr) Variable Function
+   85(indexable):     84(ptr) Variable Function
+  114(indexable):    113(ptr) Variable Function
+        127(r01):     16(ptr) Variable Function
+128(@sampleCount):     19(ptr) Variable Function
+  137(indexable):     38(ptr) Variable Function
+  143(indexable):     57(ptr) Variable Function
+  149(indexable):     84(ptr) Variable Function
+  155(indexable):    113(ptr) Variable Function
+      167(psout):    166(ptr) Variable Function
               24:          21 Load 23(g_tTex2dmsf4)
               25:     18(int) ImageQuerySamples 24
                               Store 20(@sampleCount) 25
-              27:     18(int) Load 20(@sampleCount)
-              30:    29(bool) IEqual 27 28
-                              SelectionMerge 32 None
-                              BranchConditional 30 31 45
-              31:               Label
-              40:      6(int)   Load 12(sample)
-                                Store 42(indexable) 39
-              43:     16(ptr)   AccessChain 42(indexable) 40
-              44:   15(fvec2)   Load 43
-                                Store 26 44
-                                Branch 32
-              45:               Label
-              47:     18(int)   Load 20(@sampleCount)
-              49:    29(bool)   IEqual 47 48
-                                SelectionMerge 51 None
-                                BranchConditional 49 50 68
-              50:                 Label
-              63:      6(int)     Load 12(sample)
-                                  Store 65(indexable) 62
-              66:     16(ptr)     AccessChain 65(indexable) 63
-              67:   15(fvec2)     Load 66
-                                  Store 46 67
-                                  Branch 51
-              68:                 Label
-              70:     18(int)     Load 20(@sampleCount)
-              72:    29(bool)     IEqual 70 71
-                                  SelectionMerge 74 None
-                                  BranchConditional 72 73 99
-              73:                   Label
-              94:      6(int)       Load 12(sample)
-                                    Store 96(indexable) 93
-              97:     16(ptr)       AccessChain 96(indexable) 94
-              98:   15(fvec2)       Load 97
-                                    Store 69 98
-                                    Branch 74
-              99:                   Label
-             101:     18(int)       Load 20(@sampleCount)
-             103:    29(bool)       IEqual 101 102
-                                    SelectionMerge 105 None
-                                    BranchConditional 103 104 132
-             104:                     Label
-             127:      6(int)         Load 12(sample)
-                                      Store 129(indexable) 126
-             130:     16(ptr)         AccessChain 129(indexable) 127
-             131:   15(fvec2)         Load 130
-                                      Store 100 131
-                                      Branch 105
-             132:                     Label
-                                      Store 100 133
-                                      Branch 105
-             105:                   Label
-             134:   15(fvec2)       Load 100
-                                    Store 69 134
-                                    Branch 74
-              74:                 Label
-             135:   15(fvec2)     Load 69
-                                  Store 46 135
-                                  Branch 51
-              51:               Label
-             136:   15(fvec2)   Load 46
-                                Store 26 136
-                                Branch 32
-              32:             Label
-             137:   15(fvec2) Load 26
-                              Store 17(r00) 137
-             143:         140 Load 142(g_tTex2dmsf4a)
-             144:     18(int) ImageQuerySamples 143
-                              Store 139(@sampleCount) 144
-             146:     18(int) Load 139(@sampleCount)
-             147:    29(bool) IEqual 146 28
-                              SelectionMerge 149 None
-                              BranchConditional 147 148 154
-             148:               Label
-             150:      6(int)   Load 12(sample)
-                                Store 151(indexable) 39
-             152:     16(ptr)   AccessChain 151(indexable) 150
-             153:   15(fvec2)   Load 152
-                                Store 145 153
-                                Branch 149
-             154:               Label
-             156:     18(int)   Load 139(@sampleCount)
-             157:    29(bool)   IEqual 156 48
-                                SelectionMerge 159 None
-                                BranchConditional 157 158 164
-             158:                 Label
-             160:      6(int)     Load 12(sample)
-                                  Store 161(indexable) 62
-             162:     16(ptr)     AccessChain 161(indexable) 160
-             163:   15(fvec2)     Load 162
-                                  Store 155 163
-                                  Branch 159
-             164:                 Label
-             166:     18(int)     Load 139(@sampleCount)
-             167:    29(bool)     IEqual 166 71
-                                  SelectionMerge 169 None
-                                  BranchConditional 167 168 174
-             168:                   Label
-             170:      6(int)       Load 12(sample)
-                                    Store 171(indexable) 93
-             172:     16(ptr)       AccessChain 171(indexable) 170
-             173:   15(fvec2)       Load 172
-                                    Store 165 173
-                                    Branch 169
-             174:                   Label
-             176:     18(int)       Load 139(@sampleCount)
-             177:    29(bool)       IEqual 176 102
-                                    SelectionMerge 179 None
-                                    BranchConditional 177 178 184
-             178:                     Label
-             180:      6(int)         Load 12(sample)
-                                      Store 181(indexable) 126
-             182:     16(ptr)         AccessChain 181(indexable) 180
-             183:   15(fvec2)         Load 182
-                                      Store 175 183
-                                      Branch 179
-             184:                     Label
-                                      Store 175 133
-                                      Branch 179
-             179:                   Label
-             185:   15(fvec2)       Load 175
-                                    Store 165 185
-                                    Branch 169
-             169:                 Label
-             186:   15(fvec2)     Load 165
-                                  Store 155 186
-                                  Branch 159
-             159:               Label
-             187:   15(fvec2)   Load 155
-                                Store 145 187
-                                Branch 149
-             149:             Label
-             188:   15(fvec2) Load 145
-                              Store 138(r01) 188
-             195:    194(ptr) AccessChain 190(psout) 191
-                              Store 195 193
-             198:    197(ptr) AccessChain 190(psout) 196
-                              Store 198 192
-             199:10(PS_OUTPUT) Load 190(psout)
-                              ReturnValue 199
+              26:     18(int) Load 20(@sampleCount)
+              29:    28(bool) IEqual 26 27
+              37:      6(int) Load 12(sample)
+                              Store 39(indexable) 36
+              40:     16(ptr) AccessChain 39(indexable) 37
+              41:   15(fvec2) Load 40
+              42:     18(int) Load 20(@sampleCount)
+              44:    28(bool) IEqual 42 43
+              56:      6(int) Load 12(sample)
+                              Store 58(indexable) 55
+              59:     16(ptr) AccessChain 58(indexable) 56
+              60:   15(fvec2) Load 59
+              61:     18(int) Load 20(@sampleCount)
+              63:    28(bool) IEqual 61 62
+              83:      6(int) Load 12(sample)
+                              Store 85(indexable) 82
+              86:     16(ptr) AccessChain 85(indexable) 83
+              87:   15(fvec2) Load 86
+              88:     18(int) Load 20(@sampleCount)
+              90:    28(bool) IEqual 88 89
+             112:      6(int) Load 12(sample)
+                              Store 114(indexable) 111
+             115:     16(ptr) AccessChain 114(indexable) 112
+             116:   15(fvec2) Load 115
+             119:  118(bvec2) CompositeConstruct 90 90
+             120:   15(fvec2) Select 119 116 117
+             121:  118(bvec2) CompositeConstruct 63 63
+             122:   15(fvec2) Select 121 87 120
+             123:  118(bvec2) CompositeConstruct 44 44
+             124:   15(fvec2) Select 123 60 122
+             125:  118(bvec2) CompositeConstruct 29 29
+             126:   15(fvec2) Select 125 41 124
+                              Store 17(r00) 126
+             132:         129 Load 131(g_tTex2dmsf4a)
+             133:     18(int) ImageQuerySamples 132
+                              Store 128(@sampleCount) 133
+             134:     18(int) Load 128(@sampleCount)
+             135:    28(bool) IEqual 134 27
+             136:      6(int) Load 12(sample)
+                              Store 137(indexable) 36
+             138:     16(ptr) AccessChain 137(indexable) 136
+             139:   15(fvec2) Load 138
+             140:     18(int) Load 128(@sampleCount)
+             141:    28(bool) IEqual 140 43
+             142:      6(int) Load 12(sample)
+                              Store 143(indexable) 55
+             144:     16(ptr) AccessChain 143(indexable) 142
+             145:   15(fvec2) Load 144
+             146:     18(int) Load 128(@sampleCount)
+             147:    28(bool) IEqual 146 62
+             148:      6(int) Load 12(sample)
+                              Store 149(indexable) 82
+             150:     16(ptr) AccessChain 149(indexable) 148
+             151:   15(fvec2) Load 150
+             152:     18(int) Load 128(@sampleCount)
+             153:    28(bool) IEqual 152 89
+             154:      6(int) Load 12(sample)
+                              Store 155(indexable) 111
+             156:     16(ptr) AccessChain 155(indexable) 154
+             157:   15(fvec2) Load 156
+             158:  118(bvec2) CompositeConstruct 153 153
+             159:   15(fvec2) Select 158 157 117
+             160:  118(bvec2) CompositeConstruct 147 147
+             161:   15(fvec2) Select 160 151 159
+             162:  118(bvec2) CompositeConstruct 141 141
+             163:   15(fvec2) Select 162 145 161
+             164:  118(bvec2) CompositeConstruct 135 135
+             165:   15(fvec2) Select 164 139 163
+                              Store 127(r01) 165
+             172:    171(ptr) AccessChain 167(psout) 168
+                              Store 172 170
+             175:    174(ptr) AccessChain 167(psout) 173
+                              Store 175 169
+             176:10(PS_OUTPUT) Load 167(psout)
+                              ReturnValue 176
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.global-const-init.frag.out b/Test/baseResults/hlsl.global-const-init.frag.out
index c76f54a..eda1c5d 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): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 50
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.gs-hs-mix.tesc.out b/Test/baseResults/hlsl.gs-hs-mix.tesc.out
new file mode 100644
index 0000000..e551815
--- /dev/null
+++ b/Test/baseResults/hlsl.gs-hs-mix.tesc.out
@@ -0,0 +1,1158 @@
+hlsl.gs-hs-mix.tesc
+Shader version: 500
+vertices = 3
+input primitive = triangles
+vertex spacing = fractional_odd_spacing
+triangle order = ccw
+0:? Sequence
+0:31  Function Definition: HSPatchConstant(struct-HSInput-vf3-vf31[3]; ( temp structure{ temp 3-element array of float EdgeTessFactor,  temp float InsideTessFactor,  temp 3-element array of 3-component vector of float NormalWS})
+0:31    Function Parameters: 
+0:31      'patch' ( in 3-element array of structure{ temp 3-component vector of float PositionWS,  temp 3-component vector of float NormalWS})
+0:?     Sequence
+0:32      Sequence
+0:32        move second child to first child ( temp 3-component vector of float)
+0:32          'roundedEdgeTessFactor' ( temp 3-component vector of float)
+0:32          tess_factor: direct index for structure (layout( row_major std140) uniform 3-component vector of float)
+0:32            'anon@0' (layout( binding=0 row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float model_view_matrix, layout( row_major std140) uniform 4X4 matrix of float proj_matrix, layout( row_major std140) uniform 4X4 matrix of float model_view_proj_matrix, layout( row_major std140) uniform 3X3 matrix of float normal_matrix, layout( row_major std140) uniform 3-component vector of float color, layout( row_major std140) uniform 3-component vector of float view_dir, layout( row_major std140) uniform 3-component vector of float tess_factor})
+0:32            Constant:
+0:32              6 (const uint)
+0:33      Sequence
+0:33        move second child to first child ( temp float)
+0:33          'roundedInsideTessFactor' ( temp float)
+0:33          Constant:
+0:33            3.000000
+0:34      Sequence
+0:34        move second child to first child ( temp float)
+0:34          'insideTessFactor' ( temp float)
+0:34          Constant:
+0:34            1.000000
+0:39      move second child to first child ( temp float)
+0:39        direct index ( temp float)
+0:39          EdgeTessFactor: direct index for structure ( temp 3-element array of float)
+0:39            'result' ( temp structure{ temp 3-element array of float EdgeTessFactor,  temp float InsideTessFactor,  temp 3-element array of 3-component vector of float NormalWS})
+0:39            Constant:
+0:39              0 (const int)
+0:39          Constant:
+0:39            0 (const int)
+0:39        direct index ( temp float)
+0:39          'roundedEdgeTessFactor' ( temp 3-component vector of float)
+0:39          Constant:
+0:39            0 (const int)
+0:40      move second child to first child ( temp float)
+0:40        direct index ( temp float)
+0:40          EdgeTessFactor: direct index for structure ( temp 3-element array of float)
+0:40            'result' ( temp structure{ temp 3-element array of float EdgeTessFactor,  temp float InsideTessFactor,  temp 3-element array of 3-component vector of float NormalWS})
+0:40            Constant:
+0:40              0 (const int)
+0:40          Constant:
+0:40            1 (const int)
+0:40        direct index ( temp float)
+0:40          'roundedEdgeTessFactor' ( temp 3-component vector of float)
+0:40          Constant:
+0:40            1 (const int)
+0:41      move second child to first child ( temp float)
+0:41        direct index ( temp float)
+0:41          EdgeTessFactor: direct index for structure ( temp 3-element array of float)
+0:41            'result' ( temp structure{ temp 3-element array of float EdgeTessFactor,  temp float InsideTessFactor,  temp 3-element array of 3-component vector of float NormalWS})
+0:41            Constant:
+0:41              0 (const int)
+0:41          Constant:
+0:41            2 (const int)
+0:41        direct index ( temp float)
+0:41          'roundedEdgeTessFactor' ( temp 3-component vector of float)
+0:41          Constant:
+0:41            2 (const int)
+0:42      move second child to first child ( temp float)
+0:42        InsideTessFactor: direct index for structure ( temp float)
+0:42          'result' ( temp structure{ temp 3-element array of float EdgeTessFactor,  temp float InsideTessFactor,  temp 3-element array of 3-component vector of float NormalWS})
+0:42          Constant:
+0:42            1 (const int)
+0:42        'roundedInsideTessFactor' ( temp float)
+0:45      move second child to first child ( temp 3-component vector of float)
+0:45        direct index ( temp 3-component vector of float)
+0:45          NormalWS: direct index for structure ( temp 3-element array of 3-component vector of float)
+0:45            'result' ( temp structure{ temp 3-element array of float EdgeTessFactor,  temp float InsideTessFactor,  temp 3-element array of 3-component vector of float NormalWS})
+0:45            Constant:
+0:45              2 (const int)
+0:45          Constant:
+0:45            0 (const int)
+0:45        NormalWS: direct index for structure ( temp 3-component vector of float)
+0:45          direct index ( temp structure{ temp 3-component vector of float PositionWS,  temp 3-component vector of float NormalWS})
+0:45            'patch' ( in 3-element array of structure{ temp 3-component vector of float PositionWS,  temp 3-component vector of float NormalWS})
+0:45            Constant:
+0:45              0 (const int)
+0:45          Constant:
+0:45            1 (const int)
+0:46      move second child to first child ( temp 3-component vector of float)
+0:46        direct index ( temp 3-component vector of float)
+0:46          NormalWS: direct index for structure ( temp 3-element array of 3-component vector of float)
+0:46            'result' ( temp structure{ temp 3-element array of float EdgeTessFactor,  temp float InsideTessFactor,  temp 3-element array of 3-component vector of float NormalWS})
+0:46            Constant:
+0:46              2 (const int)
+0:46          Constant:
+0:46            1 (const int)
+0:46        NormalWS: direct index for structure ( temp 3-component vector of float)
+0:46          direct index ( temp structure{ temp 3-component vector of float PositionWS,  temp 3-component vector of float NormalWS})
+0:46            'patch' ( in 3-element array of structure{ temp 3-component vector of float PositionWS,  temp 3-component vector of float NormalWS})
+0:46            Constant:
+0:46              1 (const int)
+0:46          Constant:
+0:46            1 (const int)
+0:47      move second child to first child ( temp 3-component vector of float)
+0:47        direct index ( temp 3-component vector of float)
+0:47          NormalWS: direct index for structure ( temp 3-element array of 3-component vector of float)
+0:47            'result' ( temp structure{ temp 3-element array of float EdgeTessFactor,  temp float InsideTessFactor,  temp 3-element array of 3-component vector of float NormalWS})
+0:47            Constant:
+0:47              2 (const int)
+0:47          Constant:
+0:47            2 (const int)
+0:47        NormalWS: direct index for structure ( temp 3-component vector of float)
+0:47          direct index ( temp structure{ temp 3-component vector of float PositionWS,  temp 3-component vector of float NormalWS})
+0:47            'patch' ( in 3-element array of structure{ temp 3-component vector of float PositionWS,  temp 3-component vector of float NormalWS})
+0:47            Constant:
+0:47              2 (const int)
+0:47          Constant:
+0:47            1 (const int)
+0:49      Branch: Return with expression
+0:49        'result' ( temp structure{ temp 3-element array of float EdgeTessFactor,  temp float InsideTessFactor,  temp 3-element array of 3-component vector of float NormalWS})
+0:61  Function Definition: @HSMain(struct-HSInput-vf3-vf31[3];u1; ( temp structure{ temp 3-component vector of float PositionWS})
+0:61    Function Parameters: 
+0:61      'patch' ( in 3-element array of structure{ temp 3-component vector of float PositionWS,  temp 3-component vector of float NormalWS})
+0:61      'id' ( in uint)
+0:?     Sequence
+0:63      move second child to first child ( temp 3-component vector of float)
+0:63        PositionWS: direct index for structure ( temp 3-component vector of float)
+0:63          'output' ( temp structure{ temp 3-component vector of float PositionWS})
+0:63          Constant:
+0:63            0 (const int)
+0:63        PositionWS: direct index for structure ( temp 3-component vector of float)
+0:63          indirect index ( temp structure{ temp 3-component vector of float PositionWS,  temp 3-component vector of float NormalWS})
+0:63            'patch' ( in 3-element array of structure{ temp 3-component vector of float PositionWS,  temp 3-component vector of float NormalWS})
+0:63            'id' ( in uint)
+0:63          Constant:
+0:63            0 (const int)
+0:64      Branch: Return with expression
+0:64        'output' ( temp structure{ temp 3-component vector of float PositionWS})
+0:61  Function Definition: HSMain( ( temp void)
+0:61    Function Parameters: 
+0:?     Sequence
+0:61      move second child to first child ( temp 3-element array of structure{ temp 3-component vector of float PositionWS,  temp 3-component vector of float NormalWS})
+0:?         'patch' ( temp 3-element array of structure{ temp 3-component vector of float PositionWS,  temp 3-component vector of float NormalWS})
+0:?         'patch' (layout( location=0) in 3-element array of structure{ temp 3-component vector of float PositionWS,  temp 3-component vector of float NormalWS})
+0:61      move second child to first child ( temp uint)
+0:?         'id' ( temp uint)
+0:?         'id' ( in uint InvocationID)
+0:61      move second child to first child ( temp structure{ temp 3-component vector of float PositionWS})
+0:61        indirect index (layout( location=0) out structure{ temp 3-component vector of float PositionWS})
+0:?           '@entryPointOutput' (layout( location=0) out 3-element array of structure{ temp 3-component vector of float PositionWS})
+0:?           'id' ( in uint InvocationID)
+0:61        Function Call: @HSMain(struct-HSInput-vf3-vf31[3];u1; ( temp structure{ temp 3-component vector of float PositionWS})
+0:?           'patch' ( temp 3-element array of structure{ temp 3-component vector of float PositionWS,  temp 3-component vector of float NormalWS})
+0:?           'id' ( temp uint)
+0:?       Barrier ( temp void)
+0:?       Test condition and select ( temp void)
+0:?         Condition
+0:?         Compare Equal ( temp bool)
+0:?           'id' ( 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 EdgeTessFactor,  temp float InsideTessFactor,  temp 3-element array of 3-component vector of float NormalWS})
+0:?             '@patchConstantResult' ( temp structure{ temp 3-element array of float EdgeTessFactor,  temp float InsideTessFactor,  temp 3-element array of 3-component vector of float NormalWS})
+0:?             Function Call: HSPatchConstant(struct-HSInput-vf3-vf31[3]; ( temp structure{ temp 3-element array of float EdgeTessFactor,  temp float InsideTessFactor,  temp 3-element array of 3-component vector of float NormalWS})
+0:?               'patch' ( temp 3-element array of structure{ temp 3-component vector of float PositionWS,  temp 3-component vector of float NormalWS})
+0:?           Sequence
+0:?             move second child to first child ( temp float)
+0:?               direct index ( patch out float TessLevelOuter)
+0:?                 '@patchConstantOutput.EdgeTessFactor' ( patch out 4-element array of float TessLevelOuter)
+0:?                 Constant:
+0:?                   0 (const int)
+0:?               direct index ( temp float)
+0:?                 EdgeTessFactor: direct index for structure ( temp 3-element array of float)
+0:?                   '@patchConstantResult' ( temp structure{ temp 3-element array of float EdgeTessFactor,  temp float InsideTessFactor,  temp 3-element array of 3-component vector of float NormalWS})
+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.EdgeTessFactor' ( patch out 4-element array of float TessLevelOuter)
+0:?                 Constant:
+0:?                   1 (const int)
+0:?               direct index ( temp float)
+0:?                 EdgeTessFactor: direct index for structure ( temp 3-element array of float)
+0:?                   '@patchConstantResult' ( temp structure{ temp 3-element array of float EdgeTessFactor,  temp float InsideTessFactor,  temp 3-element array of 3-component vector of float NormalWS})
+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.EdgeTessFactor' ( patch out 4-element array of float TessLevelOuter)
+0:?                 Constant:
+0:?                   2 (const int)
+0:?               direct index ( temp float)
+0:?                 EdgeTessFactor: direct index for structure ( temp 3-element array of float)
+0:?                   '@patchConstantResult' ( temp structure{ temp 3-element array of float EdgeTessFactor,  temp float InsideTessFactor,  temp 3-element array of 3-component vector of float NormalWS})
+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.InsideTessFactor' ( patch out 2-element array of float TessLevelInner)
+0:?                 Constant:
+0:?                   0 (const int)
+0:?               InsideTessFactor: direct index for structure ( temp float)
+0:?                 '@patchConstantResult' ( temp structure{ temp 3-element array of float EdgeTessFactor,  temp float InsideTessFactor,  temp 3-element array of 3-component vector of float NormalWS})
+0:?                 Constant:
+0:?                   1 (const int)
+0:?             move second child to first child ( temp 3-element array of 3-component vector of float)
+0:?               NormalWS: direct index for structure ( temp 3-element array of 3-component vector of float)
+0:?                 '@patchConstantOutput' (layout( location=1) patch out structure{ temp 3-element array of 3-component vector of float NormalWS})
+0:?                 Constant:
+0:?                   0 (const int)
+0:?               NormalWS: direct index for structure ( temp 3-element array of 3-component vector of float)
+0:?                 '@patchConstantResult' ( temp structure{ temp 3-element array of float EdgeTessFactor,  temp float InsideTessFactor,  temp 3-element array of 3-component vector of float NormalWS})
+0:?                 Constant:
+0:?                   2 (const int)
+0:84  Function Definition: GSMain(struct-GSVertexInput-vf3-vf31[3];struct-GSVertexOutput-vf41; ( temp void)
+0:84    Function Parameters: 
+0:84      'input' ( in 3-element array of structure{ temp 3-component vector of float PositionWS,  temp 3-component vector of float NormalWS})
+0:84      'output' ( out structure{ temp 4-component vector of float PositionCS})
+0:?     Sequence
+0:86      Sequence
+0:86        move second child to first child ( temp 3-component vector of float)
+0:86          'P0' ( temp 3-component vector of float)
+0:86          vector swizzle ( temp 3-component vector of float)
+0:86            PositionWS: direct index for structure ( temp 3-component vector of float)
+0:86              direct index ( temp structure{ temp 3-component vector of float PositionWS,  temp 3-component vector of float NormalWS})
+0:86                'input' ( in 3-element array of structure{ temp 3-component vector of float PositionWS,  temp 3-component vector of float NormalWS})
+0:86                Constant:
+0:86                  0 (const int)
+0:86              Constant:
+0:86                0 (const int)
+0:86            Sequence
+0:86              Constant:
+0:86                0 (const int)
+0:86              Constant:
+0:86                1 (const int)
+0:86              Constant:
+0:86                2 (const int)
+0:87      Sequence
+0:87        move second child to first child ( temp 3-component vector of float)
+0:87          'P1' ( temp 3-component vector of float)
+0:87          vector swizzle ( temp 3-component vector of float)
+0:87            PositionWS: direct index for structure ( temp 3-component vector of float)
+0:87              direct index ( temp structure{ temp 3-component vector of float PositionWS,  temp 3-component vector of float NormalWS})
+0:87                'input' ( in 3-element array of structure{ temp 3-component vector of float PositionWS,  temp 3-component vector of float NormalWS})
+0:87                Constant:
+0:87                  1 (const int)
+0:87              Constant:
+0:87                0 (const int)
+0:87            Sequence
+0:87              Constant:
+0:87                0 (const int)
+0:87              Constant:
+0:87                1 (const int)
+0:87              Constant:
+0:87                2 (const int)
+0:88      Sequence
+0:88        move second child to first child ( temp 3-component vector of float)
+0:88          'P2' ( temp 3-component vector of float)
+0:88          vector swizzle ( temp 3-component vector of float)
+0:88            PositionWS: direct index for structure ( temp 3-component vector of float)
+0:88              direct index ( temp structure{ temp 3-component vector of float PositionWS,  temp 3-component vector of float NormalWS})
+0:88                'input' ( in 3-element array of structure{ temp 3-component vector of float PositionWS,  temp 3-component vector of float NormalWS})
+0:88                Constant:
+0:88                  2 (const int)
+0:88              Constant:
+0:88                0 (const int)
+0:88            Sequence
+0:88              Constant:
+0:88                0 (const int)
+0:88              Constant:
+0:88                1 (const int)
+0:88              Constant:
+0:88                2 (const int)
+0:92      add second child into first child ( temp float)
+0:92        direct index ( temp float)
+0:92          'P0' ( temp 3-component vector of float)
+0:92          Constant:
+0:92            2 (const int)
+0:92        Constant:
+0:92          0.001000
+0:93      add second child into first child ( temp float)
+0:93        direct index ( temp float)
+0:93          'P1' ( temp 3-component vector of float)
+0:93          Constant:
+0:93            2 (const int)
+0:93        Constant:
+0:93          0.001000
+0:94      add second child into first child ( temp float)
+0:94        direct index ( temp float)
+0:94          'P2' ( temp 3-component vector of float)
+0:94          Constant:
+0:94            2 (const int)
+0:94        Constant:
+0:94          0.001000
+0:95      Sequence
+0:95        move second child to first child ( temp 4-component vector of float)
+0:95          'Q0' ( temp 4-component vector of float)
+0:95          vector-times-matrix ( temp 4-component vector of float)
+0:?             Construct vec4 ( temp 4-component vector of float)
+0:95              'P0' ( temp 3-component vector of float)
+0:95              Constant:
+0:95                1.000000
+0:95            proj_matrix: direct index for structure (layout( row_major std140) uniform 4X4 matrix of float)
+0:95              'anon@0' (layout( binding=0 row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float model_view_matrix, layout( row_major std140) uniform 4X4 matrix of float proj_matrix, layout( row_major std140) uniform 4X4 matrix of float model_view_proj_matrix, layout( row_major std140) uniform 3X3 matrix of float normal_matrix, layout( row_major std140) uniform 3-component vector of float color, layout( row_major std140) uniform 3-component vector of float view_dir, layout( row_major std140) uniform 3-component vector of float tess_factor})
+0:95              Constant:
+0:95                1 (const uint)
+0:96      Sequence
+0:96        move second child to first child ( temp 4-component vector of float)
+0:96          'Q1' ( temp 4-component vector of float)
+0:96          vector-times-matrix ( temp 4-component vector of float)
+0:?             Construct vec4 ( temp 4-component vector of float)
+0:96              'P1' ( temp 3-component vector of float)
+0:96              Constant:
+0:96                1.000000
+0:96            proj_matrix: direct index for structure (layout( row_major std140) uniform 4X4 matrix of float)
+0:96              'anon@0' (layout( binding=0 row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float model_view_matrix, layout( row_major std140) uniform 4X4 matrix of float proj_matrix, layout( row_major std140) uniform 4X4 matrix of float model_view_proj_matrix, layout( row_major std140) uniform 3X3 matrix of float normal_matrix, layout( row_major std140) uniform 3-component vector of float color, layout( row_major std140) uniform 3-component vector of float view_dir, layout( row_major std140) uniform 3-component vector of float tess_factor})
+0:96              Constant:
+0:96                1 (const uint)
+0:97      Sequence
+0:97        move second child to first child ( temp 4-component vector of float)
+0:97          'Q2' ( temp 4-component vector of float)
+0:97          vector-times-matrix ( temp 4-component vector of float)
+0:?             Construct vec4 ( temp 4-component vector of float)
+0:97              'P2' ( temp 3-component vector of float)
+0:97              Constant:
+0:97                1.000000
+0:97            proj_matrix: direct index for structure (layout( row_major std140) uniform 4X4 matrix of float)
+0:97              'anon@0' (layout( binding=0 row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float model_view_matrix, layout( row_major std140) uniform 4X4 matrix of float proj_matrix, layout( row_major std140) uniform 4X4 matrix of float model_view_proj_matrix, layout( row_major std140) uniform 3X3 matrix of float normal_matrix, layout( row_major std140) uniform 3-component vector of float color, layout( row_major std140) uniform 3-component vector of float view_dir, layout( row_major std140) uniform 3-component vector of float tess_factor})
+0:97              Constant:
+0:97                1 (const uint)
+0:100      move second child to first child ( temp 4-component vector of float)
+0:100        PositionCS: direct index for structure ( temp 4-component vector of float)
+0:100          'vertex' ( temp structure{ temp 4-component vector of float PositionCS})
+0:100          Constant:
+0:100            0 (const int)
+0:100        'Q0' ( temp 4-component vector of float)
+0:101      Constant:
+0:101        0.000000
+0:102      move second child to first child ( temp 4-component vector of float)
+0:102        PositionCS: direct index for structure ( temp 4-component vector of float)
+0:102          'vertex' ( temp structure{ temp 4-component vector of float PositionCS})
+0:102          Constant:
+0:102            0 (const int)
+0:102        'Q1' ( temp 4-component vector of float)
+0:103      Constant:
+0:103        0.000000
+0:104      Constant:
+0:104        0.000000
+0:107      move second child to first child ( temp 4-component vector of float)
+0:107        PositionCS: direct index for structure ( temp 4-component vector of float)
+0:107          'vertex' ( temp structure{ temp 4-component vector of float PositionCS})
+0:107          Constant:
+0:107            0 (const int)
+0:107        'Q1' ( temp 4-component vector of float)
+0:108      Constant:
+0:108        0.000000
+0:109      move second child to first child ( temp 4-component vector of float)
+0:109        PositionCS: direct index for structure ( temp 4-component vector of float)
+0:109          'vertex' ( temp structure{ temp 4-component vector of float PositionCS})
+0:109          Constant:
+0:109            0 (const int)
+0:109        'Q2' ( temp 4-component vector of float)
+0:110      Constant:
+0:110        0.000000
+0:111      Constant:
+0:111        0.000000
+0:114      move second child to first child ( temp 4-component vector of float)
+0:114        PositionCS: direct index for structure ( temp 4-component vector of float)
+0:114          'vertex' ( temp structure{ temp 4-component vector of float PositionCS})
+0:114          Constant:
+0:114            0 (const int)
+0:114        'Q2' ( temp 4-component vector of float)
+0:115      Constant:
+0:115        0.000000
+0:116      move second child to first child ( temp 4-component vector of float)
+0:116        PositionCS: direct index for structure ( temp 4-component vector of float)
+0:116          'vertex' ( temp structure{ temp 4-component vector of float PositionCS})
+0:116          Constant:
+0:116            0 (const int)
+0:116        'Q0' ( temp 4-component vector of float)
+0:117      Constant:
+0:117        0.000000
+0:118      Constant:
+0:118        0.000000
+0:?   Linker Objects
+0:?     'anon@0' (layout( binding=0 row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float model_view_matrix, layout( row_major std140) uniform 4X4 matrix of float proj_matrix, layout( row_major std140) uniform 4X4 matrix of float model_view_proj_matrix, layout( row_major std140) uniform 3X3 matrix of float normal_matrix, layout( row_major std140) uniform 3-component vector of float color, layout( row_major std140) uniform 3-component vector of float view_dir, layout( row_major std140) uniform 3-component vector of float tess_factor})
+0:?     '@entryPointOutput' (layout( location=0) out 3-element array of structure{ temp 3-component vector of float PositionWS})
+0:?     'patch' (layout( location=0) in 3-element array of structure{ temp 3-component vector of float PositionWS,  temp 3-component vector of float NormalWS})
+0:?     'id' ( in uint InvocationID)
+0:?     '@patchConstantOutput.EdgeTessFactor' ( patch out 4-element array of float TessLevelOuter)
+0:?     '@patchConstantOutput.InsideTessFactor' ( patch out 2-element array of float TessLevelInner)
+0:?     '@patchConstantOutput' (layout( location=1) patch out structure{ temp 3-element array of 3-component vector of float NormalWS})
+
+
+Linked tessellation control stage:
+
+
+Shader version: 500
+vertices = 3
+input primitive = triangles
+vertex spacing = fractional_odd_spacing
+triangle order = ccw
+0:? Sequence
+0:31  Function Definition: HSPatchConstant(struct-HSInput-vf3-vf31[3]; ( temp structure{ temp 3-element array of float EdgeTessFactor,  temp float InsideTessFactor,  temp 3-element array of 3-component vector of float NormalWS})
+0:31    Function Parameters: 
+0:31      'patch' ( in 3-element array of structure{ temp 3-component vector of float PositionWS,  temp 3-component vector of float NormalWS})
+0:?     Sequence
+0:32      Sequence
+0:32        move second child to first child ( temp 3-component vector of float)
+0:32          'roundedEdgeTessFactor' ( temp 3-component vector of float)
+0:32          tess_factor: direct index for structure (layout( row_major std140) uniform 3-component vector of float)
+0:32            'anon@0' (layout( binding=0 row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float model_view_matrix, layout( row_major std140) uniform 4X4 matrix of float proj_matrix, layout( row_major std140) uniform 4X4 matrix of float model_view_proj_matrix, layout( row_major std140) uniform 3X3 matrix of float normal_matrix, layout( row_major std140) uniform 3-component vector of float color, layout( row_major std140) uniform 3-component vector of float view_dir, layout( row_major std140) uniform 3-component vector of float tess_factor})
+0:32            Constant:
+0:32              6 (const uint)
+0:33      Sequence
+0:33        move second child to first child ( temp float)
+0:33          'roundedInsideTessFactor' ( temp float)
+0:33          Constant:
+0:33            3.000000
+0:34      Sequence
+0:34        move second child to first child ( temp float)
+0:34          'insideTessFactor' ( temp float)
+0:34          Constant:
+0:34            1.000000
+0:39      move second child to first child ( temp float)
+0:39        direct index ( temp float)
+0:39          EdgeTessFactor: direct index for structure ( temp 3-element array of float)
+0:39            'result' ( temp structure{ temp 3-element array of float EdgeTessFactor,  temp float InsideTessFactor,  temp 3-element array of 3-component vector of float NormalWS})
+0:39            Constant:
+0:39              0 (const int)
+0:39          Constant:
+0:39            0 (const int)
+0:39        direct index ( temp float)
+0:39          'roundedEdgeTessFactor' ( temp 3-component vector of float)
+0:39          Constant:
+0:39            0 (const int)
+0:40      move second child to first child ( temp float)
+0:40        direct index ( temp float)
+0:40          EdgeTessFactor: direct index for structure ( temp 3-element array of float)
+0:40            'result' ( temp structure{ temp 3-element array of float EdgeTessFactor,  temp float InsideTessFactor,  temp 3-element array of 3-component vector of float NormalWS})
+0:40            Constant:
+0:40              0 (const int)
+0:40          Constant:
+0:40            1 (const int)
+0:40        direct index ( temp float)
+0:40          'roundedEdgeTessFactor' ( temp 3-component vector of float)
+0:40          Constant:
+0:40            1 (const int)
+0:41      move second child to first child ( temp float)
+0:41        direct index ( temp float)
+0:41          EdgeTessFactor: direct index for structure ( temp 3-element array of float)
+0:41            'result' ( temp structure{ temp 3-element array of float EdgeTessFactor,  temp float InsideTessFactor,  temp 3-element array of 3-component vector of float NormalWS})
+0:41            Constant:
+0:41              0 (const int)
+0:41          Constant:
+0:41            2 (const int)
+0:41        direct index ( temp float)
+0:41          'roundedEdgeTessFactor' ( temp 3-component vector of float)
+0:41          Constant:
+0:41            2 (const int)
+0:42      move second child to first child ( temp float)
+0:42        InsideTessFactor: direct index for structure ( temp float)
+0:42          'result' ( temp structure{ temp 3-element array of float EdgeTessFactor,  temp float InsideTessFactor,  temp 3-element array of 3-component vector of float NormalWS})
+0:42          Constant:
+0:42            1 (const int)
+0:42        'roundedInsideTessFactor' ( temp float)
+0:45      move second child to first child ( temp 3-component vector of float)
+0:45        direct index ( temp 3-component vector of float)
+0:45          NormalWS: direct index for structure ( temp 3-element array of 3-component vector of float)
+0:45            'result' ( temp structure{ temp 3-element array of float EdgeTessFactor,  temp float InsideTessFactor,  temp 3-element array of 3-component vector of float NormalWS})
+0:45            Constant:
+0:45              2 (const int)
+0:45          Constant:
+0:45            0 (const int)
+0:45        NormalWS: direct index for structure ( temp 3-component vector of float)
+0:45          direct index ( temp structure{ temp 3-component vector of float PositionWS,  temp 3-component vector of float NormalWS})
+0:45            'patch' ( in 3-element array of structure{ temp 3-component vector of float PositionWS,  temp 3-component vector of float NormalWS})
+0:45            Constant:
+0:45              0 (const int)
+0:45          Constant:
+0:45            1 (const int)
+0:46      move second child to first child ( temp 3-component vector of float)
+0:46        direct index ( temp 3-component vector of float)
+0:46          NormalWS: direct index for structure ( temp 3-element array of 3-component vector of float)
+0:46            'result' ( temp structure{ temp 3-element array of float EdgeTessFactor,  temp float InsideTessFactor,  temp 3-element array of 3-component vector of float NormalWS})
+0:46            Constant:
+0:46              2 (const int)
+0:46          Constant:
+0:46            1 (const int)
+0:46        NormalWS: direct index for structure ( temp 3-component vector of float)
+0:46          direct index ( temp structure{ temp 3-component vector of float PositionWS,  temp 3-component vector of float NormalWS})
+0:46            'patch' ( in 3-element array of structure{ temp 3-component vector of float PositionWS,  temp 3-component vector of float NormalWS})
+0:46            Constant:
+0:46              1 (const int)
+0:46          Constant:
+0:46            1 (const int)
+0:47      move second child to first child ( temp 3-component vector of float)
+0:47        direct index ( temp 3-component vector of float)
+0:47          NormalWS: direct index for structure ( temp 3-element array of 3-component vector of float)
+0:47            'result' ( temp structure{ temp 3-element array of float EdgeTessFactor,  temp float InsideTessFactor,  temp 3-element array of 3-component vector of float NormalWS})
+0:47            Constant:
+0:47              2 (const int)
+0:47          Constant:
+0:47            2 (const int)
+0:47        NormalWS: direct index for structure ( temp 3-component vector of float)
+0:47          direct index ( temp structure{ temp 3-component vector of float PositionWS,  temp 3-component vector of float NormalWS})
+0:47            'patch' ( in 3-element array of structure{ temp 3-component vector of float PositionWS,  temp 3-component vector of float NormalWS})
+0:47            Constant:
+0:47              2 (const int)
+0:47          Constant:
+0:47            1 (const int)
+0:49      Branch: Return with expression
+0:49        'result' ( temp structure{ temp 3-element array of float EdgeTessFactor,  temp float InsideTessFactor,  temp 3-element array of 3-component vector of float NormalWS})
+0:61  Function Definition: @HSMain(struct-HSInput-vf3-vf31[3];u1; ( temp structure{ temp 3-component vector of float PositionWS})
+0:61    Function Parameters: 
+0:61      'patch' ( in 3-element array of structure{ temp 3-component vector of float PositionWS,  temp 3-component vector of float NormalWS})
+0:61      'id' ( in uint)
+0:?     Sequence
+0:63      move second child to first child ( temp 3-component vector of float)
+0:63        PositionWS: direct index for structure ( temp 3-component vector of float)
+0:63          'output' ( temp structure{ temp 3-component vector of float PositionWS})
+0:63          Constant:
+0:63            0 (const int)
+0:63        PositionWS: direct index for structure ( temp 3-component vector of float)
+0:63          indirect index ( temp structure{ temp 3-component vector of float PositionWS,  temp 3-component vector of float NormalWS})
+0:63            'patch' ( in 3-element array of structure{ temp 3-component vector of float PositionWS,  temp 3-component vector of float NormalWS})
+0:63            'id' ( in uint)
+0:63          Constant:
+0:63            0 (const int)
+0:64      Branch: Return with expression
+0:64        'output' ( temp structure{ temp 3-component vector of float PositionWS})
+0:61  Function Definition: HSMain( ( temp void)
+0:61    Function Parameters: 
+0:?     Sequence
+0:61      move second child to first child ( temp 3-element array of structure{ temp 3-component vector of float PositionWS,  temp 3-component vector of float NormalWS})
+0:?         'patch' ( temp 3-element array of structure{ temp 3-component vector of float PositionWS,  temp 3-component vector of float NormalWS})
+0:?         'patch' (layout( location=0) in 3-element array of structure{ temp 3-component vector of float PositionWS,  temp 3-component vector of float NormalWS})
+0:61      move second child to first child ( temp uint)
+0:?         'id' ( temp uint)
+0:?         'id' ( in uint InvocationID)
+0:61      move second child to first child ( temp structure{ temp 3-component vector of float PositionWS})
+0:61        indirect index (layout( location=0) out structure{ temp 3-component vector of float PositionWS})
+0:?           '@entryPointOutput' (layout( location=0) out 3-element array of structure{ temp 3-component vector of float PositionWS})
+0:?           'id' ( in uint InvocationID)
+0:61        Function Call: @HSMain(struct-HSInput-vf3-vf31[3];u1; ( temp structure{ temp 3-component vector of float PositionWS})
+0:?           'patch' ( temp 3-element array of structure{ temp 3-component vector of float PositionWS,  temp 3-component vector of float NormalWS})
+0:?           'id' ( temp uint)
+0:?       Barrier ( temp void)
+0:?       Test condition and select ( temp void)
+0:?         Condition
+0:?         Compare Equal ( temp bool)
+0:?           'id' ( 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 EdgeTessFactor,  temp float InsideTessFactor,  temp 3-element array of 3-component vector of float NormalWS})
+0:?             '@patchConstantResult' ( temp structure{ temp 3-element array of float EdgeTessFactor,  temp float InsideTessFactor,  temp 3-element array of 3-component vector of float NormalWS})
+0:?             Function Call: HSPatchConstant(struct-HSInput-vf3-vf31[3]; ( temp structure{ temp 3-element array of float EdgeTessFactor,  temp float InsideTessFactor,  temp 3-element array of 3-component vector of float NormalWS})
+0:?               'patch' ( temp 3-element array of structure{ temp 3-component vector of float PositionWS,  temp 3-component vector of float NormalWS})
+0:?           Sequence
+0:?             move second child to first child ( temp float)
+0:?               direct index ( patch out float TessLevelOuter)
+0:?                 '@patchConstantOutput.EdgeTessFactor' ( patch out 4-element array of float TessLevelOuter)
+0:?                 Constant:
+0:?                   0 (const int)
+0:?               direct index ( temp float)
+0:?                 EdgeTessFactor: direct index for structure ( temp 3-element array of float)
+0:?                   '@patchConstantResult' ( temp structure{ temp 3-element array of float EdgeTessFactor,  temp float InsideTessFactor,  temp 3-element array of 3-component vector of float NormalWS})
+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.EdgeTessFactor' ( patch out 4-element array of float TessLevelOuter)
+0:?                 Constant:
+0:?                   1 (const int)
+0:?               direct index ( temp float)
+0:?                 EdgeTessFactor: direct index for structure ( temp 3-element array of float)
+0:?                   '@patchConstantResult' ( temp structure{ temp 3-element array of float EdgeTessFactor,  temp float InsideTessFactor,  temp 3-element array of 3-component vector of float NormalWS})
+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.EdgeTessFactor' ( patch out 4-element array of float TessLevelOuter)
+0:?                 Constant:
+0:?                   2 (const int)
+0:?               direct index ( temp float)
+0:?                 EdgeTessFactor: direct index for structure ( temp 3-element array of float)
+0:?                   '@patchConstantResult' ( temp structure{ temp 3-element array of float EdgeTessFactor,  temp float InsideTessFactor,  temp 3-element array of 3-component vector of float NormalWS})
+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.InsideTessFactor' ( patch out 2-element array of float TessLevelInner)
+0:?                 Constant:
+0:?                   0 (const int)
+0:?               InsideTessFactor: direct index for structure ( temp float)
+0:?                 '@patchConstantResult' ( temp structure{ temp 3-element array of float EdgeTessFactor,  temp float InsideTessFactor,  temp 3-element array of 3-component vector of float NormalWS})
+0:?                 Constant:
+0:?                   1 (const int)
+0:?             move second child to first child ( temp 3-element array of 3-component vector of float)
+0:?               NormalWS: direct index for structure ( temp 3-element array of 3-component vector of float)
+0:?                 '@patchConstantOutput' (layout( location=1) patch out structure{ temp 3-element array of 3-component vector of float NormalWS})
+0:?                 Constant:
+0:?                   0 (const int)
+0:?               NormalWS: direct index for structure ( temp 3-element array of 3-component vector of float)
+0:?                 '@patchConstantResult' ( temp structure{ temp 3-element array of float EdgeTessFactor,  temp float InsideTessFactor,  temp 3-element array of 3-component vector of float NormalWS})
+0:?                 Constant:
+0:?                   2 (const int)
+0:84  Function Definition: GSMain(struct-GSVertexInput-vf3-vf31[3];struct-GSVertexOutput-vf41; ( temp void)
+0:84    Function Parameters: 
+0:84      'input' ( in 3-element array of structure{ temp 3-component vector of float PositionWS,  temp 3-component vector of float NormalWS})
+0:84      'output' ( out structure{ temp 4-component vector of float PositionCS})
+0:?     Sequence
+0:86      Sequence
+0:86        move second child to first child ( temp 3-component vector of float)
+0:86          'P0' ( temp 3-component vector of float)
+0:86          vector swizzle ( temp 3-component vector of float)
+0:86            PositionWS: direct index for structure ( temp 3-component vector of float)
+0:86              direct index ( temp structure{ temp 3-component vector of float PositionWS,  temp 3-component vector of float NormalWS})
+0:86                'input' ( in 3-element array of structure{ temp 3-component vector of float PositionWS,  temp 3-component vector of float NormalWS})
+0:86                Constant:
+0:86                  0 (const int)
+0:86              Constant:
+0:86                0 (const int)
+0:86            Sequence
+0:86              Constant:
+0:86                0 (const int)
+0:86              Constant:
+0:86                1 (const int)
+0:86              Constant:
+0:86                2 (const int)
+0:87      Sequence
+0:87        move second child to first child ( temp 3-component vector of float)
+0:87          'P1' ( temp 3-component vector of float)
+0:87          vector swizzle ( temp 3-component vector of float)
+0:87            PositionWS: direct index for structure ( temp 3-component vector of float)
+0:87              direct index ( temp structure{ temp 3-component vector of float PositionWS,  temp 3-component vector of float NormalWS})
+0:87                'input' ( in 3-element array of structure{ temp 3-component vector of float PositionWS,  temp 3-component vector of float NormalWS})
+0:87                Constant:
+0:87                  1 (const int)
+0:87              Constant:
+0:87                0 (const int)
+0:87            Sequence
+0:87              Constant:
+0:87                0 (const int)
+0:87              Constant:
+0:87                1 (const int)
+0:87              Constant:
+0:87                2 (const int)
+0:88      Sequence
+0:88        move second child to first child ( temp 3-component vector of float)
+0:88          'P2' ( temp 3-component vector of float)
+0:88          vector swizzle ( temp 3-component vector of float)
+0:88            PositionWS: direct index for structure ( temp 3-component vector of float)
+0:88              direct index ( temp structure{ temp 3-component vector of float PositionWS,  temp 3-component vector of float NormalWS})
+0:88                'input' ( in 3-element array of structure{ temp 3-component vector of float PositionWS,  temp 3-component vector of float NormalWS})
+0:88                Constant:
+0:88                  2 (const int)
+0:88              Constant:
+0:88                0 (const int)
+0:88            Sequence
+0:88              Constant:
+0:88                0 (const int)
+0:88              Constant:
+0:88                1 (const int)
+0:88              Constant:
+0:88                2 (const int)
+0:92      add second child into first child ( temp float)
+0:92        direct index ( temp float)
+0:92          'P0' ( temp 3-component vector of float)
+0:92          Constant:
+0:92            2 (const int)
+0:92        Constant:
+0:92          0.001000
+0:93      add second child into first child ( temp float)
+0:93        direct index ( temp float)
+0:93          'P1' ( temp 3-component vector of float)
+0:93          Constant:
+0:93            2 (const int)
+0:93        Constant:
+0:93          0.001000
+0:94      add second child into first child ( temp float)
+0:94        direct index ( temp float)
+0:94          'P2' ( temp 3-component vector of float)
+0:94          Constant:
+0:94            2 (const int)
+0:94        Constant:
+0:94          0.001000
+0:95      Sequence
+0:95        move second child to first child ( temp 4-component vector of float)
+0:95          'Q0' ( temp 4-component vector of float)
+0:95          vector-times-matrix ( temp 4-component vector of float)
+0:?             Construct vec4 ( temp 4-component vector of float)
+0:95              'P0' ( temp 3-component vector of float)
+0:95              Constant:
+0:95                1.000000
+0:95            proj_matrix: direct index for structure (layout( row_major std140) uniform 4X4 matrix of float)
+0:95              'anon@0' (layout( binding=0 row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float model_view_matrix, layout( row_major std140) uniform 4X4 matrix of float proj_matrix, layout( row_major std140) uniform 4X4 matrix of float model_view_proj_matrix, layout( row_major std140) uniform 3X3 matrix of float normal_matrix, layout( row_major std140) uniform 3-component vector of float color, layout( row_major std140) uniform 3-component vector of float view_dir, layout( row_major std140) uniform 3-component vector of float tess_factor})
+0:95              Constant:
+0:95                1 (const uint)
+0:96      Sequence
+0:96        move second child to first child ( temp 4-component vector of float)
+0:96          'Q1' ( temp 4-component vector of float)
+0:96          vector-times-matrix ( temp 4-component vector of float)
+0:?             Construct vec4 ( temp 4-component vector of float)
+0:96              'P1' ( temp 3-component vector of float)
+0:96              Constant:
+0:96                1.000000
+0:96            proj_matrix: direct index for structure (layout( row_major std140) uniform 4X4 matrix of float)
+0:96              'anon@0' (layout( binding=0 row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float model_view_matrix, layout( row_major std140) uniform 4X4 matrix of float proj_matrix, layout( row_major std140) uniform 4X4 matrix of float model_view_proj_matrix, layout( row_major std140) uniform 3X3 matrix of float normal_matrix, layout( row_major std140) uniform 3-component vector of float color, layout( row_major std140) uniform 3-component vector of float view_dir, layout( row_major std140) uniform 3-component vector of float tess_factor})
+0:96              Constant:
+0:96                1 (const uint)
+0:97      Sequence
+0:97        move second child to first child ( temp 4-component vector of float)
+0:97          'Q2' ( temp 4-component vector of float)
+0:97          vector-times-matrix ( temp 4-component vector of float)
+0:?             Construct vec4 ( temp 4-component vector of float)
+0:97              'P2' ( temp 3-component vector of float)
+0:97              Constant:
+0:97                1.000000
+0:97            proj_matrix: direct index for structure (layout( row_major std140) uniform 4X4 matrix of float)
+0:97              'anon@0' (layout( binding=0 row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float model_view_matrix, layout( row_major std140) uniform 4X4 matrix of float proj_matrix, layout( row_major std140) uniform 4X4 matrix of float model_view_proj_matrix, layout( row_major std140) uniform 3X3 matrix of float normal_matrix, layout( row_major std140) uniform 3-component vector of float color, layout( row_major std140) uniform 3-component vector of float view_dir, layout( row_major std140) uniform 3-component vector of float tess_factor})
+0:97              Constant:
+0:97                1 (const uint)
+0:100      move second child to first child ( temp 4-component vector of float)
+0:100        PositionCS: direct index for structure ( temp 4-component vector of float)
+0:100          'vertex' ( temp structure{ temp 4-component vector of float PositionCS})
+0:100          Constant:
+0:100            0 (const int)
+0:100        'Q0' ( temp 4-component vector of float)
+0:101      Constant:
+0:101        0.000000
+0:102      move second child to first child ( temp 4-component vector of float)
+0:102        PositionCS: direct index for structure ( temp 4-component vector of float)
+0:102          'vertex' ( temp structure{ temp 4-component vector of float PositionCS})
+0:102          Constant:
+0:102            0 (const int)
+0:102        'Q1' ( temp 4-component vector of float)
+0:103      Constant:
+0:103        0.000000
+0:104      Constant:
+0:104        0.000000
+0:107      move second child to first child ( temp 4-component vector of float)
+0:107        PositionCS: direct index for structure ( temp 4-component vector of float)
+0:107          'vertex' ( temp structure{ temp 4-component vector of float PositionCS})
+0:107          Constant:
+0:107            0 (const int)
+0:107        'Q1' ( temp 4-component vector of float)
+0:108      Constant:
+0:108        0.000000
+0:109      move second child to first child ( temp 4-component vector of float)
+0:109        PositionCS: direct index for structure ( temp 4-component vector of float)
+0:109          'vertex' ( temp structure{ temp 4-component vector of float PositionCS})
+0:109          Constant:
+0:109            0 (const int)
+0:109        'Q2' ( temp 4-component vector of float)
+0:110      Constant:
+0:110        0.000000
+0:111      Constant:
+0:111        0.000000
+0:114      move second child to first child ( temp 4-component vector of float)
+0:114        PositionCS: direct index for structure ( temp 4-component vector of float)
+0:114          'vertex' ( temp structure{ temp 4-component vector of float PositionCS})
+0:114          Constant:
+0:114            0 (const int)
+0:114        'Q2' ( temp 4-component vector of float)
+0:115      Constant:
+0:115        0.000000
+0:116      move second child to first child ( temp 4-component vector of float)
+0:116        PositionCS: direct index for structure ( temp 4-component vector of float)
+0:116          'vertex' ( temp structure{ temp 4-component vector of float PositionCS})
+0:116          Constant:
+0:116            0 (const int)
+0:116        'Q0' ( temp 4-component vector of float)
+0:117      Constant:
+0:117        0.000000
+0:118      Constant:
+0:118        0.000000
+0:?   Linker Objects
+0:?     'anon@0' (layout( binding=0 row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float model_view_matrix, layout( row_major std140) uniform 4X4 matrix of float proj_matrix, layout( row_major std140) uniform 4X4 matrix of float model_view_proj_matrix, layout( row_major std140) uniform 3X3 matrix of float normal_matrix, layout( row_major std140) uniform 3-component vector of float color, layout( row_major std140) uniform 3-component vector of float view_dir, layout( row_major std140) uniform 3-component vector of float tess_factor})
+0:?     '@entryPointOutput' (layout( location=0) out 3-element array of structure{ temp 3-component vector of float PositionWS})
+0:?     'patch' (layout( location=0) in 3-element array of structure{ temp 3-component vector of float PositionWS,  temp 3-component vector of float NormalWS})
+0:?     'id' ( in uint InvocationID)
+0:?     '@patchConstantOutput.EdgeTessFactor' ( patch out 4-element array of float TessLevelOuter)
+0:?     '@patchConstantOutput.InsideTessFactor' ( patch out 2-element array of float TessLevelInner)
+0:?     '@patchConstantOutput' (layout( location=1) patch out structure{ temp 3-element array of 3-component vector of float NormalWS})
+
+// Module Version 10000
+// Generated by (magic number): 80006
+// Id's are bound by 216
+
+                              Capability Tessellation
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint TessellationControl 4  "HSMain" 97 101 105 126 139 145
+                              ExecutionMode 4 OutputVertices 3
+                              ExecutionMode 4 Triangles
+                              ExecutionMode 4 SpacingFractionalOdd
+                              ExecutionMode 4 VertexOrderCcw
+                              Source HLSL 500
+                              Name 4  "HSMain"
+                              Name 8  "HSInput"
+                              MemberName 8(HSInput) 0  "PositionWS"
+                              MemberName 8(HSInput) 1  "NormalWS"
+                              Name 15  "HSTrianglePatchConstant"
+                              MemberName 15(HSTrianglePatchConstant) 0  "EdgeTessFactor"
+                              MemberName 15(HSTrianglePatchConstant) 1  "InsideTessFactor"
+                              MemberName 15(HSTrianglePatchConstant) 2  "NormalWS"
+                              Name 18  "HSPatchConstant(struct-HSInput-vf3-vf31[3];"
+                              Name 17  "patch"
+                              Name 21  "HSOutput"
+                              MemberName 21(HSOutput) 0  "PositionWS"
+                              Name 25  "@HSMain(struct-HSInput-vf3-vf31[3];u1;"
+                              Name 23  "patch"
+                              Name 24  "id"
+                              Name 27  "GSVertexInput"
+                              MemberName 27(GSVertexInput) 0  "PositionWS"
+                              MemberName 27(GSVertexInput) 1  "NormalWS"
+                              Name 31  "GSVertexOutput"
+                              MemberName 31(GSVertexOutput) 0  "PositionCS"
+                              Name 36  "GSMain(struct-GSVertexInput-vf3-vf31[3];struct-GSVertexOutput-vf41;"
+                              Name 34  "input"
+                              Name 35  "output"
+                              Name 39  "roundedEdgeTessFactor"
+                              Name 42  "UniformBlock0"
+                              MemberName 42(UniformBlock0) 0  "model_view_matrix"
+                              MemberName 42(UniformBlock0) 1  "proj_matrix"
+                              MemberName 42(UniformBlock0) 2  "model_view_proj_matrix"
+                              MemberName 42(UniformBlock0) 3  "normal_matrix"
+                              MemberName 42(UniformBlock0) 4  "color"
+                              MemberName 42(UniformBlock0) 5  "view_dir"
+                              MemberName 42(UniformBlock0) 6  "tess_factor"
+                              Name 44  ""
+                              Name 51  "roundedInsideTessFactor"
+                              Name 53  "insideTessFactor"
+                              Name 56  "result"
+                              Name 87  "output"
+                              Name 95  "patch"
+                              Name 97  "patch"
+                              Name 99  "id"
+                              Name 101  "id"
+                              Name 105  "@entryPointOutput"
+                              Name 107  "param"
+                              Name 109  "param"
+                              Name 120  "@patchConstantResult"
+                              Name 121  "param"
+                              Name 126  "@patchConstantOutput.EdgeTessFactor"
+                              Name 139  "@patchConstantOutput.InsideTessFactor"
+                              Name 143  "HSTrianglePatchConstant"
+                              MemberName 143(HSTrianglePatchConstant) 0  "NormalWS"
+                              Name 145  "@patchConstantOutput"
+                              Name 151  "P0"
+                              Name 154  "P1"
+                              Name 157  "P2"
+                              Name 174  "Q0"
+                              Name 184  "Q1"
+                              Name 193  "Q2"
+                              Name 202  "vertex"
+                              MemberDecorate 42(UniformBlock0) 0 RowMajor
+                              MemberDecorate 42(UniformBlock0) 0 Offset 0
+                              MemberDecorate 42(UniformBlock0) 0 MatrixStride 16
+                              MemberDecorate 42(UniformBlock0) 1 RowMajor
+                              MemberDecorate 42(UniformBlock0) 1 Offset 64
+                              MemberDecorate 42(UniformBlock0) 1 MatrixStride 16
+                              MemberDecorate 42(UniformBlock0) 2 RowMajor
+                              MemberDecorate 42(UniformBlock0) 2 Offset 128
+                              MemberDecorate 42(UniformBlock0) 2 MatrixStride 16
+                              MemberDecorate 42(UniformBlock0) 3 RowMajor
+                              MemberDecorate 42(UniformBlock0) 3 Offset 192
+                              MemberDecorate 42(UniformBlock0) 3 MatrixStride 16
+                              MemberDecorate 42(UniformBlock0) 4 Offset 240
+                              MemberDecorate 42(UniformBlock0) 5 Offset 256
+                              MemberDecorate 42(UniformBlock0) 6 Offset 272
+                              Decorate 42(UniformBlock0) Block
+                              Decorate 44 DescriptorSet 0
+                              Decorate 44 Binding 0
+                              Decorate 97(patch) Location 0
+                              Decorate 101(id) BuiltIn InvocationId
+                              Decorate 105(@entryPointOutput) Location 0
+                              Decorate 126(@patchConstantOutput.EdgeTessFactor) Patch
+                              Decorate 126(@patchConstantOutput.EdgeTessFactor) BuiltIn TessLevelOuter
+                              Decorate 139(@patchConstantOutput.InsideTessFactor) Patch
+                              Decorate 139(@patchConstantOutput.InsideTessFactor) BuiltIn TessLevelInner
+                              MemberDecorate 143(HSTrianglePatchConstant) 0 Patch
+                              Decorate 145(@patchConstantOutput) Patch
+                              Decorate 145(@patchConstantOutput) Location 1
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 3
+      8(HSInput):             TypeStruct 7(fvec3) 7(fvec3)
+               9:             TypeInt 32 0
+              10:      9(int) Constant 3
+              11:             TypeArray 8(HSInput) 10
+              12:             TypePointer Function 11
+              13:             TypeArray 6(float) 10
+              14:             TypeArray 7(fvec3) 10
+15(HSTrianglePatchConstant):             TypeStruct 13 6(float) 14
+              16:             TypeFunction 15(HSTrianglePatchConstant) 12(ptr)
+              20:             TypePointer Function 9(int)
+    21(HSOutput):             TypeStruct 7(fvec3)
+              22:             TypeFunction 21(HSOutput) 12(ptr) 20(ptr)
+27(GSVertexInput):             TypeStruct 7(fvec3) 7(fvec3)
+              28:             TypeArray 27(GSVertexInput) 10
+              29:             TypePointer Function 28
+              30:             TypeVector 6(float) 4
+31(GSVertexOutput):             TypeStruct 30(fvec4)
+              32:             TypePointer Function 31(GSVertexOutput)
+              33:             TypeFunction 2 29(ptr) 32(ptr)
+              38:             TypePointer Function 7(fvec3)
+              40:             TypeMatrix 30(fvec4) 4
+              41:             TypeMatrix 7(fvec3) 3
+42(UniformBlock0):             TypeStruct 40 40 40 41 7(fvec3) 7(fvec3) 7(fvec3)
+              43:             TypePointer Uniform 42(UniformBlock0)
+              44:     43(ptr) Variable Uniform
+              45:             TypeInt 32 1
+              46:     45(int) Constant 6
+              47:             TypePointer Uniform 7(fvec3)
+              50:             TypePointer Function 6(float)
+              52:    6(float) Constant 1077936128
+              54:    6(float) Constant 1065353216
+              55:             TypePointer Function 15(HSTrianglePatchConstant)
+              57:     45(int) Constant 0
+              58:      9(int) Constant 0
+              62:     45(int) Constant 1
+              63:      9(int) Constant 1
+              67:     45(int) Constant 2
+              68:      9(int) Constant 2
+              86:             TypePointer Function 21(HSOutput)
+              96:             TypePointer Input 11
+       97(patch):     96(ptr) Variable Input
+             100:             TypePointer Input 9(int)
+         101(id):    100(ptr) Variable Input
+             103:             TypeArray 21(HSOutput) 10
+             104:             TypePointer Output 103
+105(@entryPointOutput):    104(ptr) Variable Output
+             112:             TypePointer Output 21(HSOutput)
+             114:      9(int) Constant 4
+             116:             TypeBool
+             124:             TypeArray 6(float) 114
+             125:             TypePointer Output 124
+126(@patchConstantOutput.EdgeTessFactor):    125(ptr) Variable Output
+             129:             TypePointer Output 6(float)
+             137:             TypeArray 6(float) 68
+             138:             TypePointer Output 137
+139(@patchConstantOutput.InsideTessFactor):    138(ptr) Variable Output
+143(HSTrianglePatchConstant):             TypeStruct 14
+             144:             TypePointer Output 143(HSTrianglePatchConstant)
+145(@patchConstantOutput):    144(ptr) Variable Output
+             146:             TypePointer Function 14
+             149:             TypePointer Output 14
+             160:    6(float) Constant 981668463
+             173:             TypePointer Function 30(fvec4)
+             180:             TypePointer Uniform 40
+             205:    6(float) Constant 0
+       4(HSMain):           2 Function None 3
+               5:             Label
+       95(patch):     12(ptr) Variable Function
+          99(id):     20(ptr) Variable Function
+      107(param):     12(ptr) Variable Function
+      109(param):     20(ptr) Variable Function
+120(@patchConstantResult):     55(ptr) Variable Function
+      121(param):     12(ptr) Variable Function
+              98:          11 Load 97(patch)
+                              Store 95(patch) 98
+             102:      9(int) Load 101(id)
+                              Store 99(id) 102
+             106:      9(int) Load 101(id)
+             108:          11 Load 95(patch)
+                              Store 107(param) 108
+             110:      9(int) Load 99(id)
+                              Store 109(param) 110
+             111:21(HSOutput) FunctionCall 25(@HSMain(struct-HSInput-vf3-vf31[3];u1;) 107(param) 109(param)
+             113:    112(ptr) AccessChain 105(@entryPointOutput) 106
+                              Store 113 111
+                              ControlBarrier 68 114 58
+             115:      9(int) Load 101(id)
+             117:   116(bool) IEqual 115 57
+                              SelectionMerge 119 None
+                              BranchConditional 117 118 119
+             118:               Label
+             122:          11   Load 95(patch)
+                                Store 121(param) 122
+             123:15(HSTrianglePatchConstant)   FunctionCall 18(HSPatchConstant(struct-HSInput-vf3-vf31[3];) 121(param)
+                                Store 120(@patchConstantResult) 123
+             127:     50(ptr)   AccessChain 120(@patchConstantResult) 57 57
+             128:    6(float)   Load 127
+             130:    129(ptr)   AccessChain 126(@patchConstantOutput.EdgeTessFactor) 57
+                                Store 130 128
+             131:     50(ptr)   AccessChain 120(@patchConstantResult) 57 62
+             132:    6(float)   Load 131
+             133:    129(ptr)   AccessChain 126(@patchConstantOutput.EdgeTessFactor) 62
+                                Store 133 132
+             134:     50(ptr)   AccessChain 120(@patchConstantResult) 57 67
+             135:    6(float)   Load 134
+             136:    129(ptr)   AccessChain 126(@patchConstantOutput.EdgeTessFactor) 67
+                                Store 136 135
+             140:     50(ptr)   AccessChain 120(@patchConstantResult) 62
+             141:    6(float)   Load 140
+             142:    129(ptr)   AccessChain 139(@patchConstantOutput.InsideTessFactor) 57
+                                Store 142 141
+             147:    146(ptr)   AccessChain 120(@patchConstantResult) 67
+             148:          14   Load 147
+             150:    149(ptr)   AccessChain 145(@patchConstantOutput) 57
+                                Store 150 148
+                                Branch 119
+             119:             Label
+                              Return
+                              FunctionEnd
+18(HSPatchConstant(struct-HSInput-vf3-vf31[3];):15(HSTrianglePatchConstant) Function None 16
+       17(patch):     12(ptr) FunctionParameter
+              19:             Label
+39(roundedEdgeTessFactor):     38(ptr) Variable Function
+51(roundedInsideTessFactor):     50(ptr) Variable Function
+53(insideTessFactor):     50(ptr) Variable Function
+      56(result):     55(ptr) Variable Function
+              48:     47(ptr) AccessChain 44 46
+              49:    7(fvec3) Load 48
+                              Store 39(roundedEdgeTessFactor) 49
+                              Store 51(roundedInsideTessFactor) 52
+                              Store 53(insideTessFactor) 54
+              59:     50(ptr) AccessChain 39(roundedEdgeTessFactor) 58
+              60:    6(float) Load 59
+              61:     50(ptr) AccessChain 56(result) 57 57
+                              Store 61 60
+              64:     50(ptr) AccessChain 39(roundedEdgeTessFactor) 63
+              65:    6(float) Load 64
+              66:     50(ptr) AccessChain 56(result) 57 62
+                              Store 66 65
+              69:     50(ptr) AccessChain 39(roundedEdgeTessFactor) 68
+              70:    6(float) Load 69
+              71:     50(ptr) AccessChain 56(result) 57 67
+                              Store 71 70
+              72:    6(float) Load 51(roundedInsideTessFactor)
+              73:     50(ptr) AccessChain 56(result) 62
+                              Store 73 72
+              74:     38(ptr) AccessChain 17(patch) 57 62
+              75:    7(fvec3) Load 74
+              76:     38(ptr) AccessChain 56(result) 67 57
+                              Store 76 75
+              77:     38(ptr) AccessChain 17(patch) 62 62
+              78:    7(fvec3) Load 77
+              79:     38(ptr) AccessChain 56(result) 67 62
+                              Store 79 78
+              80:     38(ptr) AccessChain 17(patch) 67 62
+              81:    7(fvec3) Load 80
+              82:     38(ptr) AccessChain 56(result) 67 67
+                              Store 82 81
+              83:15(HSTrianglePatchConstant) Load 56(result)
+                              ReturnValue 83
+                              FunctionEnd
+25(@HSMain(struct-HSInput-vf3-vf31[3];u1;):21(HSOutput) Function None 22
+       23(patch):     12(ptr) FunctionParameter
+          24(id):     20(ptr) FunctionParameter
+              26:             Label
+      87(output):     86(ptr) Variable Function
+              88:      9(int) Load 24(id)
+              89:     38(ptr) AccessChain 23(patch) 88 57
+              90:    7(fvec3) Load 89
+              91:     38(ptr) AccessChain 87(output) 57
+                              Store 91 90
+              92:21(HSOutput) Load 87(output)
+                              ReturnValue 92
+                              FunctionEnd
+36(GSMain(struct-GSVertexInput-vf3-vf31[3];struct-GSVertexOutput-vf41;):           2 Function None 33
+       34(input):     29(ptr) FunctionParameter
+      35(output):     32(ptr) FunctionParameter
+              37:             Label
+         151(P0):     38(ptr) Variable Function
+         154(P1):     38(ptr) Variable Function
+         157(P2):     38(ptr) Variable Function
+         174(Q0):    173(ptr) Variable Function
+         184(Q1):    173(ptr) Variable Function
+         193(Q2):    173(ptr) Variable Function
+     202(vertex):     32(ptr) Variable Function
+             152:     38(ptr) AccessChain 34(input) 57 57
+             153:    7(fvec3) Load 152
+                              Store 151(P0) 153
+             155:     38(ptr) AccessChain 34(input) 62 57
+             156:    7(fvec3) Load 155
+                              Store 154(P1) 156
+             158:     38(ptr) AccessChain 34(input) 67 57
+             159:    7(fvec3) Load 158
+                              Store 157(P2) 159
+             161:     50(ptr) AccessChain 151(P0) 68
+             162:    6(float) Load 161
+             163:    6(float) FAdd 162 160
+             164:     50(ptr) AccessChain 151(P0) 68
+                              Store 164 163
+             165:     50(ptr) AccessChain 154(P1) 68
+             166:    6(float) Load 165
+             167:    6(float) FAdd 166 160
+             168:     50(ptr) AccessChain 154(P1) 68
+                              Store 168 167
+             169:     50(ptr) AccessChain 157(P2) 68
+             170:    6(float) Load 169
+             171:    6(float) FAdd 170 160
+             172:     50(ptr) AccessChain 157(P2) 68
+                              Store 172 171
+             175:    7(fvec3) Load 151(P0)
+             176:    6(float) CompositeExtract 175 0
+             177:    6(float) CompositeExtract 175 1
+             178:    6(float) CompositeExtract 175 2
+             179:   30(fvec4) CompositeConstruct 176 177 178 54
+             181:    180(ptr) AccessChain 44 62
+             182:          40 Load 181
+             183:   30(fvec4) VectorTimesMatrix 179 182
+                              Store 174(Q0) 183
+             185:    7(fvec3) Load 154(P1)
+             186:    6(float) CompositeExtract 185 0
+             187:    6(float) CompositeExtract 185 1
+             188:    6(float) CompositeExtract 185 2
+             189:   30(fvec4) CompositeConstruct 186 187 188 54
+             190:    180(ptr) AccessChain 44 62
+             191:          40 Load 190
+             192:   30(fvec4) VectorTimesMatrix 189 191
+                              Store 184(Q1) 192
+             194:    7(fvec3) Load 157(P2)
+             195:    6(float) CompositeExtract 194 0
+             196:    6(float) CompositeExtract 194 1
+             197:    6(float) CompositeExtract 194 2
+             198:   30(fvec4) CompositeConstruct 195 196 197 54
+             199:    180(ptr) AccessChain 44 62
+             200:          40 Load 199
+             201:   30(fvec4) VectorTimesMatrix 198 200
+                              Store 193(Q2) 201
+             203:   30(fvec4) Load 174(Q0)
+             204:    173(ptr) AccessChain 202(vertex) 57
+                              Store 204 203
+             206:   30(fvec4) Load 184(Q1)
+             207:    173(ptr) AccessChain 202(vertex) 57
+                              Store 207 206
+             208:   30(fvec4) Load 184(Q1)
+             209:    173(ptr) AccessChain 202(vertex) 57
+                              Store 209 208
+             210:   30(fvec4) Load 193(Q2)
+             211:    173(ptr) AccessChain 202(vertex) 57
+                              Store 211 210
+             212:   30(fvec4) Load 193(Q2)
+             213:    173(ptr) AccessChain 202(vertex) 57
+                              Store 213 212
+             214:   30(fvec4) Load 174(Q0)
+             215:    173(ptr) AccessChain 202(vertex) 57
+                              Store 215 214
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.hlslOffset.vert.out b/Test/baseResults/hlsl.hlslOffset.vert.out
index 4840e61..b838da4 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): 80002
+// Generated by (magic number): 80006
 // 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 57020ee..5b80f15 100644
--- a/Test/baseResults/hlsl.hull.1.tesc.out
+++ b/Test/baseResults/hlsl.hull.1.tesc.out
@@ -224,13 +224,13 @@
 0:?     '@patchConstantOutput.edges' ( patch out 4-element array of float TessLevelOuter)
 
 // Module Version 10000
-// Generated by (magic number): 80002
-// Id's are bound by 90
+// Generated by (magic number): 80006
+// Id's are bound by 89
 
                               Capability Tessellation
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint TessellationControl 4  "main" 40 44 48 66 72
+                              EntryPoint TessellationControl 4  "main" 40 44 48 65 71
                               ExecutionMode 4 OutputVertices 4
                               ExecutionMode 4 Isolines
                               ExecutionMode 4 SpacingEqual
@@ -255,17 +255,17 @@
                               Name 48  "@entryPointOutput"
                               Name 50  "param"
                               Name 52  "param"
-                              Name 65  "@patchConstantResult"
-                              Name 66  "pid"
-                              Name 67  "param"
-                              Name 72  "@patchConstantOutput.edges"
-                              Name 82  "output"
+                              Name 64  "@patchConstantResult"
+                              Name 65  "pid"
+                              Name 66  "param"
+                              Name 71  "@patchConstantOutput.edges"
+                              Name 81  "output"
                               Decorate 40(ip) Location 0
                               Decorate 44(m_cpid) BuiltIn InvocationId
                               Decorate 48(@entryPointOutput) Location 0
-                              Decorate 66(pid) BuiltIn PrimitiveId
-                              Decorate 72(@patchConstantOutput.edges) Patch
-                              Decorate 72(@patchConstantOutput.edges) BuiltIn TessLevelOuter
+                              Decorate 65(pid) BuiltIn PrimitiveId
+                              Decorate 71(@patchConstantOutput.edges) Patch
+                              Decorate 71(@patchConstantOutput.edges) BuiltIn TessLevelOuter
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -294,27 +294,26 @@
               47:             TypePointer Output 46
 48(@entryPointOutput):     47(ptr) Variable Output
               55:             TypePointer Output 14(HS_OUT)
-              57:      9(int) Constant 1
-              58:      9(int) Constant 0
-              60:             TypeBool
-              64:             TypePointer Function 22(HS_CONSTANT_OUT)
-         66(pid):     43(ptr) Variable Input
-              70:             TypeArray 6(float) 10
-              71:             TypePointer Output 70
-72(@patchConstantOutput.edges):     71(ptr) Variable Output
-              73:             TypePointer Function 6(float)
-              76:             TypePointer Output 6(float)
-              78:     29(int) Constant 1
-              83:    6(float) Constant 1073741824
-              85:    6(float) Constant 1090519040
+              57:      9(int) Constant 0
+              59:             TypeBool
+              63:             TypePointer Function 22(HS_CONSTANT_OUT)
+         65(pid):     43(ptr) Variable Input
+              69:             TypeArray 6(float) 10
+              70:             TypePointer Output 69
+71(@patchConstantOutput.edges):     70(ptr) Variable Output
+              72:             TypePointer Function 6(float)
+              75:             TypePointer Output 6(float)
+              77:     29(int) Constant 1
+              82:    6(float) Constant 1073741824
+              84:    6(float) Constant 1090519040
          4(main):           2 Function None 3
                5:             Label
           38(ip):     12(ptr) Variable Function
       42(m_cpid):     13(ptr) Variable Function
        50(param):     12(ptr) Variable Function
        52(param):     13(ptr) Variable Function
-65(@patchConstantResult):     64(ptr) Variable Function
-       67(param):     13(ptr) Variable Function
+64(@patchConstantResult):     63(ptr) Variable Function
+       66(param):     13(ptr) Variable Function
               41:          11 Load 40(ip)
                               Store 38(ip) 41
               45:      9(int) Load 44(m_cpid)
@@ -327,26 +326,26 @@
               54:  14(HS_OUT) FunctionCall 18(@main(struct-VS_OUT-vf31[4];u1;) 50(param) 52(param)
               56:     55(ptr) AccessChain 48(@entryPointOutput) 49
                               Store 56 54
-                              ControlBarrier 20 57 58
-              59:      9(int) Load 44(m_cpid)
-              61:    60(bool) IEqual 59 30
-                              SelectionMerge 63 None
-                              BranchConditional 61 62 63
-              62:               Label
-              68:      9(int)   Load 66(pid)
-                                Store 67(param) 68
-              69:22(HS_CONSTANT_OUT)   FunctionCall 25(PCF(u1;) 67(param)
-                                Store 65(@patchConstantResult) 69
-              74:     73(ptr)   AccessChain 65(@patchConstantResult) 30 30
-              75:    6(float)   Load 74
-              77:     76(ptr)   AccessChain 72(@patchConstantOutput.edges) 30
-                                Store 77 75
-              79:     73(ptr)   AccessChain 65(@patchConstantResult) 30 78
-              80:    6(float)   Load 79
-              81:     76(ptr)   AccessChain 72(@patchConstantOutput.edges) 78
-                                Store 81 80
-                                Branch 63
-              63:             Label
+                              ControlBarrier 20 10 57
+              58:      9(int) Load 44(m_cpid)
+              60:    59(bool) IEqual 58 30
+                              SelectionMerge 62 None
+                              BranchConditional 60 61 62
+              61:               Label
+              67:      9(int)   Load 65(pid)
+                                Store 66(param) 67
+              68:22(HS_CONSTANT_OUT)   FunctionCall 25(PCF(u1;) 66(param)
+                                Store 64(@patchConstantResult) 68
+              73:     72(ptr)   AccessChain 64(@patchConstantResult) 30 30
+              74:    6(float)   Load 73
+              76:     75(ptr)   AccessChain 71(@patchConstantOutput.edges) 30
+                                Store 76 74
+              78:     72(ptr)   AccessChain 64(@patchConstantResult) 30 77
+              79:    6(float)   Load 78
+              80:     75(ptr)   AccessChain 71(@patchConstantOutput.edges) 77
+                                Store 80 79
+                                Branch 62
+              62:             Label
                               Return
                               FunctionEnd
 18(@main(struct-VS_OUT-vf31[4];u1;):  14(HS_OUT) Function None 15
@@ -364,11 +363,11 @@
      25(PCF(u1;):22(HS_CONSTANT_OUT) Function None 23
          24(pid):     13(ptr) FunctionParameter
               26:             Label
-      82(output):     64(ptr) Variable Function
-              84:     73(ptr) AccessChain 82(output) 30 30
-                              Store 84 83
-              86:     73(ptr) AccessChain 82(output) 30 78
-                              Store 86 85
-              87:22(HS_CONSTANT_OUT) Load 82(output)
-                              ReturnValue 87
+      81(output):     63(ptr) Variable Function
+              83:     72(ptr) AccessChain 81(output) 30 30
+                              Store 83 82
+              85:     72(ptr) AccessChain 81(output) 30 77
+                              Store 85 84
+              86:22(HS_CONSTANT_OUT) Load 81(output)
+                              ReturnValue 86
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.hull.2.tesc.out b/Test/baseResults/hlsl.hull.2.tesc.out
index 8d0708d..ec8f799 100644
--- a/Test/baseResults/hlsl.hull.2.tesc.out
+++ b/Test/baseResults/hlsl.hull.2.tesc.out
@@ -220,13 +220,13 @@
 0:?     '@patchConstantOutput.edges' ( patch out 4-element array of float TessLevelOuter)
 
 // Module Version 10000
-// Generated by (magic number): 80002
-// Id's are bound by 92
+// Generated by (magic number): 80006
+// Id's are bound by 91
 
                               Capability Tessellation
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint TessellationControl 4  "main" 42 46 48 64 66 74
+                              EntryPoint TessellationControl 4  "main" 42 46 48 63 65 73
                               ExecutionMode 4 OutputVertices 4
                               ExecutionMode 4 Isolines
                               ExecutionMode 4 SpacingEqual
@@ -249,20 +249,20 @@
                               Name 46  "@entryPointOutput"
                               Name 48  "InvocationId"
                               Name 50  "param"
-                              Name 63  "@patchConstantResult"
-                              Name 64  "pid"
-                              Name 66  "pos"
-                              Name 67  "param"
-                              Name 69  "param"
-                              Name 74  "@patchConstantOutput.edges"
-                              Name 84  "output"
+                              Name 62  "@patchConstantResult"
+                              Name 63  "pid"
+                              Name 65  "pos"
+                              Name 66  "param"
+                              Name 68  "param"
+                              Name 73  "@patchConstantOutput.edges"
+                              Name 83  "output"
                               Decorate 42(ip) Location 0
                               Decorate 46(@entryPointOutput) Location 0
                               Decorate 48(InvocationId) BuiltIn InvocationId
-                              Decorate 64(pid) BuiltIn PrimitiveId
-                              Decorate 66(pos) BuiltIn Position
-                              Decorate 74(@patchConstantOutput.edges) Patch
-                              Decorate 74(@patchConstantOutput.edges) BuiltIn TessLevelOuter
+                              Decorate 63(pid) BuiltIn PrimitiveId
+                              Decorate 65(pos) BuiltIn Position
+                              Decorate 73(@patchConstantOutput.edges) Patch
+                              Decorate 73(@patchConstantOutput.edges) BuiltIn TessLevelOuter
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -293,28 +293,27 @@
               47:             TypePointer Input 9(int)
 48(InvocationId):     47(ptr) Variable Input
               53:             TypePointer Output 13(HS_OUT)
-              55:      9(int) Constant 1
-              56:      9(int) Constant 0
-              58:             TypeBool
-              62:             TypePointer Function 23(HS_CONSTANT_OUT)
-         64(pid):     47(ptr) Variable Input
-              65:             TypePointer Input 19(fvec4)
-         66(pos):     65(ptr) Variable Input
-              72:             TypeArray 6(float) 10
-              73:             TypePointer Output 72
-74(@patchConstantOutput.edges):     73(ptr) Variable Output
-              75:             TypePointer Function 6(float)
-              78:             TypePointer Output 6(float)
-              80:     31(int) Constant 1
-              85:    6(float) Constant 1073741824
-              87:    6(float) Constant 1090519040
+              55:      9(int) Constant 0
+              57:             TypeBool
+              61:             TypePointer Function 23(HS_CONSTANT_OUT)
+         63(pid):     47(ptr) Variable Input
+              64:             TypePointer Input 19(fvec4)
+         65(pos):     64(ptr) Variable Input
+              71:             TypeArray 6(float) 10
+              72:             TypePointer Output 71
+73(@patchConstantOutput.edges):     72(ptr) Variable Output
+              74:             TypePointer Function 6(float)
+              77:             TypePointer Output 6(float)
+              79:     31(int) Constant 1
+              84:    6(float) Constant 1073741824
+              86:    6(float) Constant 1090519040
          4(main):           2 Function None 3
                5:             Label
           40(ip):     12(ptr) Variable Function
        50(param):     12(ptr) Variable Function
-63(@patchConstantResult):     62(ptr) Variable Function
-       67(param):     18(ptr) Variable Function
-       69(param):     20(ptr) Variable Function
+62(@patchConstantResult):     61(ptr) Variable Function
+       66(param):     18(ptr) Variable Function
+       68(param):     20(ptr) Variable Function
               43:          11 Load 42(ip)
                               Store 40(ip) 43
               49:      9(int) Load 48(InvocationId)
@@ -323,28 +322,28 @@
               52:  13(HS_OUT) FunctionCall 16(@main(struct-VS_OUT-vf31[4];) 50(param)
               54:     53(ptr) AccessChain 46(@entryPointOutput) 49
                               Store 54 52
-                              ControlBarrier 21 55 56
-              57:      9(int) Load 48(InvocationId)
-              59:    58(bool) IEqual 57 32
-                              SelectionMerge 61 None
-                              BranchConditional 59 60 61
-              60:               Label
-              68:      9(int)   Load 64(pid)
-                                Store 67(param) 68
-              70:   19(fvec4)   Load 66(pos)
-                                Store 69(param) 70
-              71:23(HS_CONSTANT_OUT)   FunctionCall 27(PCF(u1;vf4;) 67(param) 69(param)
-                                Store 63(@patchConstantResult) 71
-              76:     75(ptr)   AccessChain 63(@patchConstantResult) 32 32
-              77:    6(float)   Load 76
-              79:     78(ptr)   AccessChain 74(@patchConstantOutput.edges) 32
-                                Store 79 77
-              81:     75(ptr)   AccessChain 63(@patchConstantResult) 32 80
-              82:    6(float)   Load 81
-              83:     78(ptr)   AccessChain 74(@patchConstantOutput.edges) 80
-                                Store 83 82
-                                Branch 61
-              61:             Label
+                              ControlBarrier 21 10 55
+              56:      9(int) Load 48(InvocationId)
+              58:    57(bool) IEqual 56 32
+                              SelectionMerge 60 None
+                              BranchConditional 58 59 60
+              59:               Label
+              67:      9(int)   Load 63(pid)
+                                Store 66(param) 67
+              69:   19(fvec4)   Load 65(pos)
+                                Store 68(param) 69
+              70:23(HS_CONSTANT_OUT)   FunctionCall 27(PCF(u1;vf4;) 66(param) 68(param)
+                                Store 62(@patchConstantResult) 70
+              75:     74(ptr)   AccessChain 62(@patchConstantResult) 32 32
+              76:    6(float)   Load 75
+              78:     77(ptr)   AccessChain 73(@patchConstantOutput.edges) 32
+                                Store 78 76
+              80:     74(ptr)   AccessChain 62(@patchConstantResult) 32 79
+              81:    6(float)   Load 80
+              82:     77(ptr)   AccessChain 73(@patchConstantOutput.edges) 79
+                                Store 82 81
+                                Branch 60
+              60:             Label
                               Return
                               FunctionEnd
 16(@main(struct-VS_OUT-vf31[4];):  13(HS_OUT) Function None 14
@@ -362,11 +361,11 @@
          25(pid):     18(ptr) FunctionParameter
          26(pos):     20(ptr) FunctionParameter
               28:             Label
-      84(output):     62(ptr) Variable Function
-              86:     75(ptr) AccessChain 84(output) 32 32
-                              Store 86 85
-              88:     75(ptr) AccessChain 84(output) 32 80
-                              Store 88 87
-              89:23(HS_CONSTANT_OUT) Load 84(output)
-                              ReturnValue 89
+      83(output):     61(ptr) Variable Function
+              85:     74(ptr) AccessChain 83(output) 32 32
+                              Store 85 84
+              87:     74(ptr) AccessChain 83(output) 32 79
+                              Store 87 86
+              88:23(HS_CONSTANT_OUT) Load 83(output)
+                              ReturnValue 88
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.hull.3.tesc.out b/Test/baseResults/hlsl.hull.3.tesc.out
index 59eed0d..b821bad 100755
--- a/Test/baseResults/hlsl.hull.3.tesc.out
+++ b/Test/baseResults/hlsl.hull.3.tesc.out
@@ -220,13 +220,13 @@
 0:?     '@patchConstantOutput.edges' ( patch out 4-element array of float TessLevelOuter)
 
 // Module Version 10000
-// Generated by (magic number): 80002
-// Id's are bound by 92
+// Generated by (magic number): 80006
+// Id's are bound by 91
 
                               Capability Tessellation
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint TessellationControl 4  "main" 42 46 48 64 66 74
+                              EntryPoint TessellationControl 4  "main" 42 46 48 63 65 73
                               ExecutionMode 4 OutputVertices 4
                               ExecutionMode 4 Triangles
                               ExecutionMode 4 SpacingEqual
@@ -250,20 +250,20 @@
                               Name 46  "@entryPointOutput"
                               Name 48  "InvocationId"
                               Name 50  "param"
-                              Name 63  "@patchConstantResult"
-                              Name 64  "pid"
-                              Name 66  "pos"
-                              Name 67  "param"
-                              Name 69  "param"
-                              Name 74  "@patchConstantOutput.edges"
-                              Name 84  "output"
+                              Name 62  "@patchConstantResult"
+                              Name 63  "pid"
+                              Name 65  "pos"
+                              Name 66  "param"
+                              Name 68  "param"
+                              Name 73  "@patchConstantOutput.edges"
+                              Name 83  "output"
                               Decorate 42(ip) Location 0
                               Decorate 46(@entryPointOutput) Location 0
                               Decorate 48(InvocationId) BuiltIn InvocationId
-                              Decorate 64(pid) BuiltIn PrimitiveId
-                              Decorate 66(pos) BuiltIn Position
-                              Decorate 74(@patchConstantOutput.edges) Patch
-                              Decorate 74(@patchConstantOutput.edges) BuiltIn TessLevelOuter
+                              Decorate 63(pid) BuiltIn PrimitiveId
+                              Decorate 65(pos) BuiltIn Position
+                              Decorate 73(@patchConstantOutput.edges) Patch
+                              Decorate 73(@patchConstantOutput.edges) BuiltIn TessLevelOuter
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -294,28 +294,27 @@
               47:             TypePointer Input 9(int)
 48(InvocationId):     47(ptr) Variable Input
               53:             TypePointer Output 13(HS_OUT)
-              55:      9(int) Constant 1
-              56:      9(int) Constant 0
-              58:             TypeBool
-              62:             TypePointer Function 23(HS_CONSTANT_OUT)
-         64(pid):     47(ptr) Variable Input
-              65:             TypePointer Input 19(fvec4)
-         66(pos):     65(ptr) Variable Input
-              72:             TypeArray 6(float) 10
-              73:             TypePointer Output 72
-74(@patchConstantOutput.edges):     73(ptr) Variable Output
-              75:             TypePointer Function 6(float)
-              78:             TypePointer Output 6(float)
-              80:     31(int) Constant 1
-              85:    6(float) Constant 1073741824
-              87:    6(float) Constant 1090519040
+              55:      9(int) Constant 0
+              57:             TypeBool
+              61:             TypePointer Function 23(HS_CONSTANT_OUT)
+         63(pid):     47(ptr) Variable Input
+              64:             TypePointer Input 19(fvec4)
+         65(pos):     64(ptr) Variable Input
+              71:             TypeArray 6(float) 10
+              72:             TypePointer Output 71
+73(@patchConstantOutput.edges):     72(ptr) Variable Output
+              74:             TypePointer Function 6(float)
+              77:             TypePointer Output 6(float)
+              79:     31(int) Constant 1
+              84:    6(float) Constant 1073741824
+              86:    6(float) Constant 1090519040
          4(main):           2 Function None 3
                5:             Label
           40(ip):     12(ptr) Variable Function
        50(param):     12(ptr) Variable Function
-63(@patchConstantResult):     62(ptr) Variable Function
-       67(param):     18(ptr) Variable Function
-       69(param):     20(ptr) Variable Function
+62(@patchConstantResult):     61(ptr) Variable Function
+       66(param):     18(ptr) Variable Function
+       68(param):     20(ptr) Variable Function
               43:          11 Load 42(ip)
                               Store 40(ip) 43
               49:      9(int) Load 48(InvocationId)
@@ -324,28 +323,28 @@
               52:  13(HS_OUT) FunctionCall 16(@main(struct-VS_OUT-vf31[4];) 50(param)
               54:     53(ptr) AccessChain 46(@entryPointOutput) 49
                               Store 54 52
-                              ControlBarrier 21 55 56
-              57:      9(int) Load 48(InvocationId)
-              59:    58(bool) IEqual 57 32
-                              SelectionMerge 61 None
-                              BranchConditional 59 60 61
-              60:               Label
-              68:      9(int)   Load 64(pid)
-                                Store 67(param) 68
-              70:   19(fvec4)   Load 66(pos)
-                                Store 69(param) 70
-              71:23(HS_CONSTANT_OUT)   FunctionCall 27(PCF(u1;vf4;) 67(param) 69(param)
-                                Store 63(@patchConstantResult) 71
-              76:     75(ptr)   AccessChain 63(@patchConstantResult) 32 32
-              77:    6(float)   Load 76
-              79:     78(ptr)   AccessChain 74(@patchConstantOutput.edges) 32
-                                Store 79 77
-              81:     75(ptr)   AccessChain 63(@patchConstantResult) 32 80
-              82:    6(float)   Load 81
-              83:     78(ptr)   AccessChain 74(@patchConstantOutput.edges) 80
-                                Store 83 82
-                                Branch 61
-              61:             Label
+                              ControlBarrier 21 10 55
+              56:      9(int) Load 48(InvocationId)
+              58:    57(bool) IEqual 56 32
+                              SelectionMerge 60 None
+                              BranchConditional 58 59 60
+              59:               Label
+              67:      9(int)   Load 63(pid)
+                                Store 66(param) 67
+              69:   19(fvec4)   Load 65(pos)
+                                Store 68(param) 69
+              70:23(HS_CONSTANT_OUT)   FunctionCall 27(PCF(u1;vf4;) 66(param) 68(param)
+                                Store 62(@patchConstantResult) 70
+              75:     74(ptr)   AccessChain 62(@patchConstantResult) 32 32
+              76:    6(float)   Load 75
+              78:     77(ptr)   AccessChain 73(@patchConstantOutput.edges) 32
+                                Store 78 76
+              80:     74(ptr)   AccessChain 62(@patchConstantResult) 32 79
+              81:    6(float)   Load 80
+              82:     77(ptr)   AccessChain 73(@patchConstantOutput.edges) 79
+                                Store 82 81
+                                Branch 60
+              60:             Label
                               Return
                               FunctionEnd
 16(@main(struct-VS_OUT-vf31[4];):  13(HS_OUT) Function None 14
@@ -363,11 +362,11 @@
          25(pid):     18(ptr) FunctionParameter
          26(pos):     20(ptr) FunctionParameter
               28:             Label
-      84(output):     62(ptr) Variable Function
-              86:     75(ptr) AccessChain 84(output) 32 32
-                              Store 86 85
-              88:     75(ptr) AccessChain 84(output) 32 80
-                              Store 88 87
-              89:23(HS_CONSTANT_OUT) Load 84(output)
-                              ReturnValue 89
+      83(output):     61(ptr) Variable Function
+              85:     74(ptr) AccessChain 83(output) 32 32
+                              Store 85 84
+              87:     74(ptr) AccessChain 83(output) 32 79
+                              Store 87 86
+              88:23(HS_CONSTANT_OUT) Load 83(output)
+                              ReturnValue 88
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.hull.4.tesc.out b/Test/baseResults/hlsl.hull.4.tesc.out
index 139d7d4..593af3b 100644
--- a/Test/baseResults/hlsl.hull.4.tesc.out
+++ b/Test/baseResults/hlsl.hull.4.tesc.out
@@ -159,10 +159,9 @@
 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:39          indirect 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:?             'cpid' ( in uint InvocationID)
 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})
@@ -400,10 +399,9 @@
 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:39          indirect 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:?             'cpid' ( in uint InvocationID)
 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})
@@ -478,7 +476,7 @@
 0:?     '@patchConstantOutput.fInsideTessFactor' ( patch out 2-element array of float TessLevelInner)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 127
 
                               Capability Tessellation
@@ -514,10 +512,10 @@
                               Name 81  "cpid"
                               Name 83  "cpid"
                               Name 86  "@entryPointOutput.m_Position"
-                              Name 87  "param"
-                              Name 89  "param"
-                              Name 103  "@patchConstantResult"
-                              Name 104  "param"
+                              Name 88  "param"
+                              Name 90  "param"
+                              Name 104  "@patchConstantResult"
+                              Name 105  "param"
                               Name 110  "@patchConstantOutput.fTessFactor"
                               Name 123  "@patchConstantOutput.fInsideTessFactor"
                               Decorate 56(I.m_Position) BuiltIn Position
@@ -568,27 +566,26 @@
         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
+              94:             TypePointer Output 7(fvec4)
+              96:      9(int) Constant 2
+              97:      9(int) Constant 4
+              98:      9(int) Constant 0
+             100:             TypeBool
+             108:             TypeArray 6(float) 97
              109:             TypePointer Output 108
 110(@patchConstantOutput.fTessFactor):    109(ptr) Variable Output
              113:             TypePointer Output 6(float)
-             121:             TypeArray 6(float) 95
+             121:             TypeArray 6(float) 96
              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
+       88(param):     12(ptr) Variable Function
+       90(param):     19(ptr) Variable Function
+104(@patchConstantResult):     26(ptr) Variable Function
+      105(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
@@ -615,42 +612,43 @@
                               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
+              87:      9(int) Load 83(cpid)
+              89:          11 Load 53(I)
+                              Store 88(param) 89
+              91:      9(int) Load 81(cpid)
+                              Store 90(param) 91
+              92:20(HS_Main_Output) FunctionCall 24(@main(struct-HS_Input-vf4-vf41[3];u1;) 88(param) 90(param)
+              93:    7(fvec4) CompositeExtract 92 0
+              95:     94(ptr) AccessChain 86(@entryPointOutput.m_Position) 87
+                              Store 95 93
+                              ControlBarrier 96 97 98
+              99:      9(int) Load 83(cpid)
+             101:   100(bool) IEqual 99 33
+                              SelectionMerge 103 None
+                              BranchConditional 101 102 103
+             102:               Label
+             106:          11   Load 53(I)
+                                Store 105(param) 106
+             107:14(HS_Output)   FunctionCall 17(HS_ConstFunc(struct-HS_Input-vf4-vf41[3];) 105(param)
+                                Store 104(@patchConstantResult) 107
+             111:     34(ptr)   AccessChain 104(@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
+             115:     34(ptr)   AccessChain 104(@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
+             118:     34(ptr)   AccessChain 104(@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
+             124:     34(ptr)   AccessChain 104(@patchConstantResult) 32
              125:    6(float)   Load 124
              126:    113(ptr)   AccessChain 123(@patchConstantOutput.fInsideTessFactor) 33
                                 Store 126 125
-                                Branch 102
-             102:             Label
+                                Branch 103
+             103:             Label
                               Return
                               FunctionEnd
 17(HS_ConstFunc(struct-HS_Input-vf4-vf41[3];):14(HS_Output) Function None 15
diff --git a/Test/baseResults/hlsl.hull.5.tesc.out b/Test/baseResults/hlsl.hull.5.tesc.out
index 3a42b52..656427b 100644
--- a/Test/baseResults/hlsl.hull.5.tesc.out
+++ b/Test/baseResults/hlsl.hull.5.tesc.out
@@ -80,10 +80,9 @@
 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:39          indirect 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:?             'cpid' ( in uint InvocationID)
 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)
@@ -174,10 +173,9 @@
 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:39          indirect 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:?             'cpid' ( in uint InvocationID)
 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)
diff --git a/Test/baseResults/hlsl.hull.ctrlpt-1.tesc.out b/Test/baseResults/hlsl.hull.ctrlpt-1.tesc.out
index 24e4aa7..f286c23 100644
--- a/Test/baseResults/hlsl.hull.ctrlpt-1.tesc.out
+++ b/Test/baseResults/hlsl.hull.ctrlpt-1.tesc.out
@@ -396,7 +396,7 @@
 0:?     '@patchConstantOutput.flInFactor' ( patch out 2-element array of float TessLevelInner)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 124
 
                               Capability Tessellation
@@ -434,12 +434,12 @@
                               Name 68  "param"
                               Name 70  "param"
                               Name 74  "i"
-                              Name 75  "param"
-                              Name 77  "param"
-                              Name 81  "i"
-                              Name 82  "param"
-                              Name 84  "param"
-                              Name 88  "@patchConstantResult"
+                              Name 76  "param"
+                              Name 78  "param"
+                              Name 82  "i"
+                              Name 83  "param"
+                              Name 85  "param"
+                              Name 89  "@patchConstantResult"
                               Name 94  "@patchConstantOutput.tfactor"
                               Name 108  "@patchConstantOutput.flInFactor"
                               Name 112  "o"
@@ -478,15 +478,15 @@
 48(@entryPointOutput):     47(ptr) Variable Output
               55:             TypePointer Output 14(hs_out_t)
               57:      9(int) Constant 2
-              58:      9(int) Constant 1
+              58:      9(int) Constant 4
               59:      9(int) Constant 0
               61:             TypeBool
               65:             TypePointer Function 20
               73:     29(int) Constant 1
-              80:     29(int) Constant 2
-              87:             TypePointer Function 22(hs_pcf_t)
-              91:      9(int) Constant 4
-              92:             TypeArray 6(float) 91
+              75:      9(int) Constant 1
+              81:     29(int) Constant 2
+              88:             TypePointer Function 22(hs_pcf_t)
+              92:             TypeArray 6(float) 58
               93:             TypePointer Output 92
 94(@patchConstantOutput.tfactor):     93(ptr) Variable Output
               95:             TypePointer Function 6(float)
@@ -506,12 +506,12 @@
        68(param):     12(ptr) Variable Function
        70(param):     13(ptr) Variable Function
            74(i):     12(ptr) Variable Function
-       75(param):     12(ptr) Variable Function
-       77(param):     13(ptr) Variable Function
-           81(i):     12(ptr) Variable Function
-       82(param):     12(ptr) Variable Function
-       84(param):     13(ptr) Variable Function
-88(@patchConstantResult):     87(ptr) Variable Function
+       76(param):     12(ptr) Variable Function
+       78(param):     13(ptr) Variable Function
+           82(i):     12(ptr) Variable Function
+       83(param):     12(ptr) Variable Function
+       85(param):     13(ptr) Variable Function
+89(@patchConstantResult):     88(ptr) Variable Function
               42:          11 Load 41(i)
                               Store 39(i) 42
               46:      9(int) Load 45(cpid)
@@ -536,34 +536,34 @@
               71:14(hs_out_t)   FunctionCall 18(@main(struct-hs_in_t-vf31[3];u1;) 68(param) 70(param)
               72:     27(ptr)   AccessChain 66(pcf_out) 30
                                 Store 72 71
-              76:          11   Load 74(i)
-                                Store 75(param) 76
-                                Store 77(param) 58
-              78:14(hs_out_t)   FunctionCall 18(@main(struct-hs_in_t-vf31[3];u1;) 75(param) 77(param)
-              79:     27(ptr)   AccessChain 66(pcf_out) 73
-                                Store 79 78
-              83:          11   Load 81(i)
-                                Store 82(param) 83
-                                Store 84(param) 57
-              85:14(hs_out_t)   FunctionCall 18(@main(struct-hs_in_t-vf31[3];u1;) 82(param) 84(param)
-              86:     27(ptr)   AccessChain 66(pcf_out) 80
-                                Store 86 85
-              89:          20   Load 66(pcf_out)
-              90:22(hs_pcf_t)   FunctionCall 25(PCF(struct-hs_out_t-vf31[3];) 89
-                                Store 88(@patchConstantResult) 90
-              96:     95(ptr)   AccessChain 88(@patchConstantResult) 30 30
+              77:          11   Load 74(i)
+                                Store 76(param) 77
+                                Store 78(param) 75
+              79:14(hs_out_t)   FunctionCall 18(@main(struct-hs_in_t-vf31[3];u1;) 76(param) 78(param)
+              80:     27(ptr)   AccessChain 66(pcf_out) 73
+                                Store 80 79
+              84:          11   Load 82(i)
+                                Store 83(param) 84
+                                Store 85(param) 57
+              86:14(hs_out_t)   FunctionCall 18(@main(struct-hs_in_t-vf31[3];u1;) 83(param) 85(param)
+              87:     27(ptr)   AccessChain 66(pcf_out) 81
+                                Store 87 86
+              90:          20   Load 66(pcf_out)
+              91:22(hs_pcf_t)   FunctionCall 25(PCF(struct-hs_out_t-vf31[3];) 90
+                                Store 89(@patchConstantResult) 91
+              96:     95(ptr)   AccessChain 89(@patchConstantResult) 30 30
               97:    6(float)   Load 96
               99:     98(ptr)   AccessChain 94(@patchConstantOutput.tfactor) 30
                                 Store 99 97
-             100:     95(ptr)   AccessChain 88(@patchConstantResult) 30 73
+             100:     95(ptr)   AccessChain 89(@patchConstantResult) 30 73
              101:    6(float)   Load 100
              102:     98(ptr)   AccessChain 94(@patchConstantOutput.tfactor) 73
                                 Store 102 101
-             103:     95(ptr)   AccessChain 88(@patchConstantResult) 30 80
+             103:     95(ptr)   AccessChain 89(@patchConstantResult) 30 81
              104:    6(float)   Load 103
-             105:     98(ptr)   AccessChain 94(@patchConstantOutput.tfactor) 80
+             105:     98(ptr)   AccessChain 94(@patchConstantOutput.tfactor) 81
                                 Store 105 104
-             109:     95(ptr)   AccessChain 88(@patchConstantResult) 73
+             109:     95(ptr)   AccessChain 89(@patchConstantResult) 73
              110:    6(float)   Load 109
              111:     98(ptr)   AccessChain 108(@patchConstantOutput.flInFactor) 30
                                 Store 111 110
@@ -587,7 +587,7 @@
 25(PCF(struct-hs_out_t-vf31[3];):22(hs_pcf_t) Function None 23
      24(pcf_out):          20 FunctionParameter
               26:             Label
-          112(o):     87(ptr) Variable Function
+          112(o):     88(ptr) Variable Function
              113:    6(float) CompositeExtract 24(pcf_out) 0 0 0
              114:     95(ptr) AccessChain 112(o) 30 30
                               Store 114 113
@@ -595,7 +595,7 @@
              116:     95(ptr) AccessChain 112(o) 30 73
                               Store 116 115
              117:    6(float) CompositeExtract 24(pcf_out) 2 0 0
-             118:     95(ptr) AccessChain 112(o) 30 80
+             118:     95(ptr) AccessChain 112(o) 30 81
                               Store 118 117
              120:     95(ptr) AccessChain 112(o) 73
                               Store 120 119
diff --git a/Test/baseResults/hlsl.hull.ctrlpt-2.tesc.out b/Test/baseResults/hlsl.hull.ctrlpt-2.tesc.out
index 89582b7..e260fc2 100644
--- a/Test/baseResults/hlsl.hull.ctrlpt-2.tesc.out
+++ b/Test/baseResults/hlsl.hull.ctrlpt-2.tesc.out
@@ -414,7 +414,7 @@
 0:?     '@patchConstantOutput.flInFactor' ( patch out 2-element array of float TessLevelInner)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 126
 
                               Capability Tessellation
@@ -453,12 +453,12 @@
                               Name 69  "param"
                               Name 71  "param"
                               Name 75  "i"
-                              Name 76  "param"
-                              Name 78  "param"
-                              Name 82  "i"
-                              Name 83  "param"
-                              Name 85  "param"
-                              Name 89  "@patchConstantResult"
+                              Name 77  "param"
+                              Name 79  "param"
+                              Name 83  "i"
+                              Name 84  "param"
+                              Name 86  "param"
+                              Name 90  "@patchConstantResult"
                               Name 96  "@patchConstantOutput.tfactor"
                               Name 110  "@patchConstantOutput.flInFactor"
                               Name 114  "o"
@@ -497,15 +497,15 @@
 49(@entryPointOutput):     48(ptr) Variable Output
               56:             TypePointer Output 14(hs_out_t)
               58:      9(int) Constant 2
-              59:      9(int) Constant 1
+              59:      9(int) Constant 4
               60:      9(int) Constant 0
               62:             TypeBool
               66:             TypePointer Function 20
               74:     28(int) Constant 1
-              81:     28(int) Constant 2
-              88:             TypePointer Function 22(hs_pcf_t)
-              93:      9(int) Constant 4
-              94:             TypeArray 6(float) 93
+              76:      9(int) Constant 1
+              82:     28(int) Constant 2
+              89:             TypePointer Function 22(hs_pcf_t)
+              94:             TypeArray 6(float) 59
               95:             TypePointer Output 94
 96(@patchConstantOutput.tfactor):     95(ptr) Variable Output
               97:             TypePointer Function 6(float)
@@ -525,12 +525,12 @@
        69(param):     12(ptr) Variable Function
        71(param):     13(ptr) Variable Function
            75(i):     12(ptr) Variable Function
-       76(param):     12(ptr) Variable Function
-       78(param):     13(ptr) Variable Function
-           82(i):     12(ptr) Variable Function
-       83(param):     12(ptr) Variable Function
-       85(param):     13(ptr) Variable Function
-89(@patchConstantResult):     88(ptr) Variable Function
+       77(param):     12(ptr) Variable Function
+       79(param):     13(ptr) Variable Function
+           83(i):     12(ptr) Variable Function
+       84(param):     12(ptr) Variable Function
+       86(param):     13(ptr) Variable Function
+90(@patchConstantResult):     89(ptr) Variable Function
               43:          11 Load 42(i)
                               Store 40(i) 43
               47:      9(int) Load 46(cpid)
@@ -555,35 +555,35 @@
               72:14(hs_out_t)   FunctionCall 18(@main(struct-hs_in_t-vf31[3];u1;) 69(param) 71(param)
               73:     30(ptr)   AccessChain 67(pcf_out) 29
                                 Store 73 72
-              77:          11   Load 75(i)
-                                Store 76(param) 77
-                                Store 78(param) 59
-              79:14(hs_out_t)   FunctionCall 18(@main(struct-hs_in_t-vf31[3];u1;) 76(param) 78(param)
-              80:     30(ptr)   AccessChain 67(pcf_out) 74
-                                Store 80 79
-              84:          11   Load 82(i)
-                                Store 83(param) 84
-                                Store 85(param) 58
-              86:14(hs_out_t)   FunctionCall 18(@main(struct-hs_in_t-vf31[3];u1;) 83(param) 85(param)
-              87:     30(ptr)   AccessChain 67(pcf_out) 81
-                                Store 87 86
-              90:          20   Load 67(pcf_out)
-              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
+              78:          11   Load 75(i)
+                                Store 77(param) 78
+                                Store 79(param) 76
+              80:14(hs_out_t)   FunctionCall 18(@main(struct-hs_in_t-vf31[3];u1;) 77(param) 79(param)
+              81:     30(ptr)   AccessChain 67(pcf_out) 74
+                                Store 81 80
+              85:          11   Load 83(i)
+                                Store 84(param) 85
+                                Store 86(param) 58
+              87:14(hs_out_t)   FunctionCall 18(@main(struct-hs_in_t-vf31[3];u1;) 84(param) 86(param)
+              88:     30(ptr)   AccessChain 67(pcf_out) 82
+                                Store 88 87
+              91:          20   Load 67(pcf_out)
+              92:          11   Load 40(i)
+              93:22(hs_pcf_t)   FunctionCall 26(PCF(struct-hs_out_t-vf31[3];struct-hs_in_t-vf31[3];) 91 92
+                                Store 90(@patchConstantResult) 93
+              98:     97(ptr)   AccessChain 90(@patchConstantResult) 29 29
               99:    6(float)   Load 98
              101:    100(ptr)   AccessChain 96(@patchConstantOutput.tfactor) 29
                                 Store 101 99
-             102:     97(ptr)   AccessChain 89(@patchConstantResult) 29 74
+             102:     97(ptr)   AccessChain 90(@patchConstantResult) 29 74
              103:    6(float)   Load 102
              104:    100(ptr)   AccessChain 96(@patchConstantOutput.tfactor) 74
                                 Store 104 103
-             105:     97(ptr)   AccessChain 89(@patchConstantResult) 29 81
+             105:     97(ptr)   AccessChain 90(@patchConstantResult) 29 82
              106:    6(float)   Load 105
-             107:    100(ptr)   AccessChain 96(@patchConstantOutput.tfactor) 81
+             107:    100(ptr)   AccessChain 96(@patchConstantOutput.tfactor) 82
                                 Store 107 106
-             111:     97(ptr)   AccessChain 89(@patchConstantResult) 74
+             111:     97(ptr)   AccessChain 90(@patchConstantResult) 74
              112:    6(float)   Load 111
              113:    100(ptr)   AccessChain 110(@patchConstantOutput.flInFactor) 29
                                 Store 113 112
@@ -608,7 +608,7 @@
      24(pcf_out):          20 FunctionParameter
       25(pcf_in):          11 FunctionParameter
               27:             Label
-          114(o):     88(ptr) Variable Function
+          114(o):     89(ptr) Variable Function
              115:    6(float) CompositeExtract 24(pcf_out) 0 0 0
              116:     97(ptr) AccessChain 114(o) 29 29
                               Store 116 115
@@ -616,7 +616,7 @@
              118:     97(ptr) AccessChain 114(o) 29 74
                               Store 118 117
              119:    6(float) CompositeExtract 24(pcf_out) 2 0 0
-             120:     97(ptr) AccessChain 114(o) 29 81
+             120:     97(ptr) AccessChain 114(o) 29 82
                               Store 120 119
              122:     97(ptr) AccessChain 114(o) 74
                               Store 122 121
diff --git a/Test/baseResults/hlsl.hull.void.tesc.out b/Test/baseResults/hlsl.hull.void.tesc.out
index 68524d9..d1028ce 100644
--- a/Test/baseResults/hlsl.hull.void.tesc.out
+++ b/Test/baseResults/hlsl.hull.void.tesc.out
@@ -108,7 +108,7 @@
 0:?     'InvocationId' ( in uint InvocationID)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 55
 
                               Capability Tessellation
@@ -161,7 +161,7 @@
 39(InvocationId):     38(ptr) Variable Input
               44:             TypePointer Output 13(HS_OUT)
               46:      9(int) Constant 2
-              47:      9(int) Constant 1
+              47:      9(int) Constant 4
               48:      9(int) Constant 0
               50:             TypeBool
          4(main):           2 Function None 3
diff --git a/Test/baseResults/hlsl.identifier.sample.frag.out b/Test/baseResults/hlsl.identifier.sample.frag.out
index 356a212..9fba5bc 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): 80002
+// Generated by (magic number): 80006
 // 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 8490324..907458b 100755
--- a/Test/baseResults/hlsl.if.frag.out
+++ b/Test/baseResults/hlsl.if.frag.out
@@ -42,7 +42,7 @@
 0:14            'input' ( in 4-component vector of float)
 0:14            'input' ( in 4-component vector of float)
 0:14        true case is null
-0:19      Test condition and select ( temp void)
+0:19      Test condition and select ( temp void): Flatten
 0:19        Condition
 0:19        all ( temp bool)
 0:19          Equal ( temp 4-component vector of bool)
@@ -152,7 +152,7 @@
 0:14            'input' ( in 4-component vector of float)
 0:14            'input' ( in 4-component vector of float)
 0:14        true case is null
-0:19      Test condition and select ( temp void)
+0:19      Test condition and select ( temp void): Flatten
 0:19        Condition
 0:19        all ( temp bool)
 0:19          Equal ( temp 4-component vector of bool)
@@ -216,7 +216,7 @@
 0:?     'input' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 103
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.imagefetch-subvec4.comp.out b/Test/baseResults/hlsl.imagefetch-subvec4.comp.out
new file mode 100644
index 0000000..5638609
--- /dev/null
+++ b/Test/baseResults/hlsl.imagefetch-subvec4.comp.out
@@ -0,0 +1,142 @@
+hlsl.imagefetch-subvec4.comp
+Shader version: 500
+local_size = (8, 8, 8)
+0:? Sequence
+0:6  Function Definition: @main(vu3; ( temp void)
+0:6    Function Parameters: 
+0:6      'tid' ( in 3-component vector of uint)
+0:?     Sequence
+0:7      Sequence
+0:7        move second child to first child ( temp uint)
+0:7          'storeTemp' ( temp uint)
+0:7          Convert int to uint ( temp uint)
+0:7            textureFetch ( temp int)
+0:7              'IN' (layout( binding=0) uniform itexture3D)
+0:7              'tid' ( in 3-component vector of uint)
+0:7              Constant:
+0:7                0 (const int)
+0:7        imageStore ( temp void)
+0:7          'OUT' (layout( binding=1 r32ui) uniform uimage3D)
+0:7          'tid' ( in 3-component vector of uint)
+0:7          'storeTemp' ( temp uint)
+0:7        'storeTemp' ( temp uint)
+0:6  Function Definition: main( ( temp void)
+0:6    Function Parameters: 
+0:?     Sequence
+0:6      move second child to first child ( temp 3-component vector of uint)
+0:?         'tid' ( temp 3-component vector of uint)
+0:?         'tid' ( in 3-component vector of uint GlobalInvocationID)
+0:6      Function Call: @main(vu3; ( temp void)
+0:?         'tid' ( temp 3-component vector of uint)
+0:?   Linker Objects
+0:?     'IN' (layout( binding=0) uniform itexture3D)
+0:?     'OUT' (layout( binding=1 r32ui) uniform uimage3D)
+0:?     'tid' ( in 3-component vector of uint GlobalInvocationID)
+
+
+Linked compute stage:
+
+
+Shader version: 500
+local_size = (8, 8, 8)
+0:? Sequence
+0:6  Function Definition: @main(vu3; ( temp void)
+0:6    Function Parameters: 
+0:6      'tid' ( in 3-component vector of uint)
+0:?     Sequence
+0:7      Sequence
+0:7        move second child to first child ( temp uint)
+0:7          'storeTemp' ( temp uint)
+0:7          Convert int to uint ( temp uint)
+0:7            textureFetch ( temp int)
+0:7              'IN' (layout( binding=0) uniform itexture3D)
+0:7              'tid' ( in 3-component vector of uint)
+0:7              Constant:
+0:7                0 (const int)
+0:7        imageStore ( temp void)
+0:7          'OUT' (layout( binding=1 r32ui) uniform uimage3D)
+0:7          'tid' ( in 3-component vector of uint)
+0:7          'storeTemp' ( temp uint)
+0:7        'storeTemp' ( temp uint)
+0:6  Function Definition: main( ( temp void)
+0:6    Function Parameters: 
+0:?     Sequence
+0:6      move second child to first child ( temp 3-component vector of uint)
+0:?         'tid' ( temp 3-component vector of uint)
+0:?         'tid' ( in 3-component vector of uint GlobalInvocationID)
+0:6      Function Call: @main(vu3; ( temp void)
+0:?         'tid' ( temp 3-component vector of uint)
+0:?   Linker Objects
+0:?     'IN' (layout( binding=0) uniform itexture3D)
+0:?     'OUT' (layout( binding=1 r32ui) uniform uimage3D)
+0:?     'tid' ( in 3-component vector of uint GlobalInvocationID)
+
+// Module Version 10000
+// Generated by (magic number): 80006
+// Id's are bound by 39
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main" 34
+                              ExecutionMode 4 LocalSize 8 8 8
+                              Source HLSL 500
+                              Name 4  "main"
+                              Name 11  "@main(vu3;"
+                              Name 10  "tid"
+                              Name 14  "storeTemp"
+                              Name 18  "IN"
+                              Name 28  "OUT"
+                              Name 32  "tid"
+                              Name 34  "tid"
+                              Name 36  "param"
+                              Decorate 18(IN) DescriptorSet 0
+                              Decorate 18(IN) Binding 0
+                              Decorate 28(OUT) DescriptorSet 0
+                              Decorate 28(OUT) Binding 1
+                              Decorate 34(tid) BuiltIn GlobalInvocationId
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypeVector 6(int) 3
+               8:             TypePointer Function 7(ivec3)
+               9:             TypeFunction 2 8(ptr)
+              13:             TypePointer Function 6(int)
+              15:             TypeInt 32 1
+              16:             TypeImage 15(int) 3D sampled format:Unknown
+              17:             TypePointer UniformConstant 16
+          18(IN):     17(ptr) Variable UniformConstant
+              21:     15(int) Constant 0
+              22:             TypeVector 15(int) 4
+              26:             TypeImage 6(int) 3D nonsampled format:R32ui
+              27:             TypePointer UniformConstant 26
+         28(OUT):     27(ptr) Variable UniformConstant
+              33:             TypePointer Input 7(ivec3)
+         34(tid):     33(ptr) Variable Input
+         4(main):           2 Function None 3
+               5:             Label
+         32(tid):      8(ptr) Variable Function
+       36(param):      8(ptr) Variable Function
+              35:    7(ivec3) Load 34(tid)
+                              Store 32(tid) 35
+              37:    7(ivec3) Load 32(tid)
+                              Store 36(param) 37
+              38:           2 FunctionCall 11(@main(vu3;) 36(param)
+                              Return
+                              FunctionEnd
+  11(@main(vu3;):           2 Function None 9
+         10(tid):      8(ptr) FunctionParameter
+              12:             Label
+   14(storeTemp):     13(ptr) Variable Function
+              19:          16 Load 18(IN)
+              20:    7(ivec3) Load 10(tid)
+              23:   22(ivec4) ImageFetch 19 20 Lod 21
+              24:     15(int) CompositeExtract 23 0
+              25:      6(int) Bitcast 24
+                              Store 14(storeTemp) 25
+              29:          26 Load 28(OUT)
+              30:    7(ivec3) Load 10(tid)
+              31:      6(int) Load 14(storeTemp)
+                              ImageWrite 29 30 31
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.implicitBool.frag.out b/Test/baseResults/hlsl.implicitBool.frag.out
index 2da4fae..c545a2e 100755
--- a/Test/baseResults/hlsl.implicitBool.frag.out
+++ b/Test/baseResults/hlsl.implicitBool.frag.out
@@ -74,12 +74,11 @@
 0:17                'anon@0' (layout( row_major std140) uniform block{ uniform float condf,  uniform int condi,  uniform 1-component vector of float condf1,  uniform 1-component vector of int condi1})
 0:17                Constant:
 0:17                  1 (const uint)
-0:17            Convert int to bool ( temp bool)
-0:17              Convert float to int ( temp int)
-0:17                condf: direct index for structure ( uniform float)
-0:17                  'anon@0' (layout( row_major std140) uniform block{ uniform float condf,  uniform int condi,  uniform 1-component vector of float condf1,  uniform 1-component vector of int condi1})
-0:17                  Constant:
-0:17                    0 (const uint)
+0:17            Convert float to bool ( temp bool)
+0:17              condf: direct index for structure ( uniform float)
+0:17                'anon@0' (layout( row_major std140) uniform block{ uniform float condf,  uniform int condi,  uniform 1-component vector of float condf1,  uniform 1-component vector of int condi1})
+0:17                Constant:
+0:17                  0 (const uint)
 0:17          Convert float to bool ( temp bool)
 0:17            condf1: direct index for structure ( uniform 1-component vector of float)
 0:17              'anon@0' (layout( row_major std140) uniform block{ uniform float condf,  uniform int condi,  uniform 1-component vector of float condf1,  uniform 1-component vector of int condi1})
@@ -133,7 +132,7 @@
 0:28      Sequence
 0:28        move second child to first child ( temp float)
 0:28          'g' ( temp float)
-0:28          Test condition and select ( temp float)
+0:28          Test condition and select ( temp float): no shortcircuit
 0:28            Condition
 0:28            Convert float to bool ( temp bool)
 0:28              condf: direct index for structure ( uniform float)
@@ -243,12 +242,11 @@
 0:17                'anon@0' (layout( row_major std140) uniform block{ uniform float condf,  uniform int condi,  uniform 1-component vector of float condf1,  uniform 1-component vector of int condi1})
 0:17                Constant:
 0:17                  1 (const uint)
-0:17            Convert int to bool ( temp bool)
-0:17              Convert float to int ( temp int)
-0:17                condf: direct index for structure ( uniform float)
-0:17                  'anon@0' (layout( row_major std140) uniform block{ uniform float condf,  uniform int condi,  uniform 1-component vector of float condf1,  uniform 1-component vector of int condi1})
-0:17                  Constant:
-0:17                    0 (const uint)
+0:17            Convert float to bool ( temp bool)
+0:17              condf: direct index for structure ( uniform float)
+0:17                'anon@0' (layout( row_major std140) uniform block{ uniform float condf,  uniform int condi,  uniform 1-component vector of float condf1,  uniform 1-component vector of int condi1})
+0:17                Constant:
+0:17                  0 (const uint)
 0:17          Convert float to bool ( temp bool)
 0:17            condf1: direct index for structure ( uniform 1-component vector of float)
 0:17              'anon@0' (layout( row_major std140) uniform block{ uniform float condf,  uniform int condi,  uniform 1-component vector of float condf1,  uniform 1-component vector of int condi1})
@@ -302,7 +300,7 @@
 0:28      Sequence
 0:28        move second child to first child ( temp float)
 0:28          'g' ( temp float)
-0:28          Test condition and select ( temp float)
+0:28          Test condition and select ( temp float): no shortcircuit
 0:28            Condition
 0:28            Convert float to bool ( temp bool)
 0:28              condf: direct index for structure ( uniform float)
@@ -334,13 +332,13 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80002
-// Id's are bound by 140
+// Generated by (magic number): 80006
+// Id's are bound by 139
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 138
+                              EntryPoint Fragment 4  "main" 137
                               ExecutionMode 4 OriginUpperLeft
                               Source HLSL 500
                               Name 4  "main"
@@ -352,17 +350,17 @@
                               MemberName 16($Global) 2  "condf1"
                               MemberName 16($Global) 3  "condi1"
                               Name 18  ""
-                              Name 88  "f"
-                              Name 101  "i"
-                              Name 121  "g"
-                              Name 138  "@entryPointOutput"
+                              Name 87  "f"
+                              Name 100  "i"
+                              Name 120  "g"
+                              Name 137  "@entryPointOutput"
                               MemberDecorate 16($Global) 0 Offset 0
                               MemberDecorate 16($Global) 1 Offset 4
-                              MemberDecorate 16($Global) 2 Offset 16
-                              MemberDecorate 16($Global) 3 Offset 32
+                              MemberDecorate 16($Global) 2 Offset 8
+                              MemberDecorate 16($Global) 3 Offset 12
                               Decorate 16($Global) Block
                               Decorate 18 DescriptorSet 0
-                              Decorate 138(@entryPointOutput) Location 0
+                              Decorate 137(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -388,25 +386,25 @@
               53:    6(float) Constant 1077936128
               57:     15(int) Constant 3
               64:    6(float) Constant 1082130432
-              83:    6(float) Constant 1084227584
-              87:             TypePointer Function 6(float)
-             100:             TypePointer Function 15(int)
-             125:    6(float) Constant 1088421888
-             126:    6(float) Constant 1090519040
-             137:             TypePointer Output 7(fvec4)
-138(@entryPointOutput):    137(ptr) Variable Output
+              82:    6(float) Constant 1084227584
+              86:             TypePointer Function 6(float)
+              99:             TypePointer Function 15(int)
+             124:    6(float) Constant 1088421888
+             125:    6(float) Constant 1090519040
+             136:             TypePointer Output 7(fvec4)
+137(@entryPointOutput):    136(ptr) Variable Output
          4(main):           2 Function None 3
                5:             Label
-             139:    7(fvec4) FunctionCall 9(@main()
-                              Store 138(@entryPointOutput) 139
+             138:    7(fvec4) FunctionCall 9(@main()
+                              Store 137(@entryPointOutput) 138
                               Return
                               FunctionEnd
        9(@main():    7(fvec4) Function None 8
               10:             Label
            12(a):     11(ptr) Variable Function
-           88(f):     87(ptr) Variable Function
-          101(i):    100(ptr) Variable Function
-          121(g):     87(ptr) Variable Function
+           87(f):     86(ptr) Variable Function
+          100(i):     99(ptr) Variable Function
+          120(g):     86(ptr) Variable Function
                               Store 12(a) 14
               21:     20(ptr) AccessChain 18 19
               22:     15(int) Load 21
@@ -457,85 +455,84 @@
               70:    23(bool) INotEqual 69 25
               71:     35(ptr) AccessChain 18 34
               72:    6(float) Load 71
-              73:     15(int) ConvertFToS 72
-              74:    23(bool) INotEqual 73 25
-              75:    23(bool) LogicalAnd 70 74
-              76:     35(ptr) AccessChain 18 46
-              77:    6(float) Load 76
-              78:    23(bool) FOrdNotEqual 77 38
-              79:    23(bool) LogicalOr 75 78
-                              SelectionMerge 81 None
-                              BranchConditional 79 80 81
-              80:               Label
-              82:    7(fvec4)   Load 12(a)
-              84:    7(fvec4)   CompositeConstruct 83 83 83 83
-              85:    7(fvec4)   FAdd 82 84
-                                ReturnValue 85
-              81:             Label
-              89:     35(ptr) AccessChain 18 34
-              90:    6(float) Load 89
-                              Store 88(f) 90
-                              Branch 91
-              91:             Label
-                              LoopMerge 93 94 None
-                              Branch 95
-              95:             Label
-              96:    6(float) Load 88(f)
-              97:    23(bool) FOrdNotEqual 96 38
-                              BranchConditional 97 92 93
-              92:               Label
-              98:    6(float)   Load 88(f)
-              99:    6(float)   FSub 98 30
-                                Store 88(f) 99
-                                Branch 94
-              94:               Label
-                                Branch 91
-              93:             Label
-             102:     20(ptr) AccessChain 18 19
-             103:     15(int) Load 102
-                              Store 101(i) 103
+              73:    23(bool) FOrdNotEqual 72 38
+              74:    23(bool) LogicalAnd 70 73
+              75:     35(ptr) AccessChain 18 46
+              76:    6(float) Load 75
+              77:    23(bool) FOrdNotEqual 76 38
+              78:    23(bool) LogicalOr 74 77
+                              SelectionMerge 80 None
+                              BranchConditional 78 79 80
+              79:               Label
+              81:    7(fvec4)   Load 12(a)
+              83:    7(fvec4)   CompositeConstruct 82 82 82 82
+              84:    7(fvec4)   FAdd 81 83
+                                ReturnValue 84
+              80:             Label
+              88:     35(ptr) AccessChain 18 34
+              89:    6(float) Load 88
+                              Store 87(f) 89
+                              Branch 90
+              90:             Label
+                              LoopMerge 92 93 None
+                              Branch 94
+              94:             Label
+              95:    6(float) Load 87(f)
+              96:    23(bool) FOrdNotEqual 95 38
+                              BranchConditional 96 91 92
+              91:               Label
+              97:    6(float)   Load 87(f)
+              98:    6(float)   FSub 97 30
+                                Store 87(f) 98
+                                Branch 93
+              93:               Label
+                                Branch 90
+              92:             Label
+             101:     20(ptr) AccessChain 18 19
+             102:     15(int) Load 101
+                              Store 100(i) 102
+                              Branch 103
+             103:             Label
+                              LoopMerge 105 106 None
                               Branch 104
              104:             Label
-                              LoopMerge 106 107 None
-                              Branch 105
-             105:             Label
-             108:     15(int) Load 101(i)
-             109:     15(int) ISub 108 19
-                              Store 101(i) 109
-                              Branch 107
-             107:             Label
-             110:     15(int) Load 101(i)
-             111:    23(bool) INotEqual 110 25
-                              BranchConditional 111 104 106
+             107:     15(int) Load 100(i)
+             108:     15(int) ISub 107 19
+                              Store 100(i) 108
+                              Branch 106
              106:             Label
-                              Branch 112
-             112:             Label
-                              LoopMerge 114 115 None
-                              Branch 116
-             116:             Label
-             117:     15(int) Load 101(i)
-             118:    23(bool) INotEqual 117 25
-                              BranchConditional 118 113 114
-             113:               Label
-             119:     15(int)   Load 101(i)
-             120:     15(int)   ISub 119 19
-                                Store 101(i) 120
-                                Branch 115
-             115:               Label
-                                Branch 112
-             114:             Label
-             122:     35(ptr) AccessChain 18 34
-             123:    6(float) Load 122
-             124:    23(bool) FOrdNotEqual 123 38
-             127:    6(float) Select 124 125 126
-                              Store 121(g) 127
-             128:    6(float) Load 121(g)
-             129:    7(fvec4) Load 12(a)
-             130:    7(fvec4) CompositeConstruct 128 128 128 128
-             131:    7(fvec4) FAdd 129 130
-                              Store 12(a) 131
-             132:    7(fvec4) Load 12(a)
-             133:    7(fvec4) CompositeConstruct 30 30 30 30
-             134:    7(fvec4) FSub 132 133
-                              ReturnValue 134
+             109:     15(int) Load 100(i)
+             110:    23(bool) INotEqual 109 25
+                              BranchConditional 110 103 105
+             105:             Label
+                              Branch 111
+             111:             Label
+                              LoopMerge 113 114 None
+                              Branch 115
+             115:             Label
+             116:     15(int) Load 100(i)
+             117:    23(bool) INotEqual 116 25
+                              BranchConditional 117 112 113
+             112:               Label
+             118:     15(int)   Load 100(i)
+             119:     15(int)   ISub 118 19
+                                Store 100(i) 119
+                                Branch 114
+             114:               Label
+                                Branch 111
+             113:             Label
+             121:     35(ptr) AccessChain 18 34
+             122:    6(float) Load 121
+             123:    23(bool) FOrdNotEqual 122 38
+             126:    6(float) Select 123 124 125
+                              Store 120(g) 126
+             127:    6(float) Load 120(g)
+             128:    7(fvec4) Load 12(a)
+             129:    7(fvec4) CompositeConstruct 127 127 127 127
+             130:    7(fvec4) FAdd 128 129
+                              Store 12(a) 130
+             131:    7(fvec4) Load 12(a)
+             132:    7(fvec4) CompositeConstruct 30 30 30 30
+             133:    7(fvec4) FSub 131 132
+                              ReturnValue 133
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.include.vert.out b/Test/baseResults/hlsl.include.vert.out
index 2a0532e..7258802 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): 80002
+// Generated by (magic number): 80006
 // 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 afb0a4f..4521d8b 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): 80002
+// Generated by (magic number): 80006
 // 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 9b52388..cfd435a 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): 80002
+// Generated by (magic number): 80006
 // 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 2aff374..e2e32a6 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): 80002
+// Generated by (magic number): 80006
 // 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 c589f5b..0a8e597 100644
--- a/Test/baseResults/hlsl.inoutquals.frag.out
+++ b/Test/baseResults/hlsl.inoutquals.frag.out
@@ -1,6 +1,7 @@
 hlsl.inoutquals.frag
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:8  Function Definition: MyFunc(f1;f1;f1;f1; ( temp void)
 0:8    Function Parameters: 
@@ -106,6 +107,7 @@
 
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:8  Function Definition: MyFunc(f1;f1;f1;f1; ( temp void)
 0:8    Function Parameters: 
@@ -206,15 +208,15 @@
 0:?     'sampleMask' ( out int SampleMaskIn)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 88
 
                               Capability Shader
-                              Capability SampleRateShading
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
                               EntryPoint Fragment 4  "main" 68 78 82 86
                               ExecutionMode 4 OriginUpperLeft
+                              ExecutionMode 4 DepthReplacing
                               Source HLSL 500
                               Name 4  "main"
                               Name 13  "MyFunc(f1;f1;f1;f1;"
diff --git a/Test/baseResults/hlsl.intrinsic.frexp.frag.out b/Test/baseResults/hlsl.intrinsic.frexp.frag.out
index b04909e..1f76b98 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): 80002
+// Generated by (magic number): 80006
 // 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 01fc5b2..ec63731 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): 80002
+// Generated by (magic number): 80006
 // 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 bc8a073..c924d06 100644
--- a/Test/baseResults/hlsl.intrinsics.barriers.comp.out
+++ b/Test/baseResults/hlsl.intrinsics.barriers.comp.out
@@ -7,8 +7,8 @@
 0:?     Sequence
 0:4      MemoryBarrier ( temp void)
 0:5      AllMemoryBarrierWithGroupSync ( temp void)
-0:6      GroupMemoryBarrier ( temp void)
-0:7      GroupMemoryBarrierWithGroupSync ( temp void)
+0:6      DeviceMemoryBarrier ( temp void)
+0:7      DeviceMemoryBarrierWithGroupSync ( temp void)
 0:8      WorkgroupMemoryBarrier ( temp void)
 0:9      WorkgroupMemoryBarrierWithGroupSync ( temp void)
 0:11      Branch: Return with expression
@@ -35,8 +35,8 @@
 0:?     Sequence
 0:4      MemoryBarrier ( temp void)
 0:5      AllMemoryBarrierWithGroupSync ( temp void)
-0:6      GroupMemoryBarrier ( temp void)
-0:7      GroupMemoryBarrierWithGroupSync ( temp void)
+0:6      DeviceMemoryBarrier ( temp void)
+0:7      DeviceMemoryBarrierWithGroupSync ( temp void)
 0:8      WorkgroupMemoryBarrier ( temp void)
 0:9      WorkgroupMemoryBarrierWithGroupSync ( temp void)
 0:11      Branch: Return with expression
@@ -52,7 +52,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out float)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 22
 
                               Capability Shader
@@ -71,10 +71,10 @@
                7:             TypeFunction 6(float)
               10:             TypeInt 32 0
               11:     10(int) Constant 1
-              12:     10(int) Constant 4048
-              13:     10(int) Constant 512
-              14:     10(int) Constant 2
-              15:     10(int) Constant 256
+              12:     10(int) Constant 3400
+              13:     10(int) Constant 2
+              14:     10(int) Constant 2120
+              15:     10(int) Constant 264
               16:    6(float) Constant 0
               19:             TypePointer Output 6(float)
 20(@entryPointOutput):     19(ptr) Variable Output
@@ -87,10 +87,10 @@
 8(@ComputeShaderFunction():    6(float) Function None 7
                9:             Label
                               MemoryBarrier 11 12
-                              ControlBarrier 11 11 12
-                              MemoryBarrier 11 13
-                              ControlBarrier 11 11 13
-                              MemoryBarrier 14 15
-                              ControlBarrier 14 14 15
+                              ControlBarrier 13 11 12
+                              MemoryBarrier 11 14
+                              ControlBarrier 13 11 14
+                              MemoryBarrier 13 15
+                              ControlBarrier 13 13 15
                               ReturnValue 16
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.intrinsics.comp.out b/Test/baseResults/hlsl.intrinsics.comp.out
index 01b6f69..7fe99e2 100644
--- a/Test/baseResults/hlsl.intrinsics.comp.out
+++ b/Test/baseResults/hlsl.intrinsics.comp.out
@@ -13,7 +13,7 @@
 0:21      all ( temp bool)
 0:21        Convert float to bool ( temp bool)
 0:21          'inF0' ( in float)
-0:24      AtomicAdd ( temp void)
+0:24      AtomicAdd ( temp uint)
 0:24        'gs_ua' ( shared uint)
 0:24        'gs_ub' ( shared uint)
 0:25      move second child to first child ( temp uint)
@@ -21,7 +21,7 @@
 0:25        AtomicAdd ( temp uint)
 0:25          'gs_ua' ( shared uint)
 0:25          'gs_ub' ( shared uint)
-0:26      AtomicAnd ( temp void)
+0:26      AtomicAnd ( temp uint)
 0:26        'gs_ua' ( shared uint)
 0:26        'gs_ub' ( shared uint)
 0:27      move second child to first child ( temp uint)
@@ -40,7 +40,7 @@
 0:29        AtomicExchange ( temp uint)
 0:29          'gs_ua' ( shared uint)
 0:29          'gs_ub' ( shared uint)
-0:30      AtomicMax ( temp void)
+0:30      AtomicMax ( temp uint)
 0:30        'gs_ua' ( shared uint)
 0:30        'gs_ub' ( shared uint)
 0:31      move second child to first child ( temp uint)
@@ -48,7 +48,7 @@
 0:31        AtomicMax ( temp uint)
 0:31          'gs_ua' ( shared uint)
 0:31          'gs_ub' ( shared uint)
-0:32      AtomicMin ( temp void)
+0:32      AtomicMin ( temp uint)
 0:32        'gs_ua' ( shared uint)
 0:32        'gs_ub' ( shared uint)
 0:33      move second child to first child ( temp uint)
@@ -56,7 +56,7 @@
 0:33        AtomicMin ( temp uint)
 0:33          'gs_ua' ( shared uint)
 0:33          'gs_ub' ( shared uint)
-0:34      AtomicOr ( temp void)
+0:34      AtomicOr ( temp uint)
 0:34        'gs_ua' ( shared uint)
 0:34        'gs_ub' ( shared uint)
 0:35      move second child to first child ( temp uint)
@@ -64,7 +64,7 @@
 0:35        AtomicOr ( temp uint)
 0:35          'gs_ua' ( shared uint)
 0:35          'gs_ub' ( shared uint)
-0:36      AtomicXor ( temp void)
+0:36      AtomicXor ( temp uint)
 0:36        'gs_ua' ( shared uint)
 0:36        'gs_ub' ( shared uint)
 0:37      move second child to first child ( temp uint)
@@ -95,7 +95,7 @@
 0:55      all ( temp bool)
 0:55        Convert float to bool ( temp 2-component vector of bool)
 0:55          'inF0' ( in 2-component vector of float)
-0:58      AtomicAdd ( temp void)
+0:58      AtomicAdd ( temp 2-component vector of uint)
 0:58        'gs_ua2' ( shared 2-component vector of uint)
 0:58        'gs_ub2' ( shared 2-component vector of uint)
 0:59      move second child to first child ( temp 2-component vector of uint)
@@ -103,7 +103,7 @@
 0:59        AtomicAdd ( temp 2-component vector of uint)
 0:59          'gs_ua2' ( shared 2-component vector of uint)
 0:59          'gs_ub2' ( shared 2-component vector of uint)
-0:60      AtomicAnd ( temp void)
+0:60      AtomicAnd ( temp 2-component vector of uint)
 0:60        'gs_ua2' ( shared 2-component vector of uint)
 0:60        'gs_ub2' ( shared 2-component vector of uint)
 0:61      move second child to first child ( temp 2-component vector of uint)
@@ -122,7 +122,7 @@
 0:63        AtomicExchange ( temp 2-component vector of uint)
 0:63          'gs_ua2' ( shared 2-component vector of uint)
 0:63          'gs_ub2' ( shared 2-component vector of uint)
-0:64      AtomicMax ( temp void)
+0:64      AtomicMax ( temp 2-component vector of uint)
 0:64        'gs_ua2' ( shared 2-component vector of uint)
 0:64        'gs_ub2' ( shared 2-component vector of uint)
 0:65      move second child to first child ( temp 2-component vector of uint)
@@ -130,7 +130,7 @@
 0:65        AtomicMax ( temp 2-component vector of uint)
 0:65          'gs_ua2' ( shared 2-component vector of uint)
 0:65          'gs_ub2' ( shared 2-component vector of uint)
-0:66      AtomicMin ( temp void)
+0:66      AtomicMin ( temp 2-component vector of uint)
 0:66        'gs_ua2' ( shared 2-component vector of uint)
 0:66        'gs_ub2' ( shared 2-component vector of uint)
 0:67      move second child to first child ( temp 2-component vector of uint)
@@ -138,7 +138,7 @@
 0:67        AtomicMin ( temp 2-component vector of uint)
 0:67          'gs_ua2' ( shared 2-component vector of uint)
 0:67          'gs_ub2' ( shared 2-component vector of uint)
-0:68      AtomicOr ( temp void)
+0:68      AtomicOr ( temp 2-component vector of uint)
 0:68        'gs_ua2' ( shared 2-component vector of uint)
 0:68        'gs_ub2' ( shared 2-component vector of uint)
 0:69      move second child to first child ( temp 2-component vector of uint)
@@ -146,7 +146,7 @@
 0:69        AtomicOr ( temp 2-component vector of uint)
 0:69          'gs_ua2' ( shared 2-component vector of uint)
 0:69          'gs_ub2' ( shared 2-component vector of uint)
-0:70      AtomicXor ( temp void)
+0:70      AtomicXor ( temp 2-component vector of uint)
 0:70        'gs_ua2' ( shared 2-component vector of uint)
 0:70        'gs_ub2' ( shared 2-component vector of uint)
 0:71      move second child to first child ( temp 2-component vector of uint)
@@ -169,7 +169,7 @@
 0:82      all ( temp bool)
 0:82        Convert float to bool ( temp 3-component vector of bool)
 0:82          'inF0' ( in 3-component vector of float)
-0:85      AtomicAdd ( temp void)
+0:85      AtomicAdd ( temp 3-component vector of uint)
 0:85        'gs_ua3' ( shared 3-component vector of uint)
 0:85        'gs_ub3' ( shared 3-component vector of uint)
 0:86      move second child to first child ( temp 3-component vector of uint)
@@ -177,7 +177,7 @@
 0:86        AtomicAdd ( temp 3-component vector of uint)
 0:86          'gs_ua3' ( shared 3-component vector of uint)
 0:86          'gs_ub3' ( shared 3-component vector of uint)
-0:87      AtomicAnd ( temp void)
+0:87      AtomicAnd ( temp 3-component vector of uint)
 0:87        'gs_ua3' ( shared 3-component vector of uint)
 0:87        'gs_ub3' ( shared 3-component vector of uint)
 0:88      move second child to first child ( temp 3-component vector of uint)
@@ -196,7 +196,7 @@
 0:90        AtomicExchange ( temp 3-component vector of uint)
 0:90          'gs_ua3' ( shared 3-component vector of uint)
 0:90          'gs_ub3' ( shared 3-component vector of uint)
-0:91      AtomicMax ( temp void)
+0:91      AtomicMax ( temp 3-component vector of uint)
 0:91        'gs_ua3' ( shared 3-component vector of uint)
 0:91        'gs_ub3' ( shared 3-component vector of uint)
 0:92      move second child to first child ( temp 3-component vector of uint)
@@ -204,7 +204,7 @@
 0:92        AtomicMax ( temp 3-component vector of uint)
 0:92          'gs_ua3' ( shared 3-component vector of uint)
 0:92          'gs_ub3' ( shared 3-component vector of uint)
-0:93      AtomicMin ( temp void)
+0:93      AtomicMin ( temp 3-component vector of uint)
 0:93        'gs_ua3' ( shared 3-component vector of uint)
 0:93        'gs_ub3' ( shared 3-component vector of uint)
 0:94      move second child to first child ( temp 3-component vector of uint)
@@ -212,7 +212,7 @@
 0:94        AtomicMin ( temp 3-component vector of uint)
 0:94          'gs_ua3' ( shared 3-component vector of uint)
 0:94          'gs_ub3' ( shared 3-component vector of uint)
-0:95      AtomicOr ( temp void)
+0:95      AtomicOr ( temp 3-component vector of uint)
 0:95        'gs_ua3' ( shared 3-component vector of uint)
 0:95        'gs_ub3' ( shared 3-component vector of uint)
 0:96      move second child to first child ( temp 3-component vector of uint)
@@ -220,7 +220,7 @@
 0:96        AtomicOr ( temp 3-component vector of uint)
 0:96          'gs_ua3' ( shared 3-component vector of uint)
 0:96          'gs_ub3' ( shared 3-component vector of uint)
-0:97      AtomicXor ( temp void)
+0:97      AtomicXor ( temp 3-component vector of uint)
 0:97        'gs_ua3' ( shared 3-component vector of uint)
 0:97        'gs_ub3' ( shared 3-component vector of uint)
 0:98      move second child to first child ( temp 3-component vector of uint)
@@ -244,7 +244,7 @@
 0:109      all ( temp bool)
 0:109        Convert float to bool ( temp 4-component vector of bool)
 0:109          'inF0' ( in 4-component vector of float)
-0:112      AtomicAdd ( temp void)
+0:112      AtomicAdd ( temp 4-component vector of uint)
 0:112        'gs_ua4' ( shared 4-component vector of uint)
 0:112        'gs_ub4' ( shared 4-component vector of uint)
 0:113      move second child to first child ( temp 4-component vector of uint)
@@ -252,7 +252,7 @@
 0:113        AtomicAdd ( temp 4-component vector of uint)
 0:113          'gs_ua4' ( shared 4-component vector of uint)
 0:113          'gs_ub4' ( shared 4-component vector of uint)
-0:114      AtomicAnd ( temp void)
+0:114      AtomicAnd ( temp 4-component vector of uint)
 0:114        'gs_ua4' ( shared 4-component vector of uint)
 0:114        'gs_ub4' ( shared 4-component vector of uint)
 0:115      move second child to first child ( temp 4-component vector of uint)
@@ -271,7 +271,7 @@
 0:117        AtomicExchange ( temp 4-component vector of uint)
 0:117          'gs_ua4' ( shared 4-component vector of uint)
 0:117          'gs_ub4' ( shared 4-component vector of uint)
-0:118      AtomicMax ( temp void)
+0:118      AtomicMax ( temp 4-component vector of uint)
 0:118        'gs_ua4' ( shared 4-component vector of uint)
 0:118        'gs_ub4' ( shared 4-component vector of uint)
 0:119      move second child to first child ( temp 4-component vector of uint)
@@ -279,7 +279,7 @@
 0:119        AtomicMax ( temp 4-component vector of uint)
 0:119          'gs_ua4' ( shared 4-component vector of uint)
 0:119          'gs_ub4' ( shared 4-component vector of uint)
-0:120      AtomicMin ( temp void)
+0:120      AtomicMin ( temp 4-component vector of uint)
 0:120        'gs_ua4' ( shared 4-component vector of uint)
 0:120        'gs_ub4' ( shared 4-component vector of uint)
 0:121      move second child to first child ( temp 4-component vector of uint)
@@ -287,7 +287,7 @@
 0:121        AtomicMin ( temp 4-component vector of uint)
 0:121          'gs_ua4' ( shared 4-component vector of uint)
 0:121          'gs_ub4' ( shared 4-component vector of uint)
-0:122      AtomicOr ( temp void)
+0:122      AtomicOr ( temp 4-component vector of uint)
 0:122        'gs_ua4' ( shared 4-component vector of uint)
 0:122        'gs_ub4' ( shared 4-component vector of uint)
 0:123      move second child to first child ( temp 4-component vector of uint)
@@ -295,7 +295,7 @@
 0:123        AtomicOr ( temp 4-component vector of uint)
 0:123          'gs_ua4' ( shared 4-component vector of uint)
 0:123          'gs_ub4' ( shared 4-component vector of uint)
-0:124      AtomicXor ( temp void)
+0:124      AtomicXor ( temp 4-component vector of uint)
 0:124        'gs_ua4' ( shared 4-component vector of uint)
 0:124        'gs_ub4' ( shared 4-component vector of uint)
 0:125      move second child to first child ( temp 4-component vector of uint)
@@ -373,7 +373,7 @@
 0:21      all ( temp bool)
 0:21        Convert float to bool ( temp bool)
 0:21          'inF0' ( in float)
-0:24      AtomicAdd ( temp void)
+0:24      AtomicAdd ( temp uint)
 0:24        'gs_ua' ( shared uint)
 0:24        'gs_ub' ( shared uint)
 0:25      move second child to first child ( temp uint)
@@ -381,7 +381,7 @@
 0:25        AtomicAdd ( temp uint)
 0:25          'gs_ua' ( shared uint)
 0:25          'gs_ub' ( shared uint)
-0:26      AtomicAnd ( temp void)
+0:26      AtomicAnd ( temp uint)
 0:26        'gs_ua' ( shared uint)
 0:26        'gs_ub' ( shared uint)
 0:27      move second child to first child ( temp uint)
@@ -400,7 +400,7 @@
 0:29        AtomicExchange ( temp uint)
 0:29          'gs_ua' ( shared uint)
 0:29          'gs_ub' ( shared uint)
-0:30      AtomicMax ( temp void)
+0:30      AtomicMax ( temp uint)
 0:30        'gs_ua' ( shared uint)
 0:30        'gs_ub' ( shared uint)
 0:31      move second child to first child ( temp uint)
@@ -408,7 +408,7 @@
 0:31        AtomicMax ( temp uint)
 0:31          'gs_ua' ( shared uint)
 0:31          'gs_ub' ( shared uint)
-0:32      AtomicMin ( temp void)
+0:32      AtomicMin ( temp uint)
 0:32        'gs_ua' ( shared uint)
 0:32        'gs_ub' ( shared uint)
 0:33      move second child to first child ( temp uint)
@@ -416,7 +416,7 @@
 0:33        AtomicMin ( temp uint)
 0:33          'gs_ua' ( shared uint)
 0:33          'gs_ub' ( shared uint)
-0:34      AtomicOr ( temp void)
+0:34      AtomicOr ( temp uint)
 0:34        'gs_ua' ( shared uint)
 0:34        'gs_ub' ( shared uint)
 0:35      move second child to first child ( temp uint)
@@ -424,7 +424,7 @@
 0:35        AtomicOr ( temp uint)
 0:35          'gs_ua' ( shared uint)
 0:35          'gs_ub' ( shared uint)
-0:36      AtomicXor ( temp void)
+0:36      AtomicXor ( temp uint)
 0:36        'gs_ua' ( shared uint)
 0:36        'gs_ub' ( shared uint)
 0:37      move second child to first child ( temp uint)
@@ -455,7 +455,7 @@
 0:55      all ( temp bool)
 0:55        Convert float to bool ( temp 2-component vector of bool)
 0:55          'inF0' ( in 2-component vector of float)
-0:58      AtomicAdd ( temp void)
+0:58      AtomicAdd ( temp 2-component vector of uint)
 0:58        'gs_ua2' ( shared 2-component vector of uint)
 0:58        'gs_ub2' ( shared 2-component vector of uint)
 0:59      move second child to first child ( temp 2-component vector of uint)
@@ -463,7 +463,7 @@
 0:59        AtomicAdd ( temp 2-component vector of uint)
 0:59          'gs_ua2' ( shared 2-component vector of uint)
 0:59          'gs_ub2' ( shared 2-component vector of uint)
-0:60      AtomicAnd ( temp void)
+0:60      AtomicAnd ( temp 2-component vector of uint)
 0:60        'gs_ua2' ( shared 2-component vector of uint)
 0:60        'gs_ub2' ( shared 2-component vector of uint)
 0:61      move second child to first child ( temp 2-component vector of uint)
@@ -482,7 +482,7 @@
 0:63        AtomicExchange ( temp 2-component vector of uint)
 0:63          'gs_ua2' ( shared 2-component vector of uint)
 0:63          'gs_ub2' ( shared 2-component vector of uint)
-0:64      AtomicMax ( temp void)
+0:64      AtomicMax ( temp 2-component vector of uint)
 0:64        'gs_ua2' ( shared 2-component vector of uint)
 0:64        'gs_ub2' ( shared 2-component vector of uint)
 0:65      move second child to first child ( temp 2-component vector of uint)
@@ -490,7 +490,7 @@
 0:65        AtomicMax ( temp 2-component vector of uint)
 0:65          'gs_ua2' ( shared 2-component vector of uint)
 0:65          'gs_ub2' ( shared 2-component vector of uint)
-0:66      AtomicMin ( temp void)
+0:66      AtomicMin ( temp 2-component vector of uint)
 0:66        'gs_ua2' ( shared 2-component vector of uint)
 0:66        'gs_ub2' ( shared 2-component vector of uint)
 0:67      move second child to first child ( temp 2-component vector of uint)
@@ -498,7 +498,7 @@
 0:67        AtomicMin ( temp 2-component vector of uint)
 0:67          'gs_ua2' ( shared 2-component vector of uint)
 0:67          'gs_ub2' ( shared 2-component vector of uint)
-0:68      AtomicOr ( temp void)
+0:68      AtomicOr ( temp 2-component vector of uint)
 0:68        'gs_ua2' ( shared 2-component vector of uint)
 0:68        'gs_ub2' ( shared 2-component vector of uint)
 0:69      move second child to first child ( temp 2-component vector of uint)
@@ -506,7 +506,7 @@
 0:69        AtomicOr ( temp 2-component vector of uint)
 0:69          'gs_ua2' ( shared 2-component vector of uint)
 0:69          'gs_ub2' ( shared 2-component vector of uint)
-0:70      AtomicXor ( temp void)
+0:70      AtomicXor ( temp 2-component vector of uint)
 0:70        'gs_ua2' ( shared 2-component vector of uint)
 0:70        'gs_ub2' ( shared 2-component vector of uint)
 0:71      move second child to first child ( temp 2-component vector of uint)
@@ -529,7 +529,7 @@
 0:82      all ( temp bool)
 0:82        Convert float to bool ( temp 3-component vector of bool)
 0:82          'inF0' ( in 3-component vector of float)
-0:85      AtomicAdd ( temp void)
+0:85      AtomicAdd ( temp 3-component vector of uint)
 0:85        'gs_ua3' ( shared 3-component vector of uint)
 0:85        'gs_ub3' ( shared 3-component vector of uint)
 0:86      move second child to first child ( temp 3-component vector of uint)
@@ -537,7 +537,7 @@
 0:86        AtomicAdd ( temp 3-component vector of uint)
 0:86          'gs_ua3' ( shared 3-component vector of uint)
 0:86          'gs_ub3' ( shared 3-component vector of uint)
-0:87      AtomicAnd ( temp void)
+0:87      AtomicAnd ( temp 3-component vector of uint)
 0:87        'gs_ua3' ( shared 3-component vector of uint)
 0:87        'gs_ub3' ( shared 3-component vector of uint)
 0:88      move second child to first child ( temp 3-component vector of uint)
@@ -556,7 +556,7 @@
 0:90        AtomicExchange ( temp 3-component vector of uint)
 0:90          'gs_ua3' ( shared 3-component vector of uint)
 0:90          'gs_ub3' ( shared 3-component vector of uint)
-0:91      AtomicMax ( temp void)
+0:91      AtomicMax ( temp 3-component vector of uint)
 0:91        'gs_ua3' ( shared 3-component vector of uint)
 0:91        'gs_ub3' ( shared 3-component vector of uint)
 0:92      move second child to first child ( temp 3-component vector of uint)
@@ -564,7 +564,7 @@
 0:92        AtomicMax ( temp 3-component vector of uint)
 0:92          'gs_ua3' ( shared 3-component vector of uint)
 0:92          'gs_ub3' ( shared 3-component vector of uint)
-0:93      AtomicMin ( temp void)
+0:93      AtomicMin ( temp 3-component vector of uint)
 0:93        'gs_ua3' ( shared 3-component vector of uint)
 0:93        'gs_ub3' ( shared 3-component vector of uint)
 0:94      move second child to first child ( temp 3-component vector of uint)
@@ -572,7 +572,7 @@
 0:94        AtomicMin ( temp 3-component vector of uint)
 0:94          'gs_ua3' ( shared 3-component vector of uint)
 0:94          'gs_ub3' ( shared 3-component vector of uint)
-0:95      AtomicOr ( temp void)
+0:95      AtomicOr ( temp 3-component vector of uint)
 0:95        'gs_ua3' ( shared 3-component vector of uint)
 0:95        'gs_ub3' ( shared 3-component vector of uint)
 0:96      move second child to first child ( temp 3-component vector of uint)
@@ -580,7 +580,7 @@
 0:96        AtomicOr ( temp 3-component vector of uint)
 0:96          'gs_ua3' ( shared 3-component vector of uint)
 0:96          'gs_ub3' ( shared 3-component vector of uint)
-0:97      AtomicXor ( temp void)
+0:97      AtomicXor ( temp 3-component vector of uint)
 0:97        'gs_ua3' ( shared 3-component vector of uint)
 0:97        'gs_ub3' ( shared 3-component vector of uint)
 0:98      move second child to first child ( temp 3-component vector of uint)
@@ -604,7 +604,7 @@
 0:109      all ( temp bool)
 0:109        Convert float to bool ( temp 4-component vector of bool)
 0:109          'inF0' ( in 4-component vector of float)
-0:112      AtomicAdd ( temp void)
+0:112      AtomicAdd ( temp 4-component vector of uint)
 0:112        'gs_ua4' ( shared 4-component vector of uint)
 0:112        'gs_ub4' ( shared 4-component vector of uint)
 0:113      move second child to first child ( temp 4-component vector of uint)
@@ -612,7 +612,7 @@
 0:113        AtomicAdd ( temp 4-component vector of uint)
 0:113          'gs_ua4' ( shared 4-component vector of uint)
 0:113          'gs_ub4' ( shared 4-component vector of uint)
-0:114      AtomicAnd ( temp void)
+0:114      AtomicAnd ( temp 4-component vector of uint)
 0:114        'gs_ua4' ( shared 4-component vector of uint)
 0:114        'gs_ub4' ( shared 4-component vector of uint)
 0:115      move second child to first child ( temp 4-component vector of uint)
@@ -631,7 +631,7 @@
 0:117        AtomicExchange ( temp 4-component vector of uint)
 0:117          'gs_ua4' ( shared 4-component vector of uint)
 0:117          'gs_ub4' ( shared 4-component vector of uint)
-0:118      AtomicMax ( temp void)
+0:118      AtomicMax ( temp 4-component vector of uint)
 0:118        'gs_ua4' ( shared 4-component vector of uint)
 0:118        'gs_ub4' ( shared 4-component vector of uint)
 0:119      move second child to first child ( temp 4-component vector of uint)
@@ -639,7 +639,7 @@
 0:119        AtomicMax ( temp 4-component vector of uint)
 0:119          'gs_ua4' ( shared 4-component vector of uint)
 0:119          'gs_ub4' ( shared 4-component vector of uint)
-0:120      AtomicMin ( temp void)
+0:120      AtomicMin ( temp 4-component vector of uint)
 0:120        'gs_ua4' ( shared 4-component vector of uint)
 0:120        'gs_ub4' ( shared 4-component vector of uint)
 0:121      move second child to first child ( temp 4-component vector of uint)
@@ -647,7 +647,7 @@
 0:121        AtomicMin ( temp 4-component vector of uint)
 0:121          'gs_ua4' ( shared 4-component vector of uint)
 0:121          'gs_ub4' ( shared 4-component vector of uint)
-0:122      AtomicOr ( temp void)
+0:122      AtomicOr ( temp 4-component vector of uint)
 0:122        'gs_ua4' ( shared 4-component vector of uint)
 0:122        'gs_ub4' ( shared 4-component vector of uint)
 0:123      move second child to first child ( temp 4-component vector of uint)
@@ -655,7 +655,7 @@
 0:123        AtomicOr ( temp 4-component vector of uint)
 0:123          'gs_ua4' ( shared 4-component vector of uint)
 0:123          'gs_ub4' ( shared 4-component vector of uint)
-0:124      AtomicXor ( temp void)
+0:124      AtomicXor ( temp 4-component vector of uint)
 0:124        'gs_ua4' ( shared 4-component vector of uint)
 0:124        'gs_ub4' ( shared 4-component vector of uint)
 0:125      move second child to first child ( temp 4-component vector of uint)
@@ -716,7 +716,7 @@
 0:?     'inU1' (layout( location=4) in 4-component vector of uint)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 265
 
                               Capability Shader
@@ -905,12 +905,12 @@
               63:    61(bool) FOrdNotEqual 60 62
               64:    61(bool) All 63
               68:      8(int) Load 67(gs_ub)
-              71:           2 AtomicIAdd 66(gs_ua) 69 70 68
+              71:      8(int) AtomicIAdd 66(gs_ua) 69 70 68
               73:      8(int) Load 67(gs_ub)
               74:      8(int) AtomicIAdd 66(gs_ua) 69 70 73
                               Store 72(out_u1) 74
               75:      8(int) Load 67(gs_ub)
-              76:           2 AtomicAnd 66(gs_ua) 69 70 75
+              76:      8(int) AtomicAnd 66(gs_ua) 69 70 75
               77:      8(int) Load 67(gs_ub)
               78:      8(int) AtomicAnd 66(gs_ua) 69 70 77
                               Store 72(out_u1) 78
@@ -922,22 +922,22 @@
               84:      8(int) AtomicExchange 66(gs_ua) 69 70 83
                               Store 72(out_u1) 84
               85:      8(int) Load 67(gs_ub)
-              86:           2 AtomicSMax 66(gs_ua) 69 70 85
+              86:      8(int) AtomicUMax 66(gs_ua) 69 70 85
               87:      8(int) Load 67(gs_ub)
               88:      8(int) AtomicUMax 66(gs_ua) 69 70 87
                               Store 72(out_u1) 88
               89:      8(int) Load 67(gs_ub)
-              90:           2 AtomicSMin 66(gs_ua) 69 70 89
+              90:      8(int) AtomicUMin 66(gs_ua) 69 70 89
               91:      8(int) Load 67(gs_ub)
               92:      8(int) AtomicUMin 66(gs_ua) 69 70 91
                               Store 72(out_u1) 92
               93:      8(int) Load 67(gs_ub)
-              94:           2 AtomicOr 66(gs_ua) 69 70 93
+              94:      8(int) AtomicOr 66(gs_ua) 69 70 93
               95:      8(int) Load 67(gs_ub)
               96:      8(int) AtomicOr 66(gs_ua) 69 70 95
                               Store 72(out_u1) 96
               97:      8(int) Load 67(gs_ub)
-              98:           2 AtomicXor 66(gs_ua) 69 70 97
+              98:      8(int) AtomicXor 66(gs_ua) 69 70 97
               99:      8(int) Load 67(gs_ub)
              100:      8(int) AtomicXor 66(gs_ua) 69 70 99
                               Store 72(out_u1) 100
@@ -962,12 +962,12 @@
              108:  106(bvec2) FOrdNotEqual 105 107
              109:    61(bool) All 108
              113:   26(ivec2) Load 112(gs_ub2)
-             114:           2 AtomicIAdd 111(gs_ua2) 69 70 113
+             114:   26(ivec2) AtomicIAdd 111(gs_ua2) 69 70 113
              116:   26(ivec2) Load 112(gs_ub2)
              117:   26(ivec2) AtomicIAdd 111(gs_ua2) 69 70 116
                               Store 115(out_u2) 117
              118:   26(ivec2) Load 112(gs_ub2)
-             119:           2 AtomicAnd 111(gs_ua2) 69 70 118
+             119:   26(ivec2) AtomicAnd 111(gs_ua2) 69 70 118
              120:   26(ivec2) Load 112(gs_ub2)
              121:   26(ivec2) AtomicAnd 111(gs_ua2) 69 70 120
                               Store 115(out_u2) 121
@@ -979,22 +979,22 @@
              127:   26(ivec2) AtomicExchange 111(gs_ua2) 69 70 126
                               Store 115(out_u2) 127
              128:   26(ivec2) Load 112(gs_ub2)
-             129:           2 AtomicSMax 111(gs_ua2) 69 70 128
+             129:   26(ivec2) AtomicUMax 111(gs_ua2) 69 70 128
              130:   26(ivec2) Load 112(gs_ub2)
              131:   26(ivec2) AtomicUMax 111(gs_ua2) 69 70 130
                               Store 115(out_u2) 131
              132:   26(ivec2) Load 112(gs_ub2)
-             133:           2 AtomicSMin 111(gs_ua2) 69 70 132
+             133:   26(ivec2) AtomicUMin 111(gs_ua2) 69 70 132
              134:   26(ivec2) Load 112(gs_ub2)
              135:   26(ivec2) AtomicUMin 111(gs_ua2) 69 70 134
                               Store 115(out_u2) 135
              136:   26(ivec2) Load 112(gs_ub2)
-             137:           2 AtomicOr 111(gs_ua2) 69 70 136
+             137:   26(ivec2) AtomicOr 111(gs_ua2) 69 70 136
              138:   26(ivec2) Load 112(gs_ub2)
              139:   26(ivec2) AtomicOr 111(gs_ua2) 69 70 138
                               Store 115(out_u2) 139
              140:   26(ivec2) Load 112(gs_ub2)
-             141:           2 AtomicXor 111(gs_ua2) 69 70 140
+             141:   26(ivec2) AtomicXor 111(gs_ua2) 69 70 140
              142:   26(ivec2) Load 112(gs_ub2)
              143:   26(ivec2) AtomicXor 111(gs_ua2) 69 70 142
                               Store 115(out_u2) 143
@@ -1012,12 +1012,12 @@
              152:  150(bvec3) FOrdNotEqual 149 151
              153:    61(bool) All 152
              157:   38(ivec3) Load 156(gs_ub3)
-             158:           2 AtomicIAdd 155(gs_ua3) 69 70 157
+             158:   38(ivec3) AtomicIAdd 155(gs_ua3) 69 70 157
              160:   38(ivec3) Load 156(gs_ub3)
              161:   38(ivec3) AtomicIAdd 155(gs_ua3) 69 70 160
                               Store 159(out_u3) 161
              162:   38(ivec3) Load 156(gs_ub3)
-             163:           2 AtomicAnd 155(gs_ua3) 69 70 162
+             163:   38(ivec3) AtomicAnd 155(gs_ua3) 69 70 162
              164:   38(ivec3) Load 156(gs_ub3)
              165:   38(ivec3) AtomicAnd 155(gs_ua3) 69 70 164
                               Store 159(out_u3) 165
@@ -1029,22 +1029,22 @@
              171:   38(ivec3) AtomicExchange 155(gs_ua3) 69 70 170
                               Store 159(out_u3) 171
              172:   38(ivec3) Load 156(gs_ub3)
-             173:           2 AtomicSMax 155(gs_ua3) 69 70 172
+             173:   38(ivec3) AtomicUMax 155(gs_ua3) 69 70 172
              174:   38(ivec3) Load 156(gs_ub3)
              175:   38(ivec3) AtomicUMax 155(gs_ua3) 69 70 174
                               Store 159(out_u3) 175
              176:   38(ivec3) Load 156(gs_ub3)
-             177:           2 AtomicSMin 155(gs_ua3) 69 70 176
+             177:   38(ivec3) AtomicUMin 155(gs_ua3) 69 70 176
              178:   38(ivec3) Load 156(gs_ub3)
              179:   38(ivec3) AtomicUMin 155(gs_ua3) 69 70 178
                               Store 159(out_u3) 179
              180:   38(ivec3) Load 156(gs_ub3)
-             181:           2 AtomicOr 155(gs_ua3) 69 70 180
+             181:   38(ivec3) AtomicOr 155(gs_ua3) 69 70 180
              182:   38(ivec3) Load 156(gs_ub3)
              183:   38(ivec3) AtomicOr 155(gs_ua3) 69 70 182
                               Store 159(out_u3) 183
              184:   38(ivec3) Load 156(gs_ub3)
-             185:           2 AtomicXor 155(gs_ua3) 69 70 184
+             185:   38(ivec3) AtomicXor 155(gs_ua3) 69 70 184
              186:   38(ivec3) Load 156(gs_ub3)
              187:   38(ivec3) AtomicXor 155(gs_ua3) 69 70 186
                               Store 159(out_u3) 187
@@ -1062,12 +1062,12 @@
              195:  193(bvec4) FOrdNotEqual 192 194
              196:    61(bool) All 195
              200:   50(ivec4) Load 199(gs_ub4)
-             201:           2 AtomicIAdd 198(gs_ua4) 69 70 200
+             201:   50(ivec4) AtomicIAdd 198(gs_ua4) 69 70 200
              203:   50(ivec4) Load 199(gs_ub4)
              204:   50(ivec4) AtomicIAdd 198(gs_ua4) 69 70 203
                               Store 202(out_u4) 204
              205:   50(ivec4) Load 199(gs_ub4)
-             206:           2 AtomicAnd 198(gs_ua4) 69 70 205
+             206:   50(ivec4) AtomicAnd 198(gs_ua4) 69 70 205
              207:   50(ivec4) Load 199(gs_ub4)
              208:   50(ivec4) AtomicAnd 198(gs_ua4) 69 70 207
                               Store 202(out_u4) 208
@@ -1079,22 +1079,22 @@
              214:   50(ivec4) AtomicExchange 198(gs_ua4) 69 70 213
                               Store 202(out_u4) 214
              215:   50(ivec4) Load 199(gs_ub4)
-             216:           2 AtomicSMax 198(gs_ua4) 69 70 215
+             216:   50(ivec4) AtomicUMax 198(gs_ua4) 69 70 215
              217:   50(ivec4) Load 199(gs_ub4)
              218:   50(ivec4) AtomicUMax 198(gs_ua4) 69 70 217
                               Store 202(out_u4) 218
              219:   50(ivec4) Load 199(gs_ub4)
-             220:           2 AtomicSMin 198(gs_ua4) 69 70 219
+             220:   50(ivec4) AtomicUMin 198(gs_ua4) 69 70 219
              221:   50(ivec4) Load 199(gs_ub4)
              222:   50(ivec4) AtomicUMin 198(gs_ua4) 69 70 221
                               Store 202(out_u4) 222
              223:   50(ivec4) Load 199(gs_ub4)
-             224:           2 AtomicOr 198(gs_ua4) 69 70 223
+             224:   50(ivec4) AtomicOr 198(gs_ua4) 69 70 223
              225:   50(ivec4) Load 199(gs_ub4)
              226:   50(ivec4) AtomicOr 198(gs_ua4) 69 70 225
                               Store 202(out_u4) 226
              227:   50(ivec4) Load 199(gs_ub4)
-             228:           2 AtomicXor 198(gs_ua4) 69 70 227
+             228:   50(ivec4) AtomicXor 198(gs_ua4) 69 70 227
              229:   50(ivec4) Load 199(gs_ub4)
              230:   50(ivec4) AtomicXor 198(gs_ua4) 69 70 229
                               Store 202(out_u4) 230
diff --git a/Test/baseResults/hlsl.intrinsics.d3dcolortoubyte4.frag.out b/Test/baseResults/hlsl.intrinsics.d3dcolortoubyte4.frag.out
index e365b98..864bfc3 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): 80002
+// Generated by (magic number): 80006
 // 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 a2e7c5f..29f70d2 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): 80002
+// Generated by (magic number): 80006
 // 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 6612451..04ccc3b 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): 80002
+// Generated by (magic number): 80006
 // 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 5c6f6ba..3d5c924 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): 80002
+// Generated by (magic number): 80006
 // 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 01c08d2..137d9eb 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): 80002
+// Generated by (magic number): 80006
 // 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 105800b..c271dc9 100644
--- a/Test/baseResults/hlsl.intrinsics.frag.out
+++ b/Test/baseResults/hlsl.intrinsics.frag.out
@@ -2,13 +2,13 @@
 Shader version: 500
 gl_FragCoord origin is upper left
 0:? Sequence
-0:17  Function Definition: PixelShaderFunctionS(f1;f1;f1;u1;u1; ( temp float)
+0:17  Function Definition: PixelShaderFunctionS(f1;f1;f1;u1;i1; ( temp float)
 0:17    Function Parameters: 
 0:17      'inF0' ( in float)
 0:17      'inF1' ( in float)
 0:17      'inF2' ( in float)
 0:17      'inU0' ( in uint)
-0:17      'inU1' ( in uint)
+0:17      'inU1' ( in int)
 0:?     Sequence
 0:20      Sequence
 0:20        move second child to first child ( temp bool)
@@ -46,7 +46,7 @@
 0:26        move second child to first child ( temp uint)
 0:26          'r006' ( temp uint)
 0:26          floatBitsToUint ( temp uint)
-0:26            'inF0' ( in float)
+0:26            'inU1' ( in int)
 0:27      Sequence
 0:27        move second child to first child ( temp float)
 0:27          'r007' ( temp float)
@@ -2820,13 +2820,13 @@
 Shader version: 500
 gl_FragCoord origin is upper left
 0:? Sequence
-0:17  Function Definition: PixelShaderFunctionS(f1;f1;f1;u1;u1; ( temp float)
+0:17  Function Definition: PixelShaderFunctionS(f1;f1;f1;u1;i1; ( temp float)
 0:17    Function Parameters: 
 0:17      'inF0' ( in float)
 0:17      'inF1' ( in float)
 0:17      'inF2' ( in float)
 0:17      'inU0' ( in uint)
-0:17      'inU1' ( in uint)
+0:17      'inU1' ( in int)
 0:?     Sequence
 0:20      Sequence
 0:20        move second child to first child ( temp bool)
@@ -2864,7 +2864,7 @@
 0:26        move second child to first child ( temp uint)
 0:26          'r006' ( temp uint)
 0:26          floatBitsToUint ( temp uint)
-0:26            'inF0' ( in float)
+0:26            'inU1' ( in int)
 0:27      Sequence
 0:27        move second child to first child ( temp float)
 0:27          'r007' ( temp float)
@@ -5632,7 +5632,7 @@
 0:?     '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 1832
 
                               Capability Shader
@@ -5643,85 +5643,85 @@
                               ExecutionMode 4 OriginUpperLeft
                               Source HLSL 500
                               Name 4  "main"
-                              Name 16  "PixelShaderFunctionS(f1;f1;f1;u1;u1;"
-                              Name 11  "inF0"
-                              Name 12  "inF1"
-                              Name 13  "inF2"
-                              Name 14  "inU0"
-                              Name 15  "inU1"
-                              Name 22  "PixelShaderFunction1(vf1;vf1;vf1;"
-                              Name 19  "inF0"
-                              Name 20  "inF1"
-                              Name 21  "inF2"
-                              Name 34  "PixelShaderFunction2(vf2;vf2;vf2;vu2;vu2;"
-                              Name 29  "inF0"
-                              Name 30  "inF1"
-                              Name 31  "inF2"
-                              Name 32  "inU0"
-                              Name 33  "inU1"
-                              Name 46  "PixelShaderFunction3(vf3;vf3;vf3;vu3;vu3;"
-                              Name 41  "inF0"
-                              Name 42  "inF1"
-                              Name 43  "inF2"
-                              Name 44  "inU0"
-                              Name 45  "inU1"
-                              Name 58  "PixelShaderFunction(vf4;vf4;vf4;vu4;vu4;"
-                              Name 53  "inF0"
-                              Name 54  "inF1"
-                              Name 55  "inF2"
-                              Name 56  "inU0"
-                              Name 57  "inU1"
-                              Name 66  "PixelShaderFunction2x2(mf22;mf22;mf22;"
-                              Name 63  "inF0"
-                              Name 64  "inF1"
-                              Name 65  "inF2"
-                              Name 74  "PixelShaderFunction3x3(mf33;mf33;mf33;"
-                              Name 71  "inF0"
-                              Name 72  "inF1"
-                              Name 73  "inF2"
-                              Name 82  "PixelShaderFunction4x4(mf44;mf44;mf44;"
-                              Name 79  "inF0"
-                              Name 80  "inF1"
-                              Name 81  "inF2"
-                              Name 91  "TestGenMul2(f1;f1;vf2;vf2;mf22;mf22;"
-                              Name 85  "inF0"
-                              Name 86  "inF1"
-                              Name 87  "inFV0"
-                              Name 88  "inFV1"
-                              Name 89  "inFM0"
-                              Name 90  "inFM1"
-                              Name 100  "TestGenMul3(f1;f1;vf3;vf3;mf33;mf33;"
-                              Name 94  "inF0"
-                              Name 95  "inF1"
-                              Name 96  "inFV0"
-                              Name 97  "inFV1"
-                              Name 98  "inFM0"
-                              Name 99  "inFM1"
-                              Name 109  "TestGenMul4(f1;f1;vf4;vf4;mf44;mf44;"
-                              Name 103  "inF0"
-                              Name 104  "inF1"
-                              Name 105  "inFV0"
-                              Name 106  "inFV1"
-                              Name 107  "inFM0"
-                              Name 108  "inFM1"
-                              Name 129  "TestGenMulNxM(f1;f1;vf2;vf3;mf23;mf32;mf33;mf34;mf24;"
-                              Name 120  "inF0"
-                              Name 121  "inF1"
-                              Name 122  "inFV2"
-                              Name 123  "inFV3"
-                              Name 124  "inFM2x3"
-                              Name 125  "inFM3x2"
-                              Name 126  "inFM3x3"
-                              Name 127  "inFM3x4"
-                              Name 128  "inFM2x4"
-                              Name 131  "PS_OUTPUT"
-                              MemberName 131(PS_OUTPUT) 0  "color"
-                              Name 133  "@main("
-                              Name 137  "r000"
-                              Name 142  "r001"
-                              Name 145  "r002"
-                              Name 148  "r003"
-                              Name 152  "r004"
+                              Name 18  "PixelShaderFunctionS(f1;f1;f1;u1;i1;"
+                              Name 13  "inF0"
+                              Name 14  "inF1"
+                              Name 15  "inF2"
+                              Name 16  "inU0"
+                              Name 17  "inU1"
+                              Name 24  "PixelShaderFunction1(vf1;vf1;vf1;"
+                              Name 21  "inF0"
+                              Name 22  "inF1"
+                              Name 23  "inF2"
+                              Name 36  "PixelShaderFunction2(vf2;vf2;vf2;vu2;vu2;"
+                              Name 31  "inF0"
+                              Name 32  "inF1"
+                              Name 33  "inF2"
+                              Name 34  "inU0"
+                              Name 35  "inU1"
+                              Name 48  "PixelShaderFunction3(vf3;vf3;vf3;vu3;vu3;"
+                              Name 43  "inF0"
+                              Name 44  "inF1"
+                              Name 45  "inF2"
+                              Name 46  "inU0"
+                              Name 47  "inU1"
+                              Name 60  "PixelShaderFunction(vf4;vf4;vf4;vu4;vu4;"
+                              Name 55  "inF0"
+                              Name 56  "inF1"
+                              Name 57  "inF2"
+                              Name 58  "inU0"
+                              Name 59  "inU1"
+                              Name 68  "PixelShaderFunction2x2(mf22;mf22;mf22;"
+                              Name 65  "inF0"
+                              Name 66  "inF1"
+                              Name 67  "inF2"
+                              Name 76  "PixelShaderFunction3x3(mf33;mf33;mf33;"
+                              Name 73  "inF0"
+                              Name 74  "inF1"
+                              Name 75  "inF2"
+                              Name 84  "PixelShaderFunction4x4(mf44;mf44;mf44;"
+                              Name 81  "inF0"
+                              Name 82  "inF1"
+                              Name 83  "inF2"
+                              Name 93  "TestGenMul2(f1;f1;vf2;vf2;mf22;mf22;"
+                              Name 87  "inF0"
+                              Name 88  "inF1"
+                              Name 89  "inFV0"
+                              Name 90  "inFV1"
+                              Name 91  "inFM0"
+                              Name 92  "inFM1"
+                              Name 102  "TestGenMul3(f1;f1;vf3;vf3;mf33;mf33;"
+                              Name 96  "inF0"
+                              Name 97  "inF1"
+                              Name 98  "inFV0"
+                              Name 99  "inFV1"
+                              Name 100  "inFM0"
+                              Name 101  "inFM1"
+                              Name 111  "TestGenMul4(f1;f1;vf4;vf4;mf44;mf44;"
+                              Name 105  "inF0"
+                              Name 106  "inF1"
+                              Name 107  "inFV0"
+                              Name 108  "inFV1"
+                              Name 109  "inFM0"
+                              Name 110  "inFM1"
+                              Name 131  "TestGenMulNxM(f1;f1;vf2;vf3;mf23;mf32;mf33;mf34;mf24;"
+                              Name 122  "inF0"
+                              Name 123  "inF1"
+                              Name 124  "inFV2"
+                              Name 125  "inFV3"
+                              Name 126  "inFM2x3"
+                              Name 127  "inFM3x2"
+                              Name 128  "inFM3x3"
+                              Name 129  "inFM3x4"
+                              Name 130  "inFM2x4"
+                              Name 133  "PS_OUTPUT"
+                              MemberName 133(PS_OUTPUT) 0  "color"
+                              Name 135  "@main("
+                              Name 139  "r000"
+                              Name 144  "r001"
+                              Name 147  "r002"
+                              Name 150  "r003"
+                              Name 154  "r004"
                               Name 157  "r005"
                               Name 160  "r006"
                               Name 163  "r007"
@@ -6161,153 +6161,153 @@
                7:             TypePointer Function 6(float)
                8:             TypeInt 32 0
                9:             TypePointer Function 8(int)
-              10:             TypeFunction 6(float) 7(ptr) 7(ptr) 7(ptr) 9(ptr) 9(ptr)
-              18:             TypeFunction 6(float) 7(ptr) 7(ptr) 7(ptr)
-              24:             TypeVector 6(float) 2
-              25:             TypePointer Function 24(fvec2)
-              26:             TypeVector 8(int) 2
-              27:             TypePointer Function 26(ivec2)
-              28:             TypeFunction 24(fvec2) 25(ptr) 25(ptr) 25(ptr) 27(ptr) 27(ptr)
-              36:             TypeVector 6(float) 3
-              37:             TypePointer Function 36(fvec3)
-              38:             TypeVector 8(int) 3
-              39:             TypePointer Function 38(ivec3)
-              40:             TypeFunction 36(fvec3) 37(ptr) 37(ptr) 37(ptr) 39(ptr) 39(ptr)
-              48:             TypeVector 6(float) 4
-              49:             TypePointer Function 48(fvec4)
-              50:             TypeVector 8(int) 4
-              51:             TypePointer Function 50(ivec4)
-              52:             TypeFunction 48(fvec4) 49(ptr) 49(ptr) 49(ptr) 51(ptr) 51(ptr)
-              60:             TypeMatrix 24(fvec2) 2
-              61:             TypePointer Function 60
-              62:             TypeFunction 60 61(ptr) 61(ptr) 61(ptr)
-              68:             TypeMatrix 36(fvec3) 3
-              69:             TypePointer Function 68
-              70:             TypeFunction 68 69(ptr) 69(ptr) 69(ptr)
-              76:             TypeMatrix 48(fvec4) 4
-              77:             TypePointer Function 76
-              78:             TypeFunction 76 77(ptr) 77(ptr) 77(ptr)
-              84:             TypeFunction 2 7(ptr) 7(ptr) 25(ptr) 25(ptr) 61(ptr) 61(ptr)
-              93:             TypeFunction 2 7(ptr) 7(ptr) 37(ptr) 37(ptr) 69(ptr) 69(ptr)
-             102:             TypeFunction 2 7(ptr) 7(ptr) 49(ptr) 49(ptr) 77(ptr) 77(ptr)
-             111:             TypeMatrix 36(fvec3) 2
-             112:             TypePointer Function 111
-             113:             TypeMatrix 24(fvec2) 3
+              10:             TypeInt 32 1
+              11:             TypePointer Function 10(int)
+              12:             TypeFunction 6(float) 7(ptr) 7(ptr) 7(ptr) 9(ptr) 11(ptr)
+              20:             TypeFunction 6(float) 7(ptr) 7(ptr) 7(ptr)
+              26:             TypeVector 6(float) 2
+              27:             TypePointer Function 26(fvec2)
+              28:             TypeVector 8(int) 2
+              29:             TypePointer Function 28(ivec2)
+              30:             TypeFunction 26(fvec2) 27(ptr) 27(ptr) 27(ptr) 29(ptr) 29(ptr)
+              38:             TypeVector 6(float) 3
+              39:             TypePointer Function 38(fvec3)
+              40:             TypeVector 8(int) 3
+              41:             TypePointer Function 40(ivec3)
+              42:             TypeFunction 38(fvec3) 39(ptr) 39(ptr) 39(ptr) 41(ptr) 41(ptr)
+              50:             TypeVector 6(float) 4
+              51:             TypePointer Function 50(fvec4)
+              52:             TypeVector 8(int) 4
+              53:             TypePointer Function 52(ivec4)
+              54:             TypeFunction 50(fvec4) 51(ptr) 51(ptr) 51(ptr) 53(ptr) 53(ptr)
+              62:             TypeMatrix 26(fvec2) 2
+              63:             TypePointer Function 62
+              64:             TypeFunction 62 63(ptr) 63(ptr) 63(ptr)
+              70:             TypeMatrix 38(fvec3) 3
+              71:             TypePointer Function 70
+              72:             TypeFunction 70 71(ptr) 71(ptr) 71(ptr)
+              78:             TypeMatrix 50(fvec4) 4
+              79:             TypePointer Function 78
+              80:             TypeFunction 78 79(ptr) 79(ptr) 79(ptr)
+              86:             TypeFunction 2 7(ptr) 7(ptr) 27(ptr) 27(ptr) 63(ptr) 63(ptr)
+              95:             TypeFunction 2 7(ptr) 7(ptr) 39(ptr) 39(ptr) 71(ptr) 71(ptr)
+             104:             TypeFunction 2 7(ptr) 7(ptr) 51(ptr) 51(ptr) 79(ptr) 79(ptr)
+             113:             TypeMatrix 38(fvec3) 2
              114:             TypePointer Function 113
-             115:             TypeMatrix 48(fvec4) 3
+             115:             TypeMatrix 26(fvec2) 3
              116:             TypePointer Function 115
-             117:             TypeMatrix 48(fvec4) 2
+             117:             TypeMatrix 50(fvec4) 3
              118:             TypePointer Function 117
-             119:             TypeFunction 2 7(ptr) 7(ptr) 25(ptr) 37(ptr) 112(ptr) 114(ptr) 69(ptr) 116(ptr) 118(ptr)
-  131(PS_OUTPUT):             TypeStruct 48(fvec4)
-             132:             TypeFunction 131(PS_OUTPUT)
-             135:             TypeBool
-             136:             TypePointer Function 135(bool)
-             139:    6(float) Constant 0
-             155:             TypeInt 32 1
-             156:             TypePointer Function 155(int)
-             187:    155(int) Constant 0
-             199:    155(int) Constant 7
+             119:             TypeMatrix 50(fvec4) 2
+             120:             TypePointer Function 119
+             121:             TypeFunction 2 7(ptr) 7(ptr) 27(ptr) 39(ptr) 114(ptr) 116(ptr) 71(ptr) 118(ptr) 120(ptr)
+  133(PS_OUTPUT):             TypeStruct 50(fvec4)
+             134:             TypeFunction 133(PS_OUTPUT)
+             137:             TypeBool
+             138:             TypePointer Function 137(bool)
+             141:    6(float) Constant 0
+             187:     10(int) Constant 0
+             199:     10(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
+             293:     10(int) Constant 2
+             345:             TypeVector 137(bool) 2
+             346:   26(fvec2) ConstantComposite 141 141
+             362:             TypeVector 10(int) 2
              363:             TypePointer Function 362(ivec2)
              395:      8(int) Constant 0
-             396:   26(ivec2) ConstantComposite 395 395
-             409:    155(int) Constant 3
+             396:   28(ivec2) ConstantComposite 395 395
+             409:     10(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
+             455:   28(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
+             535:   28(ivec2) ConstantComposite 533 534
+             582:   26(fvec2) ConstantComposite 289 530
+             587:             TypeVector 137(bool) 3
+             588:   38(fvec3) ConstantComposite 141 141 141
+             604:             TypeVector 10(int) 3
              605:             TypePointer Function 604(ivec3)
-             637:   38(ivec3) ConstantComposite 395 395 395
+             637:   40(ivec3) ConstantComposite 395 395 395
              650:      8(int) Constant 3
              651:      8(int) Constant 5
-             652:   38(ivec3) ConstantComposite 453 650 651
+             652:   40(ivec3) ConstantComposite 453 650 651
              699:      8(int) Constant 4
-             700:   38(ivec3) ConstantComposite 534 650 699
+             700:   40(ivec3) ConstantComposite 534 650 699
              717:             TypePointer Function 587(bvec3)
              736:    6(float) Constant 1050253722
-             783:   38(ivec3) ConstantComposite 533 534 650
+             783:   40(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
+             831:   38(fvec3) ConstantComposite 289 530 830
+             836:             TypeVector 137(bool) 4
+             837:   50(fvec4) ConstantComposite 141 141 141 141
+             853:             TypeVector 10(int) 4
              854:             TypePointer Function 853(ivec4)
-             886:   50(ivec4) ConstantComposite 395 395 395 395
-             899:   50(ivec4) ConstantComposite 453 650 651 534
+             886:   52(ivec4) ConstantComposite 395 395 395 395
+             899:   52(ivec4) ConstantComposite 453 650 651 534
              953:      8(int) Constant 9
              954:      8(int) Constant 10
-             955:   50(ivec4) ConstantComposite 453 454 953 954
+             955:   52(ivec4) ConstantComposite 453 454 953 954
              972:             TypePointer Function 836(bvec4)
-            1032:   50(ivec4) ConstantComposite 533 534 650 699
+            1032:   52(ivec4) ConstantComposite 533 534 650 699
             1079:    6(float) Constant 1082130432
-            1080:   48(fvec4) ConstantComposite 289 530 830 1079
+            1080:   50(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
+            1111:          62 ConstantComposite 346 346
+            1258:   26(fvec2) ConstantComposite 530 530
+            1259:          62 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
+            1290:          70 ConstantComposite 588 588 588
+            1440:   38(fvec3) ConstantComposite 830 830 830
+            1441:          70 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)
+            1472:          78 ConstantComposite 837 837 837 837
+            1625:   50(fvec4) ConstantComposite 1079 1079 1079 1079
+            1626:          78 ConstantComposite 1625 1625 1625 1625
+            1805:             TypePointer Function 133(PS_OUTPUT)
+            1807:   50(fvec4) ConstantComposite 289 289 289 289
+            1812:             TypePointer Output 50(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)
+            1820:             TypePointer Workgroup 28(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)
+            1824:             TypePointer Workgroup 40(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)
+            1828:             TypePointer Workgroup 52(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
-            1814:131(PS_OUTPUT) FunctionCall 133(@main()
-            1815:   48(fvec4) CompositeExtract 1814 0
+            1814:133(PS_OUTPUT) FunctionCall 135(@main()
+            1815:   50(fvec4) CompositeExtract 1814 0
                               Store 1813(@entryPointOutput.color) 1815
                               Return
                               FunctionEnd
-16(PixelShaderFunctionS(f1;f1;f1;u1;u1;):    6(float) Function None 10
-        11(inF0):      7(ptr) FunctionParameter
-        12(inF1):      7(ptr) FunctionParameter
-        13(inF2):      7(ptr) FunctionParameter
-        14(inU0):      9(ptr) FunctionParameter
-        15(inU1):      9(ptr) FunctionParameter
-              17:             Label
-       137(r000):    136(ptr) Variable Function
-       142(r001):      7(ptr) Variable Function
-       145(r002):      7(ptr) Variable Function
-       148(r003):    136(ptr) Variable Function
-       152(r004):      7(ptr) Variable Function
-       157(r005):    156(ptr) Variable Function
+18(PixelShaderFunctionS(f1;f1;f1;u1;i1;):    6(float) Function None 12
+        13(inF0):      7(ptr) FunctionParameter
+        14(inF1):      7(ptr) FunctionParameter
+        15(inF2):      7(ptr) FunctionParameter
+        16(inU0):      9(ptr) FunctionParameter
+        17(inU1):     11(ptr) FunctionParameter
+              19:             Label
+       139(r000):    138(ptr) Variable Function
+       144(r001):      7(ptr) Variable Function
+       147(r002):      7(ptr) Variable Function
+       150(r003):    138(ptr) Variable Function
+       154(r004):      7(ptr) Variable Function
+       157(r005):     11(ptr) Variable Function
        160(r006):      9(ptr) Variable Function
        163(r007):      7(ptr) Variable Function
        166(r009):      7(ptr) Variable Function
@@ -6316,7 +6316,7 @@
        176(r012):      7(ptr) Variable Function
        192(r014):      7(ptr) Variable Function
        195(r015):      7(ptr) Variable Function
-       198(r016):    156(ptr) Variable Function
+       198(r016):     11(ptr) Variable Function
        201(r017):      7(ptr) Variable Function
        204(r018):      7(ptr) Variable Function
        207(r019):      7(ptr) Variable Function
@@ -6332,8 +6332,8 @@
        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
+       247(r037):    138(ptr) Variable Function
+       250(r038):    138(ptr) Variable Function
        253(r039):      7(ptr) Variable Function
       257(r039a):      7(ptr) Variable Function
        262(r040):      7(ptr) Variable Function
@@ -6357,2102 +6357,2102 @@
        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
-                              Store 137(r000) 141
-             143:    6(float) Load 11(inF0)
-             144:    6(float) ExtInst 1(GLSL.std.450) 4(FAbs) 143
-                              Store 142(r001) 144
-             146:    6(float) Load 11(inF0)
-             147:    6(float) ExtInst 1(GLSL.std.450) 17(Acos) 146
-                              Store 145(r002) 147
-             149:    6(float) Load 11(inF0)
-             150:   135(bool) FOrdNotEqual 149 139
-             151:   135(bool) Any 150
-                              Store 148(r003) 151
-             153:    6(float) Load 11(inF0)
-             154:    6(float) ExtInst 1(GLSL.std.450) 16(Asin) 153
-                              Store 152(r004) 154
-             158:    6(float) Load 11(inF0)
-             159:    155(int) Bitcast 158
+             140:    6(float) Load 13(inF0)
+             142:   137(bool) FOrdNotEqual 140 141
+             143:   137(bool) All 142
+                              Store 139(r000) 143
+             145:    6(float) Load 13(inF0)
+             146:    6(float) ExtInst 1(GLSL.std.450) 4(FAbs) 145
+                              Store 144(r001) 146
+             148:    6(float) Load 13(inF0)
+             149:    6(float) ExtInst 1(GLSL.std.450) 17(Acos) 148
+                              Store 147(r002) 149
+             151:    6(float) Load 13(inF0)
+             152:   137(bool) FOrdNotEqual 151 141
+             153:   137(bool) Any 152
+                              Store 150(r003) 153
+             155:    6(float) Load 13(inF0)
+             156:    6(float) ExtInst 1(GLSL.std.450) 16(Asin) 155
+                              Store 154(r004) 156
+             158:    6(float) Load 13(inF0)
+             159:     10(int) Bitcast 158
                               Store 157(r005) 159
-             161:    6(float) Load 11(inF0)
+             161:     10(int) Load 17(inU1)
              162:      8(int) Bitcast 161
                               Store 160(r006) 162
-             164:      8(int) Load 14(inU0)
+             164:      8(int) Load 16(inU0)
              165:    6(float) Bitcast 164
                               Store 163(r007) 165
-             167:    6(float) Load 11(inF0)
+             167:    6(float) Load 13(inF0)
              168:    6(float) ExtInst 1(GLSL.std.450) 18(Atan) 167
                               Store 166(r009) 168
-             170:    6(float) Load 11(inF0)
-             171:    6(float) Load 12(inF1)
+             170:    6(float) Load 13(inF0)
+             171:    6(float) Load 14(inF1)
              172:    6(float) ExtInst 1(GLSL.std.450) 25(Atan2) 170 171
                               Store 169(r010) 172
-             174:    6(float) Load 11(inF0)
+             174:    6(float) Load 13(inF0)
              175:    6(float) ExtInst 1(GLSL.std.450) 9(Ceil) 174
                               Store 173(r011) 175
-             177:    6(float) Load 11(inF0)
-             178:    6(float) Load 12(inF1)
-             179:    6(float) Load 13(inF2)
+             177:    6(float) Load 13(inF0)
+             178:    6(float) Load 14(inF1)
+             179:    6(float) Load 15(inF2)
              180:    6(float) ExtInst 1(GLSL.std.450) 43(FClamp) 177 178 179
                               Store 176(r012) 180
-             181:    6(float) Load 11(inF0)
-             182:   135(bool) FOrdLessThan 181 139
+             181:    6(float) Load 13(inF0)
+             182:   137(bool) FOrdLessThan 181 141
                               SelectionMerge 184 None
                               BranchConditional 182 183 184
              183:               Label
                                 Kill
              184:             Label
-             186:    155(int) Load 157(r005)
-             188:   135(bool) SLessThan 186 187
+             186:     10(int) Load 157(r005)
+             188:   137(bool) SLessThan 186 187
                               SelectionMerge 190 None
                               BranchConditional 188 189 190
              189:               Label
                                 Kill
              190:             Label
-             193:    6(float) Load 11(inF0)
+             193:    6(float) Load 13(inF0)
              194:    6(float) ExtInst 1(GLSL.std.450) 14(Cos) 193
                               Store 192(r014) 194
-             196:    6(float) Load 11(inF0)
+             196:    6(float) Load 13(inF0)
              197:    6(float) ExtInst 1(GLSL.std.450) 20(Cosh) 196
                               Store 195(r015) 197
-             200:    155(int) BitCount 199
+             200:     10(int) BitCount 199
                               Store 198(r016) 200
-             202:    6(float) Load 11(inF0)
+             202:    6(float) Load 13(inF0)
              203:    6(float) DPdx 202
                               Store 201(r017) 203
-             205:    6(float) Load 11(inF0)
+             205:    6(float) Load 13(inF0)
              206:    6(float) DPdxCoarse 205
                               Store 204(r018) 206
-             208:    6(float) Load 11(inF0)
+             208:    6(float) Load 13(inF0)
              209:    6(float) DPdxFine 208
                               Store 207(r019) 209
-             211:    6(float) Load 11(inF0)
+             211:    6(float) Load 13(inF0)
              212:    6(float) DPdy 211
                               Store 210(r020) 212
-             214:    6(float) Load 11(inF0)
+             214:    6(float) Load 13(inF0)
              215:    6(float) DPdyCoarse 214
                               Store 213(r021) 215
-             217:    6(float) Load 11(inF0)
+             217:    6(float) Load 13(inF0)
              218:    6(float) DPdyFine 217
                               Store 216(r022) 218
-             220:    6(float) Load 11(inF0)
+             220:    6(float) Load 13(inF0)
              221:    6(float) ExtInst 1(GLSL.std.450) 12(Degrees) 220
                               Store 219(r023) 221
-             223:    6(float) Load 11(inF0)
+             223:    6(float) Load 13(inF0)
              224:    6(float) ExtInst 1(GLSL.std.450) 27(Exp) 223
                               Store 222(r027) 224
-             226:    6(float) Load 11(inF0)
+             226:    6(float) Load 13(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
+             229:     10(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
+             232:     10(int) ExtInst 1(GLSL.std.450) 73(FindILsb) 199
              233:      8(int) Bitcast 232
                               Store 231(r030) 233
-             235:    6(float) Load 11(inF0)
+             235:    6(float) Load 13(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)
+             238:    6(float) Load 13(inF0)
+             239:    6(float) Load 14(inF1)
              240:    6(float) FMod 238 239
                               Store 237(r033) 240
-             242:    6(float) Load 11(inF0)
+             242:    6(float) Load 13(inF0)
              243:    6(float) ExtInst 1(GLSL.std.450) 10(Fract) 242
                               Store 241(r034) 243
-             245:    6(float) Load 11(inF0)
+             245:    6(float) Load 13(inF0)
              246:    6(float) Fwidth 245
                               Store 244(r036) 246
-             248:    6(float) Load 11(inF0)
-             249:   135(bool) IsInf 248
+             248:    6(float) Load 13(inF0)
+             249:   137(bool) IsInf 248
                               Store 247(r037) 249
-             251:    6(float) Load 11(inF0)
-             252:   135(bool) IsNan 251
+             251:    6(float) Load 13(inF0)
+             252:   137(bool) IsNan 251
                               Store 250(r038) 252
-             254:    6(float) Load 11(inF0)
-             255:    6(float) Load 12(inF1)
+             254:    6(float) Load 13(inF0)
+             255:    6(float) Load 14(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)
+             258:    6(float) Load 13(inF0)
+             259:    6(float) Load 14(inF1)
+             260:    6(float) Load 15(inF2)
              261:    6(float) ExtInst 1(GLSL.std.450) 46(FMix) 258 259 260
                               Store 257(r039a) 261
-             263:    6(float) Load 11(inF0)
+             263:    6(float) Load 13(inF0)
              264:    6(float) ExtInst 1(GLSL.std.450) 28(Log) 263
                               Store 262(r040) 264
-             266:    6(float) Load 11(inF0)
+             266:    6(float) Load 13(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)
+             271:    6(float) Load 13(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)
+             274:    6(float) Load 13(inF0)
+             275:    6(float) Load 14(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)
+             278:    6(float) Load 13(inF0)
+             279:    6(float) Load 14(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)
+             282:    6(float) Load 13(inF0)
+             283:    6(float) Load 14(inF1)
              284:    6(float) ExtInst 1(GLSL.std.450) 26(Pow) 282 283
                               Store 281(r045) 284
-             286:    6(float) Load 11(inF0)
+             286:    6(float) Load 13(inF0)
              287:    6(float) ExtInst 1(GLSL.std.450) 11(Radians) 286
                               Store 285(r046) 287
-             290:    6(float) Load 11(inF0)
+             290:    6(float) Load 13(inF0)
              291:    6(float) FDiv 289 290
                               Store 288(r047) 291
-             294:    155(int) BitReverse 293
+             294:     10(int) BitReverse 293
              295:      8(int) Bitcast 294
                               Store 292(r048) 295
-             297:    6(float) Load 11(inF0)
+             297:    6(float) Load 13(inF0)
              298:    6(float) ExtInst 1(GLSL.std.450) 2(RoundEven) 297
                               Store 296(r049) 298
-             300:    6(float) Load 11(inF0)
+             300:    6(float) Load 13(inF0)
              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) 43(FClamp) 303 139 289
+             303:    6(float) Load 13(inF0)
+             304:    6(float) ExtInst 1(GLSL.std.450) 43(FClamp) 303 141 289
                               Store 302(r051) 304
-             306:    6(float) Load 11(inF0)
+             306:    6(float) Load 13(inF0)
              307:    6(float) ExtInst 1(GLSL.std.450) 6(FSign) 306
                               Store 305(r052) 307
-             309:    6(float) Load 11(inF0)
+             309:    6(float) Load 13(inF0)
              310:    6(float) ExtInst 1(GLSL.std.450) 13(Sin) 309
                               Store 308(r053) 310
-             311:    6(float) Load 11(inF0)
+             311:    6(float) Load 13(inF0)
              312:    6(float) ExtInst 1(GLSL.std.450) 13(Sin) 311
-                              Store 12(inF1) 312
-             313:    6(float) Load 11(inF0)
+                              Store 14(inF1) 312
+             313:    6(float) Load 13(inF0)
              314:    6(float) ExtInst 1(GLSL.std.450) 14(Cos) 313
-                              Store 13(inF2) 314
-             316:    6(float) Load 11(inF0)
+                              Store 15(inF2) 314
+             316:    6(float) Load 13(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)
+             319:    6(float) Load 13(inF0)
+             320:    6(float) Load 14(inF1)
+             321:    6(float) Load 15(inF2)
              322:    6(float) ExtInst 1(GLSL.std.450) 49(SmoothStep) 319 320 321
                               Store 318(r056) 322
-             324:    6(float) Load 11(inF0)
+             324:    6(float) Load 13(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)
+             327:    6(float) Load 13(inF0)
+             328:    6(float) Load 14(inF1)
              329:    6(float) ExtInst 1(GLSL.std.450) 48(Step) 327 328
                               Store 326(r058) 329
-             331:    6(float) Load 11(inF0)
+             331:    6(float) Load 13(inF0)
              332:    6(float) ExtInst 1(GLSL.std.450) 15(Tan) 331
                               Store 330(r059) 332
-             334:    6(float) Load 11(inF0)
+             334:    6(float) Load 13(inF0)
              335:    6(float) ExtInst 1(GLSL.std.450) 21(Tanh) 334
                               Store 333(r060) 335
-             337:    6(float) Load 11(inF0)
+             337:    6(float) Load 13(inF0)
              338:    6(float) ExtInst 1(GLSL.std.450) 3(Trunc) 337
                               Store 336(r061) 338
-                              ReturnValue 139
+                              ReturnValue 141
                               FunctionEnd
-22(PixelShaderFunction1(vf1;vf1;vf1;):    6(float) Function None 18
-        19(inF0):      7(ptr) FunctionParameter
-        20(inF1):      7(ptr) FunctionParameter
-        21(inF2):      7(ptr) FunctionParameter
-              23:             Label
-                              ReturnValue 139
+24(PixelShaderFunction1(vf1;vf1;vf1;):    6(float) Function None 20
+        21(inF0):      7(ptr) FunctionParameter
+        22(inF1):      7(ptr) FunctionParameter
+        23(inF2):      7(ptr) FunctionParameter
+              25:             Label
+                              ReturnValue 141
                               FunctionEnd
-34(PixelShaderFunction2(vf2;vf2;vf2;vu2;vu2;):   24(fvec2) Function None 28
-        29(inF0):     25(ptr) FunctionParameter
-        30(inF1):     25(ptr) FunctionParameter
-        31(inF2):     25(ptr) FunctionParameter
-        32(inU0):     27(ptr) FunctionParameter
-        33(inU1):     27(ptr) FunctionParameter
-              35:             Label
-       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
+36(PixelShaderFunction2(vf2;vf2;vf2;vu2;vu2;):   26(fvec2) Function None 30
+        31(inF0):     27(ptr) FunctionParameter
+        32(inF1):     27(ptr) FunctionParameter
+        33(inF2):     27(ptr) FunctionParameter
+        34(inU0):     29(ptr) FunctionParameter
+        35(inU1):     29(ptr) FunctionParameter
+              37:             Label
+       343(r000):    138(ptr) Variable Function
+       349(r001):     27(ptr) Variable Function
+       352(r002):     27(ptr) Variable Function
+       355(r003):    138(ptr) Variable Function
+       359(r004):     27(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
+       367(r006):     29(ptr) Variable Function
+       370(r007):     27(ptr) Variable Function
+       373(r009):     27(ptr) Variable Function
+       376(r010):     27(ptr) Variable Function
+       380(r011):     27(ptr) Variable Function
+       383(r012):     27(ptr) Variable Function
+       402(r013):     27(ptr) Variable Function
+       405(r015):     27(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
+       412(r017):     27(ptr) Variable Function
+       415(r018):     27(ptr) Variable Function
+       418(r019):     27(ptr) Variable Function
+       421(r020):     27(ptr) Variable Function
+       424(r021):     27(ptr) Variable Function
+       427(r022):     27(ptr) Variable Function
+       430(r023):     27(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
+       441(r028):     27(ptr) Variable Function
+       444(r029):     27(ptr) Variable Function
+       447(r030):     27(ptr) Variable Function
+       452(r031):     29(ptr) Variable Function
+       457(r032):     29(ptr) Variable Function
+       459(r033):     27(ptr) Variable Function
+       462(r035):     27(ptr) Variable Function
+       466(r036):     27(ptr) Variable Function
+       469(r038):     27(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
+       479(r041):     27(ptr) Variable Function
+      483(r039a):     27(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)
+       491(r043):     27(ptr) Variable Function
+       494(r044):     27(ptr) Variable Function
+       498(r045):     27(ptr) Variable Function
+       501(r046):     27(ptr) Variable Function
+       505(r047):     27(ptr) Variable Function
+       509(r048):     27(ptr) Variable Function
+       512(r049):     27(ptr) Variable Function
+       516(r050):     27(ptr) Variable Function
+       519(r051):     27(ptr) Variable Function
+       523(r052):     27(ptr) Variable Function
+       527(r053):     27(ptr) Variable Function
+       532(r054):     29(ptr) Variable Function
+       537(r055):     27(ptr) Variable Function
+       540(r056):     27(ptr) Variable Function
+       543(r057):     27(ptr) Variable Function
+       548(r058):     27(ptr) Variable Function
+       551(r059):     27(ptr) Variable Function
+       558(r060):     27(ptr) Variable Function
+       561(r061):     27(ptr) Variable Function
+       566(r062):     27(ptr) Variable Function
+       569(r063):     27(ptr) Variable Function
+       573(r064):     27(ptr) Variable Function
+       576(r065):     27(ptr) Variable Function
+       579(r066):     27(ptr) Variable Function
+             344:   26(fvec2) Load 31(inF0)
              347:  345(bvec2) FOrdNotEqual 344 346
-             348:   135(bool) All 347
+             348:   137(bool) All 347
                               Store 343(r000) 348
-             350:   24(fvec2) Load 29(inF0)
-             351:   24(fvec2) ExtInst 1(GLSL.std.450) 4(FAbs) 350
+             350:   26(fvec2) Load 31(inF0)
+             351:   26(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
+             353:   26(fvec2) Load 31(inF0)
+             354:   26(fvec2) ExtInst 1(GLSL.std.450) 17(Acos) 353
                               Store 352(r002) 354
-             356:   24(fvec2) Load 29(inF0)
+             356:   26(fvec2) Load 31(inF0)
              357:  345(bvec2) FOrdNotEqual 356 346
-             358:   135(bool) Any 357
+             358:   137(bool) Any 357
                               Store 355(r003) 358
-             360:   24(fvec2) Load 29(inF0)
-             361:   24(fvec2) ExtInst 1(GLSL.std.450) 16(Asin) 360
+             360:   26(fvec2) Load 31(inF0)
+             361:   26(fvec2) ExtInst 1(GLSL.std.450) 16(Asin) 360
                               Store 359(r004) 361
-             365:   24(fvec2) Load 29(inF0)
+             365:   26(fvec2) Load 31(inF0)
              366:  362(ivec2) Bitcast 365
                               Store 364(r005) 366
-             368:   24(fvec2) Load 29(inF0)
-             369:   26(ivec2) Bitcast 368
+             368:   26(fvec2) Load 31(inF0)
+             369:   28(ivec2) Bitcast 368
                               Store 367(r006) 369
-             371:   26(ivec2) Load 32(inU0)
-             372:   24(fvec2) Bitcast 371
+             371:   28(ivec2) Load 34(inU0)
+             372:   26(fvec2) Bitcast 371
                               Store 370(r007) 372
-             374:   24(fvec2) Load 29(inF0)
-             375:   24(fvec2) ExtInst 1(GLSL.std.450) 18(Atan) 374
+             374:   26(fvec2) Load 31(inF0)
+             375:   26(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
+             377:   26(fvec2) Load 31(inF0)
+             378:   26(fvec2) Load 32(inF1)
+             379:   26(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
+             381:   26(fvec2) Load 31(inF0)
+             382:   26(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
+             384:   26(fvec2) Load 31(inF0)
+             385:   26(fvec2) Load 32(inF1)
+             386:   26(fvec2) Load 33(inF2)
+             387:   26(fvec2) ExtInst 1(GLSL.std.450) 43(FClamp) 384 385 386
                               Store 383(r012) 387
-             388:   24(fvec2) Load 29(inF0)
+             388:   26(fvec2) Load 31(inF0)
              389:  345(bvec2) FOrdLessThan 388 346
-             390:   135(bool) Any 389
+             390:   137(bool) Any 389
                               SelectionMerge 392 None
                               BranchConditional 390 391 392
              391:               Label
                                 Kill
              392:             Label
-             394:   26(ivec2) Load 32(inU0)
+             394:   28(ivec2) Load 34(inU0)
              397:  345(bvec2) ULessThan 394 396
-             398:   135(bool) Any 397
+             398:   137(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
+             403:   26(fvec2) Load 31(inF0)
+             404:   26(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
+             406:   26(fvec2) Load 31(inF0)
+             407:   26(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
+             413:   26(fvec2) Load 31(inF0)
+             414:   26(fvec2) DPdx 413
                               Store 412(r017) 414
-             416:   24(fvec2) Load 29(inF0)
-             417:   24(fvec2) DPdxCoarse 416
+             416:   26(fvec2) Load 31(inF0)
+             417:   26(fvec2) DPdxCoarse 416
                               Store 415(r018) 417
-             419:   24(fvec2) Load 29(inF0)
-             420:   24(fvec2) DPdxFine 419
+             419:   26(fvec2) Load 31(inF0)
+             420:   26(fvec2) DPdxFine 419
                               Store 418(r019) 420
-             422:   24(fvec2) Load 29(inF0)
-             423:   24(fvec2) DPdy 422
+             422:   26(fvec2) Load 31(inF0)
+             423:   26(fvec2) DPdy 422
                               Store 421(r020) 423
-             425:   24(fvec2) Load 29(inF0)
-             426:   24(fvec2) DPdyCoarse 425
+             425:   26(fvec2) Load 31(inF0)
+             426:   26(fvec2) DPdyCoarse 425
                               Store 424(r021) 426
-             428:   24(fvec2) Load 29(inF0)
-             429:   24(fvec2) DPdyFine 428
+             428:   26(fvec2) Load 31(inF0)
+             429:   26(fvec2) DPdyFine 428
                               Store 427(r022) 429
-             431:   24(fvec2) Load 29(inF0)
-             432:   24(fvec2) ExtInst 1(GLSL.std.450) 12(Degrees) 431
+             431:   26(fvec2) Load 31(inF0)
+             432:   26(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)
+             434:   26(fvec2) Load 31(inF0)
+             435:   26(fvec2) Load 32(inF1)
              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)
+             438:   26(fvec2) Load 31(inF0)
+             439:   26(fvec2) Load 32(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
+             442:   26(fvec2) Load 31(inF0)
+             443:   26(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
+             445:   26(fvec2) Load 31(inF0)
+             446:   26(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
+             448:   26(fvec2) Load 31(inF0)
+             449:   26(fvec2) Load 32(inF1)
+             450:   26(fvec2) Load 33(inF2)
+             451:   26(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
+             456:   28(ivec2) ExtInst 1(GLSL.std.450) 75(FindUMsb) 455
                               Store 452(r031) 456
-             458:   26(ivec2) ExtInst 1(GLSL.std.450) 73(FindILsb) 455
+             458:   28(ivec2) ExtInst 1(GLSL.std.450) 73(FindILsb) 455
                               Store 457(r032) 458
-             460:   24(fvec2) Load 29(inF0)
-             461:   24(fvec2) ExtInst 1(GLSL.std.450) 8(Floor) 460
+             460:   26(fvec2) Load 31(inF0)
+             461:   26(fvec2) ExtInst 1(GLSL.std.450) 8(Floor) 460
                               Store 459(r033) 461
-             463:   24(fvec2) Load 29(inF0)
-             464:   24(fvec2) Load 30(inF1)
-             465:   24(fvec2) FMod 463 464
+             463:   26(fvec2) Load 31(inF0)
+             464:   26(fvec2) Load 32(inF1)
+             465:   26(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
+             467:   26(fvec2) Load 31(inF0)
+             468:   26(fvec2) ExtInst 1(GLSL.std.450) 10(Fract) 467
                               Store 466(r036) 468
-             470:   24(fvec2) Load 29(inF0)
-             471:   24(fvec2) Fwidth 470
+             470:   26(fvec2) Load 31(inF0)
+             471:   26(fvec2) Fwidth 470
                               Store 469(r038) 471
-             474:   24(fvec2) Load 29(inF0)
+             474:   26(fvec2) Load 31(inF0)
              475:  345(bvec2) IsInf 474
                               Store 473(r039) 475
-             477:   24(fvec2) Load 29(inF0)
+             477:   26(fvec2) Load 31(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
+             480:   26(fvec2) Load 31(inF0)
+             481:   26(fvec2) Load 32(inF1)
+             482:   26(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
+             484:   26(fvec2) Load 31(inF0)
+             485:   26(fvec2) Load 32(inF1)
+             486:   26(fvec2) Load 33(inF2)
+             487:   26(fvec2) ExtInst 1(GLSL.std.450) 46(FMix) 484 485 486
                               Store 483(r039a) 487
-             489:   24(fvec2) Load 29(inF0)
+             489:   26(fvec2) Load 31(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) ExtInst 1(GLSL.std.450) 28(Log) 492
+             492:   26(fvec2) Load 31(inF0)
+             493:   26(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
+             495:   26(fvec2) Load 31(inF0)
+             496:   26(fvec2) ExtInst 1(GLSL.std.450) 30(Log2) 495
+             497:   26(fvec2) VectorTimesScalar 496 268
                               Store 494(r044) 497
-             499:   24(fvec2) Load 29(inF0)
-             500:   24(fvec2) ExtInst 1(GLSL.std.450) 30(Log2) 499
+             499:   26(fvec2) Load 31(inF0)
+             500:   26(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
+             502:   26(fvec2) Load 31(inF0)
+             503:   26(fvec2) Load 32(inF1)
+             504:   26(fvec2) ExtInst 1(GLSL.std.450) 40(FMax) 502 503
                               Store 501(r046) 504
-             506:   24(fvec2) Load 29(inF0)
-             507:   24(fvec2) Load 30(inF1)
-             508:   24(fvec2) ExtInst 1(GLSL.std.450) 37(FMin) 506 507
+             506:   26(fvec2) Load 31(inF0)
+             507:   26(fvec2) Load 32(inF1)
+             508:   26(fvec2) ExtInst 1(GLSL.std.450) 37(FMin) 506 507
                               Store 505(r047) 508
-             510:   24(fvec2) Load 29(inF0)
-             511:   24(fvec2) ExtInst 1(GLSL.std.450) 69(Normalize) 510
+             510:   26(fvec2) Load 31(inF0)
+             511:   26(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
+             513:   26(fvec2) Load 31(inF0)
+             514:   26(fvec2) Load 32(inF1)
+             515:   26(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
+             517:   26(fvec2) Load 31(inF0)
+             518:   26(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
+             520:   26(fvec2) Load 31(inF0)
+             521:   26(fvec2) CompositeConstruct 289 289
+             522:   26(fvec2) FDiv 521 520
                               Store 519(r051) 522
-             524:   24(fvec2) Load 29(inF0)
-             525:   24(fvec2) Load 30(inF1)
-             526:   24(fvec2) ExtInst 1(GLSL.std.450) 71(Reflect) 524 525
+             524:   26(fvec2) Load 31(inF0)
+             525:   26(fvec2) Load 32(inF1)
+             526:   26(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
+             528:   26(fvec2) Load 31(inF0)
+             529:   26(fvec2) Load 32(inF1)
+             531:   26(fvec2) ExtInst 1(GLSL.std.450) 72(Refract) 528 529 530
                               Store 527(r053) 531
-             536:   26(ivec2) BitReverse 535
+             536:   28(ivec2) BitReverse 535
                               Store 532(r054) 536
-             538:   24(fvec2) Load 29(inF0)
-             539:   24(fvec2) ExtInst 1(GLSL.std.450) 2(RoundEven) 538
+             538:   26(fvec2) Load 31(inF0)
+             539:   26(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
+             541:   26(fvec2) Load 31(inF0)
+             542:   26(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
+             544:   26(fvec2) Load 31(inF0)
+             545:   26(fvec2) CompositeConstruct 141 141
+             546:   26(fvec2) CompositeConstruct 289 289
+             547:   26(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
+             549:   26(fvec2) Load 31(inF0)
+             550:   26(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
+             552:   26(fvec2) Load 31(inF0)
+             553:   26(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) 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
+             554:   26(fvec2) Load 31(inF0)
+             555:   26(fvec2) ExtInst 1(GLSL.std.450) 13(Sin) 554
+                              Store 32(inF1) 555
+             556:   26(fvec2) Load 31(inF0)
+             557:   26(fvec2) ExtInst 1(GLSL.std.450) 14(Cos) 556
+                              Store 33(inF2) 557
+             559:   26(fvec2) Load 31(inF0)
+             560:   26(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
+             562:   26(fvec2) Load 31(inF0)
+             563:   26(fvec2) Load 32(inF1)
+             564:   26(fvec2) Load 33(inF2)
+             565:   26(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
+             567:   26(fvec2) Load 31(inF0)
+             568:   26(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
+             570:   26(fvec2) Load 31(inF0)
+             571:   26(fvec2) Load 32(inF1)
+             572:   26(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
+             574:   26(fvec2) Load 31(inF0)
+             575:   26(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
+             577:   26(fvec2) Load 31(inF0)
+             578:   26(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
+             580:   26(fvec2) Load 31(inF0)
+             581:   26(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
-        42(inF1):     37(ptr) FunctionParameter
-        43(inF2):     37(ptr) FunctionParameter
-        44(inU0):     39(ptr) FunctionParameter
-        45(inU1):     39(ptr) FunctionParameter
-              47:             Label
-       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
+48(PixelShaderFunction3(vf3;vf3;vf3;vu3;vu3;):   38(fvec3) Function None 42
+        43(inF0):     39(ptr) FunctionParameter
+        44(inF1):     39(ptr) FunctionParameter
+        45(inF2):     39(ptr) FunctionParameter
+        46(inU0):     41(ptr) FunctionParameter
+        47(inU1):     41(ptr) FunctionParameter
+              49:             Label
+       585(r000):    138(ptr) Variable Function
+       591(r001):     39(ptr) Variable Function
+       594(r002):     39(ptr) Variable Function
+       597(r003):    138(ptr) Variable Function
+       601(r004):     39(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
+       609(r006):     41(ptr) Variable Function
+       612(r007):     39(ptr) Variable Function
+       615(r009):     39(ptr) Variable Function
+       618(r010):     39(ptr) Variable Function
+       622(r011):     39(ptr) Variable Function
+       625(r012):     39(ptr) Variable Function
+       643(r013):     39(ptr) Variable Function
+       646(r014):     39(ptr) Variable Function
+       649(r015):     41(ptr) Variable Function
+       654(r016):     39(ptr) Variable Function
+       658(r017):     39(ptr) Variable Function
+       661(r018):     39(ptr) Variable Function
+       664(r019):     39(ptr) Variable Function
+       667(r020):     39(ptr) Variable Function
+       670(r021):     39(ptr) Variable Function
+       673(r022):     39(ptr) Variable Function
+       676(r023):     39(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
+       687(r029):     39(ptr) Variable Function
+       690(r030):     39(ptr) Variable Function
+       693(r031):     39(ptr) Variable Function
+       698(r032):     41(ptr) Variable Function
+       702(r033):     41(ptr) Variable Function
+       704(r034):     39(ptr) Variable Function
+       707(r036):     39(ptr) Variable Function
+       711(r037):     39(ptr) Variable Function
+       714(r039):     39(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
+       724(r042):     39(ptr) Variable Function
+      728(r039a):     39(ptr) Variable Function
+      733(r039b):     39(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)
+       742(r044):     39(ptr) Variable Function
+       745(r045):     39(ptr) Variable Function
+       749(r046):     39(ptr) Variable Function
+       752(r047):     39(ptr) Variable Function
+       756(r048):     39(ptr) Variable Function
+       760(r049):     39(ptr) Variable Function
+       763(r050):     39(ptr) Variable Function
+       767(r051):     39(ptr) Variable Function
+       770(r052):     39(ptr) Variable Function
+       774(r053):     39(ptr) Variable Function
+       778(r054):     39(ptr) Variable Function
+       782(r055):     41(ptr) Variable Function
+       785(r056):     39(ptr) Variable Function
+       788(r057):     39(ptr) Variable Function
+       791(r058):     39(ptr) Variable Function
+       796(r059):     39(ptr) Variable Function
+       799(r060):     39(ptr) Variable Function
+       806(r061):     39(ptr) Variable Function
+       809(r062):     39(ptr) Variable Function
+       814(r063):     39(ptr) Variable Function
+       817(r064):     39(ptr) Variable Function
+       821(r065):     39(ptr) Variable Function
+       824(r066):     39(ptr) Variable Function
+       827(r067):     39(ptr) Variable Function
+             586:   38(fvec3) Load 43(inF0)
              589:  587(bvec3) FOrdNotEqual 586 588
-             590:   135(bool) All 589
+             590:   137(bool) All 589
                               Store 585(r000) 590
-             592:   36(fvec3) Load 41(inF0)
-             593:   36(fvec3) ExtInst 1(GLSL.std.450) 4(FAbs) 592
+             592:   38(fvec3) Load 43(inF0)
+             593:   38(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
+             595:   38(fvec3) Load 43(inF0)
+             596:   38(fvec3) ExtInst 1(GLSL.std.450) 17(Acos) 595
                               Store 594(r002) 596
-             598:   36(fvec3) Load 41(inF0)
+             598:   38(fvec3) Load 43(inF0)
              599:  587(bvec3) FOrdNotEqual 598 588
-             600:   135(bool) Any 599
+             600:   137(bool) Any 599
                               Store 597(r003) 600
-             602:   36(fvec3) Load 41(inF0)
-             603:   36(fvec3) ExtInst 1(GLSL.std.450) 16(Asin) 602
+             602:   38(fvec3) Load 43(inF0)
+             603:   38(fvec3) ExtInst 1(GLSL.std.450) 16(Asin) 602
                               Store 601(r004) 603
-             607:   36(fvec3) Load 41(inF0)
+             607:   38(fvec3) Load 43(inF0)
              608:  604(ivec3) Bitcast 607
                               Store 606(r005) 608
-             610:   36(fvec3) Load 41(inF0)
-             611:   38(ivec3) Bitcast 610
+             610:   38(fvec3) Load 43(inF0)
+             611:   40(ivec3) Bitcast 610
                               Store 609(r006) 611
-             613:   38(ivec3) Load 44(inU0)
-             614:   36(fvec3) Bitcast 613
+             613:   40(ivec3) Load 46(inU0)
+             614:   38(fvec3) Bitcast 613
                               Store 612(r007) 614
-             616:   36(fvec3) Load 41(inF0)
-             617:   36(fvec3) ExtInst 1(GLSL.std.450) 18(Atan) 616
+             616:   38(fvec3) Load 43(inF0)
+             617:   38(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
+             619:   38(fvec3) Load 43(inF0)
+             620:   38(fvec3) Load 44(inF1)
+             621:   38(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) 9(Ceil) 623
+             623:   38(fvec3) Load 43(inF0)
+             624:   38(fvec3) ExtInst 1(GLSL.std.450) 9(Ceil) 623
                               Store 622(r011) 624
-             626:   36(fvec3) Load 41(inF0)
-             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
+             626:   38(fvec3) Load 43(inF0)
+             627:   38(fvec3) Load 44(inF1)
+             628:   38(fvec3) Load 45(inF2)
+             629:   38(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 626 627 628
                               Store 625(r012) 629
-             630:   36(fvec3) Load 41(inF0)
+             630:   38(fvec3) Load 43(inF0)
              631:  587(bvec3) FOrdLessThan 630 588
-             632:   135(bool) Any 631
+             632:   137(bool) Any 631
                               SelectionMerge 634 None
                               BranchConditional 632 633 634
              633:               Label
                                 Kill
              634:             Label
-             636:   38(ivec3) Load 44(inU0)
+             636:   40(ivec3) Load 46(inU0)
              638:  587(bvec3) ULessThan 636 637
-             639:   135(bool) Any 638
+             639:   137(bool) Any 638
                               SelectionMerge 641 None
                               BranchConditional 639 640 641
              640:               Label
                                 Kill
              641:             Label
-             644:   36(fvec3) Load 41(inF0)
-             645:   36(fvec3) ExtInst 1(GLSL.std.450) 14(Cos) 644
+             644:   38(fvec3) Load 43(inF0)
+             645:   38(fvec3) ExtInst 1(GLSL.std.450) 14(Cos) 644
                               Store 643(r013) 645
-             647:   36(fvec3) Load 41(inF0)
-             648:   36(fvec3) ExtInst 1(GLSL.std.450) 20(Cosh) 647
+             647:   38(fvec3) Load 43(inF0)
+             648:   38(fvec3) ExtInst 1(GLSL.std.450) 20(Cosh) 647
                               Store 646(r014) 648
-             653:   38(ivec3) BitCount 652
+             653:   40(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
+             655:   38(fvec3) Load 43(inF0)
+             656:   38(fvec3) Load 44(inF1)
+             657:   38(fvec3) ExtInst 1(GLSL.std.450) 68(Cross) 655 656
                               Store 654(r016) 657
-             659:   36(fvec3) Load 41(inF0)
-             660:   36(fvec3) DPdx 659
+             659:   38(fvec3) Load 43(inF0)
+             660:   38(fvec3) DPdx 659
                               Store 658(r017) 660
-             662:   36(fvec3) Load 41(inF0)
-             663:   36(fvec3) DPdxCoarse 662
+             662:   38(fvec3) Load 43(inF0)
+             663:   38(fvec3) DPdxCoarse 662
                               Store 661(r018) 663
-             665:   36(fvec3) Load 41(inF0)
-             666:   36(fvec3) DPdxFine 665
+             665:   38(fvec3) Load 43(inF0)
+             666:   38(fvec3) DPdxFine 665
                               Store 664(r019) 666
-             668:   36(fvec3) Load 41(inF0)
-             669:   36(fvec3) DPdy 668
+             668:   38(fvec3) Load 43(inF0)
+             669:   38(fvec3) DPdy 668
                               Store 667(r020) 669
-             671:   36(fvec3) Load 41(inF0)
-             672:   36(fvec3) DPdyCoarse 671
+             671:   38(fvec3) Load 43(inF0)
+             672:   38(fvec3) DPdyCoarse 671
                               Store 670(r021) 672
-             674:   36(fvec3) Load 41(inF0)
-             675:   36(fvec3) DPdyFine 674
+             674:   38(fvec3) Load 43(inF0)
+             675:   38(fvec3) DPdyFine 674
                               Store 673(r022) 675
-             677:   36(fvec3) Load 41(inF0)
-             678:   36(fvec3) ExtInst 1(GLSL.std.450) 12(Degrees) 677
+             677:   38(fvec3) Load 43(inF0)
+             678:   38(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)
+             680:   38(fvec3) Load 43(inF0)
+             681:   38(fvec3) Load 44(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) Load 42(inF1)
+             684:   38(fvec3) Load 43(inF0)
+             685:   38(fvec3) Load 44(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
+             688:   38(fvec3) Load 43(inF0)
+             689:   38(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) 29(Exp2) 691
+             691:   38(fvec3) Load 43(inF0)
+             692:   38(fvec3) ExtInst 1(GLSL.std.450) 29(Exp2) 691
                               Store 690(r030) 692
-             694:   36(fvec3) Load 41(inF0)
-             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
+             694:   38(fvec3) Load 43(inF0)
+             695:   38(fvec3) Load 44(inF1)
+             696:   38(fvec3) Load 45(inF2)
+             697:   38(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
+             701:   40(ivec3) ExtInst 1(GLSL.std.450) 75(FindUMsb) 700
                               Store 698(r032) 701
-             703:   38(ivec3) ExtInst 1(GLSL.std.450) 73(FindILsb) 700
+             703:   40(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
+             705:   38(fvec3) Load 43(inF0)
+             706:   38(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) FMod 708 709
+             708:   38(fvec3) Load 43(inF0)
+             709:   38(fvec3) Load 44(inF1)
+             710:   38(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
+             712:   38(fvec3) Load 43(inF0)
+             713:   38(fvec3) ExtInst 1(GLSL.std.450) 10(Fract) 712
                               Store 711(r037) 713
-             715:   36(fvec3) Load 41(inF0)
-             716:   36(fvec3) Fwidth 715
+             715:   38(fvec3) Load 43(inF0)
+             716:   38(fvec3) Fwidth 715
                               Store 714(r039) 716
-             719:   36(fvec3) Load 41(inF0)
+             719:   38(fvec3) Load 43(inF0)
              720:  587(bvec3) IsInf 719
                               Store 718(r040) 720
-             722:   36(fvec3) Load 41(inF0)
+             722:   38(fvec3) Load 43(inF0)
              723:  587(bvec3) IsNan 722
                               Store 721(r041) 723
-             725:   36(fvec3) Load 41(inF0)
-             726:   36(fvec3) Load 42(inF1)
-             727:   36(fvec3) ExtInst 1(GLSL.std.450) 53(Ldexp) 725 726
+             725:   38(fvec3) Load 43(inF0)
+             726:   38(fvec3) Load 44(inF1)
+             727:   38(fvec3) ExtInst 1(GLSL.std.450) 53(Ldexp) 725 726
                               Store 724(r042) 727
-             729:   36(fvec3) Load 41(inF0)
-             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
+             729:   38(fvec3) Load 43(inF0)
+             730:   38(fvec3) Load 44(inF1)
+             731:   38(fvec3) Load 45(inF2)
+             732:   38(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
+             734:   38(fvec3) Load 43(inF0)
+             735:   38(fvec3) Load 44(inF1)
+             737:   38(fvec3) CompositeConstruct 736 736 736
+             738:   38(fvec3) ExtInst 1(GLSL.std.450) 46(FMix) 734 735 737
                               Store 733(r039b) 738
-             740:   36(fvec3) Load 41(inF0)
+             740:   38(fvec3) Load 43(inF0)
              741:    6(float) ExtInst 1(GLSL.std.450) 66(Length) 740
                               Store 739(r043) 741
-             743:   36(fvec3) Load 41(inF0)
-             744:   36(fvec3) ExtInst 1(GLSL.std.450) 28(Log) 743
+             743:   38(fvec3) Load 43(inF0)
+             744:   38(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
+             746:   38(fvec3) Load 43(inF0)
+             747:   38(fvec3) ExtInst 1(GLSL.std.450) 30(Log2) 746
+             748:   38(fvec3) VectorTimesScalar 747 268
                               Store 745(r045) 748
-             750:   36(fvec3) Load 41(inF0)
-             751:   36(fvec3) ExtInst 1(GLSL.std.450) 30(Log2) 750
+             750:   38(fvec3) Load 43(inF0)
+             751:   38(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
+             753:   38(fvec3) Load 43(inF0)
+             754:   38(fvec3) Load 44(inF1)
+             755:   38(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
+             757:   38(fvec3) Load 43(inF0)
+             758:   38(fvec3) Load 44(inF1)
+             759:   38(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
+             761:   38(fvec3) Load 43(inF0)
+             762:   38(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
+             764:   38(fvec3) Load 43(inF0)
+             765:   38(fvec3) Load 44(inF1)
+             766:   38(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) 11(Radians) 768
+             768:   38(fvec3) Load 43(inF0)
+             769:   38(fvec3) ExtInst 1(GLSL.std.450) 11(Radians) 768
                               Store 767(r051) 769
-             771:   36(fvec3) Load 41(inF0)
-             772:   36(fvec3) CompositeConstruct 289 289 289
-             773:   36(fvec3) FDiv 772 771
+             771:   38(fvec3) Load 43(inF0)
+             772:   38(fvec3) CompositeConstruct 289 289 289
+             773:   38(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
+             775:   38(fvec3) Load 43(inF0)
+             776:   38(fvec3) Load 44(inF1)
+             777:   38(fvec3) ExtInst 1(GLSL.std.450) 71(Reflect) 775 776
                               Store 774(r053) 777
-             779:   36(fvec3) Load 41(inF0)
-             780:   36(fvec3) Load 42(inF1)
-             781:   36(fvec3) ExtInst 1(GLSL.std.450) 72(Refract) 779 780 530
+             779:   38(fvec3) Load 43(inF0)
+             780:   38(fvec3) Load 44(inF1)
+             781:   38(fvec3) ExtInst 1(GLSL.std.450) 72(Refract) 779 780 530
                               Store 778(r054) 781
-             784:   38(ivec3) BitReverse 783
+             784:   40(ivec3) BitReverse 783
                               Store 782(r055) 784
-             786:   36(fvec3) Load 41(inF0)
-             787:   36(fvec3) ExtInst 1(GLSL.std.450) 2(RoundEven) 786
+             786:   38(fvec3) Load 43(inF0)
+             787:   38(fvec3) ExtInst 1(GLSL.std.450) 2(RoundEven) 786
                               Store 785(r056) 787
-             789:   36(fvec3) Load 41(inF0)
-             790:   36(fvec3) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 789
+             789:   38(fvec3) Load 43(inF0)
+             790:   38(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
+             792:   38(fvec3) Load 43(inF0)
+             793:   38(fvec3) CompositeConstruct 141 141 141
+             794:   38(fvec3) CompositeConstruct 289 289 289
+             795:   38(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 792 793 794
                               Store 791(r058) 795
-             797:   36(fvec3) Load 41(inF0)
-             798:   36(fvec3) ExtInst 1(GLSL.std.450) 6(FSign) 797
+             797:   38(fvec3) Load 43(inF0)
+             798:   38(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
+             800:   38(fvec3) Load 43(inF0)
+             801:   38(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) 14(Cos) 804
-                              Store 43(inF2) 805
-             807:   36(fvec3) Load 41(inF0)
-             808:   36(fvec3) ExtInst 1(GLSL.std.450) 19(Sinh) 807
+             802:   38(fvec3) Load 43(inF0)
+             803:   38(fvec3) ExtInst 1(GLSL.std.450) 13(Sin) 802
+                              Store 44(inF1) 803
+             804:   38(fvec3) Load 43(inF0)
+             805:   38(fvec3) ExtInst 1(GLSL.std.450) 14(Cos) 804
+                              Store 45(inF2) 805
+             807:   38(fvec3) Load 43(inF0)
+             808:   38(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
+             810:   38(fvec3) Load 43(inF0)
+             811:   38(fvec3) Load 44(inF1)
+             812:   38(fvec3) Load 45(inF2)
+             813:   38(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
+             815:   38(fvec3) Load 43(inF0)
+             816:   38(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
+             818:   38(fvec3) Load 43(inF0)
+             819:   38(fvec3) Load 44(inF1)
+             820:   38(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
+             822:   38(fvec3) Load 43(inF0)
+             823:   38(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
+             825:   38(fvec3) Load 43(inF0)
+             826:   38(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
+             828:   38(fvec3) Load 43(inF0)
+             829:   38(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
-        54(inF1):     49(ptr) FunctionParameter
-        55(inF2):     49(ptr) FunctionParameter
-        56(inU0):     51(ptr) FunctionParameter
-        57(inU1):     51(ptr) FunctionParameter
-              59:             Label
-       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
+60(PixelShaderFunction(vf4;vf4;vf4;vu4;vu4;):   50(fvec4) Function None 54
+        55(inF0):     51(ptr) FunctionParameter
+        56(inF1):     51(ptr) FunctionParameter
+        57(inF2):     51(ptr) FunctionParameter
+        58(inU0):     53(ptr) FunctionParameter
+        59(inU1):     53(ptr) FunctionParameter
+              61:             Label
+       834(r000):    138(ptr) Variable Function
+       840(r001):     51(ptr) Variable Function
+       843(r002):     51(ptr) Variable Function
+       846(r003):    138(ptr) Variable Function
+       850(r004):     51(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
+       858(r006):     53(ptr) Variable Function
+       861(r007):     51(ptr) Variable Function
+       864(r009):     51(ptr) Variable Function
+       867(r010):     51(ptr) Variable Function
+       871(r011):     51(ptr) Variable Function
+       874(r012):     51(ptr) Variable Function
+       892(r013):     51(ptr) Variable Function
+       895(r014):     51(ptr) Variable Function
+       898(r015):     53(ptr) Variable Function
+       901(r016):     51(ptr) Variable Function
+       904(r017):     51(ptr) Variable Function
+       907(r018):     51(ptr) Variable Function
+       910(r019):     51(ptr) Variable Function
+       913(r020):     51(ptr) Variable Function
+       916(r021):     51(ptr) Variable Function
+       919(r022):     51(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
+       930(r025):     51(ptr) Variable Function
+       941(r029):     51(ptr) Variable Function
+       944(r030):     51(ptr) Variable Function
+       947(r031):     51(ptr) Variable Function
+       952(r032):     53(ptr) Variable Function
+       957(r033):     53(ptr) Variable Function
+       959(r034):     51(ptr) Variable Function
+       962(r036):     51(ptr) Variable Function
+       966(r037):     51(ptr) Variable Function
+       969(r039):     51(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
+       979(r042):     51(ptr) Variable Function
+      983(r039a):     51(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)
+       991(r044):     51(ptr) Variable Function
+       994(r045):     51(ptr) Variable Function
+       998(r046):     51(ptr) Variable Function
+      1001(r047):     51(ptr) Variable Function
+      1005(r048):     51(ptr) Variable Function
+      1009(r049):     51(ptr) Variable Function
+      1012(r050):     51(ptr) Variable Function
+      1016(r051):     51(ptr) Variable Function
+      1019(r052):     51(ptr) Variable Function
+      1023(r053):     51(ptr) Variable Function
+      1027(r054):     51(ptr) Variable Function
+      1031(r055):     53(ptr) Variable Function
+      1034(r056):     51(ptr) Variable Function
+      1037(r057):     51(ptr) Variable Function
+      1040(r058):     51(ptr) Variable Function
+      1045(r059):     51(ptr) Variable Function
+      1048(r060):     51(ptr) Variable Function
+      1055(r061):     51(ptr) Variable Function
+      1058(r062):     51(ptr) Variable Function
+      1063(r063):     51(ptr) Variable Function
+      1066(r064):     51(ptr) Variable Function
+      1070(r065):     51(ptr) Variable Function
+      1073(r066):     51(ptr) Variable Function
+      1076(r067):     51(ptr) Variable Function
+             835:   50(fvec4) Load 55(inF0)
              838:  836(bvec4) FOrdNotEqual 835 837
-             839:   135(bool) All 838
+             839:   137(bool) All 838
                               Store 834(r000) 839
-             841:   48(fvec4) Load 53(inF0)
-             842:   48(fvec4) ExtInst 1(GLSL.std.450) 4(FAbs) 841
+             841:   50(fvec4) Load 55(inF0)
+             842:   50(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) 17(Acos) 844
+             844:   50(fvec4) Load 55(inF0)
+             845:   50(fvec4) ExtInst 1(GLSL.std.450) 17(Acos) 844
                               Store 843(r002) 845
-             847:   48(fvec4) Load 53(inF0)
+             847:   50(fvec4) Load 55(inF0)
              848:  836(bvec4) FOrdNotEqual 847 837
-             849:   135(bool) Any 848
+             849:   137(bool) Any 848
                               Store 846(r003) 849
-             851:   48(fvec4) Load 53(inF0)
-             852:   48(fvec4) ExtInst 1(GLSL.std.450) 16(Asin) 851
+             851:   50(fvec4) Load 55(inF0)
+             852:   50(fvec4) ExtInst 1(GLSL.std.450) 16(Asin) 851
                               Store 850(r004) 852
-             856:   48(fvec4) Load 53(inF0)
+             856:   50(fvec4) Load 55(inF0)
              857:  853(ivec4) Bitcast 856
                               Store 855(r005) 857
-             859:   48(fvec4) Load 53(inF0)
-             860:   50(ivec4) Bitcast 859
+             859:   50(fvec4) Load 55(inF0)
+             860:   52(ivec4) Bitcast 859
                               Store 858(r006) 860
-             862:   50(ivec4) Load 56(inU0)
-             863:   48(fvec4) Bitcast 862
+             862:   52(ivec4) Load 58(inU0)
+             863:   50(fvec4) Bitcast 862
                               Store 861(r007) 863
-             865:   48(fvec4) Load 53(inF0)
-             866:   48(fvec4) ExtInst 1(GLSL.std.450) 18(Atan) 865
+             865:   50(fvec4) Load 55(inF0)
+             866:   50(fvec4) ExtInst 1(GLSL.std.450) 18(Atan) 865
                               Store 864(r009) 866
-             868:   48(fvec4) Load 53(inF0)
-             869:   48(fvec4) Load 54(inF1)
-             870:   48(fvec4) ExtInst 1(GLSL.std.450) 25(Atan2) 868 869
+             868:   50(fvec4) Load 55(inF0)
+             869:   50(fvec4) Load 56(inF1)
+             870:   50(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
+             872:   50(fvec4) Load 55(inF0)
+             873:   50(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
+             875:   50(fvec4) Load 55(inF0)
+             876:   50(fvec4) Load 56(inF1)
+             877:   50(fvec4) Load 57(inF2)
+             878:   50(fvec4) ExtInst 1(GLSL.std.450) 43(FClamp) 875 876 877
                               Store 874(r012) 878
-             879:   48(fvec4) Load 53(inF0)
+             879:   50(fvec4) Load 55(inF0)
              880:  836(bvec4) FOrdLessThan 879 837
-             881:   135(bool) Any 880
+             881:   137(bool) Any 880
                               SelectionMerge 883 None
                               BranchConditional 881 882 883
              882:               Label
                                 Kill
              883:             Label
-             885:   50(ivec4) Load 56(inU0)
+             885:   52(ivec4) Load 58(inU0)
              887:  836(bvec4) ULessThan 885 886
-             888:   135(bool) Any 887
+             888:   137(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
+             893:   50(fvec4) Load 55(inF0)
+             894:   50(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
+             896:   50(fvec4) Load 55(inF0)
+             897:   50(fvec4) ExtInst 1(GLSL.std.450) 20(Cosh) 896
                               Store 895(r014) 897
-             900:   50(ivec4) BitCount 899
+             900:   52(ivec4) BitCount 899
                               Store 898(r015) 900
-             902:   48(fvec4) Load 53(inF0)
-             903:   48(fvec4) DPdx 902
+             902:   50(fvec4) Load 55(inF0)
+             903:   50(fvec4) DPdx 902
                               Store 901(r016) 903
-             905:   48(fvec4) Load 53(inF0)
-             906:   48(fvec4) DPdxCoarse 905
+             905:   50(fvec4) Load 55(inF0)
+             906:   50(fvec4) DPdxCoarse 905
                               Store 904(r017) 906
-             908:   48(fvec4) Load 53(inF0)
-             909:   48(fvec4) DPdxFine 908
+             908:   50(fvec4) Load 55(inF0)
+             909:   50(fvec4) DPdxFine 908
                               Store 907(r018) 909
-             911:   48(fvec4) Load 53(inF0)
-             912:   48(fvec4) DPdy 911
+             911:   50(fvec4) Load 55(inF0)
+             912:   50(fvec4) DPdy 911
                               Store 910(r019) 912
-             914:   48(fvec4) Load 53(inF0)
-             915:   48(fvec4) DPdyCoarse 914
+             914:   50(fvec4) Load 55(inF0)
+             915:   50(fvec4) DPdyCoarse 914
                               Store 913(r020) 915
-             917:   48(fvec4) Load 53(inF0)
-             918:   48(fvec4) DPdyFine 917
+             917:   50(fvec4) Load 55(inF0)
+             918:   50(fvec4) DPdyFine 917
                               Store 916(r021) 918
-             920:   48(fvec4) Load 53(inF0)
-             921:   48(fvec4) ExtInst 1(GLSL.std.450) 12(Degrees) 920
+             920:   50(fvec4) Load 55(inF0)
+             921:   50(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)
+             923:   50(fvec4) Load 55(inF0)
+             924:   50(fvec4) Load 56(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)
+             927:   50(fvec4) Load 55(inF0)
+             928:   50(fvec4) Load 56(inF1)
              929:    6(float) Dot 927 928
                               Store 926(r024) 929
-             931:      7(ptr) AccessChain 53(inF0) 533
+             931:      7(ptr) AccessChain 55(inF0) 533
              932:    6(float) Load 931
-             933:      7(ptr) AccessChain 54(inF1) 533
+             933:      7(ptr) AccessChain 56(inF1) 533
              934:    6(float) Load 933
              935:    6(float) FMul 932 934
-             936:      7(ptr) AccessChain 53(inF0) 534
+             936:      7(ptr) AccessChain 55(inF0) 534
              937:    6(float) Load 936
-             938:      7(ptr) AccessChain 54(inF1) 650
+             938:      7(ptr) AccessChain 56(inF1) 650
              939:    6(float) Load 938
-             940:   48(fvec4) CompositeConstruct 289 935 937 939
+             940:   50(fvec4) CompositeConstruct 289 935 937 939
                               Store 930(r025) 940
-             942:   48(fvec4) Load 53(inF0)
-             943:   48(fvec4) ExtInst 1(GLSL.std.450) 27(Exp) 942
+             942:   50(fvec4) Load 55(inF0)
+             943:   50(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
+             945:   50(fvec4) Load 55(inF0)
+             946:   50(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
+             948:   50(fvec4) Load 55(inF0)
+             949:   50(fvec4) Load 56(inF1)
+             950:   50(fvec4) Load 57(inF2)
+             951:   50(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
+             956:   52(ivec4) ExtInst 1(GLSL.std.450) 75(FindUMsb) 955
                               Store 952(r032) 956
-             958:   50(ivec4) ExtInst 1(GLSL.std.450) 73(FindILsb) 955
+             958:   52(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
+             960:   50(fvec4) Load 55(inF0)
+             961:   50(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
+             963:   50(fvec4) Load 55(inF0)
+             964:   50(fvec4) Load 56(inF1)
+             965:   50(fvec4) FMod 963 964
                               Store 962(r036) 965
-             967:   48(fvec4) Load 53(inF0)
-             968:   48(fvec4) ExtInst 1(GLSL.std.450) 10(Fract) 967
+             967:   50(fvec4) Load 55(inF0)
+             968:   50(fvec4) ExtInst 1(GLSL.std.450) 10(Fract) 967
                               Store 966(r037) 968
-             970:   48(fvec4) Load 53(inF0)
-             971:   48(fvec4) Fwidth 970
+             970:   50(fvec4) Load 55(inF0)
+             971:   50(fvec4) Fwidth 970
                               Store 969(r039) 971
-             974:   48(fvec4) Load 53(inF0)
+             974:   50(fvec4) Load 55(inF0)
              975:  836(bvec4) IsInf 974
                               Store 973(r040) 975
-             977:   48(fvec4) Load 53(inF0)
+             977:   50(fvec4) Load 55(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
+             980:   50(fvec4) Load 55(inF0)
+             981:   50(fvec4) Load 56(inF1)
+             982:   50(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
+             984:   50(fvec4) Load 55(inF0)
+             985:   50(fvec4) Load 56(inF1)
+             986:   50(fvec4) Load 57(inF2)
+             987:   50(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 984 985 986
                               Store 983(r039a) 987
-             989:   48(fvec4) Load 53(inF0)
+             989:   50(fvec4) Load 55(inF0)
              990:    6(float) ExtInst 1(GLSL.std.450) 66(Length) 989
                               Store 988(r043) 990
-             992:   48(fvec4) Load 53(inF0)
-             993:   48(fvec4) ExtInst 1(GLSL.std.450) 28(Log) 992
+             992:   50(fvec4) Load 55(inF0)
+             993:   50(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
+             995:   50(fvec4) Load 55(inF0)
+             996:   50(fvec4) ExtInst 1(GLSL.std.450) 30(Log2) 995
+             997:   50(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
+             999:   50(fvec4) Load 55(inF0)
+            1000:   50(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
+            1002:   50(fvec4) Load 55(inF0)
+            1003:   50(fvec4) Load 56(inF1)
+            1004:   50(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
+            1006:   50(fvec4) Load 55(inF0)
+            1007:   50(fvec4) Load 56(inF1)
+            1008:   50(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) 69(Normalize) 1010
+            1010:   50(fvec4) Load 55(inF0)
+            1011:   50(fvec4) ExtInst 1(GLSL.std.450) 69(Normalize) 1010
                               Store 1009(r049) 1011
-            1013:   48(fvec4) Load 53(inF0)
-            1014:   48(fvec4) Load 54(inF1)
-            1015:   48(fvec4) ExtInst 1(GLSL.std.450) 26(Pow) 1013 1014
+            1013:   50(fvec4) Load 55(inF0)
+            1014:   50(fvec4) Load 56(inF1)
+            1015:   50(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
+            1017:   50(fvec4) Load 55(inF0)
+            1018:   50(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
+            1020:   50(fvec4) Load 55(inF0)
+            1021:   50(fvec4) CompositeConstruct 289 289 289 289
+            1022:   50(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
+            1024:   50(fvec4) Load 55(inF0)
+            1025:   50(fvec4) Load 56(inF1)
+            1026:   50(fvec4) ExtInst 1(GLSL.std.450) 71(Reflect) 1024 1025
                               Store 1023(r053) 1026
-            1028:   48(fvec4) Load 53(inF0)
-            1029:   48(fvec4) Load 54(inF1)
-            1030:   48(fvec4) ExtInst 1(GLSL.std.450) 72(Refract) 1028 1029 530
+            1028:   50(fvec4) Load 55(inF0)
+            1029:   50(fvec4) Load 56(inF1)
+            1030:   50(fvec4) ExtInst 1(GLSL.std.450) 72(Refract) 1028 1029 530
                               Store 1027(r054) 1030
-            1033:   50(ivec4) BitReverse 1032
+            1033:   52(ivec4) BitReverse 1032
                               Store 1031(r055) 1033
-            1035:   48(fvec4) Load 53(inF0)
-            1036:   48(fvec4) ExtInst 1(GLSL.std.450) 2(RoundEven) 1035
+            1035:   50(fvec4) Load 55(inF0)
+            1036:   50(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
+            1038:   50(fvec4) Load 55(inF0)
+            1039:   50(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
+            1041:   50(fvec4) Load 55(inF0)
+            1042:   50(fvec4) CompositeConstruct 141 141 141 141
+            1043:   50(fvec4) CompositeConstruct 289 289 289 289
+            1044:   50(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) 6(FSign) 1046
+            1046:   50(fvec4) Load 55(inF0)
+            1047:   50(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) 13(Sin) 1049
+            1049:   50(fvec4) Load 55(inF0)
+            1050:   50(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
+            1051:   50(fvec4) Load 55(inF0)
+            1052:   50(fvec4) ExtInst 1(GLSL.std.450) 13(Sin) 1051
+                              Store 56(inF1) 1052
+            1053:   50(fvec4) Load 55(inF0)
+            1054:   50(fvec4) ExtInst 1(GLSL.std.450) 14(Cos) 1053
+                              Store 57(inF2) 1054
+            1056:   50(fvec4) Load 55(inF0)
+            1057:   50(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
+            1059:   50(fvec4) Load 55(inF0)
+            1060:   50(fvec4) Load 56(inF1)
+            1061:   50(fvec4) Load 57(inF2)
+            1062:   50(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
+            1064:   50(fvec4) Load 55(inF0)
+            1065:   50(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
+            1067:   50(fvec4) Load 55(inF0)
+            1068:   50(fvec4) Load 56(inF1)
+            1069:   50(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
+            1071:   50(fvec4) Load 55(inF0)
+            1072:   50(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
+            1074:   50(fvec4) Load 55(inF0)
+            1075:   50(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
+            1077:   50(fvec4) Load 55(inF0)
+            1078:   50(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
-      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
+68(PixelShaderFunction2x2(mf22;mf22;mf22;):          62 Function None 64
+        65(inF0):     63(ptr) FunctionParameter
+        66(inF1):     63(ptr) FunctionParameter
+        67(inF2):     63(ptr) FunctionParameter
+              69:             Label
+      1083(r000):    138(ptr) Variable Function
+      1088(r001):     63(ptr) Variable Function
+      1093(r003):    138(ptr) Variable Function
+      1097(r004):     63(ptr) Variable Function
+      1100(r005):     63(ptr) Variable Function
+      1103(r006):     63(ptr) Variable Function
+      1107(r007):     63(ptr) Variable Function
+      1117(r008):     63(ptr) Variable Function
+      1122(r009):     63(ptr) Variable Function
+      1125(r010):     63(ptr) Variable Function
+      1128(r011):     63(ptr) Variable Function
+      1131(r012):     63(ptr) Variable Function
+      1134(r013):     63(ptr) Variable Function
+      1137(r014):     63(ptr) Variable Function
+      1140(r015):     63(ptr) Variable Function
+      1143(r016):     63(ptr) Variable Function
+      1146(r017):     63(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
+      1152(r019):     63(ptr) Variable Function
+      1155(R020):     63(ptr) Variable Function
+      1158(r021):     63(ptr) Variable Function
+      1161(r022):     63(ptr) Variable Function
+      1171(r023):     63(ptr) Variable Function
+      1174(r025):     63(ptr) Variable Function
+      1177(r026):     63(ptr) Variable Function
+     1181(r026a):     63(ptr) Variable Function
+      1186(r027):     63(ptr) Variable Function
+      1189(r028):     63(ptr) Variable Function
+      1193(r029):     63(ptr) Variable Function
+      1196(r030):     63(ptr) Variable Function
+      1200(r031):     63(ptr) Variable Function
+      1204(r032):     63(ptr) Variable Function
+      1208(r033):     63(ptr) Variable Function
+      1211(r034):     63(ptr) Variable Function
+      1214(r035):     63(ptr) Variable Function
+      1217(r036):     63(ptr) Variable Function
+      1222(r037):     63(ptr) Variable Function
+      1225(r038):     63(ptr) Variable Function
+      1232(r039):     63(ptr) Variable Function
+      1235(r049):     63(ptr) Variable Function
+      1240(r041):     63(ptr) Variable Function
+      1243(r042):     63(ptr) Variable Function
+      1247(r043):     63(ptr) Variable Function
+      1250(r044):     63(ptr) Variable Function
+      1255(r046):     63(ptr) Variable Function
+            1084:          62 Load 65(inF0)
+            1086:        1085 FOrdNotEqual 1084 141
+            1087:   137(bool) All 1086
                               Store 1083(r000) 1087
-            1089:          60 Load 63(inF0)
-            1090:          60 ExtInst 1(GLSL.std.450) 4(FAbs) 1089
+            1089:          62 Load 65(inF0)
+            1090:          62 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
+            1091:          62 Load 65(inF0)
+            1092:          62 ExtInst 1(GLSL.std.450) 17(Acos) 1091
+            1094:          62 Load 65(inF0)
+            1095:        1085 FOrdNotEqual 1094 141
+            1096:   137(bool) Any 1095
                               Store 1093(r003) 1096
-            1098:          60 Load 63(inF0)
-            1099:          60 ExtInst 1(GLSL.std.450) 16(Asin) 1098
+            1098:          62 Load 65(inF0)
+            1099:          62 ExtInst 1(GLSL.std.450) 16(Asin) 1098
                               Store 1097(r004) 1099
-            1101:          60 Load 63(inF0)
-            1102:          60 ExtInst 1(GLSL.std.450) 18(Atan) 1101
+            1101:          62 Load 65(inF0)
+            1102:          62 ExtInst 1(GLSL.std.450) 18(Atan) 1101
                               Store 1100(r005) 1102
-            1104:          60 Load 63(inF0)
-            1105:          60 Load 64(inF1)
-            1106:          60 ExtInst 1(GLSL.std.450) 25(Atan2) 1104 1105
+            1104:          62 Load 65(inF0)
+            1105:          62 Load 66(inF1)
+            1106:          62 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
+            1108:          62 Load 65(inF0)
+            1109:          62 ExtInst 1(GLSL.std.450) 9(Ceil) 1108
                               Store 1107(r007) 1109
-            1110:          60 Load 63(inF0)
+            1110:          62 Load 65(inF0)
             1112:        1085 FOrdLessThan 1110 1111
-            1113:   135(bool) Any 1112
+            1113:   137(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
+            1118:          62 Load 65(inF0)
+            1119:          62 Load 66(inF1)
+            1120:          62 Load 67(inF2)
+            1121:          62 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
+            1123:          62 Load 65(inF0)
+            1124:          62 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
+            1126:          62 Load 65(inF0)
+            1127:          62 ExtInst 1(GLSL.std.450) 20(Cosh) 1126
                               Store 1125(r010) 1127
-            1129:          60 Load 63(inF0)
-            1130:          60 DPdx 1129
+            1129:          62 Load 65(inF0)
+            1130:          62 DPdx 1129
                               Store 1128(r011) 1130
-            1132:          60 Load 63(inF0)
-            1133:          60 DPdxCoarse 1132
+            1132:          62 Load 65(inF0)
+            1133:          62 DPdxCoarse 1132
                               Store 1131(r012) 1133
-            1135:          60 Load 63(inF0)
-            1136:          60 DPdxFine 1135
+            1135:          62 Load 65(inF0)
+            1136:          62 DPdxFine 1135
                               Store 1134(r013) 1136
-            1138:          60 Load 63(inF0)
-            1139:          60 DPdy 1138
+            1138:          62 Load 65(inF0)
+            1139:          62 DPdy 1138
                               Store 1137(r014) 1139
-            1141:          60 Load 63(inF0)
-            1142:          60 DPdyCoarse 1141
+            1141:          62 Load 65(inF0)
+            1142:          62 DPdyCoarse 1141
                               Store 1140(r015) 1142
-            1144:          60 Load 63(inF0)
-            1145:          60 DPdyFine 1144
+            1144:          62 Load 65(inF0)
+            1145:          62 DPdyFine 1144
                               Store 1143(r016) 1145
-            1147:          60 Load 63(inF0)
-            1148:          60 ExtInst 1(GLSL.std.450) 12(Degrees) 1147
+            1147:          62 Load 65(inF0)
+            1148:          62 ExtInst 1(GLSL.std.450) 12(Degrees) 1147
                               Store 1146(r017) 1148
-            1150:          60 Load 63(inF0)
+            1150:          62 Load 65(inF0)
             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
+            1153:          62 Load 65(inF0)
+            1154:          62 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
+            1156:          62 Load 65(inF0)
+            1157:          62 ExtInst 1(GLSL.std.450) 29(Exp2) 1156
                               Store 1155(R020) 1157
-            1159:          60 Load 63(inF0)
-            1160:          60 ExtInst 1(GLSL.std.450) 8(Floor) 1159
+            1159:          62 Load 65(inF0)
+            1160:          62 ExtInst 1(GLSL.std.450) 8(Floor) 1159
                               Store 1158(r021) 1160
-            1162:          60 Load 63(inF0)
-            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
+            1162:          62 Load 65(inF0)
+            1163:          62 Load 66(inF1)
+            1164:   26(fvec2) CompositeExtract 1162 0
+            1165:   26(fvec2) CompositeExtract 1163 0
+            1166:   26(fvec2) FMod 1164 1165
+            1167:   26(fvec2) CompositeExtract 1162 1
+            1168:   26(fvec2) CompositeExtract 1163 1
+            1169:   26(fvec2) FMod 1167 1168
+            1170:          62 CompositeConstruct 1166 1169
                               Store 1161(r022) 1170
-            1172:          60 Load 63(inF0)
-            1173:          60 ExtInst 1(GLSL.std.450) 10(Fract) 1172
+            1172:          62 Load 65(inF0)
+            1173:          62 ExtInst 1(GLSL.std.450) 10(Fract) 1172
                               Store 1171(r023) 1173
-            1175:          60 Load 63(inF0)
-            1176:          60 Fwidth 1175
+            1175:          62 Load 65(inF0)
+            1176:          62 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
+            1178:          62 Load 65(inF0)
+            1179:          62 Load 66(inF1)
+            1180:          62 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
+            1182:          62 Load 65(inF0)
+            1183:          62 Load 66(inF1)
+            1184:          62 Load 67(inF2)
+            1185:          62 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) 28(Log) 1187
+            1187:          62 Load 65(inF0)
+            1188:          62 ExtInst 1(GLSL.std.450) 28(Log) 1187
                               Store 1186(r027) 1188
-            1190:          60 Load 63(inF0)
-            1191:          60 ExtInst 1(GLSL.std.450) 30(Log2) 1190
-            1192:          60 MatrixTimesScalar 1191 268
+            1190:          62 Load 65(inF0)
+            1191:          62 ExtInst 1(GLSL.std.450) 30(Log2) 1190
+            1192:          62 MatrixTimesScalar 1191 268
                               Store 1189(r028) 1192
-            1194:          60 Load 63(inF0)
-            1195:          60 ExtInst 1(GLSL.std.450) 30(Log2) 1194
+            1194:          62 Load 65(inF0)
+            1195:          62 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
+            1197:          62 Load 65(inF0)
+            1198:          62 Load 66(inF1)
+            1199:          62 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
+            1201:          62 Load 65(inF0)
+            1202:          62 Load 66(inF1)
+            1203:          62 ExtInst 1(GLSL.std.450) 37(FMin) 1201 1202
                               Store 1200(r031) 1203
-            1205:          60 Load 63(inF0)
-            1206:          60 Load 64(inF1)
-            1207:          60 ExtInst 1(GLSL.std.450) 26(Pow) 1205 1206
+            1205:          62 Load 65(inF0)
+            1206:          62 Load 66(inF1)
+            1207:          62 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
+            1209:          62 Load 65(inF0)
+            1210:          62 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
+            1212:          62 Load 65(inF0)
+            1213:          62 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
+            1215:          62 Load 65(inF0)
+            1216:          62 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
+            1218:          62 Load 65(inF0)
+            1219:   26(fvec2) CompositeConstruct 141 141
+            1220:   26(fvec2) CompositeConstruct 289 289
+            1221:          62 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) 6(FSign) 1223
+            1223:          62 Load 65(inF0)
+            1224:          62 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
+            1226:          62 Load 65(inF0)
+            1227:          62 ExtInst 1(GLSL.std.450) 13(Sin) 1226
                               Store 1225(r038) 1227
-            1228:          60 Load 63(inF0)
-            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
+            1228:          62 Load 65(inF0)
+            1229:          62 ExtInst 1(GLSL.std.450) 13(Sin) 1228
+                              Store 66(inF1) 1229
+            1230:          62 Load 65(inF0)
+            1231:          62 ExtInst 1(GLSL.std.450) 14(Cos) 1230
+                              Store 67(inF2) 1231
+            1233:          62 Load 65(inF0)
+            1234:          62 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
+            1236:          62 Load 65(inF0)
+            1237:          62 Load 66(inF1)
+            1238:          62 Load 67(inF2)
+            1239:          62 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
+            1241:          62 Load 65(inF0)
+            1242:          62 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
+            1244:          62 Load 65(inF0)
+            1245:          62 Load 66(inF1)
+            1246:          62 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
+            1248:          62 Load 65(inF0)
+            1249:          62 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
+            1251:          62 Load 65(inF0)
+            1252:          62 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
+            1253:          62 Load 65(inF0)
+            1254:          62 Transpose 1253
+            1256:          62 Load 65(inF0)
+            1257:          62 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
-      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
+76(PixelShaderFunction3x3(mf33;mf33;mf33;):          70 Function None 72
+        73(inF0):     71(ptr) FunctionParameter
+        74(inF1):     71(ptr) FunctionParameter
+        75(inF2):     71(ptr) FunctionParameter
+              77:             Label
+      1262(r000):    138(ptr) Variable Function
+      1267(r001):     71(ptr) Variable Function
+      1272(r003):    138(ptr) Variable Function
+      1276(r004):     71(ptr) Variable Function
+      1279(r005):     71(ptr) Variable Function
+      1282(r006):     71(ptr) Variable Function
+      1286(r007):     71(ptr) Variable Function
+      1296(r008):     71(ptr) Variable Function
+      1301(r009):     71(ptr) Variable Function
+      1304(r010):     71(ptr) Variable Function
+      1307(r011):     71(ptr) Variable Function
+      1310(r012):     71(ptr) Variable Function
+      1313(r013):     71(ptr) Variable Function
+      1316(r014):     71(ptr) Variable Function
+      1319(r015):     71(ptr) Variable Function
+      1322(r016):     71(ptr) Variable Function
+      1325(r017):     71(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
+      1331(r019):     71(ptr) Variable Function
+      1334(R020):     71(ptr) Variable Function
+      1337(r021):     71(ptr) Variable Function
+      1340(r022):     71(ptr) Variable Function
+      1353(r023):     71(ptr) Variable Function
+      1356(r025):     71(ptr) Variable Function
+      1359(r026):     71(ptr) Variable Function
+     1363(r026a):     71(ptr) Variable Function
+      1368(r027):     71(ptr) Variable Function
+      1371(r028):     71(ptr) Variable Function
+      1375(r029):     71(ptr) Variable Function
+      1378(r030):     71(ptr) Variable Function
+      1382(r031):     71(ptr) Variable Function
+      1386(r032):     71(ptr) Variable Function
+      1390(r033):     71(ptr) Variable Function
+      1393(r034):     71(ptr) Variable Function
+      1396(r035):     71(ptr) Variable Function
+      1399(r036):     71(ptr) Variable Function
+      1404(r037):     71(ptr) Variable Function
+      1407(r038):     71(ptr) Variable Function
+      1414(r039):     71(ptr) Variable Function
+      1417(r049):     71(ptr) Variable Function
+      1422(r041):     71(ptr) Variable Function
+      1425(r042):     71(ptr) Variable Function
+      1429(r043):     71(ptr) Variable Function
+      1432(r044):     71(ptr) Variable Function
+      1437(r046):     71(ptr) Variable Function
+            1263:          70 Load 73(inF0)
+            1265:        1264 FOrdNotEqual 1263 141
+            1266:   137(bool) All 1265
                               Store 1262(r000) 1266
-            1268:          68 Load 71(inF0)
-            1269:          68 ExtInst 1(GLSL.std.450) 4(FAbs) 1268
+            1268:          70 Load 73(inF0)
+            1269:          70 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
+            1270:          70 Load 73(inF0)
+            1271:          70 ExtInst 1(GLSL.std.450) 17(Acos) 1270
+            1273:          70 Load 73(inF0)
+            1274:        1264 FOrdNotEqual 1273 141
+            1275:   137(bool) Any 1274
                               Store 1272(r003) 1275
-            1277:          68 Load 71(inF0)
-            1278:          68 ExtInst 1(GLSL.std.450) 16(Asin) 1277
+            1277:          70 Load 73(inF0)
+            1278:          70 ExtInst 1(GLSL.std.450) 16(Asin) 1277
                               Store 1276(r004) 1278
-            1280:          68 Load 71(inF0)
-            1281:          68 ExtInst 1(GLSL.std.450) 18(Atan) 1280
+            1280:          70 Load 73(inF0)
+            1281:          70 ExtInst 1(GLSL.std.450) 18(Atan) 1280
                               Store 1279(r005) 1281
-            1283:          68 Load 71(inF0)
-            1284:          68 Load 72(inF1)
-            1285:          68 ExtInst 1(GLSL.std.450) 25(Atan2) 1283 1284
+            1283:          70 Load 73(inF0)
+            1284:          70 Load 74(inF1)
+            1285:          70 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
+            1287:          70 Load 73(inF0)
+            1288:          70 ExtInst 1(GLSL.std.450) 9(Ceil) 1287
                               Store 1286(r007) 1288
-            1289:          68 Load 71(inF0)
+            1289:          70 Load 73(inF0)
             1291:        1264 FOrdLessThan 1289 1290
-            1292:   135(bool) Any 1291
+            1292:   137(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
+            1297:          70 Load 73(inF0)
+            1298:          70 Load 74(inF1)
+            1299:          70 Load 75(inF2)
+            1300:          70 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
+            1302:          70 Load 73(inF0)
+            1303:          70 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
+            1305:          70 Load 73(inF0)
+            1306:          70 ExtInst 1(GLSL.std.450) 20(Cosh) 1305
                               Store 1304(r010) 1306
-            1308:          68 Load 71(inF0)
-            1309:          68 DPdx 1308
+            1308:          70 Load 73(inF0)
+            1309:          70 DPdx 1308
                               Store 1307(r011) 1309
-            1311:          68 Load 71(inF0)
-            1312:          68 DPdxCoarse 1311
+            1311:          70 Load 73(inF0)
+            1312:          70 DPdxCoarse 1311
                               Store 1310(r012) 1312
-            1314:          68 Load 71(inF0)
-            1315:          68 DPdxFine 1314
+            1314:          70 Load 73(inF0)
+            1315:          70 DPdxFine 1314
                               Store 1313(r013) 1315
-            1317:          68 Load 71(inF0)
-            1318:          68 DPdy 1317
+            1317:          70 Load 73(inF0)
+            1318:          70 DPdy 1317
                               Store 1316(r014) 1318
-            1320:          68 Load 71(inF0)
-            1321:          68 DPdyCoarse 1320
+            1320:          70 Load 73(inF0)
+            1321:          70 DPdyCoarse 1320
                               Store 1319(r015) 1321
-            1323:          68 Load 71(inF0)
-            1324:          68 DPdyFine 1323
+            1323:          70 Load 73(inF0)
+            1324:          70 DPdyFine 1323
                               Store 1322(r016) 1324
-            1326:          68 Load 71(inF0)
-            1327:          68 ExtInst 1(GLSL.std.450) 12(Degrees) 1326
+            1326:          70 Load 73(inF0)
+            1327:          70 ExtInst 1(GLSL.std.450) 12(Degrees) 1326
                               Store 1325(r017) 1327
-            1329:          68 Load 71(inF0)
+            1329:          70 Load 73(inF0)
             1330:    6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 1329
                               Store 1328(r018) 1330
-            1332:          68 Load 71(inF0)
-            1333:          68 ExtInst 1(GLSL.std.450) 27(Exp) 1332
+            1332:          70 Load 73(inF0)
+            1333:          70 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
+            1335:          70 Load 73(inF0)
+            1336:          70 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
+            1338:          70 Load 73(inF0)
+            1339:          70 ExtInst 1(GLSL.std.450) 8(Floor) 1338
                               Store 1337(r021) 1339
-            1341:          68 Load 71(inF0)
-            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
+            1341:          70 Load 73(inF0)
+            1342:          70 Load 74(inF1)
+            1343:   38(fvec3) CompositeExtract 1341 0
+            1344:   38(fvec3) CompositeExtract 1342 0
+            1345:   38(fvec3) FMod 1343 1344
+            1346:   38(fvec3) CompositeExtract 1341 1
+            1347:   38(fvec3) CompositeExtract 1342 1
+            1348:   38(fvec3) FMod 1346 1347
+            1349:   38(fvec3) CompositeExtract 1341 2
+            1350:   38(fvec3) CompositeExtract 1342 2
+            1351:   38(fvec3) FMod 1349 1350
+            1352:          70 CompositeConstruct 1345 1348 1351
                               Store 1340(r022) 1352
-            1354:          68 Load 71(inF0)
-            1355:          68 ExtInst 1(GLSL.std.450) 10(Fract) 1354
+            1354:          70 Load 73(inF0)
+            1355:          70 ExtInst 1(GLSL.std.450) 10(Fract) 1354
                               Store 1353(r023) 1355
-            1357:          68 Load 71(inF0)
-            1358:          68 Fwidth 1357
+            1357:          70 Load 73(inF0)
+            1358:          70 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
+            1360:          70 Load 73(inF0)
+            1361:          70 Load 74(inF1)
+            1362:          70 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
+            1364:          70 Load 73(inF0)
+            1365:          70 Load 74(inF1)
+            1366:          70 Load 75(inF2)
+            1367:          70 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) 28(Log) 1369
+            1369:          70 Load 73(inF0)
+            1370:          70 ExtInst 1(GLSL.std.450) 28(Log) 1369
                               Store 1368(r027) 1370
-            1372:          68 Load 71(inF0)
-            1373:          68 ExtInst 1(GLSL.std.450) 30(Log2) 1372
-            1374:          68 MatrixTimesScalar 1373 268
+            1372:          70 Load 73(inF0)
+            1373:          70 ExtInst 1(GLSL.std.450) 30(Log2) 1372
+            1374:          70 MatrixTimesScalar 1373 268
                               Store 1371(r028) 1374
-            1376:          68 Load 71(inF0)
-            1377:          68 ExtInst 1(GLSL.std.450) 30(Log2) 1376
+            1376:          70 Load 73(inF0)
+            1377:          70 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
+            1379:          70 Load 73(inF0)
+            1380:          70 Load 74(inF1)
+            1381:          70 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
+            1383:          70 Load 73(inF0)
+            1384:          70 Load 74(inF1)
+            1385:          70 ExtInst 1(GLSL.std.450) 37(FMin) 1383 1384
                               Store 1382(r031) 1385
-            1387:          68 Load 71(inF0)
-            1388:          68 Load 72(inF1)
-            1389:          68 ExtInst 1(GLSL.std.450) 26(Pow) 1387 1388
+            1387:          70 Load 73(inF0)
+            1388:          70 Load 74(inF1)
+            1389:          70 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
+            1391:          70 Load 73(inF0)
+            1392:          70 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
+            1394:          70 Load 73(inF0)
+            1395:          70 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
+            1397:          70 Load 73(inF0)
+            1398:          70 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
+            1400:          70 Load 73(inF0)
+            1401:   38(fvec3) CompositeConstruct 141 141 141
+            1402:   38(fvec3) CompositeConstruct 289 289 289
+            1403:          70 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) 6(FSign) 1405
+            1405:          70 Load 73(inF0)
+            1406:          70 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
+            1408:          70 Load 73(inF0)
+            1409:          70 ExtInst 1(GLSL.std.450) 13(Sin) 1408
                               Store 1407(r038) 1409
-            1410:          68 Load 71(inF0)
-            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
+            1410:          70 Load 73(inF0)
+            1411:          70 ExtInst 1(GLSL.std.450) 13(Sin) 1410
+                              Store 74(inF1) 1411
+            1412:          70 Load 73(inF0)
+            1413:          70 ExtInst 1(GLSL.std.450) 14(Cos) 1412
+                              Store 75(inF2) 1413
+            1415:          70 Load 73(inF0)
+            1416:          70 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
+            1418:          70 Load 73(inF0)
+            1419:          70 Load 74(inF1)
+            1420:          70 Load 75(inF2)
+            1421:          70 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
+            1423:          70 Load 73(inF0)
+            1424:          70 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
+            1426:          70 Load 73(inF0)
+            1427:          70 Load 74(inF1)
+            1428:          70 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
+            1430:          70 Load 73(inF0)
+            1431:          70 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
+            1433:          70 Load 73(inF0)
+            1434:          70 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
+            1435:          70 Load 73(inF0)
+            1436:          70 Transpose 1435
+            1438:          70 Load 73(inF0)
+            1439:          70 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
-      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
+84(PixelShaderFunction4x4(mf44;mf44;mf44;):          78 Function None 80
+        81(inF0):     79(ptr) FunctionParameter
+        82(inF1):     79(ptr) FunctionParameter
+        83(inF2):     79(ptr) FunctionParameter
+              85:             Label
+      1444(r000):    138(ptr) Variable Function
+      1449(r001):     79(ptr) Variable Function
+      1454(r003):    138(ptr) Variable Function
+      1458(r004):     79(ptr) Variable Function
+      1461(r005):     79(ptr) Variable Function
+      1464(r006):     79(ptr) Variable Function
+      1468(r007):     79(ptr) Variable Function
+      1478(r008):     79(ptr) Variable Function
+      1483(r009):     79(ptr) Variable Function
+      1486(r010):     79(ptr) Variable Function
+      1489(r011):     79(ptr) Variable Function
+      1492(r012):     79(ptr) Variable Function
+      1495(r013):     79(ptr) Variable Function
+      1498(r014):     79(ptr) Variable Function
+      1501(r015):     79(ptr) Variable Function
+      1504(r016):     79(ptr) Variable Function
+      1507(r017):     79(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
+      1513(r019):     79(ptr) Variable Function
+      1516(R020):     79(ptr) Variable Function
+      1519(r021):     79(ptr) Variable Function
+      1522(r022):     79(ptr) Variable Function
+      1538(r023):     79(ptr) Variable Function
+      1541(r025):     79(ptr) Variable Function
+      1544(r026):     79(ptr) Variable Function
+     1548(r026a):     79(ptr) Variable Function
+      1553(r027):     79(ptr) Variable Function
+      1556(r028):     79(ptr) Variable Function
+      1560(r029):     79(ptr) Variable Function
+      1563(r030):     79(ptr) Variable Function
+      1567(r031):     79(ptr) Variable Function
+      1571(r032):     79(ptr) Variable Function
+      1575(r033):     79(ptr) Variable Function
+      1578(r034):     79(ptr) Variable Function
+      1581(r035):     79(ptr) Variable Function
+      1584(r036):     79(ptr) Variable Function
+      1589(r037):     79(ptr) Variable Function
+      1592(r038):     79(ptr) Variable Function
+      1599(r039):     79(ptr) Variable Function
+      1602(r049):     79(ptr) Variable Function
+      1607(r041):     79(ptr) Variable Function
+      1610(r042):     79(ptr) Variable Function
+      1614(r043):     79(ptr) Variable Function
+      1617(r044):     79(ptr) Variable Function
+      1622(r046):     79(ptr) Variable Function
+            1445:          78 Load 81(inF0)
+            1447:        1446 FOrdNotEqual 1445 141
+            1448:   137(bool) All 1447
                               Store 1444(r000) 1448
-            1450:          76 Load 79(inF0)
-            1451:          76 ExtInst 1(GLSL.std.450) 4(FAbs) 1450
+            1450:          78 Load 81(inF0)
+            1451:          78 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
+            1452:          78 Load 81(inF0)
+            1453:          78 ExtInst 1(GLSL.std.450) 17(Acos) 1452
+            1455:          78 Load 81(inF0)
+            1456:        1446 FOrdNotEqual 1455 141
+            1457:   137(bool) Any 1456
                               Store 1454(r003) 1457
-            1459:          76 Load 79(inF0)
-            1460:          76 ExtInst 1(GLSL.std.450) 16(Asin) 1459
+            1459:          78 Load 81(inF0)
+            1460:          78 ExtInst 1(GLSL.std.450) 16(Asin) 1459
                               Store 1458(r004) 1460
-            1462:          76 Load 79(inF0)
-            1463:          76 ExtInst 1(GLSL.std.450) 18(Atan) 1462
+            1462:          78 Load 81(inF0)
+            1463:          78 ExtInst 1(GLSL.std.450) 18(Atan) 1462
                               Store 1461(r005) 1463
-            1465:          76 Load 79(inF0)
-            1466:          76 Load 80(inF1)
-            1467:          76 ExtInst 1(GLSL.std.450) 25(Atan2) 1465 1466
+            1465:          78 Load 81(inF0)
+            1466:          78 Load 82(inF1)
+            1467:          78 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
+            1469:          78 Load 81(inF0)
+            1470:          78 ExtInst 1(GLSL.std.450) 9(Ceil) 1469
                               Store 1468(r007) 1470
-            1471:          76 Load 79(inF0)
+            1471:          78 Load 81(inF0)
             1473:        1446 FOrdLessThan 1471 1472
-            1474:   135(bool) Any 1473
+            1474:   137(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
+            1479:          78 Load 81(inF0)
+            1480:          78 Load 82(inF1)
+            1481:          78 Load 83(inF2)
+            1482:          78 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
+            1484:          78 Load 81(inF0)
+            1485:          78 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
+            1487:          78 Load 81(inF0)
+            1488:          78 ExtInst 1(GLSL.std.450) 20(Cosh) 1487
                               Store 1486(r010) 1488
-            1490:          76 Load 79(inF0)
-            1491:          76 DPdx 1490
+            1490:          78 Load 81(inF0)
+            1491:          78 DPdx 1490
                               Store 1489(r011) 1491
-            1493:          76 Load 79(inF0)
-            1494:          76 DPdxCoarse 1493
+            1493:          78 Load 81(inF0)
+            1494:          78 DPdxCoarse 1493
                               Store 1492(r012) 1494
-            1496:          76 Load 79(inF0)
-            1497:          76 DPdxFine 1496
+            1496:          78 Load 81(inF0)
+            1497:          78 DPdxFine 1496
                               Store 1495(r013) 1497
-            1499:          76 Load 79(inF0)
-            1500:          76 DPdy 1499
+            1499:          78 Load 81(inF0)
+            1500:          78 DPdy 1499
                               Store 1498(r014) 1500
-            1502:          76 Load 79(inF0)
-            1503:          76 DPdyCoarse 1502
+            1502:          78 Load 81(inF0)
+            1503:          78 DPdyCoarse 1502
                               Store 1501(r015) 1503
-            1505:          76 Load 79(inF0)
-            1506:          76 DPdyFine 1505
+            1505:          78 Load 81(inF0)
+            1506:          78 DPdyFine 1505
                               Store 1504(r016) 1506
-            1508:          76 Load 79(inF0)
-            1509:          76 ExtInst 1(GLSL.std.450) 12(Degrees) 1508
+            1508:          78 Load 81(inF0)
+            1509:          78 ExtInst 1(GLSL.std.450) 12(Degrees) 1508
                               Store 1507(r017) 1509
-            1511:          76 Load 79(inF0)
+            1511:          78 Load 81(inF0)
             1512:    6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 1511
                               Store 1510(r018) 1512
-            1514:          76 Load 79(inF0)
-            1515:          76 ExtInst 1(GLSL.std.450) 27(Exp) 1514
+            1514:          78 Load 81(inF0)
+            1515:          78 ExtInst 1(GLSL.std.450) 27(Exp) 1514
                               Store 1513(r019) 1515
-            1517:          76 Load 79(inF0)
-            1518:          76 ExtInst 1(GLSL.std.450) 29(Exp2) 1517
+            1517:          78 Load 81(inF0)
+            1518:          78 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
+            1520:          78 Load 81(inF0)
+            1521:          78 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
+            1523:          78 Load 81(inF0)
+            1524:          78 Load 82(inF1)
+            1525:   50(fvec4) CompositeExtract 1523 0
+            1526:   50(fvec4) CompositeExtract 1524 0
+            1527:   50(fvec4) FMod 1525 1526
+            1528:   50(fvec4) CompositeExtract 1523 1
+            1529:   50(fvec4) CompositeExtract 1524 1
+            1530:   50(fvec4) FMod 1528 1529
+            1531:   50(fvec4) CompositeExtract 1523 2
+            1532:   50(fvec4) CompositeExtract 1524 2
+            1533:   50(fvec4) FMod 1531 1532
+            1534:   50(fvec4) CompositeExtract 1523 3
+            1535:   50(fvec4) CompositeExtract 1524 3
+            1536:   50(fvec4) FMod 1534 1535
+            1537:          78 CompositeConstruct 1527 1530 1533 1536
                               Store 1522(r022) 1537
-            1539:          76 Load 79(inF0)
-            1540:          76 ExtInst 1(GLSL.std.450) 10(Fract) 1539
+            1539:          78 Load 81(inF0)
+            1540:          78 ExtInst 1(GLSL.std.450) 10(Fract) 1539
                               Store 1538(r023) 1540
-            1542:          76 Load 79(inF0)
-            1543:          76 Fwidth 1542
+            1542:          78 Load 81(inF0)
+            1543:          78 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
+            1545:          78 Load 81(inF0)
+            1546:          78 Load 82(inF1)
+            1547:          78 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
+            1549:          78 Load 81(inF0)
+            1550:          78 Load 82(inF1)
+            1551:          78 Load 83(inF2)
+            1552:          78 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) 28(Log) 1554
+            1554:          78 Load 81(inF0)
+            1555:          78 ExtInst 1(GLSL.std.450) 28(Log) 1554
                               Store 1553(r027) 1555
-            1557:          76 Load 79(inF0)
-            1558:          76 ExtInst 1(GLSL.std.450) 30(Log2) 1557
-            1559:          76 MatrixTimesScalar 1558 268
+            1557:          78 Load 81(inF0)
+            1558:          78 ExtInst 1(GLSL.std.450) 30(Log2) 1557
+            1559:          78 MatrixTimesScalar 1558 268
                               Store 1556(r028) 1559
-            1561:          76 Load 79(inF0)
-            1562:          76 ExtInst 1(GLSL.std.450) 30(Log2) 1561
+            1561:          78 Load 81(inF0)
+            1562:          78 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
+            1564:          78 Load 81(inF0)
+            1565:          78 Load 82(inF1)
+            1566:          78 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
+            1568:          78 Load 81(inF0)
+            1569:          78 Load 82(inF1)
+            1570:          78 ExtInst 1(GLSL.std.450) 37(FMin) 1568 1569
                               Store 1567(r031) 1570
-            1572:          76 Load 79(inF0)
-            1573:          76 Load 80(inF1)
-            1574:          76 ExtInst 1(GLSL.std.450) 26(Pow) 1572 1573
+            1572:          78 Load 81(inF0)
+            1573:          78 Load 82(inF1)
+            1574:          78 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
+            1576:          78 Load 81(inF0)
+            1577:          78 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
+            1579:          78 Load 81(inF0)
+            1580:          78 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
+            1582:          78 Load 81(inF0)
+            1583:          78 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
+            1585:          78 Load 81(inF0)
+            1586:   50(fvec4) CompositeConstruct 141 141 141 141
+            1587:   50(fvec4) CompositeConstruct 289 289 289 289
+            1588:          78 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) 6(FSign) 1590
+            1590:          78 Load 81(inF0)
+            1591:          78 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
+            1593:          78 Load 81(inF0)
+            1594:          78 ExtInst 1(GLSL.std.450) 13(Sin) 1593
                               Store 1592(r038) 1594
-            1595:          76 Load 79(inF0)
-            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
+            1595:          78 Load 81(inF0)
+            1596:          78 ExtInst 1(GLSL.std.450) 13(Sin) 1595
+                              Store 82(inF1) 1596
+            1597:          78 Load 81(inF0)
+            1598:          78 ExtInst 1(GLSL.std.450) 14(Cos) 1597
+                              Store 83(inF2) 1598
+            1600:          78 Load 81(inF0)
+            1601:          78 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
+            1603:          78 Load 81(inF0)
+            1604:          78 Load 82(inF1)
+            1605:          78 Load 83(inF2)
+            1606:          78 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
+            1608:          78 Load 81(inF0)
+            1609:          78 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
+            1611:          78 Load 81(inF0)
+            1612:          78 Load 82(inF1)
+            1613:          78 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
+            1615:          78 Load 81(inF0)
+            1616:          78 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
+            1618:          78 Load 81(inF0)
+            1619:          78 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
+            1620:          78 Load 81(inF0)
+            1621:          78 Transpose 1620
+            1623:          78 Load 81(inF0)
+            1624:          78 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
-        86(inF1):      7(ptr) FunctionParameter
-       87(inFV0):     25(ptr) FunctionParameter
-       88(inFV1):     25(ptr) FunctionParameter
-       89(inFM0):     61(ptr) FunctionParameter
-       90(inFM1):     61(ptr) FunctionParameter
-              92:             Label
+93(TestGenMul2(f1;f1;vf2;vf2;mf22;mf22;):           2 Function None 86
+        87(inF0):      7(ptr) FunctionParameter
+        88(inF1):      7(ptr) FunctionParameter
+       89(inFV0):     27(ptr) FunctionParameter
+       90(inFV1):     27(ptr) FunctionParameter
+       91(inFM0):     63(ptr) FunctionParameter
+       92(inFM1):     63(ptr) FunctionParameter
+              94:             Label
         1629(r0):      7(ptr) Variable Function
-        1633(r1):     25(ptr) Variable Function
-        1637(r2):     25(ptr) Variable Function
+        1633(r1):     27(ptr) Variable Function
+        1637(r2):     27(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)
+        1645(r4):     27(ptr) Variable Function
+        1649(r5):     27(ptr) Variable Function
+        1653(r6):     63(ptr) Variable Function
+        1657(r7):     63(ptr) Variable Function
+        1661(r8):     63(ptr) Variable Function
+            1630:    6(float) Load 88(inF1)
+            1631:    6(float) Load 87(inF0)
             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
+            1634:    6(float) Load 87(inF0)
+            1635:   26(fvec2) Load 89(inFV0)
+            1636:   26(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
+            1638:   26(fvec2) Load 89(inFV0)
+            1639:    6(float) Load 87(inF0)
+            1640:   26(fvec2) VectorTimesScalar 1638 1639
                               Store 1637(r2) 1640
-            1642:   24(fvec2) Load 87(inFV0)
-            1643:   24(fvec2) Load 88(inFV1)
+            1642:   26(fvec2) Load 89(inFV0)
+            1643:   26(fvec2) Load 90(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
+            1646:   26(fvec2) Load 89(inFV0)
+            1647:          62 Load 91(inFM0)
+            1648:   26(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
+            1650:          62 Load 91(inFM0)
+            1651:   26(fvec2) Load 89(inFV0)
+            1652:   26(fvec2) MatrixTimesVector 1650 1651
                               Store 1649(r5) 1652
-            1654:    6(float) Load 85(inF0)
-            1655:          60 Load 89(inFM0)
-            1656:          60 MatrixTimesScalar 1655 1654
+            1654:    6(float) Load 87(inF0)
+            1655:          62 Load 91(inFM0)
+            1656:          62 MatrixTimesScalar 1655 1654
                               Store 1653(r6) 1656
-            1658:          60 Load 89(inFM0)
-            1659:    6(float) Load 85(inF0)
-            1660:          60 MatrixTimesScalar 1658 1659
+            1658:          62 Load 91(inFM0)
+            1659:    6(float) Load 87(inF0)
+            1660:          62 MatrixTimesScalar 1658 1659
                               Store 1657(r7) 1660
-            1662:          60 Load 90(inFM1)
-            1663:          60 Load 89(inFM0)
-            1664:          60 MatrixTimesMatrix 1662 1663
+            1662:          62 Load 92(inFM1)
+            1663:          62 Load 91(inFM0)
+            1664:          62 MatrixTimesMatrix 1662 1663
                               Store 1661(r8) 1664
                               Return
                               FunctionEnd
-100(TestGenMul3(f1;f1;vf3;vf3;mf33;mf33;):           2 Function None 93
-        94(inF0):      7(ptr) FunctionParameter
-        95(inF1):      7(ptr) FunctionParameter
-       96(inFV0):     37(ptr) FunctionParameter
-       97(inFV1):     37(ptr) FunctionParameter
-       98(inFM0):     69(ptr) FunctionParameter
-       99(inFM1):     69(ptr) FunctionParameter
-             101:             Label
+102(TestGenMul3(f1;f1;vf3;vf3;mf33;mf33;):           2 Function None 95
+        96(inF0):      7(ptr) FunctionParameter
+        97(inF1):      7(ptr) FunctionParameter
+       98(inFV0):     39(ptr) FunctionParameter
+       99(inFV1):     39(ptr) FunctionParameter
+      100(inFM0):     71(ptr) FunctionParameter
+      101(inFM1):     71(ptr) FunctionParameter
+             103:             Label
         1665(r0):      7(ptr) Variable Function
-        1669(r1):     37(ptr) Variable Function
-        1673(r2):     37(ptr) Variable Function
+        1669(r1):     39(ptr) Variable Function
+        1673(r2):     39(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)
+        1681(r4):     39(ptr) Variable Function
+        1685(r5):     39(ptr) Variable Function
+        1689(r6):     71(ptr) Variable Function
+        1693(r7):     71(ptr) Variable Function
+        1697(r8):     71(ptr) Variable Function
+            1666:    6(float) Load 97(inF1)
+            1667:    6(float) Load 96(inF0)
             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
+            1670:    6(float) Load 96(inF0)
+            1671:   38(fvec3) Load 98(inFV0)
+            1672:   38(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
+            1674:   38(fvec3) Load 98(inFV0)
+            1675:    6(float) Load 96(inF0)
+            1676:   38(fvec3) VectorTimesScalar 1674 1675
                               Store 1673(r2) 1676
-            1678:   36(fvec3) Load 96(inFV0)
-            1679:   36(fvec3) Load 97(inFV1)
+            1678:   38(fvec3) Load 98(inFV0)
+            1679:   38(fvec3) Load 99(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
+            1682:   38(fvec3) Load 98(inFV0)
+            1683:          70 Load 100(inFM0)
+            1684:   38(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
+            1686:          70 Load 100(inFM0)
+            1687:   38(fvec3) Load 98(inFV0)
+            1688:   38(fvec3) MatrixTimesVector 1686 1687
                               Store 1685(r5) 1688
-            1690:    6(float) Load 94(inF0)
-            1691:          68 Load 98(inFM0)
-            1692:          68 MatrixTimesScalar 1691 1690
+            1690:    6(float) Load 96(inF0)
+            1691:          70 Load 100(inFM0)
+            1692:          70 MatrixTimesScalar 1691 1690
                               Store 1689(r6) 1692
-            1694:          68 Load 98(inFM0)
-            1695:    6(float) Load 94(inF0)
-            1696:          68 MatrixTimesScalar 1694 1695
+            1694:          70 Load 100(inFM0)
+            1695:    6(float) Load 96(inF0)
+            1696:          70 MatrixTimesScalar 1694 1695
                               Store 1693(r7) 1696
-            1698:          68 Load 99(inFM1)
-            1699:          68 Load 98(inFM0)
-            1700:          68 MatrixTimesMatrix 1698 1699
+            1698:          70 Load 101(inFM1)
+            1699:          70 Load 100(inFM0)
+            1700:          70 MatrixTimesMatrix 1698 1699
                               Store 1697(r8) 1700
                               Return
                               FunctionEnd
-109(TestGenMul4(f1;f1;vf4;vf4;mf44;mf44;):           2 Function None 102
-       103(inF0):      7(ptr) FunctionParameter
-       104(inF1):      7(ptr) FunctionParameter
-      105(inFV0):     49(ptr) FunctionParameter
-      106(inFV1):     49(ptr) FunctionParameter
-      107(inFM0):     77(ptr) FunctionParameter
-      108(inFM1):     77(ptr) FunctionParameter
-             110:             Label
+111(TestGenMul4(f1;f1;vf4;vf4;mf44;mf44;):           2 Function None 104
+       105(inF0):      7(ptr) FunctionParameter
+       106(inF1):      7(ptr) FunctionParameter
+      107(inFV0):     51(ptr) FunctionParameter
+      108(inFV1):     51(ptr) FunctionParameter
+      109(inFM0):     79(ptr) FunctionParameter
+      110(inFM1):     79(ptr) FunctionParameter
+             112:             Label
         1701(r0):      7(ptr) Variable Function
-        1705(r1):     49(ptr) Variable Function
-        1709(r2):     49(ptr) Variable Function
+        1705(r1):     51(ptr) Variable Function
+        1709(r2):     51(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)
+        1717(r4):     51(ptr) Variable Function
+        1721(r5):     51(ptr) Variable Function
+        1725(r6):     79(ptr) Variable Function
+        1729(r7):     79(ptr) Variable Function
+        1733(r8):     79(ptr) Variable Function
+            1702:    6(float) Load 106(inF1)
+            1703:    6(float) Load 105(inF0)
             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
+            1706:    6(float) Load 105(inF0)
+            1707:   50(fvec4) Load 107(inFV0)
+            1708:   50(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
+            1710:   50(fvec4) Load 107(inFV0)
+            1711:    6(float) Load 105(inF0)
+            1712:   50(fvec4) VectorTimesScalar 1710 1711
                               Store 1709(r2) 1712
-            1714:   48(fvec4) Load 105(inFV0)
-            1715:   48(fvec4) Load 106(inFV1)
+            1714:   50(fvec4) Load 107(inFV0)
+            1715:   50(fvec4) Load 108(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
+            1718:   50(fvec4) Load 107(inFV0)
+            1719:          78 Load 109(inFM0)
+            1720:   50(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
+            1722:          78 Load 109(inFM0)
+            1723:   50(fvec4) Load 107(inFV0)
+            1724:   50(fvec4) MatrixTimesVector 1722 1723
                               Store 1721(r5) 1724
-            1726:    6(float) Load 103(inF0)
-            1727:          76 Load 107(inFM0)
-            1728:          76 MatrixTimesScalar 1727 1726
+            1726:    6(float) Load 105(inF0)
+            1727:          78 Load 109(inFM0)
+            1728:          78 MatrixTimesScalar 1727 1726
                               Store 1725(r6) 1728
-            1730:          76 Load 107(inFM0)
-            1731:    6(float) Load 103(inF0)
-            1732:          76 MatrixTimesScalar 1730 1731
+            1730:          78 Load 109(inFM0)
+            1731:    6(float) Load 105(inF0)
+            1732:          78 MatrixTimesScalar 1730 1731
                               Store 1729(r7) 1732
-            1734:          76 Load 108(inFM1)
-            1735:          76 Load 107(inFM0)
-            1736:          76 MatrixTimesMatrix 1734 1735
+            1734:          78 Load 110(inFM1)
+            1735:          78 Load 109(inFM0)
+            1736:          78 MatrixTimesMatrix 1734 1735
                               Store 1733(r8) 1736
                               Return
                               FunctionEnd
-129(TestGenMulNxM(f1;f1;vf2;vf3;mf23;mf32;mf33;mf34;mf24;):           2 Function None 119
-       120(inF0):      7(ptr) FunctionParameter
-       121(inF1):      7(ptr) FunctionParameter
-      122(inFV2):     25(ptr) FunctionParameter
-      123(inFV3):     37(ptr) FunctionParameter
-    124(inFM2x3):    112(ptr) FunctionParameter
-    125(inFM3x2):    114(ptr) FunctionParameter
-    126(inFM3x3):     69(ptr) FunctionParameter
-    127(inFM3x4):    116(ptr) FunctionParameter
-    128(inFM2x4):    118(ptr) FunctionParameter
-             130:             Label
+131(TestGenMulNxM(f1;f1;vf2;vf3;mf23;mf32;mf33;mf34;mf24;):           2 Function None 121
+       122(inF0):      7(ptr) FunctionParameter
+       123(inF1):      7(ptr) FunctionParameter
+      124(inFV2):     27(ptr) FunctionParameter
+      125(inFV3):     39(ptr) FunctionParameter
+    126(inFM2x3):    114(ptr) FunctionParameter
+    127(inFM3x2):    116(ptr) FunctionParameter
+    128(inFM3x3):     71(ptr) FunctionParameter
+    129(inFM3x4):    118(ptr) FunctionParameter
+    130(inFM2x4):    120(ptr) FunctionParameter
+             132:             Label
        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
+       1741(r01):     27(ptr) Variable Function
+       1745(r02):     39(ptr) Variable Function
+       1749(r03):     27(ptr) Variable Function
+       1753(r04):     39(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)
+       1765(r07):     39(ptr) Variable Function
+       1769(r08):     27(ptr) Variable Function
+       1773(r09):     27(ptr) Variable Function
+       1777(r10):     39(ptr) Variable Function
+       1781(r11):    114(ptr) Variable Function
+       1785(r12):    116(ptr) Variable Function
+       1789(r13):     63(ptr) Variable Function
+       1793(r14):    114(ptr) Variable Function
+       1797(r15):    120(ptr) Variable Function
+       1801(r16):    118(ptr) Variable Function
+            1738:    6(float) Load 123(inF1)
+            1739:    6(float) Load 122(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
+            1742:    6(float) Load 122(inF0)
+            1743:   26(fvec2) Load 124(inFV2)
+            1744:   26(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
+            1746:    6(float) Load 122(inF0)
+            1747:   38(fvec3) Load 125(inFV3)
+            1748:   38(fvec3) VectorTimesScalar 1747 1746
                               Store 1745(r02) 1748
-            1750:   24(fvec2) Load 122(inFV2)
-            1751:    6(float) Load 120(inF0)
-            1752:   24(fvec2) VectorTimesScalar 1750 1751
+            1750:   26(fvec2) Load 124(inFV2)
+            1751:    6(float) Load 122(inF0)
+            1752:   26(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
+            1754:   38(fvec3) Load 125(inFV3)
+            1755:    6(float) Load 122(inF0)
+            1756:   38(fvec3) VectorTimesScalar 1754 1755
                               Store 1753(r04) 1756
-            1758:   24(fvec2) Load 122(inFV2)
-            1759:   24(fvec2) Load 122(inFV2)
+            1758:   26(fvec2) Load 124(inFV2)
+            1759:   26(fvec2) Load 124(inFV2)
             1760:    6(float) Dot 1758 1759
                               Store 1757(r05) 1760
-            1762:   36(fvec3) Load 123(inFV3)
-            1763:   36(fvec3) Load 123(inFV3)
+            1762:   38(fvec3) Load 125(inFV3)
+            1763:   38(fvec3) Load 125(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
+            1766:         113 Load 126(inFM2x3)
+            1767:   26(fvec2) Load 124(inFV2)
+            1768:   38(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
+            1770:         115 Load 127(inFM3x2)
+            1771:   38(fvec3) Load 125(inFV3)
+            1772:   26(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
+            1774:   38(fvec3) Load 125(inFV3)
+            1775:         113 Load 126(inFM2x3)
+            1776:   26(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
+            1778:   26(fvec2) Load 124(inFV2)
+            1779:         115 Load 127(inFM3x2)
+            1780:   38(fvec3) VectorTimesMatrix 1778 1779
                               Store 1777(r10) 1780
-            1782:    6(float) Load 120(inF0)
-            1783:         111 Load 124(inFM2x3)
-            1784:         111 MatrixTimesScalar 1783 1782
+            1782:    6(float) Load 122(inF0)
+            1783:         113 Load 126(inFM2x3)
+            1784:         113 MatrixTimesScalar 1783 1782
                               Store 1781(r11) 1784
-            1786:    6(float) Load 120(inF0)
-            1787:         113 Load 125(inFM3x2)
-            1788:         113 MatrixTimesScalar 1787 1786
+            1786:    6(float) Load 122(inF0)
+            1787:         115 Load 127(inFM3x2)
+            1788:         115 MatrixTimesScalar 1787 1786
                               Store 1785(r12) 1788
-            1790:         113 Load 125(inFM3x2)
-            1791:         111 Load 124(inFM2x3)
-            1792:          60 MatrixTimesMatrix 1790 1791
+            1790:         115 Load 127(inFM3x2)
+            1791:         113 Load 126(inFM2x3)
+            1792:          62 MatrixTimesMatrix 1790 1791
                               Store 1789(r13) 1792
-            1794:          68 Load 126(inFM3x3)
-            1795:         111 Load 124(inFM2x3)
-            1796:         111 MatrixTimesMatrix 1794 1795
+            1794:          70 Load 128(inFM3x3)
+            1795:         113 Load 126(inFM2x3)
+            1796:         113 MatrixTimesMatrix 1794 1795
                               Store 1793(r14) 1796
-            1798:         115 Load 127(inFM3x4)
-            1799:         111 Load 124(inFM2x3)
-            1800:         117 MatrixTimesMatrix 1798 1799
+            1798:         117 Load 129(inFM3x4)
+            1799:         113 Load 126(inFM2x3)
+            1800:         119 MatrixTimesMatrix 1798 1799
                               Store 1797(r15) 1800
-            1802:         117 Load 128(inFM2x4)
-            1803:         113 Load 125(inFM3x2)
-            1804:         115 MatrixTimesMatrix 1802 1803
+            1802:         119 Load 130(inFM2x4)
+            1803:         115 Load 127(inFM3x2)
+            1804:         117 MatrixTimesMatrix 1802 1803
                               Store 1801(r16) 1804
                               Return
                               FunctionEnd
-     133(@main():131(PS_OUTPUT) Function None 132
-             134:             Label
+     135(@main():133(PS_OUTPUT) Function None 134
+             136:             Label
  1806(ps_output):   1805(ptr) Variable Function
-            1808:     49(ptr) AccessChain 1806(ps_output) 187
+            1808:     51(ptr) AccessChain 1806(ps_output) 187
                               Store 1808 1807
-            1809:131(PS_OUTPUT) Load 1806(ps_output)
+            1809:133(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 a280db1..46f275c 100644
--- a/Test/baseResults/hlsl.intrinsics.lit.frag.out
+++ b/Test/baseResults/hlsl.intrinsics.lit.frag.out
@@ -18,7 +18,7 @@
 0:3              'n_dot_l' ( in float)
 0:3              Constant:
 0:3                0.000000
-0:3            Test condition and select ( temp float)
+0:3            Test condition and select ( temp float): no shortcircuit
 0:3              Condition
 0:3              Compare Less Than ( temp bool)
 0:3                min ( temp float)
@@ -79,7 +79,7 @@
 0:3              'n_dot_l' ( in float)
 0:3              Constant:
 0:3                0.000000
-0:3            Test condition and select ( temp float)
+0:3            Test condition and select ( temp float): no shortcircuit
 0:3              Condition
 0:3              Compare Less Than ( temp bool)
 0:3                min ( temp float)
@@ -118,13 +118,13 @@
 0:?     'm' (layout( location=2) in float)
 
 // Module Version 10000
-// Generated by (magic number): 80002
-// Id's are bound by 52
+// Generated by (magic number): 80006
+// Id's are bound by 48
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "PixelShaderFunction" 37 40 43
+                              EntryPoint Fragment 4  "PixelShaderFunction" 33 36 39
                               ExecutionMode 4 OriginUpperLeft
                               Source HLSL 500
                               Name 4  "PixelShaderFunction"
@@ -133,18 +133,18 @@
                               Name 10  "n_dot_h"
                               Name 11  "m"
                               Name 16  "r0"
-                              Name 35  "n_dot_l"
-                              Name 37  "n_dot_l"
-                              Name 39  "n_dot_h"
-                              Name 40  "n_dot_h"
-                              Name 42  "m"
-                              Name 43  "m"
+                              Name 31  "n_dot_l"
+                              Name 33  "n_dot_l"
+                              Name 35  "n_dot_h"
+                              Name 36  "n_dot_h"
+                              Name 38  "m"
+                              Name 39  "m"
+                              Name 41  "param"
+                              Name 43  "param"
                               Name 45  "param"
-                              Name 47  "param"
-                              Name 49  "param"
-                              Decorate 37(n_dot_l) Location 0
-                              Decorate 40(n_dot_h) Location 1
-                              Decorate 43(m) Location 2
+                              Decorate 33(n_dot_l) Location 0
+                              Decorate 36(n_dot_h) Location 1
+                              Decorate 39(m) Location 2
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -154,32 +154,32 @@
               15:             TypePointer Function 14(fvec4)
               17:    6(float) Constant 1065353216
               19:    6(float) Constant 0
-              25:             TypeBool
-              36:             TypePointer Input 6(float)
-     37(n_dot_l):     36(ptr) Variable Input
-     40(n_dot_h):     36(ptr) Variable Input
-           43(m):     36(ptr) Variable Input
+              24:             TypeBool
+              32:             TypePointer Input 6(float)
+     33(n_dot_l):     32(ptr) Variable Input
+     36(n_dot_h):     32(ptr) Variable Input
+           39(m):     32(ptr) Variable Input
 4(PixelShaderFunction):           2 Function None 3
                5:             Label
-     35(n_dot_l):      7(ptr) Variable Function
-     39(n_dot_h):      7(ptr) Variable Function
-           42(m):      7(ptr) Variable Function
+     31(n_dot_l):      7(ptr) Variable Function
+     35(n_dot_h):      7(ptr) Variable Function
+           38(m):      7(ptr) Variable Function
+       41(param):      7(ptr) Variable Function
+       43(param):      7(ptr) Variable Function
        45(param):      7(ptr) Variable Function
-       47(param):      7(ptr) Variable Function
-       49(param):      7(ptr) Variable Function
-              38:    6(float) Load 37(n_dot_l)
-                              Store 35(n_dot_l) 38
-              41:    6(float) Load 40(n_dot_h)
-                              Store 39(n_dot_h) 41
-              44:    6(float) Load 43(m)
-                              Store 42(m) 44
-              46:    6(float) Load 35(n_dot_l)
+              34:    6(float) Load 33(n_dot_l)
+                              Store 31(n_dot_l) 34
+              37:    6(float) Load 36(n_dot_h)
+                              Store 35(n_dot_h) 37
+              40:    6(float) Load 39(m)
+                              Store 38(m) 40
+              42:    6(float) Load 31(n_dot_l)
+                              Store 41(param) 42
+              44:    6(float) Load 35(n_dot_h)
+                              Store 43(param) 44
+              46:    6(float) Load 38(m)
                               Store 45(param) 46
-              48:    6(float) Load 39(n_dot_h)
-                              Store 47(param) 48
-              50:    6(float) Load 42(m)
-                              Store 49(param) 50
-              51:           2 FunctionCall 12(@PixelShaderFunction(f1;f1;f1;) 45(param) 47(param) 49(param)
+              47:           2 FunctionCall 12(@PixelShaderFunction(f1;f1;f1;) 41(param) 43(param) 45(param)
                               Return
                               FunctionEnd
 12(@PixelShaderFunction(f1;f1;f1;):           2 Function None 8
@@ -188,27 +188,17 @@
            11(m):      7(ptr) FunctionParameter
               13:             Label
           16(r0):     15(ptr) Variable Function
-              21:      7(ptr) Variable Function
               18:    6(float) Load 9(n_dot_l)
               20:    6(float) ExtInst 1(GLSL.std.450) 40(FMax) 18 19
-              22:    6(float) Load 9(n_dot_l)
-              23:    6(float) Load 10(n_dot_h)
-              24:    6(float) ExtInst 1(GLSL.std.450) 37(FMin) 22 23
-              26:    25(bool) FOrdLessThan 24 19
-                              SelectionMerge 28 None
-                              BranchConditional 26 27 29
-              27:               Label
-                                Store 21 19
-                                Branch 28
-              29:               Label
-              30:    6(float)   Load 10(n_dot_h)
-              31:    6(float)   Load 11(m)
-              32:    6(float)   FMul 30 31
-                                Store 21 32
-                                Branch 28
-              28:             Label
-              33:    6(float) Load 21
-              34:   14(fvec4) CompositeConstruct 17 20 33 17
-                              Store 16(r0) 34
+              21:    6(float) Load 9(n_dot_l)
+              22:    6(float) Load 10(n_dot_h)
+              23:    6(float) ExtInst 1(GLSL.std.450) 37(FMin) 21 22
+              25:    24(bool) FOrdLessThan 23 19
+              26:    6(float) Load 10(n_dot_h)
+              27:    6(float) Load 11(m)
+              28:    6(float) FMul 26 27
+              29:    6(float) Select 25 19 28
+              30:   14(fvec4) CompositeConstruct 17 20 29 17
+                              Store 16(r0) 30
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.intrinsics.negative.comp.out b/Test/baseResults/hlsl.intrinsics.negative.comp.out
index ce8947d..3f5598b 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): 80002
+// Generated by (magic number): 80006
 // 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 31e3ec4..90ca623 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): 80002
+// Generated by (magic number): 80006
 // 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 8df57aa..530232e 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): 80002
+// Generated by (magic number): 80006
 // 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 6df1915..a90e494 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): 80002
+// Generated by (magic number): 80006
 // 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 703d9f6..6ab3e85 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): 80002
+// Generated by (magic number): 80006
 // 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 e92a8a7..ea8f2ba 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): 80002
+// Generated by (magic number): 80006
 // 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 9968e6b..c6a9026 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): 80002
+// Generated by (magic number): 80006
 // 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 de614d2..b24af79 100755
--- a/Test/baseResults/hlsl.layout.frag.out
+++ b/Test/baseResults/hlsl.layout.frag.out
@@ -6,23 +6,33 @@
 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          add ( temp 4-component vector of float)
-0:17            add ( temp 4-component vector of float)
-0:17              'input' ( in 4-component vector of float)
-0:17              v1: direct index for structure (layout( row_major std430 offset=16) buffer 4-component vector of float)
-0:17                'anon@0' (layout( set=3 binding=5 row_major std430) readonly buffer block{layout( row_major std430 offset=16) buffer 4-component vector of float v1})
-0:17                Constant:
-0:17                  0 (const uint)
-0:17            v5: direct index for structure (layout( row_major std430 offset=0) buffer 4-component vector of float)
-0:17              'anon@1' (layout( row_major std430 push_constant) readonly buffer block{layout( row_major std430 offset=0) buffer 4-component vector of float v5})
-0:17              Constant:
-0:17                0 (const uint)
-0:17          v1PostLayout: direct index for structure (layout( row_major std430 offset=16) buffer 4-component vector of float)
-0:17            '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})
-0:17            Constant:
-0:17              0 (const uint)
+0:17      Sequence
+0:17        move second child to first child ( temp 4-component vector of float)
+0:17          'layout' ( temp 4-component vector of float)
+0:17          Constant:
+0:17            2.000000
+0:17            2.000000
+0:17            2.000000
+0:17            2.000000
+0:18      Branch: Return with expression
+0:18        add ( temp 4-component vector of float)
+0:18          add ( temp 4-component vector of float)
+0:18            add ( temp 4-component vector of float)
+0:18              'input' ( in 4-component vector of float)
+0:18              v1: direct index for structure (layout( row_major std430 offset=16) buffer 4-component vector of float)
+0:18                'anon@0' (layout( set=3 binding=5 row_major std430) readonly buffer block{layout( row_major std430 offset=16) buffer 4-component vector of float v1})
+0:18                Constant:
+0:18                  0 (const uint)
+0:18            v5: direct index for structure (layout( row_major std430 offset=0) buffer 4-component vector of float)
+0:18              'anon@1' (layout( row_major std430 push_constant) readonly buffer block{layout( row_major std430 offset=0) buffer 4-component vector of float v5})
+0:18              Constant:
+0:18                0 (const uint)
+0:18          component-wise multiply ( temp 4-component vector of float)
+0:18            v1PostLayout: direct index for structure (layout( row_major std430 offset=16) buffer 4-component vector of float)
+0:18              '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})
+0:18              Constant:
+0:18                0 (const uint)
+0:18            'layout' ( temp 4-component vector of float)
 0:?   Linker Objects
 0:?     'anon@0' (layout( set=3 binding=5 row_major std430) readonly buffer block{layout( row_major std430 offset=16) buffer 4-component vector of float v1})
 0:?     'anon@1' (layout( row_major std430 push_constant) readonly buffer block{layout( row_major std430 offset=0) buffer 4-component vector of float v5})
@@ -42,23 +52,33 @@
 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          add ( temp 4-component vector of float)
-0:17            add ( temp 4-component vector of float)
-0:17              'input' ( in 4-component vector of float)
-0:17              v1: direct index for structure (layout( row_major std430 offset=16) buffer 4-component vector of float)
-0:17                'anon@0' (layout( set=3 binding=5 row_major std430) readonly buffer block{layout( row_major std430 offset=16) buffer 4-component vector of float v1})
-0:17                Constant:
-0:17                  0 (const uint)
-0:17            v5: direct index for structure (layout( row_major std430 offset=0) buffer 4-component vector of float)
-0:17              'anon@1' (layout( row_major std430 push_constant) readonly buffer block{layout( row_major std430 offset=0) buffer 4-component vector of float v5})
-0:17              Constant:
-0:17                0 (const uint)
-0:17          v1PostLayout: direct index for structure (layout( row_major std430 offset=16) buffer 4-component vector of float)
-0:17            '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})
-0:17            Constant:
-0:17              0 (const uint)
+0:17      Sequence
+0:17        move second child to first child ( temp 4-component vector of float)
+0:17          'layout' ( temp 4-component vector of float)
+0:17          Constant:
+0:17            2.000000
+0:17            2.000000
+0:17            2.000000
+0:17            2.000000
+0:18      Branch: Return with expression
+0:18        add ( temp 4-component vector of float)
+0:18          add ( temp 4-component vector of float)
+0:18            add ( temp 4-component vector of float)
+0:18              'input' ( in 4-component vector of float)
+0:18              v1: direct index for structure (layout( row_major std430 offset=16) buffer 4-component vector of float)
+0:18                'anon@0' (layout( set=3 binding=5 row_major std430) readonly buffer block{layout( row_major std430 offset=16) buffer 4-component vector of float v1})
+0:18                Constant:
+0:18                  0 (const uint)
+0:18            v5: direct index for structure (layout( row_major std430 offset=0) buffer 4-component vector of float)
+0:18              'anon@1' (layout( row_major std430 push_constant) readonly buffer block{layout( row_major std430 offset=0) buffer 4-component vector of float v5})
+0:18              Constant:
+0:18                0 (const uint)
+0:18          component-wise multiply ( temp 4-component vector of float)
+0:18            v1PostLayout: direct index for structure (layout( row_major std430 offset=16) buffer 4-component vector of float)
+0:18              '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})
+0:18              Constant:
+0:18                0 (const uint)
+0:18            'layout' ( temp 4-component vector of float)
 0:?   Linker Objects
 0:?     'anon@0' (layout( set=3 binding=5 row_major std430) readonly buffer block{layout( row_major std430 offset=16) buffer 4-component vector of float v1})
 0:?     'anon@1' (layout( row_major std430 push_constant) readonly buffer block{layout( row_major std430 offset=0) buffer 4-component vector of float v5})
@@ -67,8 +87,8 @@
 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): 80002
-// Id's are bound by 39
+// Generated by (magic number): 80006
+// Id's are bound by 44
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
@@ -79,50 +99,53 @@
                               Name 4  "main"
                               Name 11  "PixelShaderFunction(vf4;"
                               Name 10  "input"
-                              Name 14  "tbufName"
-                              MemberName 14(tbufName) 0  "v1"
-                              Name 16  ""
-                              Name 23  "tbufName2"
-                              MemberName 23(tbufName2) 0  "v5"
-                              Name 25  ""
-                              Name 30  "tbufName2"
-                              MemberName 30(tbufName2) 0  "v1PostLayout"
-                              Name 32  ""
-                              Name 38  "specConst"
-                              MemberDecorate 14(tbufName) 0 NonWritable
-                              MemberDecorate 14(tbufName) 0 Offset 16
-                              Decorate 14(tbufName) BufferBlock
-                              Decorate 16 DescriptorSet 3
-                              Decorate 16 Binding 5
-                              MemberDecorate 23(tbufName2) 0 NonWritable
-                              MemberDecorate 23(tbufName2) 0 Offset 0
-                              Decorate 23(tbufName2) BufferBlock
-                              MemberDecorate 30(tbufName2) 0 NonWritable
-                              MemberDecorate 30(tbufName2) 0 Offset 16
-                              Decorate 30(tbufName2) BufferBlock
-                              Decorate 32 DescriptorSet 4
-                              Decorate 32 Binding 7
-                              Decorate 38(specConst) SpecId 17
+                              Name 13  "layout"
+                              Name 17  "tbufName"
+                              MemberName 17(tbufName) 0  "v1"
+                              Name 19  ""
+                              Name 26  "tbufName2"
+                              MemberName 26(tbufName2) 0  "v5"
+                              Name 28  ""
+                              Name 33  "tbufName2"
+                              MemberName 33(tbufName2) 0  "v1PostLayout"
+                              Name 35  ""
+                              Name 43  "specConst"
+                              MemberDecorate 17(tbufName) 0 NonWritable
+                              MemberDecorate 17(tbufName) 0 Offset 16
+                              Decorate 17(tbufName) BufferBlock
+                              Decorate 19 DescriptorSet 3
+                              Decorate 19 Binding 5
+                              MemberDecorate 26(tbufName2) 0 NonWritable
+                              MemberDecorate 26(tbufName2) 0 Offset 0
+                              Decorate 26(tbufName2) BufferBlock
+                              MemberDecorate 33(tbufName2) 0 NonWritable
+                              MemberDecorate 33(tbufName2) 0 Offset 16
+                              Decorate 33(tbufName2) BufferBlock
+                              Decorate 35 DescriptorSet 4
+                              Decorate 35 Binding 7
+                              Decorate 43(specConst) SpecId 17
                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(tbufName):             TypeStruct 7(fvec4)
-              15:             TypePointer Uniform 14(tbufName)
-              16:     15(ptr) Variable Uniform
-              17:             TypeInt 32 1
-              18:     17(int) Constant 0
-              19:             TypePointer Uniform 7(fvec4)
-   23(tbufName2):             TypeStruct 7(fvec4)
-              24:             TypePointer PushConstant 23(tbufName2)
-              25:     24(ptr) Variable PushConstant
-              26:             TypePointer PushConstant 7(fvec4)
-   30(tbufName2):             TypeStruct 7(fvec4)
-              31:             TypePointer Uniform 30(tbufName2)
-              32:     31(ptr) Variable Uniform
-   38(specConst):     17(int) SpecConstant 10
+              14:    6(float) Constant 1073741824
+              15:    7(fvec4) ConstantComposite 14 14 14 14
+    17(tbufName):             TypeStruct 7(fvec4)
+              18:             TypePointer Uniform 17(tbufName)
+              19:     18(ptr) Variable Uniform
+              20:             TypeInt 32 1
+              21:     20(int) Constant 0
+              22:             TypePointer Uniform 7(fvec4)
+   26(tbufName2):             TypeStruct 7(fvec4)
+              27:             TypePointer PushConstant 26(tbufName2)
+              28:     27(ptr) Variable PushConstant
+              29:             TypePointer PushConstant 7(fvec4)
+   33(tbufName2):             TypeStruct 7(fvec4)
+              34:             TypePointer Uniform 33(tbufName2)
+              35:     34(ptr) Variable Uniform
+   43(specConst):     20(int) SpecConstant 10
          4(main):           2 Function None 3
                5:             Label
                               Return
@@ -130,15 +153,19 @@
 11(PixelShaderFunction(vf4;):    7(fvec4) Function None 9
        10(input):      8(ptr) FunctionParameter
               12:             Label
-              13:    7(fvec4) Load 10(input)
-              20:     19(ptr) AccessChain 16 18
-              21:    7(fvec4) Load 20
-              22:    7(fvec4) FAdd 13 21
-              27:     26(ptr) AccessChain 25 18
-              28:    7(fvec4) Load 27
-              29:    7(fvec4) FAdd 22 28
-              33:     19(ptr) AccessChain 32 18
-              34:    7(fvec4) Load 33
-              35:    7(fvec4) FAdd 29 34
-                              ReturnValue 35
+      13(layout):      8(ptr) Variable Function
+                              Store 13(layout) 15
+              16:    7(fvec4) Load 10(input)
+              23:     22(ptr) AccessChain 19 21
+              24:    7(fvec4) Load 23
+              25:    7(fvec4) FAdd 16 24
+              30:     29(ptr) AccessChain 28 21
+              31:    7(fvec4) Load 30
+              32:    7(fvec4) FAdd 25 31
+              36:     22(ptr) AccessChain 35 21
+              37:    7(fvec4) Load 36
+              38:    7(fvec4) Load 13(layout)
+              39:    7(fvec4) FMul 37 38
+              40:    7(fvec4) FAdd 32 39
+                              ReturnValue 40
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.layoutOverride.vert.out b/Test/baseResults/hlsl.layoutOverride.vert.out
new file mode 100755
index 0000000..a6b6939
--- /dev/null
+++ b/Test/baseResults/hlsl.layoutOverride.vert.out
@@ -0,0 +1,104 @@
+hlsl.layoutOverride.vert
+Shader version: 500
+0:? Sequence
+0:5  Function Definition: @main( ( temp 4-component vector of float)
+0:5    Function Parameters: 
+0:?     Sequence
+0:6      Branch: Return with expression
+0:6        texture ( temp 4-component vector of float)
+0:6          Construct combined texture-sampler ( temp sampler2D)
+0:6            'tex' (layout( set=2 binding=0) uniform texture2D)
+0:6            'samp' ( uniform sampler)
+0:?           Constant:
+0:?             0.200000
+0:?             0.300000
+0:5  Function Definition: main( ( temp void)
+0:5    Function Parameters: 
+0:?     Sequence
+0:5      move second child to first child ( temp 4-component vector of float)
+0:?         '@entryPointOutput' ( out 4-component vector of float Position)
+0:5        Function Call: @main( ( temp 4-component vector of float)
+0:?   Linker Objects
+0:?     'tex' (layout( set=2 binding=0) uniform texture2D)
+0:?     'samp' ( uniform sampler)
+0:?     '@entryPointOutput' ( out 4-component vector of float Position)
+
+
+Linked vertex stage:
+
+
+Shader version: 500
+0:? Sequence
+0:5  Function Definition: @main( ( temp 4-component vector of float)
+0:5    Function Parameters: 
+0:?     Sequence
+0:6      Branch: Return with expression
+0:6        texture ( temp 4-component vector of float)
+0:6          Construct combined texture-sampler ( temp sampler2D)
+0:6            'tex' (layout( set=2 binding=0) uniform texture2D)
+0:6            'samp' ( uniform sampler)
+0:?           Constant:
+0:?             0.200000
+0:?             0.300000
+0:5  Function Definition: main( ( temp void)
+0:5    Function Parameters: 
+0:?     Sequence
+0:5      move second child to first child ( temp 4-component vector of float)
+0:?         '@entryPointOutput' ( out 4-component vector of float Position)
+0:5        Function Call: @main( ( temp 4-component vector of float)
+0:?   Linker Objects
+0:?     'tex' (layout( set=2 binding=0) uniform texture2D)
+0:?     'samp' ( uniform sampler)
+0:?     '@entryPointOutput' ( out 4-component vector of float Position)
+
+// Module Version 10000
+// Generated by (magic number): 80006
+// Id's are bound by 32
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4  "main" 30
+                              Source HLSL 500
+                              Name 4  "main"
+                              Name 9  "@main("
+                              Name 13  "tex"
+                              Name 17  "samp"
+                              Name 30  "@entryPointOutput"
+                              Decorate 13(tex) DescriptorSet 2
+                              Decorate 13(tex) Binding 0
+                              Decorate 17(samp) DescriptorSet 0
+                              Decorate 30(@entryPointOutput) BuiltIn Position
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypeFunction 7(fvec4)
+              11:             TypeImage 6(float) 2D sampled format:Unknown
+              12:             TypePointer UniformConstant 11
+         13(tex):     12(ptr) Variable UniformConstant
+              15:             TypeSampler
+              16:             TypePointer UniformConstant 15
+        17(samp):     16(ptr) Variable UniformConstant
+              19:             TypeSampledImage 11
+              21:             TypeVector 6(float) 2
+              22:    6(float) Constant 1045220557
+              23:    6(float) Constant 1050253722
+              24:   21(fvec2) ConstantComposite 22 23
+              25:    6(float) Constant 0
+              29:             TypePointer Output 7(fvec4)
+30(@entryPointOutput):     29(ptr) Variable Output
+         4(main):           2 Function None 3
+               5:             Label
+              31:    7(fvec4) FunctionCall 9(@main()
+                              Store 30(@entryPointOutput) 31
+                              Return
+                              FunctionEnd
+       9(@main():    7(fvec4) Function None 8
+              10:             Label
+              14:          11 Load 13(tex)
+              18:          15 Load 17(samp)
+              20:          19 SampledImage 14 18
+              26:    7(fvec4) ImageSampleExplicitLod 20 24 Lod 25
+                              ReturnValue 26
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.load.2dms.dx10.frag.out b/Test/baseResults/hlsl.load.2dms.dx10.frag.out
index 634b6e8..da4cdd9 100644
--- a/Test/baseResults/hlsl.load.2dms.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.2dms.dx10.frag.out
@@ -1,6 +1,7 @@
 hlsl.load.2dms.dx10.frag
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:28  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:28    Function Parameters: 
@@ -181,6 +182,7 @@
 
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:28  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:28    Function Parameters: 
@@ -356,7 +358,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 130
 
                               Capability Shader
@@ -365,6 +367,7 @@
                               MemoryModel Logical GLSL450
                               EntryPoint Fragment 4  "main" 120 124
                               ExecutionMode 4 OriginUpperLeft
+                              ExecutionMode 4 DepthReplacing
                               Source HLSL 500
                               Name 4  "main"
                               Name 8  "PS_OUTPUT"
diff --git a/Test/baseResults/hlsl.load.array.dx10.frag.out b/Test/baseResults/hlsl.load.array.dx10.frag.out
index 09c05d8..87dac02 100644
--- a/Test/baseResults/hlsl.load.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.array.dx10.frag.out
@@ -1,6 +1,7 @@
 hlsl.load.array.dx10.frag
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:48  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:48    Function Parameters: 
@@ -196,6 +197,7 @@
 
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:48  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:48    Function Parameters: 
@@ -386,7 +388,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 159
 
                               Capability Shader
@@ -396,6 +398,7 @@
                               MemoryModel Logical GLSL450
                               EntryPoint Fragment 4  "main" 104 108
                               ExecutionMode 4 OriginUpperLeft
+                              ExecutionMode 4 DepthReplacing
                               Source HLSL 500
                               Name 4  "main"
                               Name 8  "PS_OUTPUT"
diff --git a/Test/baseResults/hlsl.load.basic.dx10.frag.out b/Test/baseResults/hlsl.load.basic.dx10.frag.out
index 144d1a8..c586fbd 100644
--- a/Test/baseResults/hlsl.load.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.basic.dx10.frag.out
@@ -1,6 +1,7 @@
 hlsl.load.basic.dx10.frag
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:48  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:48    Function Parameters: 
@@ -247,6 +248,7 @@
 
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:48  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:48    Function Parameters: 
@@ -488,7 +490,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 179
 
                               Capability Shader
@@ -498,6 +500,7 @@
                               MemoryModel Logical GLSL450
                               EntryPoint Fragment 4  "main" 133 137
                               ExecutionMode 4 OriginUpperLeft
+                              ExecutionMode 4 DepthReplacing
                               Source HLSL 500
                               Name 4  "main"
                               Name 8  "PS_OUTPUT"
diff --git a/Test/baseResults/hlsl.load.basic.dx10.vert.out b/Test/baseResults/hlsl.load.basic.dx10.vert.out
index e8bcd66..22675e5 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): 80002
+// Generated by (magic number): 80006
 // 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 9f873af..a41374a 100644
--- a/Test/baseResults/hlsl.load.buffer.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.buffer.dx10.frag.out
@@ -1,6 +1,7 @@
 hlsl.load.buffer.dx10.frag
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:24  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:24    Function Parameters: 
@@ -85,6 +86,7 @@
 
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:24  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:24    Function Parameters: 
@@ -164,7 +166,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 72
 
                               Capability Shader
@@ -173,6 +175,7 @@
                               MemoryModel Logical GLSL450
                               EntryPoint Fragment 4  "main" 64 68
                               ExecutionMode 4 OriginUpperLeft
+                              ExecutionMode 4 DepthReplacing
                               Source HLSL 500
                               Name 4  "main"
                               Name 8  "PS_OUTPUT"
diff --git a/Test/baseResults/hlsl.load.buffer.float.dx10.frag.out b/Test/baseResults/hlsl.load.buffer.float.dx10.frag.out
index 085778d..de59dfc 100644
--- a/Test/baseResults/hlsl.load.buffer.float.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.buffer.float.dx10.frag.out
@@ -1,6 +1,7 @@
 hlsl.load.buffer.float.dx10.frag
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:24  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:24    Function Parameters: 
@@ -88,6 +89,7 @@
 
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:24  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:24    Function Parameters: 
@@ -170,7 +172,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 75
 
                               Capability Shader
@@ -179,6 +181,7 @@
                               MemoryModel Logical GLSL450
                               EntryPoint Fragment 4  "main" 67 71
                               ExecutionMode 4 OriginUpperLeft
+                              ExecutionMode 4 DepthReplacing
                               Source HLSL 500
                               Name 4  "main"
                               Name 8  "PS_OUTPUT"
diff --git a/Test/baseResults/hlsl.load.offset.dx10.frag.out b/Test/baseResults/hlsl.load.offset.dx10.frag.out
index 7cd6b01..75809b1 100644
--- a/Test/baseResults/hlsl.load.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.offset.dx10.frag.out
@@ -1,6 +1,7 @@
 hlsl.load.offset.dx10.frag
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:48  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:48    Function Parameters: 
@@ -283,6 +284,7 @@
 
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:48  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:48    Function Parameters: 
@@ -560,7 +562,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 201
 
                               Capability Shader
@@ -571,6 +573,7 @@
                               MemoryModel Logical GLSL450
                               EntryPoint Fragment 4  "main" 155 159
                               ExecutionMode 4 OriginUpperLeft
+                              ExecutionMode 4 DepthReplacing
                               Source HLSL 500
                               Name 4  "main"
                               Name 8  "PS_OUTPUT"
diff --git a/Test/baseResults/hlsl.load.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.load.offsetarray.dx10.frag.out
index df03bfc..70ef14e 100644
--- a/Test/baseResults/hlsl.load.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.offsetarray.dx10.frag.out
@@ -1,6 +1,7 @@
 hlsl.load.offsetarray.dx10.frag
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:48  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:48    Function Parameters: 
@@ -220,6 +221,7 @@
 
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:48  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:48    Function Parameters: 
@@ -434,7 +436,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 174
 
                               Capability Shader
@@ -445,6 +447,7 @@
                               MemoryModel Logical GLSL450
                               EntryPoint Fragment 4  "main" 119 123
                               ExecutionMode 4 OriginUpperLeft
+                              ExecutionMode 4 DepthReplacing
                               Source HLSL 500
                               Name 4  "main"
                               Name 8  "PS_OUTPUT"
diff --git a/Test/baseResults/hlsl.load.rwbuffer.dx10.frag.out b/Test/baseResults/hlsl.load.rwbuffer.dx10.frag.out
index 4bfc56a..d990db1 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): 80002
+// Generated by (magic number): 80006
 // 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 d4960ad..b464870 100644
--- a/Test/baseResults/hlsl.load.rwtexture.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.rwtexture.array.dx10.frag.out
@@ -1,6 +1,7 @@
 hlsl.load.rwtexture.array.dx10.frag
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:40  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:40    Function Parameters: 
@@ -106,6 +107,7 @@
 
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:40  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:40    Function Parameters: 
@@ -206,7 +208,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 119
 
                               Capability Shader
@@ -215,6 +217,7 @@
                               MemoryModel Logical GLSL450
                               EntryPoint Fragment 4  "main" 82 86
                               ExecutionMode 4 OriginUpperLeft
+                              ExecutionMode 4 DepthReplacing
                               Source HLSL 500
                               Name 4  "main"
                               Name 8  "PS_OUTPUT"
diff --git a/Test/baseResults/hlsl.load.rwtexture.dx10.frag.out b/Test/baseResults/hlsl.load.rwtexture.dx10.frag.out
index e86fc35..c106441 100644
--- a/Test/baseResults/hlsl.load.rwtexture.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.rwtexture.dx10.frag.out
@@ -1,6 +1,7 @@
 hlsl.load.rwtexture.dx10.frag
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:40  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:40    Function Parameters: 
@@ -124,6 +125,7 @@
 
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:40  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:40    Function Parameters: 
@@ -242,7 +244,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 132
 
                               Capability Shader
@@ -251,6 +253,7 @@
                               MemoryModel Logical GLSL450
                               EntryPoint Fragment 4  "main" 104 108
                               ExecutionMode 4 OriginUpperLeft
+                              ExecutionMode 4 DepthReplacing
                               Source HLSL 500
                               Name 4  "main"
                               Name 8  "PS_OUTPUT"
diff --git a/Test/baseResults/hlsl.localStructuredBuffer.comp.out b/Test/baseResults/hlsl.localStructuredBuffer.comp.out
index 98257f4..a2b4db0 100644
--- a/Test/baseResults/hlsl.localStructuredBuffer.comp.out
+++ b/Test/baseResults/hlsl.localStructuredBuffer.comp.out
@@ -1,7 +1,11 @@
 hlsl.localStructuredBuffer.comp
+ERROR: 0:3: 'block initializer' : buffer aliasing not yet supported 
+ERROR: 1 compilation errors.  No code generated.
+
+
 Shader version: 500
 local_size = (1, 1, 1)
-0:? Sequence
+ERROR: node is still EOpNull!
 0:2  Function Definition: @main( ( temp void)
 0:2    Function Parameters: 
 0:2  Function Definition: main( ( temp void)
@@ -9,7 +13,7 @@
 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})
+0:?     'srt0' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 
 
 Linked compute stage:
@@ -17,7 +21,7 @@
 
 Shader version: 500
 local_size = (1, 1, 1)
-0:? Sequence
+ERROR: node is still EOpNull!
 0:2  Function Definition: @main( ( temp void)
 0:2    Function Parameters: 
 0:2  Function Definition: main( ( temp void)
@@ -25,40 +29,6 @@
 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})
+0:?     'srt0' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element 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
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/hlsl.logical.binary.frag.out b/Test/baseResults/hlsl.logical.binary.frag.out
index de1b3f3..6fa45b5 100644
--- a/Test/baseResults/hlsl.logical.binary.frag.out
+++ b/Test/baseResults/hlsl.logical.binary.frag.out
@@ -13,12 +13,11 @@
 0:13              'anon@0' (layout( row_major std140) uniform block{ uniform int ival,  uniform 4-component vector of int ival4,  uniform float fval,  uniform 4-component vector of float fval4})
 0:13              Constant:
 0:13                0 (const uint)
-0:13          Convert int to bool ( temp bool)
-0:13            Convert float to int ( temp int)
-0:13              fval: direct index for structure ( uniform float)
-0:13                'anon@0' (layout( row_major std140) uniform block{ uniform int ival,  uniform 4-component vector of int ival4,  uniform float fval,  uniform 4-component vector of float fval4})
-0:13                Constant:
-0:13                  2 (const uint)
+0:13          Convert float to bool ( temp bool)
+0:13            fval: direct index for structure ( uniform float)
+0:13              'anon@0' (layout( row_major std140) uniform block{ uniform int ival,  uniform 4-component vector of int ival4,  uniform float fval,  uniform 4-component vector of float fval4})
+0:13              Constant:
+0:13                2 (const uint)
 0:13        true case is null
 0:14      Test condition and select ( temp void)
 0:14        Condition
@@ -28,12 +27,11 @@
 0:14              'anon@0' (layout( row_major std140) uniform block{ uniform int ival,  uniform 4-component vector of int ival4,  uniform float fval,  uniform 4-component vector of float fval4})
 0:14              Constant:
 0:14                0 (const uint)
-0:14          Convert int to bool ( temp bool)
-0:14            Convert float to int ( temp int)
-0:14              fval: direct index for structure ( uniform float)
-0:14                'anon@0' (layout( row_major std140) uniform block{ uniform int ival,  uniform 4-component vector of int ival4,  uniform float fval,  uniform 4-component vector of float fval4})
-0:14                Constant:
-0:14                  2 (const uint)
+0:14          Convert float to bool ( temp bool)
+0:14            fval: direct index for structure ( uniform float)
+0:14              'anon@0' (layout( row_major std140) uniform block{ uniform int ival,  uniform 4-component vector of int ival4,  uniform float fval,  uniform 4-component vector of float fval4})
+0:14              Constant:
+0:14                2 (const uint)
 0:14        true case is null
 0:17      move second child to first child ( temp 4-component vector of float)
 0:17        Color: direct index for structure ( temp 4-component vector of float)
@@ -79,12 +77,11 @@
 0:13              'anon@0' (layout( row_major std140) uniform block{ uniform int ival,  uniform 4-component vector of int ival4,  uniform float fval,  uniform 4-component vector of float fval4})
 0:13              Constant:
 0:13                0 (const uint)
-0:13          Convert int to bool ( temp bool)
-0:13            Convert float to int ( temp int)
-0:13              fval: direct index for structure ( uniform float)
-0:13                'anon@0' (layout( row_major std140) uniform block{ uniform int ival,  uniform 4-component vector of int ival4,  uniform float fval,  uniform 4-component vector of float fval4})
-0:13                Constant:
-0:13                  2 (const uint)
+0:13          Convert float to bool ( temp bool)
+0:13            fval: direct index for structure ( uniform float)
+0:13              'anon@0' (layout( row_major std140) uniform block{ uniform int ival,  uniform 4-component vector of int ival4,  uniform float fval,  uniform 4-component vector of float fval4})
+0:13              Constant:
+0:13                2 (const uint)
 0:13        true case is null
 0:14      Test condition and select ( temp void)
 0:14        Condition
@@ -94,12 +91,11 @@
 0:14              'anon@0' (layout( row_major std140) uniform block{ uniform int ival,  uniform 4-component vector of int ival4,  uniform float fval,  uniform 4-component vector of float fval4})
 0:14              Constant:
 0:14                0 (const uint)
-0:14          Convert int to bool ( temp bool)
-0:14            Convert float to int ( temp int)
-0:14              fval: direct index for structure ( uniform float)
-0:14                'anon@0' (layout( row_major std140) uniform block{ uniform int ival,  uniform 4-component vector of int ival4,  uniform float fval,  uniform 4-component vector of float fval4})
-0:14                Constant:
-0:14                  2 (const uint)
+0:14          Convert float to bool ( temp bool)
+0:14            fval: direct index for structure ( uniform float)
+0:14              'anon@0' (layout( row_major std140) uniform block{ uniform int ival,  uniform 4-component vector of int ival4,  uniform float fval,  uniform 4-component vector of float fval4})
+0:14              Constant:
+0:14                2 (const uint)
 0:14        true case is null
 0:17      move second child to first child ( temp 4-component vector of float)
 0:17        Color: direct index for structure ( temp 4-component vector of float)
@@ -128,13 +124,13 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80002
-// Id's are bound by 57
+// Generated by (magic number): 80006
+// Id's are bound by 56
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 54
+                              EntryPoint Fragment 4  "main" 53
                               ExecutionMode 4 OriginUpperLeft
                               Source HLSL 500
                               Name 4  "main"
@@ -147,15 +143,15 @@
                               MemberName 14($Global) 2  "fval"
                               MemberName 14($Global) 3  "fval4"
                               Name 16  ""
-                              Name 45  "psout"
-                              Name 54  "@entryPointOutput.Color"
+                              Name 44  "psout"
+                              Name 53  "@entryPointOutput.Color"
                               MemberDecorate 14($Global) 0 Offset 0
                               MemberDecorate 14($Global) 1 Offset 16
                               MemberDecorate 14($Global) 2 Offset 32
                               MemberDecorate 14($Global) 3 Offset 48
                               Decorate 14($Global) Block
                               Decorate 16 DescriptorSet 0
-                              Decorate 54(@entryPointOutput.Color) Location 0
+                              Decorate 53(@entryPointOutput.Color) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -174,29 +170,29 @@
               23:     22(int) Constant 0
               25:     12(int) Constant 2
               26:             TypePointer Uniform 6(float)
-              44:             TypePointer Function 8(PS_OUTPUT)
-              46:    6(float) Constant 1065353216
-              47:    7(fvec4) ConstantComposite 46 46 46 46
-              48:             TypePointer Function 7(fvec4)
-              53:             TypePointer Output 7(fvec4)
-54(@entryPointOutput.Color):     53(ptr) Variable Output
+              29:    6(float) Constant 0
+              43:             TypePointer Function 8(PS_OUTPUT)
+              45:    6(float) Constant 1065353216
+              46:    7(fvec4) ConstantComposite 45 45 45 45
+              47:             TypePointer Function 7(fvec4)
+              52:             TypePointer Output 7(fvec4)
+53(@entryPointOutput.Color):     52(ptr) Variable Output
          4(main):           2 Function None 3
                5:             Label
-              55:8(PS_OUTPUT) FunctionCall 10(@main()
-              56:    7(fvec4) CompositeExtract 55 0
-                              Store 54(@entryPointOutput.Color) 56
+              54:8(PS_OUTPUT) FunctionCall 10(@main()
+              55:    7(fvec4) CompositeExtract 54 0
+                              Store 53(@entryPointOutput.Color) 55
                               Return
                               FunctionEnd
       10(@main():8(PS_OUTPUT) Function None 9
               11:             Label
-       45(psout):     44(ptr) Variable Function
+       44(psout):     43(ptr) Variable Function
               19:     18(ptr) AccessChain 16 17
               20:     12(int) Load 19
               24:    21(bool) INotEqual 20 23
               27:     26(ptr) AccessChain 16 25
               28:    6(float) Load 27
-              29:     12(int) ConvertFToS 28
-              30:    21(bool) INotEqual 29 23
+              30:    21(bool) FOrdNotEqual 28 29
               31:    21(bool) LogicalAnd 24 30
                               SelectionMerge 33 None
                               BranchConditional 31 32 33
@@ -208,16 +204,15 @@
               36:    21(bool) INotEqual 35 23
               37:     26(ptr) AccessChain 16 25
               38:    6(float) Load 37
-              39:     12(int) ConvertFToS 38
-              40:    21(bool) INotEqual 39 23
-              41:    21(bool) LogicalOr 36 40
-                              SelectionMerge 43 None
-                              BranchConditional 41 42 43
-              42:               Label
-                                Branch 43
-              43:             Label
-              49:     48(ptr) AccessChain 45(psout) 17
-                              Store 49 47
-              50:8(PS_OUTPUT) Load 45(psout)
-                              ReturnValue 50
+              39:    21(bool) FOrdNotEqual 38 29
+              40:    21(bool) LogicalOr 36 39
+                              SelectionMerge 42 None
+                              BranchConditional 40 41 42
+              41:               Label
+                                Branch 42
+              42:             Label
+              48:     47(ptr) AccessChain 44(psout) 17
+                              Store 48 46
+              49:8(PS_OUTPUT) Load 44(psout)
+                              ReturnValue 49
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.logical.binary.vec.frag.out b/Test/baseResults/hlsl.logical.binary.vec.frag.out
index 2409b0e..01c8674 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): 80002
+// Generated by (magic number): 80006
 // 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 7d7cbf7..ce18f35 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): 80002
+// Generated by (magic number): 80006
 // 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 733ca26..b98e0dd 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): 80002
+// Generated by (magic number): 80006
 // 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 38282a5..4519bed 100644
--- a/Test/baseResults/hlsl.loopattr.frag.out
+++ b/Test/baseResults/hlsl.loopattr.frag.out
@@ -10,7 +10,7 @@
 0:5          'x' ( temp int)
 0:5          Constant:
 0:5            0 (const int)
-0:5        Loop with condition tested first
+0:5        Loop with condition tested first: Unroll
 0:5          Loop Condition
 0:5          Compare Less Than ( temp bool)
 0:5            'x' ( temp int)
@@ -25,7 +25,7 @@
 0:8          'y' ( temp int)
 0:8          Constant:
 0:8            0 (const int)
-0:8        Loop with condition tested first
+0:8        Loop with condition tested first: DontUnroll
 0:8          Loop Condition
 0:8          Compare Less Than ( temp bool)
 0:8            'y' ( temp int)
@@ -80,7 +80,7 @@
 0:5          'x' ( temp int)
 0:5          Constant:
 0:5            0 (const int)
-0:5        Loop with condition tested first
+0:5        Loop with condition tested first: Unroll
 0:5          Loop Condition
 0:5          Compare Less Than ( temp bool)
 0:5            'x' ( temp int)
@@ -95,7 +95,7 @@
 0:8          'y' ( temp int)
 0:8          Constant:
 0:8            0 (const int)
-0:8        Loop with condition tested first
+0:8        Loop with condition tested first: DontUnroll
 0:8          Loop Condition
 0:8          Compare Less Than ( temp bool)
 0:8            'y' ( temp int)
@@ -136,7 +136,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // 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 74c4fb6..8861d48 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): 80002
+// Generated by (magic number): 80006
 // 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 aff329b..fd38dca 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): 80002
+// Generated by (magic number): 80006
 // 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 1d892b5..58d275c 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): 80002
+// Generated by (magic number): 80006
 // 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 807b8b9..c62ea54 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): 80002
+// Generated by (magic number): 80006
 // 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 1370c19..1b992b9 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): 80002
+// Generated by (magic number): 80006
 // 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 187f5d0..a631e89 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): 80002
+// Generated by (magic number): 80006
 // 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 64c21cd..544d315 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): 80002
+// Generated by (magic number): 80006
 // 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 8d3910c..b7ca498 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): 80002
+// Generated by (magic number): 80006
 // 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 4200373..c3dc7cd 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): 80002
+// Generated by (magic number): 80006
 // 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 0a0219b..a459a7d 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): 80002
+// Generated by (magic number): 80006
 // 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 3c058ea..93a8d02 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): 80002
+// Generated by (magic number): 80006
 // 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 804f3b2..056febc 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): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 61
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.mul-truncate.frag.out b/Test/baseResults/hlsl.mul-truncate.frag.out
new file mode 100644
index 0000000..569b9b4
--- /dev/null
+++ b/Test/baseResults/hlsl.mul-truncate.frag.out
@@ -0,0 +1,684 @@
+hlsl.mul-truncate.frag
+WARNING: 0:24: '' : mul() matrix size mismatch 
+WARNING: 0:25: '' : mul() matrix size mismatch 
+WARNING: 0:28: '' : mul() matrix size mismatch 
+WARNING: 0:29: '' : mul() matrix size mismatch 
+WARNING: 0:32: '' : mul() matrix size mismatch 
+WARNING: 0:33: '' : mul() matrix size mismatch 
+WARNING: 0:34: '' : mul() matrix size mismatch 
+WARNING: 0:35: '' : mul() matrix size mismatch 
+
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:18  Function Definition: @main( ( temp 4-component vector of float)
+0:18    Function Parameters: 
+0:?     Sequence
+0:20      Sequence
+0:20        move second child to first child ( temp float)
+0:20          'r00' ( temp float)
+0:20          dot-product ( temp float)
+0:20            v2: direct index for structure (layout( row_major std140) uniform 2-component vector of float)
+0:20              'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:20              Constant:
+0:20                8 (const uint)
+0:20            Construct vec2 ( in 2-component vector of float)
+0:20              v3: direct index for structure (layout( row_major std140) uniform 3-component vector of float)
+0:20                'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:20                Constant:
+0:20                  7 (const uint)
+0:21      Sequence
+0:21        move second child to first child ( temp float)
+0:21          'r01' ( temp float)
+0:21          dot-product ( temp float)
+0:21            Construct vec2 ( in 2-component vector of float)
+0:21              v4: direct index for structure (layout( row_major std140) uniform 4-component vector of float)
+0:21                'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:21                Constant:
+0:21                  6 (const uint)
+0:21            v2: direct index for structure (layout( row_major std140) uniform 2-component vector of float)
+0:21              'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:21              Constant:
+0:21                8 (const uint)
+0:24      Sequence
+0:24        move second child to first child ( temp 4-component vector of float)
+0:24          'r10' ( temp 4-component vector of float)
+0:24          matrix-times-vector ( temp 4-component vector of float)
+0:24            Construct mat3x4 ( uniform 3X4 matrix of float)
+0:24              m44: direct index for structure (layout( row_major std140) uniform 4X4 matrix of float)
+0:24                'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:24                Constant:
+0:24                  0 (const uint)
+0:24            v3: direct index for structure (layout( row_major std140) uniform 3-component vector of float)
+0:24              'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:24              Constant:
+0:24                7 (const uint)
+0:25      Sequence
+0:25        move second child to first child ( temp 4-component vector of float)
+0:25          'r11' ( temp 4-component vector of float)
+0:25          matrix-times-vector ( temp 4-component vector of float)
+0:25            m34: direct index for structure (layout( row_major std140) uniform 3X4 matrix of float)
+0:25              'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:25              Constant:
+0:25                2 (const uint)
+0:25            Construct vec3 ( uniform 3-component vector of float)
+0:25              v4: direct index for structure (layout( row_major std140) uniform 4-component vector of float)
+0:25                'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:25                Constant:
+0:25                  6 (const uint)
+0:28      Sequence
+0:28        move second child to first child ( temp 4-component vector of float)
+0:28          'r20' ( temp 4-component vector of float)
+0:28          vector-times-matrix ( temp 4-component vector of float)
+0:28            v3: direct index for structure (layout( row_major std140) uniform 3-component vector of float)
+0:28              'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:28              Constant:
+0:28                7 (const uint)
+0:28            Construct mat4x3 ( uniform 4X3 matrix of float)
+0:28              m44: direct index for structure (layout( row_major std140) uniform 4X4 matrix of float)
+0:28                'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:28                Constant:
+0:28                  0 (const uint)
+0:29      Sequence
+0:29        move second child to first child ( temp 4-component vector of float)
+0:29          'r21' ( temp 4-component vector of float)
+0:29          vector-times-matrix ( temp 4-component vector of float)
+0:29            Construct vec3 ( uniform 3-component vector of float)
+0:29              v4: direct index for structure (layout( row_major std140) uniform 4-component vector of float)
+0:29                'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:29                Constant:
+0:29                  6 (const uint)
+0:29            m43: direct index for structure (layout( row_major std140) uniform 4X3 matrix of float)
+0:29              'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:29              Constant:
+0:29                1 (const uint)
+0:32      Sequence
+0:32        move second child to first child ( temp 2X3 matrix of float)
+0:32          'r30' ( temp 2X3 matrix of float)
+0:32          matrix-multiply ( temp 2X3 matrix of float)
+0:32            m33: direct index for structure (layout( row_major std140) uniform 3X3 matrix of float)
+0:32              'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:32              Constant:
+0:32                3 (const uint)
+0:32            Construct mat2x3 ( uniform 2X3 matrix of float)
+0:32              m24: direct index for structure (layout( row_major std140) uniform 2X4 matrix of float)
+0:32                'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:32                Constant:
+0:32                  4 (const uint)
+0:33      Sequence
+0:33        move second child to first child ( temp 3X4 matrix of float)
+0:33          'r31' ( temp 3X4 matrix of float)
+0:33          matrix-multiply ( temp 3X4 matrix of float)
+0:33            m24: direct index for structure (layout( row_major std140) uniform 2X4 matrix of float)
+0:33              'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:33              Constant:
+0:33                4 (const uint)
+0:33            Construct mat3x2 ( uniform 3X2 matrix of float)
+0:33              m33: direct index for structure (layout( row_major std140) uniform 3X3 matrix of float)
+0:33                'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:33                Constant:
+0:33                  3 (const uint)
+0:34      Sequence
+0:34        move second child to first child ( temp 3X2 matrix of float)
+0:34          'r32' ( temp 3X2 matrix of float)
+0:34          matrix-multiply ( temp 3X2 matrix of float)
+0:34            Construct mat3x2 ( uniform 3X2 matrix of float)
+0:34              m42: direct index for structure (layout( row_major std140) uniform 4X2 matrix of float)
+0:34                'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:34                Constant:
+0:34                  5 (const uint)
+0:34            m33: direct index for structure (layout( row_major std140) uniform 3X3 matrix of float)
+0:34              'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:34              Constant:
+0:34                3 (const uint)
+0:35      Sequence
+0:35        move second child to first child ( temp 4X3 matrix of float)
+0:35          'r33' ( temp 4X3 matrix of float)
+0:35          matrix-multiply ( temp 4X3 matrix of float)
+0:35            Construct mat2x3 ( uniform 2X3 matrix of float)
+0:35              m33: direct index for structure (layout( row_major std140) uniform 3X3 matrix of float)
+0:35                'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:35                Constant:
+0:35                  3 (const uint)
+0:35            m42: direct index for structure (layout( row_major std140) uniform 4X2 matrix of float)
+0:35              'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:35              Constant:
+0:35                5 (const uint)
+0:37      Branch: Return with expression
+0:37        add ( temp 4-component vector of float)
+0:37          add ( temp 4-component vector of float)
+0:37            add ( temp 4-component vector of float)
+0:37              add ( temp 4-component vector of float)
+0:37                add ( temp 4-component vector of float)
+0:37                  add ( temp 4-component vector of float)
+0:37                    add ( temp 4-component vector of float)
+0:37                      add ( temp 4-component vector of float)
+0:37                        add ( temp 4-component vector of float)
+0:37                          'r10' ( temp 4-component vector of float)
+0:37                          'r11' ( temp 4-component vector of float)
+0:37                        'r20' ( temp 4-component vector of float)
+0:37                      'r21' ( temp 4-component vector of float)
+0:37                    'r00' ( temp float)
+0:37                  'r01' ( temp float)
+0:37                direct index ( temp float)
+0:37                  direct index ( temp 3-component vector of float)
+0:37                    'r30' ( temp 2X3 matrix of float)
+0:37                    Constant:
+0:37                      0 (const int)
+0:37                  Constant:
+0:37                    0 (const int)
+0:37              direct index ( temp 4-component vector of float)
+0:37                'r31' ( temp 3X4 matrix of float)
+0:37                Constant:
+0:37                  0 (const int)
+0:37            direct index ( temp float)
+0:37              direct index ( temp 2-component vector of float)
+0:37                'r32' ( temp 3X2 matrix of float)
+0:37                Constant:
+0:37                  0 (const int)
+0:37              Constant:
+0:37                0 (const int)
+0:37          direct index ( temp 4-component vector of float)
+0:37            transpose ( temp 3X4 matrix of float)
+0:37              'r33' ( temp 4X3 matrix of float)
+0:37            Constant:
+0:37              0 (const int)
+0:18  Function Definition: main( ( temp void)
+0:18    Function Parameters: 
+0:?     Sequence
+0:18      move second child to first child ( temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:18        Function Call: @main( ( temp 4-component vector of float)
+0:?   Linker Objects
+0:?     'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+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:18  Function Definition: @main( ( temp 4-component vector of float)
+0:18    Function Parameters: 
+0:?     Sequence
+0:20      Sequence
+0:20        move second child to first child ( temp float)
+0:20          'r00' ( temp float)
+0:20          dot-product ( temp float)
+0:20            v2: direct index for structure (layout( row_major std140) uniform 2-component vector of float)
+0:20              'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:20              Constant:
+0:20                8 (const uint)
+0:20            Construct vec2 ( in 2-component vector of float)
+0:20              v3: direct index for structure (layout( row_major std140) uniform 3-component vector of float)
+0:20                'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:20                Constant:
+0:20                  7 (const uint)
+0:21      Sequence
+0:21        move second child to first child ( temp float)
+0:21          'r01' ( temp float)
+0:21          dot-product ( temp float)
+0:21            Construct vec2 ( in 2-component vector of float)
+0:21              v4: direct index for structure (layout( row_major std140) uniform 4-component vector of float)
+0:21                'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:21                Constant:
+0:21                  6 (const uint)
+0:21            v2: direct index for structure (layout( row_major std140) uniform 2-component vector of float)
+0:21              'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:21              Constant:
+0:21                8 (const uint)
+0:24      Sequence
+0:24        move second child to first child ( temp 4-component vector of float)
+0:24          'r10' ( temp 4-component vector of float)
+0:24          matrix-times-vector ( temp 4-component vector of float)
+0:24            Construct mat3x4 ( uniform 3X4 matrix of float)
+0:24              m44: direct index for structure (layout( row_major std140) uniform 4X4 matrix of float)
+0:24                'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:24                Constant:
+0:24                  0 (const uint)
+0:24            v3: direct index for structure (layout( row_major std140) uniform 3-component vector of float)
+0:24              'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:24              Constant:
+0:24                7 (const uint)
+0:25      Sequence
+0:25        move second child to first child ( temp 4-component vector of float)
+0:25          'r11' ( temp 4-component vector of float)
+0:25          matrix-times-vector ( temp 4-component vector of float)
+0:25            m34: direct index for structure (layout( row_major std140) uniform 3X4 matrix of float)
+0:25              'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:25              Constant:
+0:25                2 (const uint)
+0:25            Construct vec3 ( uniform 3-component vector of float)
+0:25              v4: direct index for structure (layout( row_major std140) uniform 4-component vector of float)
+0:25                'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:25                Constant:
+0:25                  6 (const uint)
+0:28      Sequence
+0:28        move second child to first child ( temp 4-component vector of float)
+0:28          'r20' ( temp 4-component vector of float)
+0:28          vector-times-matrix ( temp 4-component vector of float)
+0:28            v3: direct index for structure (layout( row_major std140) uniform 3-component vector of float)
+0:28              'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:28              Constant:
+0:28                7 (const uint)
+0:28            Construct mat4x3 ( uniform 4X3 matrix of float)
+0:28              m44: direct index for structure (layout( row_major std140) uniform 4X4 matrix of float)
+0:28                'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:28                Constant:
+0:28                  0 (const uint)
+0:29      Sequence
+0:29        move second child to first child ( temp 4-component vector of float)
+0:29          'r21' ( temp 4-component vector of float)
+0:29          vector-times-matrix ( temp 4-component vector of float)
+0:29            Construct vec3 ( uniform 3-component vector of float)
+0:29              v4: direct index for structure (layout( row_major std140) uniform 4-component vector of float)
+0:29                'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:29                Constant:
+0:29                  6 (const uint)
+0:29            m43: direct index for structure (layout( row_major std140) uniform 4X3 matrix of float)
+0:29              'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:29              Constant:
+0:29                1 (const uint)
+0:32      Sequence
+0:32        move second child to first child ( temp 2X3 matrix of float)
+0:32          'r30' ( temp 2X3 matrix of float)
+0:32          matrix-multiply ( temp 2X3 matrix of float)
+0:32            m33: direct index for structure (layout( row_major std140) uniform 3X3 matrix of float)
+0:32              'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:32              Constant:
+0:32                3 (const uint)
+0:32            Construct mat2x3 ( uniform 2X3 matrix of float)
+0:32              m24: direct index for structure (layout( row_major std140) uniform 2X4 matrix of float)
+0:32                'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:32                Constant:
+0:32                  4 (const uint)
+0:33      Sequence
+0:33        move second child to first child ( temp 3X4 matrix of float)
+0:33          'r31' ( temp 3X4 matrix of float)
+0:33          matrix-multiply ( temp 3X4 matrix of float)
+0:33            m24: direct index for structure (layout( row_major std140) uniform 2X4 matrix of float)
+0:33              'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:33              Constant:
+0:33                4 (const uint)
+0:33            Construct mat3x2 ( uniform 3X2 matrix of float)
+0:33              m33: direct index for structure (layout( row_major std140) uniform 3X3 matrix of float)
+0:33                'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:33                Constant:
+0:33                  3 (const uint)
+0:34      Sequence
+0:34        move second child to first child ( temp 3X2 matrix of float)
+0:34          'r32' ( temp 3X2 matrix of float)
+0:34          matrix-multiply ( temp 3X2 matrix of float)
+0:34            Construct mat3x2 ( uniform 3X2 matrix of float)
+0:34              m42: direct index for structure (layout( row_major std140) uniform 4X2 matrix of float)
+0:34                'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:34                Constant:
+0:34                  5 (const uint)
+0:34            m33: direct index for structure (layout( row_major std140) uniform 3X3 matrix of float)
+0:34              'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:34              Constant:
+0:34                3 (const uint)
+0:35      Sequence
+0:35        move second child to first child ( temp 4X3 matrix of float)
+0:35          'r33' ( temp 4X3 matrix of float)
+0:35          matrix-multiply ( temp 4X3 matrix of float)
+0:35            Construct mat2x3 ( uniform 2X3 matrix of float)
+0:35              m33: direct index for structure (layout( row_major std140) uniform 3X3 matrix of float)
+0:35                'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:35                Constant:
+0:35                  3 (const uint)
+0:35            m42: direct index for structure (layout( row_major std140) uniform 4X2 matrix of float)
+0:35              'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:35              Constant:
+0:35                5 (const uint)
+0:37      Branch: Return with expression
+0:37        add ( temp 4-component vector of float)
+0:37          add ( temp 4-component vector of float)
+0:37            add ( temp 4-component vector of float)
+0:37              add ( temp 4-component vector of float)
+0:37                add ( temp 4-component vector of float)
+0:37                  add ( temp 4-component vector of float)
+0:37                    add ( temp 4-component vector of float)
+0:37                      add ( temp 4-component vector of float)
+0:37                        add ( temp 4-component vector of float)
+0:37                          'r10' ( temp 4-component vector of float)
+0:37                          'r11' ( temp 4-component vector of float)
+0:37                        'r20' ( temp 4-component vector of float)
+0:37                      'r21' ( temp 4-component vector of float)
+0:37                    'r00' ( temp float)
+0:37                  'r01' ( temp float)
+0:37                direct index ( temp float)
+0:37                  direct index ( temp 3-component vector of float)
+0:37                    'r30' ( temp 2X3 matrix of float)
+0:37                    Constant:
+0:37                      0 (const int)
+0:37                  Constant:
+0:37                    0 (const int)
+0:37              direct index ( temp 4-component vector of float)
+0:37                'r31' ( temp 3X4 matrix of float)
+0:37                Constant:
+0:37                  0 (const int)
+0:37            direct index ( temp float)
+0:37              direct index ( temp 2-component vector of float)
+0:37                'r32' ( temp 3X2 matrix of float)
+0:37                Constant:
+0:37                  0 (const int)
+0:37              Constant:
+0:37                0 (const int)
+0:37          direct index ( temp 4-component vector of float)
+0:37            transpose ( temp 3X4 matrix of float)
+0:37              'r33' ( temp 4X3 matrix of float)
+0:37            Constant:
+0:37              0 (const int)
+0:18  Function Definition: main( ( temp void)
+0:18    Function Parameters: 
+0:?     Sequence
+0:18      move second child to first child ( temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:18        Function Call: @main( ( temp 4-component vector of float)
+0:?   Linker Objects
+0:?     'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4X4 matrix of float m44, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform 2X4 matrix of float m24, layout( row_major std140) uniform 4X2 matrix of float m42, layout( row_major std140) uniform 4-component vector of float v4, layout( row_major std140) uniform 3-component vector of float v3, layout( row_major std140) uniform 2-component vector of float v2})
+0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+// Module Version 10000
+// Generated by (magic number): 80006
+// Id's are bound by 231
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 229
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 500
+                              Name 4  "main"
+                              Name 9  "@main("
+                              Name 12  "r00"
+                              Name 21  "Matrix"
+                              MemberName 21(Matrix) 0  "m44"
+                              MemberName 21(Matrix) 1  "m43"
+                              MemberName 21(Matrix) 2  "m34"
+                              MemberName 21(Matrix) 3  "m33"
+                              MemberName 21(Matrix) 4  "m24"
+                              MemberName 21(Matrix) 5  "m42"
+                              MemberName 21(Matrix) 6  "v4"
+                              MemberName 21(Matrix) 7  "v3"
+                              MemberName 21(Matrix) 8  "v2"
+                              Name 23  ""
+                              Name 37  "r01"
+                              Name 49  "r10"
+                              Name 75  "r11"
+                              Name 87  "r20"
+                              Name 110  "r21"
+                              Name 124  "r30"
+                              Name 144  "r31"
+                              Name 162  "r32"
+                              Name 181  "r33"
+                              Name 229  "@entryPointOutput"
+                              MemberDecorate 21(Matrix) 0 RowMajor
+                              MemberDecorate 21(Matrix) 0 Offset 0
+                              MemberDecorate 21(Matrix) 0 MatrixStride 16
+                              MemberDecorate 21(Matrix) 1 RowMajor
+                              MemberDecorate 21(Matrix) 1 Offset 64
+                              MemberDecorate 21(Matrix) 1 MatrixStride 16
+                              MemberDecorate 21(Matrix) 2 RowMajor
+                              MemberDecorate 21(Matrix) 2 Offset 112
+                              MemberDecorate 21(Matrix) 2 MatrixStride 16
+                              MemberDecorate 21(Matrix) 3 RowMajor
+                              MemberDecorate 21(Matrix) 3 Offset 176
+                              MemberDecorate 21(Matrix) 3 MatrixStride 16
+                              MemberDecorate 21(Matrix) 4 RowMajor
+                              MemberDecorate 21(Matrix) 4 Offset 224
+                              MemberDecorate 21(Matrix) 4 MatrixStride 16
+                              MemberDecorate 21(Matrix) 5 RowMajor
+                              MemberDecorate 21(Matrix) 5 Offset 288
+                              MemberDecorate 21(Matrix) 5 MatrixStride 16
+                              MemberDecorate 21(Matrix) 6 Offset 320
+                              MemberDecorate 21(Matrix) 7 Offset 336
+                              MemberDecorate 21(Matrix) 8 Offset 352
+                              Decorate 21(Matrix) Block
+                              Decorate 23 DescriptorSet 0
+                              Decorate 229(@entryPointOutput) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypeFunction 7(fvec4)
+              11:             TypePointer Function 6(float)
+              13:             TypeMatrix 7(fvec4) 4
+              14:             TypeVector 6(float) 3
+              15:             TypeMatrix 14(fvec3) 4
+              16:             TypeMatrix 7(fvec4) 3
+              17:             TypeMatrix 14(fvec3) 3
+              18:             TypeMatrix 7(fvec4) 2
+              19:             TypeVector 6(float) 2
+              20:             TypeMatrix 19(fvec2) 4
+      21(Matrix):             TypeStruct 13 15 16 17 18 20 7(fvec4) 14(fvec3) 19(fvec2)
+              22:             TypePointer Uniform 21(Matrix)
+              23:     22(ptr) Variable Uniform
+              24:             TypeInt 32 1
+              25:     24(int) Constant 8
+              26:             TypePointer Uniform 19(fvec2)
+              29:     24(int) Constant 7
+              30:             TypePointer Uniform 14(fvec3)
+              38:     24(int) Constant 6
+              39:             TypePointer Uniform 7(fvec4)
+              48:             TypePointer Function 7(fvec4)
+              50:     24(int) Constant 0
+              51:             TypePointer Uniform 13
+              54:    6(float) Constant 1065353216
+              55:    6(float) Constant 0
+              76:     24(int) Constant 2
+              77:             TypePointer Uniform 16
+             117:     24(int) Constant 1
+             118:             TypePointer Uniform 15
+             122:             TypeMatrix 14(fvec3) 2
+             123:             TypePointer Function 122
+             125:     24(int) Constant 3
+             126:             TypePointer Uniform 17
+             129:     24(int) Constant 4
+             130:             TypePointer Uniform 18
+             143:             TypePointer Function 16
+             149:             TypeMatrix 19(fvec2) 3
+             161:             TypePointer Function 149
+             163:     24(int) Constant 5
+             164:             TypePointer Uniform 20
+             180:             TypePointer Function 15
+             209:             TypeInt 32 0
+             210:    209(int) Constant 0
+             228:             TypePointer Output 7(fvec4)
+229(@entryPointOutput):    228(ptr) Variable Output
+         4(main):           2 Function None 3
+               5:             Label
+             230:    7(fvec4) FunctionCall 9(@main()
+                              Store 229(@entryPointOutput) 230
+                              Return
+                              FunctionEnd
+       9(@main():    7(fvec4) Function None 8
+              10:             Label
+         12(r00):     11(ptr) Variable Function
+         37(r01):     11(ptr) Variable Function
+         49(r10):     48(ptr) Variable Function
+         75(r11):     48(ptr) Variable Function
+         87(r20):     48(ptr) Variable Function
+        110(r21):     48(ptr) Variable Function
+        124(r30):    123(ptr) Variable Function
+        144(r31):    143(ptr) Variable Function
+        162(r32):    161(ptr) Variable Function
+        181(r33):    180(ptr) Variable Function
+              27:     26(ptr) AccessChain 23 25
+              28:   19(fvec2) Load 27
+              31:     30(ptr) AccessChain 23 29
+              32:   14(fvec3) Load 31
+              33:    6(float) CompositeExtract 32 0
+              34:    6(float) CompositeExtract 32 1
+              35:   19(fvec2) CompositeConstruct 33 34
+              36:    6(float) Dot 28 35
+                              Store 12(r00) 36
+              40:     39(ptr) AccessChain 23 38
+              41:    7(fvec4) Load 40
+              42:    6(float) CompositeExtract 41 0
+              43:    6(float) CompositeExtract 41 1
+              44:   19(fvec2) CompositeConstruct 42 43
+              45:     26(ptr) AccessChain 23 25
+              46:   19(fvec2) Load 45
+              47:    6(float) Dot 44 46
+                              Store 37(r01) 47
+              52:     51(ptr) AccessChain 23 50
+              53:          13 Load 52
+              56:    6(float) CompositeExtract 53 0 0
+              57:    6(float) CompositeExtract 53 0 1
+              58:    6(float) CompositeExtract 53 0 2
+              59:    6(float) CompositeExtract 53 0 3
+              60:    6(float) CompositeExtract 53 1 0
+              61:    6(float) CompositeExtract 53 1 1
+              62:    6(float) CompositeExtract 53 1 2
+              63:    6(float) CompositeExtract 53 1 3
+              64:    6(float) CompositeExtract 53 2 0
+              65:    6(float) CompositeExtract 53 2 1
+              66:    6(float) CompositeExtract 53 2 2
+              67:    6(float) CompositeExtract 53 2 3
+              68:    7(fvec4) CompositeConstruct 56 57 58 59
+              69:    7(fvec4) CompositeConstruct 60 61 62 63
+              70:    7(fvec4) CompositeConstruct 64 65 66 67
+              71:          16 CompositeConstruct 68 69 70
+              72:     30(ptr) AccessChain 23 29
+              73:   14(fvec3) Load 72
+              74:    7(fvec4) MatrixTimesVector 71 73
+                              Store 49(r10) 74
+              78:     77(ptr) AccessChain 23 76
+              79:          16 Load 78
+              80:     39(ptr) AccessChain 23 38
+              81:    7(fvec4) Load 80
+              82:    6(float) CompositeExtract 81 0
+              83:    6(float) CompositeExtract 81 1
+              84:    6(float) CompositeExtract 81 2
+              85:   14(fvec3) CompositeConstruct 82 83 84
+              86:    7(fvec4) MatrixTimesVector 79 85
+                              Store 75(r11) 86
+              88:     30(ptr) AccessChain 23 29
+              89:   14(fvec3) Load 88
+              90:     51(ptr) AccessChain 23 50
+              91:          13 Load 90
+              92:    6(float) CompositeExtract 91 0 0
+              93:    6(float) CompositeExtract 91 0 1
+              94:    6(float) CompositeExtract 91 0 2
+              95:    6(float) CompositeExtract 91 1 0
+              96:    6(float) CompositeExtract 91 1 1
+              97:    6(float) CompositeExtract 91 1 2
+              98:    6(float) CompositeExtract 91 2 0
+              99:    6(float) CompositeExtract 91 2 1
+             100:    6(float) CompositeExtract 91 2 2
+             101:    6(float) CompositeExtract 91 3 0
+             102:    6(float) CompositeExtract 91 3 1
+             103:    6(float) CompositeExtract 91 3 2
+             104:   14(fvec3) CompositeConstruct 92 93 94
+             105:   14(fvec3) CompositeConstruct 95 96 97
+             106:   14(fvec3) CompositeConstruct 98 99 100
+             107:   14(fvec3) CompositeConstruct 101 102 103
+             108:          15 CompositeConstruct 104 105 106 107
+             109:    7(fvec4) VectorTimesMatrix 89 108
+                              Store 87(r20) 109
+             111:     39(ptr) AccessChain 23 38
+             112:    7(fvec4) Load 111
+             113:    6(float) CompositeExtract 112 0
+             114:    6(float) CompositeExtract 112 1
+             115:    6(float) CompositeExtract 112 2
+             116:   14(fvec3) CompositeConstruct 113 114 115
+             119:    118(ptr) AccessChain 23 117
+             120:          15 Load 119
+             121:    7(fvec4) VectorTimesMatrix 116 120
+                              Store 110(r21) 121
+             127:    126(ptr) AccessChain 23 125
+             128:          17 Load 127
+             131:    130(ptr) AccessChain 23 129
+             132:          18 Load 131
+             133:    6(float) CompositeExtract 132 0 0
+             134:    6(float) CompositeExtract 132 0 1
+             135:    6(float) CompositeExtract 132 0 2
+             136:    6(float) CompositeExtract 132 1 0
+             137:    6(float) CompositeExtract 132 1 1
+             138:    6(float) CompositeExtract 132 1 2
+             139:   14(fvec3) CompositeConstruct 133 134 135
+             140:   14(fvec3) CompositeConstruct 136 137 138
+             141:         122 CompositeConstruct 139 140
+             142:         122 MatrixTimesMatrix 128 141
+                              Store 124(r30) 142
+             145:    130(ptr) AccessChain 23 129
+             146:          18 Load 145
+             147:    126(ptr) AccessChain 23 125
+             148:          17 Load 147
+             150:    6(float) CompositeExtract 148 0 0
+             151:    6(float) CompositeExtract 148 0 1
+             152:    6(float) CompositeExtract 148 1 0
+             153:    6(float) CompositeExtract 148 1 1
+             154:    6(float) CompositeExtract 148 2 0
+             155:    6(float) CompositeExtract 148 2 1
+             156:   19(fvec2) CompositeConstruct 150 151
+             157:   19(fvec2) CompositeConstruct 152 153
+             158:   19(fvec2) CompositeConstruct 154 155
+             159:         149 CompositeConstruct 156 157 158
+             160:          16 MatrixTimesMatrix 146 159
+                              Store 144(r31) 160
+             165:    164(ptr) AccessChain 23 163
+             166:          20 Load 165
+             167:    6(float) CompositeExtract 166 0 0
+             168:    6(float) CompositeExtract 166 0 1
+             169:    6(float) CompositeExtract 166 1 0
+             170:    6(float) CompositeExtract 166 1 1
+             171:    6(float) CompositeExtract 166 2 0
+             172:    6(float) CompositeExtract 166 2 1
+             173:   19(fvec2) CompositeConstruct 167 168
+             174:   19(fvec2) CompositeConstruct 169 170
+             175:   19(fvec2) CompositeConstruct 171 172
+             176:         149 CompositeConstruct 173 174 175
+             177:    126(ptr) AccessChain 23 125
+             178:          17 Load 177
+             179:         149 MatrixTimesMatrix 176 178
+                              Store 162(r32) 179
+             182:    126(ptr) AccessChain 23 125
+             183:          17 Load 182
+             184:    6(float) CompositeExtract 183 0 0
+             185:    6(float) CompositeExtract 183 0 1
+             186:    6(float) CompositeExtract 183 0 2
+             187:    6(float) CompositeExtract 183 1 0
+             188:    6(float) CompositeExtract 183 1 1
+             189:    6(float) CompositeExtract 183 1 2
+             190:   14(fvec3) CompositeConstruct 184 185 186
+             191:   14(fvec3) CompositeConstruct 187 188 189
+             192:         122 CompositeConstruct 190 191
+             193:    164(ptr) AccessChain 23 163
+             194:          20 Load 193
+             195:          15 MatrixTimesMatrix 192 194
+                              Store 181(r33) 195
+             196:    7(fvec4) Load 49(r10)
+             197:    7(fvec4) Load 75(r11)
+             198:    7(fvec4) FAdd 196 197
+             199:    7(fvec4) Load 87(r20)
+             200:    7(fvec4) FAdd 198 199
+             201:    7(fvec4) Load 110(r21)
+             202:    7(fvec4) FAdd 200 201
+             203:    6(float) Load 12(r00)
+             204:    7(fvec4) CompositeConstruct 203 203 203 203
+             205:    7(fvec4) FAdd 202 204
+             206:    6(float) Load 37(r01)
+             207:    7(fvec4) CompositeConstruct 206 206 206 206
+             208:    7(fvec4) FAdd 205 207
+             211:     11(ptr) AccessChain 124(r30) 50 210
+             212:    6(float) Load 211
+             213:    7(fvec4) CompositeConstruct 212 212 212 212
+             214:    7(fvec4) FAdd 208 213
+             215:     48(ptr) AccessChain 144(r31) 50
+             216:    7(fvec4) Load 215
+             217:    7(fvec4) FAdd 214 216
+             218:     11(ptr) AccessChain 162(r32) 50 210
+             219:    6(float) Load 218
+             220:    7(fvec4) CompositeConstruct 219 219 219 219
+             221:    7(fvec4) FAdd 217 220
+             222:          15 Load 181(r33)
+             223:          16 Transpose 222
+             224:    7(fvec4) CompositeExtract 223 0
+             225:    7(fvec4) FAdd 221 224
+                              ReturnValue 225
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.multiDescriptorSet.frag.out b/Test/baseResults/hlsl.multiDescriptorSet.frag.out
index 8311338..75eeda6 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): 80002
+// Generated by (magic number): 80006
 // 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 5ee84b3..69abaf3 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): 80002
+// Generated by (magic number): 80006
 // 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 d00c35e..39bdfcc 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): 80002
+// Generated by (magic number): 80006
 // 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 f86a0a0..98f2206 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): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 54
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.noSemantic.functionality1.comp.out b/Test/baseResults/hlsl.noSemantic.functionality1.comp.out
new file mode 100644
index 0000000..0b6e9eb
--- /dev/null
+++ b/Test/baseResults/hlsl.noSemantic.functionality1.comp.out
@@ -0,0 +1,62 @@
+hlsl.noSemantic.functionality1.comp
+// Module Version 10000
+// Generated by (magic number): 80006
+// Id's are bound by 30
+
+                              Capability Shader
+                              Extension  "SPV_GOOGLE_hlsl_functionality1"
+               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  "Buf"
+                              MemberName 11(Buf) 0  "@data"
+                              Name 13  "Buf"
+                              Name 17  "Buf@count"
+                              MemberName 17(Buf@count) 0  "@count"
+                              Name 19  "Buf@count"
+                              Decorate 10 ArrayStride 16
+                              MemberDecorate 11(Buf) 0 Offset 0
+                              Decorate 11(Buf) BufferBlock
+                              Decorate 13(Buf) DescriptorSet 0
+                              Decorate 13(Buf) Binding 0
+                              MemberDecorate 17(Buf@count) 0 Offset 0
+                              Decorate 17(Buf@count) BufferBlock
+                              Decorate 19(Buf@count) DescriptorSet 0
+                              DecorateId 13(Buf) DecorationHlslCounterBufferGOOGLE 19(Buf@count)
+               2:             TypeVoid
+               3:             TypeFunction 2
+               8:             TypeFloat 32
+               9:             TypeVector 8(float) 4
+              10:             TypeRuntimeArray 9(fvec4)
+         11(Buf):             TypeStruct 10
+              12:             TypePointer Uniform 11(Buf)
+         13(Buf):     12(ptr) Variable Uniform
+              14:             TypeInt 32 1
+              15:     14(int) Constant 0
+              16:             TypeInt 32 0
+   17(Buf@count):             TypeStruct 16(int)
+              18:             TypePointer Uniform 17(Buf@count)
+   19(Buf@count):     18(ptr) Variable Uniform
+              20:             TypePointer Uniform 16(int)
+              22:     16(int) Constant 1
+              23:     16(int) Constant 0
+              25:    8(float) Constant 1065353216
+              26:    9(fvec4) ConstantComposite 25 25 25 25
+              27:             TypePointer Uniform 9(fvec4)
+         4(main):           2 Function None 3
+               5:             Label
+              29:           2 FunctionCall 6(@main()
+                              Return
+                              FunctionEnd
+       6(@main():           2 Function None 3
+               7:             Label
+              21:     20(ptr) AccessChain 19(Buf@count) 15
+              24:     16(int) AtomicIAdd 21 22 23 22
+              28:     27(ptr) AccessChain 13(Buf) 15 24
+                              Store 28 26
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.nonint-index.frag.out b/Test/baseResults/hlsl.nonint-index.frag.out
index f512dbe..10053df 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): 80002
+// Generated by (magic number): 80006
 // 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 d1d99ca..6b0ded8 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): 80002
+// Generated by (magic number): 80006
 // 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 9fcceac..ca93a19 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): 80002
+// Generated by (magic number): 80006
 // 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 3d69af4..82c609e 100644
--- a/Test/baseResults/hlsl.numthreads.comp.out
+++ b/Test/baseResults/hlsl.numthreads.comp.out
@@ -1,20 +1,20 @@
 hlsl.numthreads.comp
 Shader version: 500
-local_size = (4, 4, 2)
+local_size = (1, 4, 8)
 0:? Sequence
 0:4  Function Definition: main(vu3; ( temp void)
 0:4    Function Parameters: 
 0:4      'tid' ( in 3-component vector of uint)
-0:9  Function Definition: @main_aux1(vu3; ( temp void)
+0:9  Function Definition: @main_aux2(vu3; ( temp void)
 0:9    Function Parameters: 
 0:9      'tid' ( in 3-component vector of uint)
-0:9  Function Definition: main_aux1( ( temp void)
+0:9  Function Definition: main_aux2( ( temp void)
 0:9    Function Parameters: 
 0:?     Sequence
 0:9      move second child to first child ( temp 3-component vector of uint)
 0:?         'tid' ( temp 3-component vector of uint)
 0:?         'tid' ( in 3-component vector of uint GlobalInvocationID)
-0:9      Function Call: @main_aux1(vu3; ( temp void)
+0:9      Function Call: @main_aux2(vu3; ( temp void)
 0:?         'tid' ( temp 3-component vector of uint)
 0:?   Linker Objects
 0:?     'tid' ( in 3-component vector of uint GlobalInvocationID)
@@ -24,39 +24,39 @@
 
 
 Shader version: 500
-local_size = (4, 4, 2)
+local_size = (1, 4, 8)
 0:? Sequence
 0:4  Function Definition: main(vu3; ( temp void)
 0:4    Function Parameters: 
 0:4      'tid' ( in 3-component vector of uint)
-0:9  Function Definition: @main_aux1(vu3; ( temp void)
+0:9  Function Definition: @main_aux2(vu3; ( temp void)
 0:9    Function Parameters: 
 0:9      'tid' ( in 3-component vector of uint)
-0:9  Function Definition: main_aux1( ( temp void)
+0:9  Function Definition: main_aux2( ( temp void)
 0:9    Function Parameters: 
 0:?     Sequence
 0:9      move second child to first child ( temp 3-component vector of uint)
 0:?         'tid' ( temp 3-component vector of uint)
 0:?         'tid' ( in 3-component vector of uint GlobalInvocationID)
-0:9      Function Call: @main_aux1(vu3; ( temp void)
+0:9      Function Call: @main_aux2(vu3; ( temp void)
 0:?         'tid' ( temp 3-component vector of uint)
 0:?   Linker Objects
 0:?     'tid' ( in 3-component vector of uint GlobalInvocationID)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 23
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint GLCompute 4  "main_aux1" 18
-                              ExecutionMode 4 LocalSize 4 4 2
+                              EntryPoint GLCompute 4  "main_aux2" 18
+                              ExecutionMode 4 LocalSize 1 4 8
                               Source HLSL 500
-                              Name 4  "main_aux1"
+                              Name 4  "main_aux2"
                               Name 11  "main(vu3;"
                               Name 10  "tid"
-                              Name 14  "@main_aux1(vu3;"
+                              Name 14  "@main_aux2(vu3;"
                               Name 13  "tid"
                               Name 16  "tid"
                               Name 18  "tid"
@@ -70,7 +70,7 @@
                9:             TypeFunction 2 8(ptr)
               17:             TypePointer Input 7(ivec3)
          18(tid):     17(ptr) Variable Input
-    4(main_aux1):           2 Function None 3
+    4(main_aux2):           2 Function None 3
                5:             Label
          16(tid):      8(ptr) Variable Function
        20(param):      8(ptr) Variable Function
@@ -78,7 +78,7 @@
                               Store 16(tid) 19
               21:    7(ivec3) Load 16(tid)
                               Store 20(param) 21
-              22:           2 FunctionCall 14(@main_aux1(vu3;) 20(param)
+              22:           2 FunctionCall 14(@main_aux2(vu3;) 20(param)
                               Return
                               FunctionEnd
    11(main(vu3;):           2 Function None 9
@@ -86,7 +86,7 @@
               12:             Label
                               Return
                               FunctionEnd
-14(@main_aux1(vu3;):           2 Function None 9
+14(@main_aux2(vu3;):           2 Function None 9
          13(tid):      8(ptr) FunctionParameter
               15:             Label
                               Return
diff --git a/Test/baseResults/hlsl.opaque-type-bug.frag.out b/Test/baseResults/hlsl.opaque-type-bug.frag.out
index 95b39b3..6c92fdb 100644
--- a/Test/baseResults/hlsl.opaque-type-bug.frag.out
+++ b/Test/baseResults/hlsl.opaque-type-bug.frag.out
@@ -58,7 +58,7 @@
 0:?     'MyTexture' (layout( binding=0) uniform texture2D)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 27
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.overload.frag.out b/Test/baseResults/hlsl.overload.frag.out
index e2f6773..0141a6b 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): 80002
+// Generated by (magic number): 80006
 // 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 ae67f1e..8d90308 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): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 178
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.partialFlattenLocal.vert.out b/Test/baseResults/hlsl.partialFlattenLocal.vert.out
index 7847c08..104a6e0 100755
--- a/Test/baseResults/hlsl.partialFlattenLocal.vert.out
+++ b/Test/baseResults/hlsl.partialFlattenLocal.vert.out
@@ -7,11 +7,17 @@
 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: direct index for structure ( temp texture2D)
+0:14          'packed' ( temp structure{ temp texture2D tex,  temp 3-element array of 3-component vector of float pos,  temp 2-element array of 2-component vector of float uv,  temp float x,  temp int n})
+0:14          Constant:
+0:14            0 (const int)
 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          pos: direct index for structure ( temp 3-element array of 3-component vector of float)
+0:15            'packed' ( temp structure{ temp texture2D tex,  temp 3-element array of 3-component vector of float pos,  temp 2-element array of 2-component vector of float uv,  temp float x,  temp int n})
+0:15            Constant:
+0:15              1 (const int)
 0:15          Constant:
 0:15            0 (const int)
 0:?         Constant:
@@ -20,18 +26,27 @@
 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          uv: direct index for structure ( temp 2-element array of 2-component vector of float)
+0:16            'packed' ( temp structure{ temp texture2D tex,  temp 3-element array of 3-component vector of float pos,  temp 2-element array of 2-component vector of float uv,  temp float x,  temp int n})
+0:16            Constant:
+0:16              2 (const int)
 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        x: direct index for structure ( temp float)
+0:17          'packed' ( temp structure{ temp texture2D tex,  temp 3-element array of 3-component vector of float pos,  temp 2-element array of 2-component vector of float uv,  temp float x,  temp int n})
+0:17          Constant:
+0:17            3 (const int)
 0:17        Constant:
 0:17          1.000000
 0:18      move second child to first child ( temp int)
-0:?         'packed.n' ( temp int)
+0:18        n: direct index for structure ( temp int)
+0:18          'packed' ( temp structure{ temp texture2D tex,  temp 3-element array of 3-component vector of float pos,  temp 2-element array of 2-component vector of float uv,  temp float x,  temp int n})
+0:18          Constant:
+0:18            4 (const int)
 0:18        Constant:
 0:18          3 (const int)
 0:20      Sequence
@@ -50,7 +65,10 @@
 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                  pos: direct index for structure ( temp 3-element array of 3-component vector of float)
+0:21                    'packed' ( temp structure{ temp texture2D tex,  temp 3-element array of 3-component vector of float pos,  temp 2-element array of 2-component vector of float uv,  temp float x,  temp int n})
+0:21                    Constant:
+0:21                      1 (const int)
 0:21                  'i' ( temp int)
 0:21                Sequence
 0:21                  Constant:
@@ -58,34 +76,27 @@
 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                uv: direct index for structure ( temp 2-element array of 2-component vector of float)
+0:21                  'packed' ( temp structure{ temp texture2D tex,  temp 3-element array of 3-component vector of float pos,  temp 2-element array of 2-component vector of float uv,  temp float x,  temp int n})
+0:21                  Constant:
+0:21                    2 (const int)
 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:24        move second child to first child ( temp structure{ temp texture2D tex,  temp 3-element array of 3-component vector of float pos,  temp 2-element array of 2-component vector of float uv,  temp float x,  temp int n})
+0:24          'packed2' ( temp structure{ temp texture2D tex,  temp 3-element array of 3-component vector of float pos,  temp 2-element array of 2-component vector of float uv,  temp float x,  temp int n})
+0:24          'packed' ( temp structure{ temp texture2D tex,  temp 3-element array of 3-component vector of float pos,  temp 2-element array of 2-component vector of float uv,  temp float x,  temp int n})
 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              pos: direct index for structure ( temp 3-element array of 3-component vector of float)
+0:26                'packed2' ( temp structure{ temp texture2D tex,  temp 3-element array of 3-component vector of float pos,  temp 2-element array of 2-component vector of float uv,  temp float x,  temp int n})
+0:26                Constant:
+0:26                  1 (const int)
 0:26              Constant:
 0:26                0 (const int)
 0:26            Constant:
@@ -116,11 +127,17 @@
 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: direct index for structure ( temp texture2D)
+0:14          'packed' ( temp structure{ temp texture2D tex,  temp 3-element array of 3-component vector of float pos,  temp 2-element array of 2-component vector of float uv,  temp float x,  temp int n})
+0:14          Constant:
+0:14            0 (const int)
 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          pos: direct index for structure ( temp 3-element array of 3-component vector of float)
+0:15            'packed' ( temp structure{ temp texture2D tex,  temp 3-element array of 3-component vector of float pos,  temp 2-element array of 2-component vector of float uv,  temp float x,  temp int n})
+0:15            Constant:
+0:15              1 (const int)
 0:15          Constant:
 0:15            0 (const int)
 0:?         Constant:
@@ -129,18 +146,27 @@
 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          uv: direct index for structure ( temp 2-element array of 2-component vector of float)
+0:16            'packed' ( temp structure{ temp texture2D tex,  temp 3-element array of 3-component vector of float pos,  temp 2-element array of 2-component vector of float uv,  temp float x,  temp int n})
+0:16            Constant:
+0:16              2 (const int)
 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        x: direct index for structure ( temp float)
+0:17          'packed' ( temp structure{ temp texture2D tex,  temp 3-element array of 3-component vector of float pos,  temp 2-element array of 2-component vector of float uv,  temp float x,  temp int n})
+0:17          Constant:
+0:17            3 (const int)
 0:17        Constant:
 0:17          1.000000
 0:18      move second child to first child ( temp int)
-0:?         'packed.n' ( temp int)
+0:18        n: direct index for structure ( temp int)
+0:18          'packed' ( temp structure{ temp texture2D tex,  temp 3-element array of 3-component vector of float pos,  temp 2-element array of 2-component vector of float uv,  temp float x,  temp int n})
+0:18          Constant:
+0:18            4 (const int)
 0:18        Constant:
 0:18          3 (const int)
 0:20      Sequence
@@ -159,7 +185,10 @@
 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                  pos: direct index for structure ( temp 3-element array of 3-component vector of float)
+0:21                    'packed' ( temp structure{ temp texture2D tex,  temp 3-element array of 3-component vector of float pos,  temp 2-element array of 2-component vector of float uv,  temp float x,  temp int n})
+0:21                    Constant:
+0:21                      1 (const int)
 0:21                  'i' ( temp int)
 0:21                Sequence
 0:21                  Constant:
@@ -167,34 +196,27 @@
 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                uv: direct index for structure ( temp 2-element array of 2-component vector of float)
+0:21                  'packed' ( temp structure{ temp texture2D tex,  temp 3-element array of 3-component vector of float pos,  temp 2-element array of 2-component vector of float uv,  temp float x,  temp int n})
+0:21                  Constant:
+0:21                    2 (const int)
 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:24        move second child to first child ( temp structure{ temp texture2D tex,  temp 3-element array of 3-component vector of float pos,  temp 2-element array of 2-component vector of float uv,  temp float x,  temp int n})
+0:24          'packed2' ( temp structure{ temp texture2D tex,  temp 3-element array of 3-component vector of float pos,  temp 2-element array of 2-component vector of float uv,  temp float x,  temp int n})
+0:24          'packed' ( temp structure{ temp texture2D tex,  temp 3-element array of 3-component vector of float pos,  temp 2-element array of 2-component vector of float uv,  temp float x,  temp int n})
 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              pos: direct index for structure ( temp 3-element array of 3-component vector of float)
+0:26                'packed2' ( temp structure{ temp texture2D tex,  temp 3-element array of 3-component vector of float pos,  temp 2-element array of 2-component vector of float uv,  temp float x,  temp int n})
+0:26                Constant:
+0:26                  1 (const int)
 0:26              Constant:
 0:26                0 (const int)
 0:26            Constant:
@@ -215,36 +237,34 @@
 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
+// Generated by (magic number): 80006
+// Id's are bound by 90
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Vertex 4  "main" 90 93
+                              EntryPoint Vertex 4  "main" 83 86
                               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
+                              Name 22  "Packed"
+                              MemberName 22(Packed) 0  "tex"
+                              MemberName 22(Packed) 1  "pos"
+                              MemberName 22(Packed) 2  "uv"
+                              MemberName 22(Packed) 3  "x"
+                              MemberName 22(Packed) 4  "n"
+                              Name 24  "packed"
+                              Name 27  "tex"
+                              Name 47  "i"
+                              Name 69  "packed2"
+                              Name 81  "pos"
+                              Name 83  "pos"
+                              Name 86  "@entryPointOutput"
+                              Name 87  "param"
+                              Decorate 27(tex) DescriptorSet 0
+                              Decorate 83(pos) Location 0
+                              Decorate 86(@entryPointOutput) BuiltIn Position
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -252,115 +272,104 @@
                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
+              14:             TypeVector 6(float) 3
+              15:             TypeInt 32 0
+              16:     15(int) Constant 3
+              17:             TypeArray 14(fvec3) 16
+              18:             TypeVector 6(float) 2
+              19:     15(int) Constant 2
+              20:             TypeArray 18(fvec2) 19
+              21:             TypeInt 32 1
+      22(Packed):             TypeStruct 13 17 20 6(float) 21(int)
+              23:             TypePointer Function 22(Packed)
+              25:     21(int) Constant 0
+              26:             TypePointer UniformConstant 13
+         27(tex):     26(ptr) Variable UniformConstant
+              29:             TypePointer Function 13
+              31:     21(int) Constant 1
+              32:    6(float) Constant 0
+              33:   14(fvec3) ConstantComposite 32 32 32
+              34:             TypePointer Function 14(fvec3)
+              36:     21(int) Constant 2
+              37:    6(float) Constant 1065353216
+              38:   18(fvec2) ConstantComposite 32 37
+              39:             TypePointer Function 18(fvec2)
+              41:     21(int) Constant 3
+              42:             TypePointer Function 6(float)
+              44:     21(int) Constant 4
+              45:             TypePointer Function 21(int)
+              54:             TypeBool
+              82:             TypePointer Input 7(fvec4)
+         83(pos):     82(ptr) Variable Input
+              85:             TypePointer Output 7(fvec4)
+86(@entryPointOutput):     85(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
+         81(pos):      8(ptr) Variable Function
+       87(param):      8(ptr) Variable Function
+              84:    7(fvec4) Load 83(pos)
+                              Store 81(pos) 84
+              88:    7(fvec4) Load 81(pos)
+                              Store 87(param) 88
+              89:    7(fvec4) FunctionCall 11(@main(vf4;) 87(param)
+                              Store 86(@entryPointOutput) 89
                               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
+      24(packed):     23(ptr) Variable Function
+           47(i):     45(ptr) Variable Function
+     69(packed2):     23(ptr) Variable Function
+              28:          13 Load 27(tex)
+              30:     29(ptr) AccessChain 24(packed) 25
                               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
+              35:     34(ptr) AccessChain 24(packed) 31 25
+                              Store 35 33
+              40:     39(ptr) AccessChain 24(packed) 36 25
+                              Store 40 38
+              43:     42(ptr) AccessChain 24(packed) 41
+                              Store 43 37
+              46:     45(ptr) AccessChain 24(packed) 44
+                              Store 46 41
+                              Store 47(i) 25
+                              Branch 48
               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
+                              LoopMerge 50 51 None
+                              Branch 52
+              52:             Label
+              53:     21(int) Load 47(i)
+              55:    54(bool) SLessThan 53 31
+                              BranchConditional 55 49 50
+              49:               Label
+              56:     21(int)   Load 47(i)
+              57:     21(int)   Load 47(i)
+              58:     39(ptr)   AccessChain 24(packed) 36 57
+              59:   18(fvec2)   Load 58
+              60:     34(ptr)   AccessChain 24(packed) 31 56
+              61:   14(fvec3)   Load 60
+              62:   18(fvec2)   VectorShuffle 61 61 0 1
+              63:   18(fvec2)   FAdd 62 59
+              64:     34(ptr)   AccessChain 24(packed) 31 56
+              65:   14(fvec3)   Load 64
+              66:   14(fvec3)   VectorShuffle 65 63 3 4 2
+                                Store 64 66
+                                Branch 51
+              51:               Label
+              67:     21(int)   Load 47(i)
+              68:     21(int)   IAdd 67 31
+                                Store 47(i) 68
+                                Branch 48
+              50:             Label
+              70:  22(Packed) Load 24(packed)
+                              Store 69(packed2) 70
+              71:    7(fvec4) Load 10(pos)
+              72:     34(ptr) AccessChain 69(packed2) 31 25
+              73:   14(fvec3) Load 72
+              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 32
+              78:    7(fvec4) FAdd 71 77
+                              ReturnValue 78
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.partialFlattenMixed.vert.out b/Test/baseResults/hlsl.partialFlattenMixed.vert.out
index 50c8cb9..ec91076 100755
--- a/Test/baseResults/hlsl.partialFlattenMixed.vert.out
+++ b/Test/baseResults/hlsl.partialFlattenMixed.vert.out
@@ -9,13 +9,19 @@
 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            membTex: direct index for structure ( temp 2-element array of texture2D)
+0:13              'packed' ( temp structure{ temp int a,  temp 2-element array of texture2D membTex,  temp int b})
+0:13              Constant:
+0:13                1 (const int)
 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            membTex: direct index for structure ( temp 2-element array of texture2D)
+0:13              'packed' ( temp structure{ temp int a,  temp 2-element array of texture2D membTex,  temp int b})
+0:13              Constant:
+0:13                1 (const int)
 0:13            Constant:
 0:13              1 (const int)
 0:?           'tex[1]' ( uniform texture2D)
@@ -50,13 +56,19 @@
 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            membTex: direct index for structure ( temp 2-element array of texture2D)
+0:13              'packed' ( temp structure{ temp int a,  temp 2-element array of texture2D membTex,  temp int b})
+0:13              Constant:
+0:13                1 (const int)
 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            membTex: direct index for structure ( temp 2-element array of texture2D)
+0:13              'packed' ( temp structure{ temp int a,  temp 2-element array of texture2D membTex,  temp int b})
+0:13              Constant:
+0:13                1 (const int)
 0:13            Constant:
 0:13              1 (const int)
 0:?           'tex[1]' ( uniform texture2D)
@@ -79,72 +91,77 @@
 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
+// Generated by (magic number): 80006
+// Id's are bound by 43
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Vertex 4  "main" 35 38
+                              EntryPoint Vertex 4  "main" 36 39
                               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
+                              Name 18  "Packed"
+                              MemberName 18(Packed) 0  "a"
+                              MemberName 18(Packed) 1  "membTex"
+                              MemberName 18(Packed) 2  "b"
+                              Name 20  "packed"
+                              Name 24  "tex[0]"
+                              Name 28  "tex[1]"
+                              Name 34  "pos"
+                              Name 36  "pos"
+                              Name 39  "@entryPointOutput"
+                              Name 40  "param"
+                              Decorate 24(tex[0]) DescriptorSet 0
+                              Decorate 28(tex[1]) DescriptorSet 0
+                              Decorate 36(pos) Location 0
+                              Decorate 39(@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
+              13:             TypeInt 32 1
+              14:             TypeImage 6(float) 2D sampled format:Unknown
+              15:             TypeInt 32 0
+              16:     15(int) Constant 2
+              17:             TypeArray 14 16
+      18(Packed):             TypeStruct 13(int) 17 13(int)
+              19:             TypePointer Function 18(Packed)
+              21:     13(int) Constant 1
+              22:     13(int) Constant 0
+              23:             TypePointer UniformConstant 14
+      24(tex[0]):     23(ptr) Variable UniformConstant
+              26:             TypePointer Function 14
+      28(tex[1]):     23(ptr) Variable UniformConstant
+              35:             TypePointer Input 7(fvec4)
+         36(pos):     35(ptr) Variable Input
+              38:             TypePointer Output 7(fvec4)
+39(@entryPointOutput):     38(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
+         34(pos):      8(ptr) Variable Function
+       40(param):      8(ptr) Variable Function
+              37:    7(fvec4) Load 36(pos)
+                              Store 34(pos) 37
+              41:    7(fvec4) Load 34(pos)
+                              Store 40(param) 41
+              42:    7(fvec4) FunctionCall 11(@main(vf4;) 40(param)
+                              Store 39(@entryPointOutput) 42
                               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
+      20(packed):     19(ptr) Variable Function
+              25:          14 Load 24(tex[0])
+              27:     26(ptr) AccessChain 20(packed) 21 22
+                              Store 27 25
+              29:          14 Load 28(tex[1])
+              30:     26(ptr) AccessChain 20(packed) 21 21
+                              Store 30 29
+              31:    7(fvec4) Load 10(pos)
+                              ReturnValue 31
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.partialInit.frag.out b/Test/baseResults/hlsl.partialInit.frag.out
index c0882fd..f79e5da 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): 80002
+// Generated by (magic number): 80006
 // 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 864df87..83ba603 100644
--- a/Test/baseResults/hlsl.pp.line.frag.out
+++ b/Test/baseResults/hlsl.pp.line.frag.out
@@ -1,6 +1,7 @@
 hlsl.pp.line.frag
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:4  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:4    Function Parameters: 
@@ -62,6 +63,7 @@
 
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:4  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:4    Function Parameters: 
@@ -118,7 +120,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 42
 
                               Capability Shader
@@ -126,6 +128,7 @@
                               MemoryModel Logical GLSL450
                               EntryPoint Fragment 4  "main" 35 39
                               ExecutionMode 4 OriginUpperLeft
+                              ExecutionMode 4 DepthReplacing
                               Source HLSL 500
                               Name 4  "main"
                               Name 8  "PS_OUTPUT"
diff --git a/Test/baseResults/hlsl.pp.vert.out b/Test/baseResults/hlsl.pp.vert.out
index 4282184..91f5591 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): 80002
+// Generated by (magic number): 80006
 // 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 0c898cc..ba6961a 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): 80002
+// Generated by (magic number): 80006
 // 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 343240f..7af669a 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): 80002
+// Generated by (magic number): 80006
 // 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 66da1d6..69cbc66 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): 80002
+// Generated by (magic number): 80006
 // 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 cbcd66f..a2c96f0 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): 80002
+// Generated by (magic number): 80006
 // 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 2d4bd6e..6b6743a 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): 80002
+// Generated by (magic number): 80006
 // 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 bc91ad9..44c1a24 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): 80002
+// Generated by (magic number): 80006
 // 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 ac0e44e..b89d784 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): 80002
+// Generated by (magic number): 80006
 // 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 5383959..bdad6ca 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): 80002
+// Generated by (magic number): 80006
 // 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 ae84db0..211e3af 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): 80002
+// Generated by (magic number): 80006
 // 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 c92eedc..b8ed997 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): 80002
+// Generated by (magic number): 80006
 // 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 f8409f7..25c7bb4 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): 80002
+// Generated by (magic number): 80006
 // 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 484fd90..be584b4 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): 80002
+// Generated by (magic number): 80006
 // 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 f8098a5..d8836c5 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): 80002
+// Generated by (magic number): 80006
 // 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 42e45fc..a967df6 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): 80002
+// Generated by (magic number): 80006
 // 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 57f2e5f..809c5cf 100644
--- a/Test/baseResults/hlsl.sample.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.sample.array.dx10.frag.out
@@ -1,6 +1,7 @@
 hlsl.sample.array.dx10.frag
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:24  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:24    Function Parameters: 
@@ -163,6 +164,7 @@
 
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:24  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:24    Function Parameters: 
@@ -320,7 +322,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 146
 
                               Capability Shader
@@ -330,6 +332,7 @@
                               MemoryModel Logical GLSL450
                               EntryPoint Fragment 4  "main" 138 142
                               ExecutionMode 4 OriginUpperLeft
+                              ExecutionMode 4 DepthReplacing
                               Source HLSL 500
                               Name 4  "main"
                               Name 8  "PS_OUTPUT"
diff --git a/Test/baseResults/hlsl.sample.basic.dx10.frag.out b/Test/baseResults/hlsl.sample.basic.dx10.frag.out
index 56bb39a..733f1dd 100644
--- a/Test/baseResults/hlsl.sample.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.sample.basic.dx10.frag.out
@@ -3,6 +3,7 @@
 
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:53  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:53    Function Parameters: 
@@ -278,6 +279,7 @@
 
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:53  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:53    Function Parameters: 
@@ -548,7 +550,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 198
 
                               Capability Shader
@@ -557,6 +559,7 @@
                               MemoryModel Logical GLSL450
                               EntryPoint Fragment 4  "main" 188 192
                               ExecutionMode 4 OriginUpperLeft
+                              ExecutionMode 4 DepthReplacing
                               Source HLSL 500
                               Name 4  "main"
                               Name 8  "PS_OUTPUT"
diff --git a/Test/baseResults/hlsl.sample.offset.dx10.frag.out b/Test/baseResults/hlsl.sample.offset.dx10.frag.out
index e57f839..862150b 100644
--- a/Test/baseResults/hlsl.sample.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.sample.offset.dx10.frag.out
@@ -1,6 +1,7 @@
 hlsl.sample.offset.dx10.frag
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:28  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:28    Function Parameters: 
@@ -184,6 +185,7 @@
 
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:28  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:28    Function Parameters: 
@@ -362,7 +364,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 161
 
                               Capability Shader
@@ -371,6 +373,7 @@
                               MemoryModel Logical GLSL450
                               EntryPoint Fragment 4  "main" 144 148
                               ExecutionMode 4 OriginUpperLeft
+                              ExecutionMode 4 DepthReplacing
                               Source HLSL 500
                               Name 4  "main"
                               Name 8  "PS_OUTPUT"
diff --git a/Test/baseResults/hlsl.sample.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.sample.offsetarray.dx10.frag.out
index ad07c15..04dd8a7 100644
--- a/Test/baseResults/hlsl.sample.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.sample.offsetarray.dx10.frag.out
@@ -1,6 +1,7 @@
 hlsl.sample.offsetarray.dx10.frag
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:20  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:20    Function Parameters: 
@@ -139,6 +140,7 @@
 
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:20  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:20    Function Parameters: 
@@ -272,7 +274,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 118
 
                               Capability Shader
@@ -281,6 +283,7 @@
                               MemoryModel Logical GLSL450
                               EntryPoint Fragment 4  "main" 110 114
                               ExecutionMode 4 OriginUpperLeft
+                              ExecutionMode 4 DepthReplacing
                               Source HLSL 500
                               Name 4  "main"
                               Name 8  "PS_OUTPUT"
diff --git a/Test/baseResults/hlsl.sample.sub-vec4.dx10.frag.out b/Test/baseResults/hlsl.sample.sub-vec4.dx10.frag.out
index 5213a03..efc3225 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): 80002
+// Generated by (magic number): 80006
 // 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 8535c2c..d44fa3a 100644
--- a/Test/baseResults/hlsl.samplebias.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplebias.array.dx10.frag.out
@@ -1,6 +1,7 @@
 hlsl.samplebias.array.dx10.frag
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:24  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:24    Function Parameters: 
@@ -181,6 +182,7 @@
 
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:24  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:24    Function Parameters: 
@@ -356,7 +358,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 146
 
                               Capability Shader
@@ -366,6 +368,7 @@
                               MemoryModel Logical GLSL450
                               EntryPoint Fragment 4  "main" 138 142
                               ExecutionMode 4 OriginUpperLeft
+                              ExecutionMode 4 DepthReplacing
                               Source HLSL 500
                               Name 4  "main"
                               Name 8  "PS_OUTPUT"
diff --git a/Test/baseResults/hlsl.samplebias.basic.dx10.frag.out b/Test/baseResults/hlsl.samplebias.basic.dx10.frag.out
index 919fb80..d8da49f 100644
--- a/Test/baseResults/hlsl.samplebias.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplebias.basic.dx10.frag.out
@@ -1,6 +1,7 @@
 hlsl.samplebias.basic.dx10.frag
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:28  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:28    Function Parameters: 
@@ -214,6 +215,7 @@
 
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:28  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:28    Function Parameters: 
@@ -422,7 +424,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 170
 
                               Capability Shader
@@ -431,6 +433,7 @@
                               MemoryModel Logical GLSL450
                               EntryPoint Fragment 4  "main" 162 166
                               ExecutionMode 4 OriginUpperLeft
+                              ExecutionMode 4 DepthReplacing
                               Source HLSL 500
                               Name 4  "main"
                               Name 8  "PS_OUTPUT"
diff --git a/Test/baseResults/hlsl.samplebias.offset.dx10.frag.out b/Test/baseResults/hlsl.samplebias.offset.dx10.frag.out
index 7972bff..997a4b5 100644
--- a/Test/baseResults/hlsl.samplebias.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplebias.offset.dx10.frag.out
@@ -1,6 +1,7 @@
 hlsl.samplebias.offset.dx10.frag
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:28  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:28    Function Parameters: 
@@ -202,6 +203,7 @@
 
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:28  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:28    Function Parameters: 
@@ -398,7 +400,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 161
 
                               Capability Shader
@@ -407,6 +409,7 @@
                               MemoryModel Logical GLSL450
                               EntryPoint Fragment 4  "main" 144 148
                               ExecutionMode 4 OriginUpperLeft
+                              ExecutionMode 4 DepthReplacing
                               Source HLSL 500
                               Name 4  "main"
                               Name 8  "PS_OUTPUT"
diff --git a/Test/baseResults/hlsl.samplebias.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.samplebias.offsetarray.dx10.frag.out
index 6e2bc7d..f026ca8 100644
--- a/Test/baseResults/hlsl.samplebias.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplebias.offsetarray.dx10.frag.out
@@ -1,6 +1,7 @@
 hlsl.samplebias.offsetarray.dx10.frag
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:20  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:20    Function Parameters: 
@@ -151,6 +152,7 @@
 
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:20  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:20    Function Parameters: 
@@ -296,7 +298,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 118
 
                               Capability Shader
@@ -305,6 +307,7 @@
                               MemoryModel Logical GLSL450
                               EntryPoint Fragment 4  "main" 110 114
                               ExecutionMode 4 OriginUpperLeft
+                              ExecutionMode 4 DepthReplacing
                               Source HLSL 500
                               Name 4  "main"
                               Name 8  "PS_OUTPUT"
diff --git a/Test/baseResults/hlsl.samplecmp.array.dx10.frag.out b/Test/baseResults/hlsl.samplecmp.array.dx10.frag.out
index 5a61639..2e8f86e 100644
--- a/Test/baseResults/hlsl.samplecmp.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplecmp.array.dx10.frag.out
@@ -1,6 +1,7 @@
 hlsl.samplecmp.array.dx10.frag
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:38  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:38    Function Parameters: 
@@ -201,6 +202,7 @@
 
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:38  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:38    Function Parameters: 
@@ -396,7 +398,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 209
 
                               Capability Shader
@@ -406,6 +408,7 @@
                               MemoryModel Logical GLSL450
                               EntryPoint Fragment 4  "main" 166 170
                               ExecutionMode 4 OriginUpperLeft
+                              ExecutionMode 4 DepthReplacing
                               Source HLSL 500
                               Name 4  "main"
                               Name 8  "PS_OUTPUT"
diff --git a/Test/baseResults/hlsl.samplecmp.basic.dx10.frag.out b/Test/baseResults/hlsl.samplecmp.basic.dx10.frag.out
index 729dc36..5304e5a 100644
--- a/Test/baseResults/hlsl.samplecmp.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplecmp.basic.dx10.frag.out
@@ -1,6 +1,7 @@
 hlsl.samplecmp.basic.dx10.frag
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:38  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:38    Function Parameters: 
@@ -192,6 +193,7 @@
 
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:38  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:38    Function Parameters: 
@@ -378,7 +380,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 198
 
                               Capability Shader
@@ -388,6 +390,7 @@
                               MemoryModel Logical GLSL450
                               EntryPoint Fragment 4  "main" 155 159
                               ExecutionMode 4 OriginUpperLeft
+                              ExecutionMode 4 DepthReplacing
                               Source HLSL 500
                               Name 4  "main"
                               Name 8  "PS_OUTPUT"
diff --git a/Test/baseResults/hlsl.samplecmp.dualmode.frag.out b/Test/baseResults/hlsl.samplecmp.dualmode.frag.out
index 4ac0d77..d8c7d04 100644
--- a/Test/baseResults/hlsl.samplecmp.dualmode.frag.out
+++ b/Test/baseResults/hlsl.samplecmp.dualmode.frag.out
@@ -85,7 +85,7 @@
 0:?     'g_tTex' (layout( binding=3) uniform texture1D)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 43
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplecmp.offset.dx10.frag.out b/Test/baseResults/hlsl.samplecmp.offset.dx10.frag.out
index 5b59ab8..ae0bd68 100644
--- a/Test/baseResults/hlsl.samplecmp.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplecmp.offset.dx10.frag.out
@@ -1,6 +1,7 @@
 hlsl.samplecmp.offset.dx10.frag
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:38  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:38    Function Parameters: 
@@ -165,6 +166,7 @@
 
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:38  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:38    Function Parameters: 
@@ -324,7 +326,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 167
 
                               Capability Shader
@@ -334,6 +336,7 @@
                               MemoryModel Logical GLSL450
                               EntryPoint Fragment 4  "main" 115 119
                               ExecutionMode 4 OriginUpperLeft
+                              ExecutionMode 4 DepthReplacing
                               Source HLSL 500
                               Name 4  "main"
                               Name 8  "PS_OUTPUT"
diff --git a/Test/baseResults/hlsl.samplecmp.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.samplecmp.offsetarray.dx10.frag.out
index a2a9904..045523f 100644
--- a/Test/baseResults/hlsl.samplecmp.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplecmp.offsetarray.dx10.frag.out
@@ -1,6 +1,7 @@
 hlsl.samplecmp.offsetarray.dx10.frag
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:38  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:38    Function Parameters: 
@@ -171,6 +172,7 @@
 
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:38  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:38    Function Parameters: 
@@ -336,7 +338,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 178
 
                               Capability Shader
@@ -346,6 +348,7 @@
                               MemoryModel Logical GLSL450
                               EntryPoint Fragment 4  "main" 126 130
                               ExecutionMode 4 OriginUpperLeft
+                              ExecutionMode 4 DepthReplacing
                               Source HLSL 500
                               Name 4  "main"
                               Name 8  "PS_OUTPUT"
diff --git a/Test/baseResults/hlsl.samplecmplevelzero.array.dx10.frag.out b/Test/baseResults/hlsl.samplecmplevelzero.array.dx10.frag.out
index ea7cc5e..8c860e7 100644
--- a/Test/baseResults/hlsl.samplecmplevelzero.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplecmplevelzero.array.dx10.frag.out
@@ -1,6 +1,7 @@
 hlsl.samplecmplevelzero.array.dx10.frag
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:38  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:38    Function Parameters: 
@@ -219,6 +220,7 @@
 
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:38  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:38    Function Parameters: 
@@ -432,7 +434,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 210
 
                               Capability Shader
@@ -442,6 +444,7 @@
                               MemoryModel Logical GLSL450
                               EntryPoint Fragment 4  "main" 167 171
                               ExecutionMode 4 OriginUpperLeft
+                              ExecutionMode 4 DepthReplacing
                               Source HLSL 500
                               Name 4  "main"
                               Name 8  "PS_OUTPUT"
diff --git a/Test/baseResults/hlsl.samplecmplevelzero.basic.dx10.frag.out b/Test/baseResults/hlsl.samplecmplevelzero.basic.dx10.frag.out
index 278aad5..568cb82 100644
--- a/Test/baseResults/hlsl.samplecmplevelzero.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplecmplevelzero.basic.dx10.frag.out
@@ -1,6 +1,7 @@
 hlsl.samplecmplevelzero.basic.dx10.frag
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:38  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:38    Function Parameters: 
@@ -210,6 +211,7 @@
 
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:38  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:38    Function Parameters: 
@@ -414,7 +416,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 199
 
                               Capability Shader
@@ -424,6 +426,7 @@
                               MemoryModel Logical GLSL450
                               EntryPoint Fragment 4  "main" 156 160
                               ExecutionMode 4 OriginUpperLeft
+                              ExecutionMode 4 DepthReplacing
                               Source HLSL 500
                               Name 4  "main"
                               Name 8  "PS_OUTPUT"
diff --git a/Test/baseResults/hlsl.samplecmplevelzero.offset.dx10.frag.out b/Test/baseResults/hlsl.samplecmplevelzero.offset.dx10.frag.out
index 141f1f4..7733ab8 100644
--- a/Test/baseResults/hlsl.samplecmplevelzero.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplecmplevelzero.offset.dx10.frag.out
@@ -1,6 +1,7 @@
 hlsl.samplecmplevelzero.offset.dx10.frag
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:38  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:38    Function Parameters: 
@@ -177,6 +178,7 @@
 
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:38  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:38    Function Parameters: 
@@ -348,7 +350,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 168
 
                               Capability Shader
@@ -358,6 +360,7 @@
                               MemoryModel Logical GLSL450
                               EntryPoint Fragment 4  "main" 116 120
                               ExecutionMode 4 OriginUpperLeft
+                              ExecutionMode 4 DepthReplacing
                               Source HLSL 500
                               Name 4  "main"
                               Name 8  "PS_OUTPUT"
diff --git a/Test/baseResults/hlsl.samplecmplevelzero.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.samplecmplevelzero.offsetarray.dx10.frag.out
index 84b830c..673f78b 100644
--- a/Test/baseResults/hlsl.samplecmplevelzero.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplecmplevelzero.offsetarray.dx10.frag.out
@@ -1,6 +1,7 @@
 hlsl.samplecmplevelzero.offsetarray.dx10.frag
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:38  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:38    Function Parameters: 
@@ -183,6 +184,7 @@
 
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:38  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:38    Function Parameters: 
@@ -360,7 +362,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 179
 
                               Capability Shader
@@ -370,6 +372,7 @@
                               MemoryModel Logical GLSL450
                               EntryPoint Fragment 4  "main" 127 131
                               ExecutionMode 4 OriginUpperLeft
+                              ExecutionMode 4 DepthReplacing
                               Source HLSL 500
                               Name 4  "main"
                               Name 8  "PS_OUTPUT"
diff --git a/Test/baseResults/hlsl.samplegrad.array.dx10.frag.out b/Test/baseResults/hlsl.samplegrad.array.dx10.frag.out
index f9fabcc..309bf6c 100644
--- a/Test/baseResults/hlsl.samplegrad.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplegrad.array.dx10.frag.out
@@ -1,6 +1,7 @@
 hlsl.samplegrad.array.dx10.frag
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:24  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:24    Function Parameters: 
@@ -217,6 +218,7 @@
 
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:24  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:24    Function Parameters: 
@@ -428,7 +430,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 140
 
                               Capability Shader
@@ -438,6 +440,7 @@
                               MemoryModel Logical GLSL450
                               EntryPoint Fragment 4  "main" 132 136
                               ExecutionMode 4 OriginUpperLeft
+                              ExecutionMode 4 DepthReplacing
                               Source HLSL 500
                               Name 4  "main"
                               Name 8  "PS_OUTPUT"
diff --git a/Test/baseResults/hlsl.samplegrad.basic.dx10.frag.out b/Test/baseResults/hlsl.samplegrad.basic.dx10.frag.out
index cb40bce..2367163 100644
--- a/Test/baseResults/hlsl.samplegrad.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplegrad.basic.dx10.frag.out
@@ -1,6 +1,7 @@
 hlsl.samplegrad.basic.dx10.frag
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:28  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:28    Function Parameters: 
@@ -268,6 +269,7 @@
 
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:28  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:28    Function Parameters: 
@@ -530,7 +532,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 175
 
                               Capability Shader
@@ -539,6 +541,7 @@
                               MemoryModel Logical GLSL450
                               EntryPoint Fragment 4  "main" 167 171
                               ExecutionMode 4 OriginUpperLeft
+                              ExecutionMode 4 DepthReplacing
                               Source HLSL 500
                               Name 4  "main"
                               Name 8  "PS_OUTPUT"
diff --git a/Test/baseResults/hlsl.samplegrad.basic.dx10.vert.out b/Test/baseResults/hlsl.samplegrad.basic.dx10.vert.out
index e5605a1..d7a2448 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): 80002
+// Generated by (magic number): 80006
 // 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 2cc4742..6c98dc3 100644
--- a/Test/baseResults/hlsl.samplegrad.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplegrad.offset.dx10.frag.out
@@ -1,6 +1,7 @@
 hlsl.samplegrad.offset.dx10.frag
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:28  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:28    Function Parameters: 
@@ -238,6 +239,7 @@
 
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:28  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:28    Function Parameters: 
@@ -470,7 +472,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 166
 
                               Capability Shader
@@ -479,6 +481,7 @@
                               MemoryModel Logical GLSL450
                               EntryPoint Fragment 4  "main" 149 153
                               ExecutionMode 4 OriginUpperLeft
+                              ExecutionMode 4 DepthReplacing
                               Source HLSL 500
                               Name 4  "main"
                               Name 8  "PS_OUTPUT"
diff --git a/Test/baseResults/hlsl.samplegrad.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.samplegrad.offsetarray.dx10.frag.out
index 5d3c065..5caec99 100644
--- a/Test/baseResults/hlsl.samplegrad.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplegrad.offsetarray.dx10.frag.out
@@ -1,6 +1,7 @@
 hlsl.samplegrad.offsetarray.dx10.frag
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:24  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:24    Function Parameters: 
@@ -172,6 +173,7 @@
 
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:24  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:24    Function Parameters: 
@@ -338,7 +340,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 120
 
                               Capability Shader
@@ -348,6 +350,7 @@
                               MemoryModel Logical GLSL450
                               EntryPoint Fragment 4  "main" 103 107
                               ExecutionMode 4 OriginUpperLeft
+                              ExecutionMode 4 DepthReplacing
                               Source HLSL 500
                               Name 4  "main"
                               Name 8  "PS_OUTPUT"
diff --git a/Test/baseResults/hlsl.samplelevel.array.dx10.frag.out b/Test/baseResults/hlsl.samplelevel.array.dx10.frag.out
index bf435df..12b20ab 100644
--- a/Test/baseResults/hlsl.samplelevel.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplelevel.array.dx10.frag.out
@@ -1,6 +1,7 @@
 hlsl.samplelevel.array.dx10.frag
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:24  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:24    Function Parameters: 
@@ -181,6 +182,7 @@
 
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:24  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:24    Function Parameters: 
@@ -356,7 +358,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 147
 
                               Capability Shader
@@ -366,6 +368,7 @@
                               MemoryModel Logical GLSL450
                               EntryPoint Fragment 4  "main" 139 143
                               ExecutionMode 4 OriginUpperLeft
+                              ExecutionMode 4 DepthReplacing
                               Source HLSL 500
                               Name 4  "main"
                               Name 8  "PS_OUTPUT"
diff --git a/Test/baseResults/hlsl.samplelevel.basic.dx10.frag.out b/Test/baseResults/hlsl.samplelevel.basic.dx10.frag.out
index 82c8b59..2b585df 100644
--- a/Test/baseResults/hlsl.samplelevel.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplelevel.basic.dx10.frag.out
@@ -1,6 +1,7 @@
 hlsl.samplelevel.basic.dx10.frag
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:29  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:29    Function Parameters: 
@@ -215,6 +216,7 @@
 
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:29  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:29    Function Parameters: 
@@ -424,7 +426,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 172
 
                               Capability Shader
@@ -433,6 +435,7 @@
                               MemoryModel Logical GLSL450
                               EntryPoint Fragment 4  "main" 163 167
                               ExecutionMode 4 OriginUpperLeft
+                              ExecutionMode 4 DepthReplacing
                               Source HLSL 500
                               Name 4  "main"
                               Name 8  "PS_OUTPUT"
diff --git a/Test/baseResults/hlsl.samplelevel.basic.dx10.vert.out b/Test/baseResults/hlsl.samplelevel.basic.dx10.vert.out
index b7e3d57..7063f78 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): 80002
+// Generated by (magic number): 80006
 // 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 2080066..2567650 100644
--- a/Test/baseResults/hlsl.samplelevel.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplelevel.offset.dx10.frag.out
@@ -1,6 +1,7 @@
 hlsl.samplelevel.offset.dx10.frag
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:28  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:28    Function Parameters: 
@@ -202,6 +203,7 @@
 
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:28  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:28    Function Parameters: 
@@ -398,7 +400,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 162
 
                               Capability Shader
@@ -407,6 +409,7 @@
                               MemoryModel Logical GLSL450
                               EntryPoint Fragment 4  "main" 145 149
                               ExecutionMode 4 OriginUpperLeft
+                              ExecutionMode 4 DepthReplacing
                               Source HLSL 500
                               Name 4  "main"
                               Name 8  "PS_OUTPUT"
diff --git a/Test/baseResults/hlsl.samplelevel.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.samplelevel.offsetarray.dx10.frag.out
index 7905b75..5af21f7 100644
--- a/Test/baseResults/hlsl.samplelevel.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplelevel.offsetarray.dx10.frag.out
@@ -1,6 +1,7 @@
 hlsl.samplelevel.offsetarray.dx10.frag
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:20  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:20    Function Parameters: 
@@ -151,6 +152,7 @@
 
 Shader version: 500
 gl_FragCoord origin is upper left
+using depth_any
 0:? Sequence
 0:20  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:20    Function Parameters: 
@@ -296,7 +298,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 119
 
                               Capability Shader
@@ -305,6 +307,7 @@
                               MemoryModel Logical GLSL450
                               EntryPoint Fragment 4  "main" 111 115
                               ExecutionMode 4 OriginUpperLeft
+                              ExecutionMode 4 DepthReplacing
                               Source HLSL 500
                               Name 4  "main"
                               Name 8  "PS_OUTPUT"
diff --git a/Test/baseResults/hlsl.scalar-length.frag.out b/Test/baseResults/hlsl.scalar-length.frag.out
index 9a51962..e8fd4f2 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): 80002
+// Generated by (magic number): 80006
 // 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 6b799f4..ee92275 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): 80002
+// Generated by (magic number): 80006
 // 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 a0b0aa2..218e4d1 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): 80002
+// Generated by (magic number): 80006
 // 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 b7cc2a2..d6ce30d 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): 80002
+// Generated by (magic number): 80006
 // 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 7e4885c..a285eb4 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): 80002
+// Generated by (magic number): 80006
 // 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 5e2214a..017cdfa 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): 80002
+// Generated by (magic number): 80006
 // 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 3b4ac55..48d1e95 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): 80002
+// Generated by (magic number): 80006
 // 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 40bd128..3484b2f 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): 80002
+// Generated by (magic number): 80006
 // 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 1fee20c..0a2a5b2 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): 80002
+// Generated by (magic number): 80006
 // 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 432cd6f..9b0b065 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): 80002
+// Generated by (magic number): 80006
 // 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
index 57b32e5..9b06693 100644
--- a/Test/baseResults/hlsl.shift.per-set.frag.out
+++ b/Test/baseResults/hlsl.shift.per-set.frag.out
@@ -9,15 +9,15 @@
 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        @data: direct index for structure (layout( row_major std430) buffer unsized 1-element 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 unsized 1-element 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        @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:39          't5' (layout( set=3 binding=2 row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:39          Constant:
 0:39            0 (const uint)
 0:39        right-shift ( temp int)
@@ -36,8 +36,8 @@
 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        @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:50          'u5' (layout( set=2 binding=4 row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:50          Constant:
 0:50            0 (const uint)
 0:50        right-shift ( temp int)
@@ -46,14 +46,14 @@
 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        @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of float)
+0:51          'u6' (layout( set=3 binding=4 row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element 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:52      'u7' (layout( set=4 binding=4 row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of float @data})
+0:53      'u8' (layout( set=5 binding=4 row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element 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:
@@ -80,17 +80,17 @@
 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:?     't4' (layout( set=3 binding=1 row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element 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 unsized 1-element 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:?     'u5' (layout( set=2 binding=4 row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
+0:?     'u6' (layout( set=3 binding=4 row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of float @data})
+0:?     'u7' (layout( set=4 binding=4 row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of float @data})
+0:?     'u8' (layout( set=5 binding=4 row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element 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)
@@ -109,15 +109,15 @@
 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        @data: direct index for structure (layout( row_major std430) buffer unsized 1-element 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 unsized 1-element 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        @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:39          't5' (layout( set=3 binding=2 row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:39          Constant:
 0:39            0 (const uint)
 0:39        right-shift ( temp int)
@@ -136,8 +136,8 @@
 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        @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:50          'u5' (layout( set=2 binding=4 row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:50          Constant:
 0:50            0 (const uint)
 0:50        right-shift ( temp int)
@@ -146,14 +146,14 @@
 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        @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of float)
+0:51          'u6' (layout( set=3 binding=4 row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element 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:52      'u7' (layout( set=4 binding=4 row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of float @data})
+0:53      'u8' (layout( set=5 binding=4 row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element 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:
@@ -180,17 +180,17 @@
 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:?     't4' (layout( set=3 binding=1 row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element 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 unsized 1-element 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:?     'u5' (layout( set=2 binding=4 row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
+0:?     'u6' (layout( set=3 binding=4 row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of float @data})
+0:?     'u7' (layout( set=4 binding=4 row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of float @data})
+0:?     'u8' (layout( set=5 binding=4 row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element 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)
diff --git a/Test/baseResults/hlsl.sin.frag.out b/Test/baseResults/hlsl.sin.frag.out
index 51ee0a7..a53f2a7 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): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 26
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.snorm.uav.comp.out b/Test/baseResults/hlsl.snorm.uav.comp.out
new file mode 100644
index 0000000..1fbf49e
--- /dev/null
+++ b/Test/baseResults/hlsl.snorm.uav.comp.out
@@ -0,0 +1,212 @@
+hlsl.snorm.uav.comp
+Shader version: 500
+local_size = (16, 16, 1)
+0:? Sequence
+0:12  Function Definition: @main(vu3; ( temp void)
+0:12    Function Parameters: 
+0:12      'tid' ( in 3-component vector of uint)
+0:?     Sequence
+0:13      Sequence
+0:13        move second child to first child ( temp 4-component vector of float)
+0:13          'storeTemp' ( temp 4-component vector of float)
+0:13          add ( temp 4-component vector of float)
+0:13            textureFetch ( temp 4-component vector of float)
+0:13              'ResultInS' (layout( binding=1) uniform texture3D)
+0:13              'tid' ( in 3-component vector of uint)
+0:13              Constant:
+0:13                0 (const int)
+0:13            uf4: direct index for structure ( uniform 4-component vector of float)
+0:13              'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float uf4})
+0:13              Constant:
+0:13                0 (const uint)
+0:13        imageStore ( temp void)
+0:13          'ResultOutS' (layout( binding=1 rgba32f) uniform image3D)
+0:13          'tid' ( in 3-component vector of uint)
+0:13          'storeTemp' ( temp 4-component vector of float)
+0:13        'storeTemp' ( temp 4-component vector of float)
+0:14      Sequence
+0:14        move second child to first child ( temp 4-component vector of float)
+0:14          'storeTemp' ( temp 4-component vector of float)
+0:14          textureFetch ( temp 4-component vector of float)
+0:14            'ResultInU' (layout( binding=0) uniform texture3D)
+0:14            'tid' ( in 3-component vector of uint)
+0:14            Constant:
+0:14              0 (const int)
+0:14        imageStore ( temp void)
+0:14          'ResultOutU' (layout( binding=0 rgba32f) uniform image3D)
+0:14          'tid' ( in 3-component vector of uint)
+0:14          'storeTemp' ( temp 4-component vector of float)
+0:14        'storeTemp' ( temp 4-component vector of float)
+0:12  Function Definition: main( ( temp void)
+0:12    Function Parameters: 
+0:?     Sequence
+0:12      move second child to first child ( temp 3-component vector of uint)
+0:?         'tid' ( temp 3-component vector of uint)
+0:?         'tid' ( in 3-component vector of uint GlobalInvocationID)
+0:12      Function Call: @main(vu3; ( temp void)
+0:?         'tid' ( temp 3-component vector of uint)
+0:?   Linker Objects
+0:?     'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float uf4})
+0:?     'ResultInU' (layout( binding=0) uniform texture3D)
+0:?     'ResultOutU' (layout( binding=0 rgba32f) uniform image3D)
+0:?     'ResultInS' (layout( binding=1) uniform texture3D)
+0:?     'ResultOutS' (layout( binding=1 rgba32f) uniform image3D)
+0:?     'tid' ( in 3-component vector of uint GlobalInvocationID)
+
+
+Linked compute stage:
+
+
+Shader version: 500
+local_size = (16, 16, 1)
+0:? Sequence
+0:12  Function Definition: @main(vu3; ( temp void)
+0:12    Function Parameters: 
+0:12      'tid' ( in 3-component vector of uint)
+0:?     Sequence
+0:13      Sequence
+0:13        move second child to first child ( temp 4-component vector of float)
+0:13          'storeTemp' ( temp 4-component vector of float)
+0:13          add ( temp 4-component vector of float)
+0:13            textureFetch ( temp 4-component vector of float)
+0:13              'ResultInS' (layout( binding=1) uniform texture3D)
+0:13              'tid' ( in 3-component vector of uint)
+0:13              Constant:
+0:13                0 (const int)
+0:13            uf4: direct index for structure ( uniform 4-component vector of float)
+0:13              'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float uf4})
+0:13              Constant:
+0:13                0 (const uint)
+0:13        imageStore ( temp void)
+0:13          'ResultOutS' (layout( binding=1 rgba32f) uniform image3D)
+0:13          'tid' ( in 3-component vector of uint)
+0:13          'storeTemp' ( temp 4-component vector of float)
+0:13        'storeTemp' ( temp 4-component vector of float)
+0:14      Sequence
+0:14        move second child to first child ( temp 4-component vector of float)
+0:14          'storeTemp' ( temp 4-component vector of float)
+0:14          textureFetch ( temp 4-component vector of float)
+0:14            'ResultInU' (layout( binding=0) uniform texture3D)
+0:14            'tid' ( in 3-component vector of uint)
+0:14            Constant:
+0:14              0 (const int)
+0:14        imageStore ( temp void)
+0:14          'ResultOutU' (layout( binding=0 rgba32f) uniform image3D)
+0:14          'tid' ( in 3-component vector of uint)
+0:14          'storeTemp' ( temp 4-component vector of float)
+0:14        'storeTemp' ( temp 4-component vector of float)
+0:12  Function Definition: main( ( temp void)
+0:12    Function Parameters: 
+0:?     Sequence
+0:12      move second child to first child ( temp 3-component vector of uint)
+0:?         'tid' ( temp 3-component vector of uint)
+0:?         'tid' ( in 3-component vector of uint GlobalInvocationID)
+0:12      Function Call: @main(vu3; ( temp void)
+0:?         'tid' ( temp 3-component vector of uint)
+0:?   Linker Objects
+0:?     'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float uf4})
+0:?     'ResultInU' (layout( binding=0) uniform texture3D)
+0:?     'ResultOutU' (layout( binding=0 rgba32f) uniform image3D)
+0:?     'ResultInS' (layout( binding=1) uniform texture3D)
+0:?     'ResultOutS' (layout( binding=1 rgba32f) uniform image3D)
+0:?     'tid' ( in 3-component vector of uint GlobalInvocationID)
+
+// Module Version 10000
+// Generated by (magic number): 80006
+// Id's are bound by 54
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main" 49
+                              ExecutionMode 4 LocalSize 16 16 1
+                              Source HLSL 500
+                              Name 4  "main"
+                              Name 11  "@main(vu3;"
+                              Name 10  "tid"
+                              Name 16  "storeTemp"
+                              Name 19  "ResultInS"
+                              Name 25  "$Global"
+                              MemberName 25($Global) 0  "uf4"
+                              Name 27  ""
+                              Name 34  "ResultOutS"
+                              Name 38  "storeTemp"
+                              Name 39  "ResultInU"
+                              Name 43  "ResultOutU"
+                              Name 47  "tid"
+                              Name 49  "tid"
+                              Name 51  "param"
+                              Decorate 19(ResultInS) DescriptorSet 0
+                              Decorate 19(ResultInS) Binding 1
+                              MemberDecorate 25($Global) 0 Offset 0
+                              Decorate 25($Global) Block
+                              Decorate 27 DescriptorSet 0
+                              Decorate 34(ResultOutS) DescriptorSet 0
+                              Decorate 34(ResultOutS) Binding 1
+                              Decorate 39(ResultInU) DescriptorSet 0
+                              Decorate 39(ResultInU) Binding 0
+                              Decorate 43(ResultOutU) DescriptorSet 0
+                              Decorate 43(ResultOutU) Binding 0
+                              Decorate 49(tid) BuiltIn GlobalInvocationId
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypeVector 6(int) 3
+               8:             TypePointer Function 7(ivec3)
+               9:             TypeFunction 2 8(ptr)
+              13:             TypeFloat 32
+              14:             TypeVector 13(float) 4
+              15:             TypePointer Function 14(fvec4)
+              17:             TypeImage 13(float) 3D sampled format:Unknown
+              18:             TypePointer UniformConstant 17
+   19(ResultInS):     18(ptr) Variable UniformConstant
+              22:             TypeInt 32 1
+              23:     22(int) Constant 0
+     25($Global):             TypeStruct 14(fvec4)
+              26:             TypePointer Uniform 25($Global)
+              27:     26(ptr) Variable Uniform
+              28:             TypePointer Uniform 14(fvec4)
+              32:             TypeImage 13(float) 3D nonsampled format:Rgba32f
+              33:             TypePointer UniformConstant 32
+  34(ResultOutS):     33(ptr) Variable UniformConstant
+   39(ResultInU):     18(ptr) Variable UniformConstant
+  43(ResultOutU):     33(ptr) Variable UniformConstant
+              48:             TypePointer Input 7(ivec3)
+         49(tid):     48(ptr) Variable Input
+         4(main):           2 Function None 3
+               5:             Label
+         47(tid):      8(ptr) Variable Function
+       51(param):      8(ptr) Variable Function
+              50:    7(ivec3) Load 49(tid)
+                              Store 47(tid) 50
+              52:    7(ivec3) Load 47(tid)
+                              Store 51(param) 52
+              53:           2 FunctionCall 11(@main(vu3;) 51(param)
+                              Return
+                              FunctionEnd
+  11(@main(vu3;):           2 Function None 9
+         10(tid):      8(ptr) FunctionParameter
+              12:             Label
+   16(storeTemp):     15(ptr) Variable Function
+   38(storeTemp):     15(ptr) Variable Function
+              20:          17 Load 19(ResultInS)
+              21:    7(ivec3) Load 10(tid)
+              24:   14(fvec4) ImageFetch 20 21 Lod 23
+              29:     28(ptr) AccessChain 27 23
+              30:   14(fvec4) Load 29
+              31:   14(fvec4) FAdd 24 30
+                              Store 16(storeTemp) 31
+              35:          32 Load 34(ResultOutS)
+              36:    7(ivec3) Load 10(tid)
+              37:   14(fvec4) Load 16(storeTemp)
+                              ImageWrite 35 36 37
+              40:          17 Load 39(ResultInU)
+              41:    7(ivec3) Load 10(tid)
+              42:   14(fvec4) ImageFetch 40 41 Lod 23
+                              Store 38(storeTemp) 42
+              44:          32 Load 43(ResultOutU)
+              45:    7(ivec3) Load 10(tid)
+              46:   14(fvec4) Load 38(storeTemp)
+                              ImageWrite 44 45 46
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.staticMemberFunction.frag.out b/Test/baseResults/hlsl.staticMemberFunction.frag.out
index 08d0d20..e6d85a6 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): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 54
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.store.rwbyteaddressbuffer.type.comp.out b/Test/baseResults/hlsl.store.rwbyteaddressbuffer.type.comp.out
new file mode 100644
index 0000000..27c0fb3
--- /dev/null
+++ b/Test/baseResults/hlsl.store.rwbyteaddressbuffer.type.comp.out
@@ -0,0 +1,173 @@
+hlsl.store.rwbyteaddressbuffer.type.comp
+Shader version: 500
+local_size = (64, 1, 1)
+0:? Sequence
+0:5  Function Definition: @main(vu3; ( temp void)
+0:5    Function Parameters: 
+0:5      'dispatchThreadID' ( in 3-component vector of uint)
+0:?     Sequence
+0:6      Test condition and select ( temp void)
+0:6        Condition
+0:6        Compare Equal ( temp bool)
+0:6          direct index ( temp uint)
+0:6            'dispatchThreadID' ( in 3-component vector of uint)
+0:6            Constant:
+0:6              0 (const int)
+0:6          Constant:
+0:6            0 (const uint)
+0:6        true case
+0:?         Sequence
+0:7          move second child to first child ( temp int)
+0:7            'byteAddrTemp' ( temp int)
+0:7            right-shift ( temp int)
+0:7              Constant:
+0:7                0 (const int)
+0:7              Constant:
+0:7                2 (const int)
+0:7          move second child to first child ( temp uint)
+0:7            indirect index (layout( row_major std430) buffer uint)
+0:7              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:7                'buffer' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
+0:7                Constant:
+0:7                  0 (const uint)
+0:7              'byteAddrTemp' ( temp int)
+0:7            Constant:
+0:7              2 (const uint)
+0:5  Function Definition: main( ( temp void)
+0:5    Function Parameters: 
+0:?     Sequence
+0:5      move second child to first child ( temp 3-component vector of uint)
+0:?         'dispatchThreadID' ( temp 3-component vector of uint)
+0:?         'dispatchThreadID' ( in 3-component vector of uint GlobalInvocationID)
+0:5      Function Call: @main(vu3; ( temp void)
+0:?         'dispatchThreadID' ( temp 3-component vector of uint)
+0:?   Linker Objects
+0:?     'buffer' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
+0:?     'dispatchThreadID' ( in 3-component vector of uint GlobalInvocationID)
+
+
+Linked compute stage:
+
+
+Shader version: 500
+local_size = (64, 1, 1)
+0:? Sequence
+0:5  Function Definition: @main(vu3; ( temp void)
+0:5    Function Parameters: 
+0:5      'dispatchThreadID' ( in 3-component vector of uint)
+0:?     Sequence
+0:6      Test condition and select ( temp void)
+0:6        Condition
+0:6        Compare Equal ( temp bool)
+0:6          direct index ( temp uint)
+0:6            'dispatchThreadID' ( in 3-component vector of uint)
+0:6            Constant:
+0:6              0 (const int)
+0:6          Constant:
+0:6            0 (const uint)
+0:6        true case
+0:?         Sequence
+0:7          move second child to first child ( temp int)
+0:7            'byteAddrTemp' ( temp int)
+0:7            right-shift ( temp int)
+0:7              Constant:
+0:7                0 (const int)
+0:7              Constant:
+0:7                2 (const int)
+0:7          move second child to first child ( temp uint)
+0:7            indirect index (layout( row_major std430) buffer uint)
+0:7              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:7                'buffer' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
+0:7                Constant:
+0:7                  0 (const uint)
+0:7              'byteAddrTemp' ( temp int)
+0:7            Constant:
+0:7              2 (const uint)
+0:5  Function Definition: main( ( temp void)
+0:5    Function Parameters: 
+0:?     Sequence
+0:5      move second child to first child ( temp 3-component vector of uint)
+0:?         'dispatchThreadID' ( temp 3-component vector of uint)
+0:?         'dispatchThreadID' ( in 3-component vector of uint GlobalInvocationID)
+0:5      Function Call: @main(vu3; ( temp void)
+0:?         'dispatchThreadID' ( temp 3-component vector of uint)
+0:?   Linker Objects
+0:?     'buffer' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
+0:?     'dispatchThreadID' ( in 3-component vector of uint GlobalInvocationID)
+
+// Module Version 10000
+// Generated by (magic number): 80006
+// Id's are bound by 42
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main" 37
+                              ExecutionMode 4 LocalSize 64 1 1
+                              Source HLSL 500
+                              Name 4  "main"
+                              Name 11  "@main(vu3;"
+                              Name 10  "dispatchThreadID"
+                              Name 23  "byteAddrTemp"
+                              Name 28  "buffer"
+                              MemberName 28(buffer) 0  "@data"
+                              Name 30  "buffer"
+                              Name 35  "dispatchThreadID"
+                              Name 37  "dispatchThreadID"
+                              Name 39  "param"
+                              Decorate 27 ArrayStride 4
+                              MemberDecorate 28(buffer) 0 Offset 0
+                              Decorate 28(buffer) BufferBlock
+                              Decorate 30(buffer) DescriptorSet 0
+                              Decorate 37(dispatchThreadID) BuiltIn GlobalInvocationId
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypeVector 6(int) 3
+               8:             TypePointer Function 7(ivec3)
+               9:             TypeFunction 2 8(ptr)
+              13:      6(int) Constant 0
+              14:             TypePointer Function 6(int)
+              17:             TypeBool
+              21:             TypeInt 32 1
+              22:             TypePointer Function 21(int)
+              24:     21(int) Constant 0
+              25:     21(int) Constant 2
+              27:             TypeRuntimeArray 6(int)
+      28(buffer):             TypeStruct 27
+              29:             TypePointer Uniform 28(buffer)
+      30(buffer):     29(ptr) Variable Uniform
+              32:      6(int) Constant 2
+              33:             TypePointer Uniform 6(int)
+              36:             TypePointer Input 7(ivec3)
+37(dispatchThreadID):     36(ptr) Variable Input
+         4(main):           2 Function None 3
+               5:             Label
+35(dispatchThreadID):      8(ptr) Variable Function
+       39(param):      8(ptr) Variable Function
+              38:    7(ivec3) Load 37(dispatchThreadID)
+                              Store 35(dispatchThreadID) 38
+              40:    7(ivec3) Load 35(dispatchThreadID)
+                              Store 39(param) 40
+              41:           2 FunctionCall 11(@main(vu3;) 39(param)
+                              Return
+                              FunctionEnd
+  11(@main(vu3;):           2 Function None 9
+10(dispatchThreadID):      8(ptr) FunctionParameter
+              12:             Label
+23(byteAddrTemp):     22(ptr) Variable Function
+              15:     14(ptr) AccessChain 10(dispatchThreadID) 13
+              16:      6(int) Load 15
+              18:    17(bool) IEqual 16 13
+                              SelectionMerge 20 None
+                              BranchConditional 18 19 20
+              19:               Label
+              26:     21(int)   ShiftRightArithmetic 24 25
+                                Store 23(byteAddrTemp) 26
+              31:     21(int)   Load 23(byteAddrTemp)
+              34:     33(ptr)   AccessChain 30(buffer) 24 31
+                                Store 34 32
+                                Branch 20
+              20:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.string.frag.out b/Test/baseResults/hlsl.string.frag.out
index 893e49d..1b80a2b 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): 80002
+// Generated by (magic number): 80006
 // 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 dcc493d..117e221 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): 80002
+// Generated by (magic number): 80006
 // 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 c540c16..f14a338 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): 80002
+// Generated by (magic number): 80006
 // 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 6086e32..810432e 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): 80002
+// Generated by (magic number): 80006
 // 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 42f45a8..b52c359 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): 80002
+// Generated by (magic number): 80006
 // 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 b426639..230be04 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): 80002
+// Generated by (magic number): 80006
 // 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 dd6e38e..85c396c 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): 80002
+// Generated by (magic number): 80006
 // 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 0d83cdf..56c6917 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): 80002
+// Generated by (magic number): 80006
 // 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 31b2cda..0e34284 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): 80002
+// Generated by (magic number): 80006
 // 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 f3c10c4..c5b5756 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): 80002
+// Generated by (magic number): 80006
 // 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 24c902f..cff7538 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): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 65
 
                               Capability Shader
@@ -171,6 +171,7 @@
                               EntryPoint Fragment 4  "main" 22 27 31 36 45 48 51 55
                               ExecutionMode 4 OriginUpperLeft
                               ExecutionMode 4 DepthGreater
+                              ExecutionMode 4 DepthReplacing
                               Source HLSL 500
                               Name 4  "main"
                               Name 8  "T"
diff --git a/Test/baseResults/hlsl.structStructName.frag.out b/Test/baseResults/hlsl.structStructName.frag.out
index dded13f..90f2504 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): 80002
+// Generated by (magic number): 80006
 // 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 534ea7c..8928ea0 100644
--- a/Test/baseResults/hlsl.structarray.flatten.frag.out
+++ b/Test/baseResults/hlsl.structarray.flatten.frag.out
@@ -156,7 +156,7 @@
 0:?     'ps_output.color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 80
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.structarray.flatten.geom.out b/Test/baseResults/hlsl.structarray.flatten.geom.out
index eac315c..6a2af74 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): 80002
+// Generated by (magic number): 80006
 // 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 1f79b9b..6aa82e4 100644
--- a/Test/baseResults/hlsl.structbuffer.append.fn.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.append.fn.frag.out
@@ -4,24 +4,24 @@
 0:? Sequence
 0:8  Function Definition: Fn2(block--vf4[0]1;block--vf4[0]1; ( temp 4-component vector of float)
 0:8    Function Parameters: 
-0:8      'arg_a' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
-0:8      'arg_a@count' ( buffer block{layout( row_major std430) buffer int @count})
-0:8      'arg_c' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
-0:8      'arg_c@count' ( buffer block{layout( row_major std430) buffer int @count})
+0:8      'arg_a' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of float @data})
+0:8      'arg_a@count' ( buffer block{layout( row_major std430) buffer uint @count})
+0:8      'arg_c' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of float @data})
+0:8      'arg_c@count' ( buffer block{layout( row_major std430) buffer uint @count})
 0:?     Sequence
 0:9      move second child to first child ( temp 4-component vector of float)
 0:9        indirect index ( buffer 4-component vector of float)
-0:9          @data: direct index for structure ( buffer implicitly-sized array of 4-component vector of float)
-0:9            'arg_a' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:9          @data: direct index for structure ( buffer unsized 1-element array of 4-component vector of float)
+0:9            'arg_a' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of float @data})
 0:9            Constant:
 0:9              0 (const uint)
 0:9          AtomicAdd ( temp uint)
-0:9            @count: direct index for structure ( temp int)
-0:9              'arg_a@count' ( buffer block{layout( row_major std430) buffer int @count})
+0:9            @count: direct index for structure ( temp uint)
+0:9              'arg_a@count' ( buffer block{layout( row_major std430) buffer uint @count})
 0:9              Constant:
 0:9                0 (const int)
 0:9            Constant:
-0:9              1 (const int)
+0:9              1 (const uint)
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
@@ -29,18 +29,18 @@
 0:?           4.000000
 0:10      Branch: Return with expression
 0:10        indirect index ( buffer 4-component vector of float)
-0:10          @data: direct index for structure ( buffer implicitly-sized array of 4-component vector of float)
-0:10            'arg_c' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:10          @data: direct index for structure ( buffer unsized 1-element array of 4-component vector of float)
+0:10            'arg_c' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of float @data})
 0:10            Constant:
 0:10              0 (const uint)
 0:10          add ( temp uint)
 0:10            AtomicAdd ( temp uint)
-0:10              @count: direct index for structure ( temp int)
-0:10                'arg_c@count' ( buffer block{layout( row_major std430) buffer int @count})
+0:10              @count: direct index for structure ( temp uint)
+0:10                'arg_c@count' ( buffer block{layout( row_major std430) buffer uint @count})
 0:10                Constant:
 0:10                  0 (const int)
 0:10              Constant:
-0:10                -1 (const int)
+0:10                4294967295 (const uint)
 0:10            Constant:
 0:10              -1 (const int)
 0:19  Function Definition: @main(u1; ( temp 4-component vector of float)
@@ -49,10 +49,10 @@
 0:?     Sequence
 0:22      Branch: Return with expression
 0:22        Function Call: Fn2(block--vf4[0]1;block--vf4[0]1; ( temp 4-component vector of float)
-0:22          'sbuf_a' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
-0:22          'sbuf_a@count' ( buffer block{layout( row_major std430) buffer int @count})
-0:22          'sbuf_c' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
-0:22          'sbuf_c@count' ( buffer block{layout( row_major std430) buffer int @count})
+0:22          'sbuf_a' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of float @data})
+0:22          'sbuf_a@count' ( buffer block{layout( row_major std430) buffer uint @count})
+0:22          'sbuf_c' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of float @data})
+0:22          'sbuf_c@count' ( buffer block{layout( row_major std430) buffer uint @count})
 0:19  Function Definition: main( ( temp void)
 0:19    Function Parameters: 
 0:?     Sequence
@@ -64,11 +64,11 @@
 0:19        Function Call: @main(u1; ( temp 4-component vector of float)
 0:?           'pos' ( temp uint)
 0:?   Linker Objects
-0:?     'sbuf_a' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
-0:?     'sbuf_a@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer int @count})
-0:?     'sbuf_c' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
-0:?     'sbuf_c@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer int @count})
-0:?     'sbuf_unused' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:?     'sbuf_a' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of float @data})
+0:?     'sbuf_a@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer uint @count})
+0:?     'sbuf_c' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of float @data})
+0:?     'sbuf_c@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer uint @count})
+0:?     'sbuf_unused' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of float @data})
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 0:?     'pos' (layout( location=0) flat in uint)
 
@@ -81,24 +81,24 @@
 0:? Sequence
 0:8  Function Definition: Fn2(block--vf4[0]1;block--vf4[0]1; ( temp 4-component vector of float)
 0:8    Function Parameters: 
-0:8      'arg_a' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
-0:8      'arg_a@count' ( buffer block{layout( row_major std430) buffer int @count})
-0:8      'arg_c' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
-0:8      'arg_c@count' ( buffer block{layout( row_major std430) buffer int @count})
+0:8      'arg_a' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of float @data})
+0:8      'arg_a@count' ( buffer block{layout( row_major std430) buffer uint @count})
+0:8      'arg_c' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of float @data})
+0:8      'arg_c@count' ( buffer block{layout( row_major std430) buffer uint @count})
 0:?     Sequence
 0:9      move second child to first child ( temp 4-component vector of float)
 0:9        indirect index ( buffer 4-component vector of float)
-0:9          @data: direct index for structure ( buffer implicitly-sized array of 4-component vector of float)
-0:9            'arg_a' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:9          @data: direct index for structure ( buffer unsized 1-element array of 4-component vector of float)
+0:9            'arg_a' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of float @data})
 0:9            Constant:
 0:9              0 (const uint)
 0:9          AtomicAdd ( temp uint)
-0:9            @count: direct index for structure ( temp int)
-0:9              'arg_a@count' ( buffer block{layout( row_major std430) buffer int @count})
+0:9            @count: direct index for structure ( temp uint)
+0:9              'arg_a@count' ( buffer block{layout( row_major std430) buffer uint @count})
 0:9              Constant:
 0:9                0 (const int)
 0:9            Constant:
-0:9              1 (const int)
+0:9              1 (const uint)
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
@@ -106,18 +106,18 @@
 0:?           4.000000
 0:10      Branch: Return with expression
 0:10        indirect index ( buffer 4-component vector of float)
-0:10          @data: direct index for structure ( buffer implicitly-sized array of 4-component vector of float)
-0:10            'arg_c' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:10          @data: direct index for structure ( buffer unsized 1-element array of 4-component vector of float)
+0:10            'arg_c' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of float @data})
 0:10            Constant:
 0:10              0 (const uint)
 0:10          add ( temp uint)
 0:10            AtomicAdd ( temp uint)
-0:10              @count: direct index for structure ( temp int)
-0:10                'arg_c@count' ( buffer block{layout( row_major std430) buffer int @count})
+0:10              @count: direct index for structure ( temp uint)
+0:10                'arg_c@count' ( buffer block{layout( row_major std430) buffer uint @count})
 0:10                Constant:
 0:10                  0 (const int)
 0:10              Constant:
-0:10                -1 (const int)
+0:10                4294967295 (const uint)
 0:10            Constant:
 0:10              -1 (const int)
 0:19  Function Definition: @main(u1; ( temp 4-component vector of float)
@@ -126,10 +126,10 @@
 0:?     Sequence
 0:22      Branch: Return with expression
 0:22        Function Call: Fn2(block--vf4[0]1;block--vf4[0]1; ( temp 4-component vector of float)
-0:22          'sbuf_a' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
-0:22          'sbuf_a@count' ( buffer block{layout( row_major std430) buffer int @count})
-0:22          'sbuf_c' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
-0:22          'sbuf_c@count' ( buffer block{layout( row_major std430) buffer int @count})
+0:22          'sbuf_a' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of float @data})
+0:22          'sbuf_a@count' ( buffer block{layout( row_major std430) buffer uint @count})
+0:22          'sbuf_c' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of float @data})
+0:22          'sbuf_c@count' ( buffer block{layout( row_major std430) buffer uint @count})
 0:19  Function Definition: main( ( temp void)
 0:19    Function Parameters: 
 0:?     Sequence
@@ -141,22 +141,22 @@
 0:19        Function Call: @main(u1; ( temp 4-component vector of float)
 0:?           'pos' ( temp uint)
 0:?   Linker Objects
-0:?     'sbuf_a' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
-0:?     'sbuf_a@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer int @count})
-0:?     'sbuf_c' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
-0:?     'sbuf_c@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer int @count})
-0:?     'sbuf_unused' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:?     'sbuf_a' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of float @data})
+0:?     'sbuf_a@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer uint @count})
+0:?     'sbuf_c' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of float @data})
+0:?     'sbuf_c@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer uint @count})
+0:?     'sbuf_unused' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of float @data})
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 0:?     'pos' (layout( location=0) flat in uint)
 
 // Module Version 10000
-// Generated by (magic number): 80002
-// Id's are bound by 76
+// Generated by (magic number): 80006
+// Id's are bound by 70
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 64 67
+                              EntryPoint Fragment 4  "main" 58 61
                               ExecutionMode 4 OriginUpperLeft
                               Source HLSL 500
                               Name 4  "main"
@@ -169,92 +169,86 @@
                               Name 16  "arg_a@count"
                               Name 17  "arg_c"
                               Name 18  "arg_c@count"
-                              Name 25  "@main(u1;"
-                              Name 24  "pos"
-                              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"
+                              Name 24  "@main(u1;"
+                              Name 23  "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"
                               Decorate 8 ArrayStride 16
                               MemberDecorate 9 0 Offset 0
                               Decorate 9 BufferBlock
                               Decorate 12 BufferBlock
-                              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
+                              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
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
                7:             TypeVector 6(float) 4
                8:             TypeRuntimeArray 7(fvec4)
                9:             TypeStruct 8
-              10:             TypePointer Function 9(struct)
-              11:             TypeInt 32 1
+              10:             TypePointer Uniform 9(struct)
+              11:             TypeInt 32 0
               12:             TypeStruct 11(int)
-              13:             TypePointer Function 12(struct)
+              13:             TypePointer Uniform 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 Function 11(int)
+              21:             TypePointer Function 11(int)
+              22:             TypeFunction 7(fvec4) 21(ptr)
+              26:             TypeInt 32 1
+              27:     26(int) Constant 0
+              28:             TypePointer Uniform 11(int)
               30:     11(int) Constant 1
-              31:     21(int) Constant 1
-              32:     21(int) Constant 0
-              34:    6(float) Constant 1065353216
-              35:    6(float) Constant 1073741824
-              36:    6(float) Constant 1077936128
-              37:    6(float) Constant 1082130432
-              38:    7(fvec4) ConstantComposite 34 35 36 37
-              39:             TypePointer Function 7(fvec4)
-              42:     11(int) Constant 4294967295
-              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
+              31:     11(int) Constant 0
+              33:    6(float) Constant 1065353216
+              34:    6(float) Constant 1073741824
+              35:    6(float) Constant 1077936128
+              36:    6(float) Constant 1082130432
+              37:    7(fvec4) ConstantComposite 33 34 35 36
+              38:             TypePointer Uniform 7(fvec4)
+              41:     11(int) Constant 4294967295
+              43:     26(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 11(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
          4(main):           2 Function None 3
                5:             Label
-         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
+         56(pos):     21(ptr) Variable Function
+       62(param):     21(ptr) Variable Function
+              59:     11(int) Load 58(pos)
+                              Store 56(pos) 59
+              63:     11(int) Load 56(pos)
+                              Store 62(param) 63
+              64:    7(fvec4) FunctionCall 24(@main(u1;) 62(param)
+                              Store 61(@entryPointOutput) 64
                               Return
                               FunctionEnd
 19(Fn2(block--vf4[0]1;block--vf4[0]1;):    7(fvec4) Function None 14
@@ -264,23 +258,19 @@
  18(arg_c@count):     13(ptr) FunctionParameter
               20:             Label
               29:     28(ptr) AccessChain 16(arg_a@count) 27
-              33:     21(int) AtomicIAdd 29 31 32 30
-              40:     39(ptr) AccessChain 15(arg_a) 27 33
-                              Store 40 38
-              41:     28(ptr) AccessChain 18(arg_c@count) 27
-              43:     21(int) AtomicIAdd 41 31 32 42
-              44:     21(int) IAdd 43 42
-              45:     39(ptr) AccessChain 17(arg_c) 27 44
+              32:     11(int) AtomicIAdd 29 30 31 30
+              39:     38(ptr) AccessChain 15(arg_a) 27 32
+                              Store 39 37
+              40:     28(ptr) AccessChain 18(arg_c@count) 27
+              42:     11(int) AtomicIAdd 40 30 31 41
+              44:     11(int) IAdd 42 43
+              45:     38(ptr) AccessChain 17(arg_c) 27 44
               46:    7(fvec4) Load 45
                               ReturnValue 46
                               FunctionEnd
-   25(@main(u1;):    7(fvec4) Function None 23
-         24(pos):     22(ptr) FunctionParameter
-              26:             Label
-       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
+   24(@main(u1;):    7(fvec4) Function None 22
+         23(pos):     21(ptr) FunctionParameter
+              25:             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
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.structbuffer.append.frag.out b/Test/baseResults/hlsl.structbuffer.append.frag.out
index 9ff5bee..8026a12 100644
--- a/Test/baseResults/hlsl.structbuffer.append.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.append.frag.out
@@ -8,17 +8,17 @@
 0:?     Sequence
 0:8      move second child to first child ( temp 4-component vector of float)
 0:8        indirect index (layout( row_major std430) buffer 4-component vector of float)
-0:8          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of 4-component vector of float)
-0:8            'sbuf_a' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:8          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of 4-component vector of float)
+0:8            'sbuf_a' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of float @data})
 0:8            Constant:
 0:8              0 (const uint)
 0:8          AtomicAdd ( temp uint)
-0:8            @count: direct index for structure ( temp int)
-0:8              'sbuf_a@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer int @count})
+0:8            @count: direct index for structure ( temp uint)
+0:8              'sbuf_a@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer uint @count})
 0:8              Constant:
 0:8                0 (const int)
 0:8            Constant:
-0:8              1 (const int)
+0:8              1 (const uint)
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
@@ -26,18 +26,18 @@
 0:?           4.000000
 0:10      Branch: Return with expression
 0:10        indirect index (layout( row_major std430) buffer 4-component vector of float)
-0:10          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of 4-component vector of float)
-0:10            'sbuf_c' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:10          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of 4-component vector of float)
+0:10            'sbuf_c' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of float @data})
 0:10            Constant:
 0:10              0 (const uint)
 0:10          add ( temp uint)
 0:10            AtomicAdd ( temp uint)
-0:10              @count: direct index for structure ( temp int)
-0:10                'sbuf_c@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer int @count})
+0:10              @count: direct index for structure ( temp uint)
+0:10                'sbuf_c@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer uint @count})
 0:10                Constant:
 0:10                  0 (const int)
 0:10              Constant:
-0:10                -1 (const int)
+0:10                4294967295 (const uint)
 0:10            Constant:
 0:10              -1 (const int)
 0:7  Function Definition: main( ( temp void)
@@ -51,11 +51,11 @@
 0:7        Function Call: @main(u1; ( temp 4-component vector of float)
 0:?           'pos' ( temp uint)
 0:?   Linker Objects
-0:?     'sbuf_a' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
-0:?     'sbuf_a@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer int @count})
-0:?     'sbuf_c' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
-0:?     'sbuf_c@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer int @count})
-0:?     'sbuf_unused' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:?     'sbuf_a' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of float @data})
+0:?     'sbuf_a@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer uint @count})
+0:?     'sbuf_c' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of float @data})
+0:?     'sbuf_c@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer uint @count})
+0:?     'sbuf_unused' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of float @data})
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 0:?     'pos' (layout( location=0) flat in uint)
 
@@ -72,17 +72,17 @@
 0:?     Sequence
 0:8      move second child to first child ( temp 4-component vector of float)
 0:8        indirect index (layout( row_major std430) buffer 4-component vector of float)
-0:8          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of 4-component vector of float)
-0:8            'sbuf_a' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:8          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of 4-component vector of float)
+0:8            'sbuf_a' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of float @data})
 0:8            Constant:
 0:8              0 (const uint)
 0:8          AtomicAdd ( temp uint)
-0:8            @count: direct index for structure ( temp int)
-0:8              'sbuf_a@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer int @count})
+0:8            @count: direct index for structure ( temp uint)
+0:8              'sbuf_a@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer uint @count})
 0:8              Constant:
 0:8                0 (const int)
 0:8            Constant:
-0:8              1 (const int)
+0:8              1 (const uint)
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
@@ -90,18 +90,18 @@
 0:?           4.000000
 0:10      Branch: Return with expression
 0:10        indirect index (layout( row_major std430) buffer 4-component vector of float)
-0:10          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of 4-component vector of float)
-0:10            'sbuf_c' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:10          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of 4-component vector of float)
+0:10            'sbuf_c' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of float @data})
 0:10            Constant:
 0:10              0 (const uint)
 0:10          add ( temp uint)
 0:10            AtomicAdd ( temp uint)
-0:10              @count: direct index for structure ( temp int)
-0:10                'sbuf_c@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer int @count})
+0:10              @count: direct index for structure ( temp uint)
+0:10                'sbuf_c@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer uint @count})
 0:10                Constant:
 0:10                  0 (const int)
 0:10              Constant:
-0:10                -1 (const int)
+0:10                4294967295 (const uint)
 0:10            Constant:
 0:10              -1 (const int)
 0:7  Function Definition: main( ( temp void)
@@ -115,16 +115,16 @@
 0:7        Function Call: @main(u1; ( temp 4-component vector of float)
 0:?           'pos' ( temp uint)
 0:?   Linker Objects
-0:?     'sbuf_a' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
-0:?     'sbuf_a@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer int @count})
-0:?     'sbuf_c' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
-0:?     'sbuf_c@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer int @count})
-0:?     'sbuf_unused' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:?     'sbuf_a' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of float @data})
+0:?     'sbuf_a@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer uint @count})
+0:?     'sbuf_c' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of float @data})
+0:?     'sbuf_c@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer uint @count})
+0:?     'sbuf_unused' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of float @data})
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 0:?     'pos' (layout( location=0) flat in uint)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 56
 
                               Capability Shader
@@ -142,8 +142,8 @@
                               Name 20  "sbuf_a@count"
                               MemberName 20(sbuf_a@count) 0  "@count"
                               Name 22  "sbuf_a@count"
-                              Name 36  "sbuf_c"
-                              Name 37  "sbuf_c@count"
+                              Name 35  "sbuf_c"
+                              Name 36  "sbuf_c@count"
                               Name 46  "pos"
                               Name 48  "pos"
                               Name 51  "@entryPointOutput"
@@ -156,8 +156,8 @@
                               MemberDecorate 20(sbuf_a@count) 0 Offset 0
                               Decorate 20(sbuf_a@count) BufferBlock
                               Decorate 22(sbuf_a@count) DescriptorSet 0
-                              Decorate 36(sbuf_c) DescriptorSet 0
-                              Decorate 37(sbuf_c@count) DescriptorSet 0
+                              Decorate 35(sbuf_c) DescriptorSet 0
+                              Decorate 36(sbuf_c@count) DescriptorSet 0
                               Decorate 48(pos) Flat
                               Decorate 48(pos) Location 0
                               Decorate 51(@entryPointOutput) Location 0
@@ -175,22 +175,22 @@
       17(sbuf_a):     16(ptr) Variable Uniform
               18:             TypeInt 32 1
               19:     18(int) Constant 0
-20(sbuf_a@count):             TypeStruct 18(int)
+20(sbuf_a@count):             TypeStruct 6(int)
               21:             TypePointer Uniform 20(sbuf_a@count)
 22(sbuf_a@count):     21(ptr) Variable Uniform
-              23:             TypePointer Uniform 18(int)
-              25:     18(int) Constant 1
-              26:      6(int) Constant 1
-              27:      6(int) Constant 0
-              29:    8(float) Constant 1065353216
-              30:    8(float) Constant 1073741824
-              31:    8(float) Constant 1077936128
-              32:    8(float) Constant 1082130432
-              33:    9(fvec4) ConstantComposite 29 30 31 32
-              34:             TypePointer Uniform 9(fvec4)
-      36(sbuf_c):     16(ptr) Variable Uniform
-37(sbuf_c@count):     21(ptr) Variable Uniform
-              39:     18(int) Constant 4294967295
+              23:             TypePointer Uniform 6(int)
+              25:      6(int) Constant 1
+              26:      6(int) Constant 0
+              28:    8(float) Constant 1065353216
+              29:    8(float) Constant 1073741824
+              30:    8(float) Constant 1077936128
+              31:    8(float) Constant 1082130432
+              32:    9(fvec4) ConstantComposite 28 29 30 31
+              33:             TypePointer Uniform 9(fvec4)
+      35(sbuf_c):     16(ptr) Variable Uniform
+36(sbuf_c@count):     21(ptr) Variable Uniform
+              38:      6(int) Constant 4294967295
+              40:     18(int) Constant 4294967295
               47:             TypePointer Input 6(int)
          48(pos):     47(ptr) Variable Input
               50:             TypePointer Output 9(fvec4)
@@ -212,13 +212,13 @@
          11(pos):      7(ptr) FunctionParameter
               13:             Label
               24:     23(ptr) AccessChain 22(sbuf_a@count) 19
-              28:      6(int) AtomicIAdd 24 26 27 25
-              35:     34(ptr) AccessChain 17(sbuf_a) 19 28
-                              Store 35 33
-              38:     23(ptr) AccessChain 37(sbuf_c@count) 19
-              40:      6(int) AtomicIAdd 38 26 27 39
-              41:      6(int) IAdd 40 39
-              42:     34(ptr) AccessChain 36(sbuf_c) 19 41
+              27:      6(int) AtomicIAdd 24 25 26 25
+              34:     33(ptr) AccessChain 17(sbuf_a) 19 27
+                              Store 34 32
+              37:     23(ptr) AccessChain 36(sbuf_c@count) 19
+              39:      6(int) AtomicIAdd 37 25 26 38
+              41:      6(int) IAdd 39 40
+              42:     33(ptr) AccessChain 35(sbuf_c) 19 41
               43:    9(fvec4) Load 42
                               ReturnValue 43
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.structbuffer.atomics.frag.out b/Test/baseResults/hlsl.structbuffer.atomics.frag.out
index 2e85173..a03b4d8 100644
--- a/Test/baseResults/hlsl.structbuffer.atomics.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.atomics.frag.out
@@ -6,10 +6,10 @@
 0:5    Function Parameters: 
 0:5      'pos' ( in uint)
 0:?     Sequence
-0:8      AtomicAdd ( temp void)
+0:8      AtomicAdd ( temp uint)
 0:8        indirect index (layout( row_major std430) buffer uint)
-0:8          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:8            'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:8          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:8            'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:8            Constant:
 0:8              0 (const uint)
 0:8          right-shift ( temp int)
@@ -23,8 +23,8 @@
 0:9        'u' ( temp uint)
 0:9        AtomicAdd ( temp uint)
 0:9          indirect index (layout( row_major std430) buffer uint)
-0:9            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:9              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:9            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:9              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:9              Constant:
 0:9                0 (const uint)
 0:9            right-shift ( temp int)
@@ -34,10 +34,10 @@
 0:9                2 (const int)
 0:9          Constant:
 0:9            1 (const int)
-0:10      AtomicAnd ( temp void)
+0:10      AtomicAnd ( temp uint)
 0:10        indirect index (layout( row_major std430) buffer uint)
-0:10          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:10            'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:10          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:10            'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:10            Constant:
 0:10              0 (const uint)
 0:10          right-shift ( temp int)
@@ -51,8 +51,8 @@
 0:11        'u' ( temp uint)
 0:11        AtomicAnd ( temp uint)
 0:11          indirect index (layout( row_major std430) buffer uint)
-0:11            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:11              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:11              Constant:
 0:11                0 (const uint)
 0:11            right-shift ( temp int)
@@ -67,8 +67,8 @@
 0:12        Convert int to uint ( temp uint)
 0:12          AtomicCompSwap ( temp int)
 0:12            indirect index (layout( row_major std430) buffer uint)
-0:12              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                Constant:
 0:12                  0 (const uint)
 0:12              right-shift ( temp int)
@@ -84,8 +84,8 @@
 0:14        'u' ( temp uint)
 0:14        AtomicExchange ( temp uint)
 0:14          indirect index (layout( row_major std430) buffer uint)
-0:14            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:14              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:14            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:14              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:14              Constant:
 0:14                0 (const uint)
 0:14            right-shift ( temp int)
@@ -95,10 +95,10 @@
 0:14                2 (const int)
 0:14          Constant:
 0:14            1 (const int)
-0:15      AtomicMax ( temp void)
+0:15      AtomicMax ( temp uint)
 0:15        indirect index (layout( row_major std430) buffer uint)
-0:15          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:15            'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:15          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:15            'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:15            Constant:
 0:15              0 (const uint)
 0:15          right-shift ( temp int)
@@ -112,8 +112,8 @@
 0:16        'u' ( temp uint)
 0:16        AtomicMax ( temp uint)
 0:16          indirect index (layout( row_major std430) buffer uint)
-0:16            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:16              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:16            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:16              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:16              Constant:
 0:16                0 (const uint)
 0:16            right-shift ( temp int)
@@ -123,10 +123,10 @@
 0:16                2 (const int)
 0:16          Constant:
 0:16            1 (const int)
-0:17      AtomicMin ( temp void)
+0:17      AtomicMin ( temp uint)
 0:17        indirect index (layout( row_major std430) buffer uint)
-0:17          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:17            'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:17          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:17            'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:17            Constant:
 0:17              0 (const uint)
 0:17          right-shift ( temp int)
@@ -140,8 +140,8 @@
 0:18        'u' ( temp uint)
 0:18        AtomicMin ( temp uint)
 0:18          indirect index (layout( row_major std430) buffer uint)
-0:18            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:18              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:18            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:18              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:18              Constant:
 0:18                0 (const uint)
 0:18            right-shift ( temp int)
@@ -151,10 +151,10 @@
 0:18                2 (const int)
 0:18          Constant:
 0:18            1 (const int)
-0:19      AtomicOr ( temp void)
+0:19      AtomicOr ( temp uint)
 0:19        indirect index (layout( row_major std430) buffer uint)
-0:19          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:19            'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:19          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:19            'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:19            Constant:
 0:19              0 (const uint)
 0:19          right-shift ( temp int)
@@ -168,8 +168,8 @@
 0:20        'u' ( temp uint)
 0:20        AtomicOr ( temp uint)
 0:20          indirect index (layout( row_major std430) buffer uint)
-0:20            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:20              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:20            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:20              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:20              Constant:
 0:20                0 (const uint)
 0:20            right-shift ( temp int)
@@ -179,10 +179,10 @@
 0:20                2 (const int)
 0:20          Constant:
 0:20            1 (const int)
-0:21      AtomicXor ( temp void)
+0:21      AtomicXor ( temp uint)
 0:21        indirect index (layout( row_major std430) buffer uint)
-0:21          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:21            'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:21          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:21            'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:21            Constant:
 0:21              0 (const uint)
 0:21          right-shift ( temp int)
@@ -196,8 +196,8 @@
 0:22        'u' ( temp uint)
 0:22        AtomicXor ( temp uint)
 0:22          indirect index (layout( row_major std430) buffer uint)
-0:22            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:22              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:22            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:22              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:22              Constant:
 0:22                0 (const uint)
 0:22            right-shift ( temp int)
@@ -211,8 +211,8 @@
 0:24        Construct vec4 ( temp 4-component vector of float)
 0:24          Convert uint to float ( temp float)
 0:24            indirect index (layout( row_major std430) buffer uint)
-0:24              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:24                'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:24              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:24                'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:24                Constant:
 0:24                  0 (const uint)
 0:24              right-shift ( temp int)
@@ -230,7 +230,7 @@
 0:5        Function Call: @main(u1; ( temp 4-component vector of float)
 0:?           'pos' ( temp uint)
 0:?   Linker Objects
-0:?     'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:?     'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 0:?     'pos' (layout( location=0) flat in uint)
 
@@ -245,10 +245,10 @@
 0:5    Function Parameters: 
 0:5      'pos' ( in uint)
 0:?     Sequence
-0:8      AtomicAdd ( temp void)
+0:8      AtomicAdd ( temp uint)
 0:8        indirect index (layout( row_major std430) buffer uint)
-0:8          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:8            'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:8          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:8            'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:8            Constant:
 0:8              0 (const uint)
 0:8          right-shift ( temp int)
@@ -262,8 +262,8 @@
 0:9        'u' ( temp uint)
 0:9        AtomicAdd ( temp uint)
 0:9          indirect index (layout( row_major std430) buffer uint)
-0:9            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:9              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:9            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:9              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:9              Constant:
 0:9                0 (const uint)
 0:9            right-shift ( temp int)
@@ -273,10 +273,10 @@
 0:9                2 (const int)
 0:9          Constant:
 0:9            1 (const int)
-0:10      AtomicAnd ( temp void)
+0:10      AtomicAnd ( temp uint)
 0:10        indirect index (layout( row_major std430) buffer uint)
-0:10          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:10            'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:10          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:10            'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:10            Constant:
 0:10              0 (const uint)
 0:10          right-shift ( temp int)
@@ -290,8 +290,8 @@
 0:11        'u' ( temp uint)
 0:11        AtomicAnd ( temp uint)
 0:11          indirect index (layout( row_major std430) buffer uint)
-0:11            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:11              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:11              Constant:
 0:11                0 (const uint)
 0:11            right-shift ( temp int)
@@ -306,8 +306,8 @@
 0:12        Convert int to uint ( temp uint)
 0:12          AtomicCompSwap ( temp int)
 0:12            indirect index (layout( row_major std430) buffer uint)
-0:12              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                Constant:
 0:12                  0 (const uint)
 0:12              right-shift ( temp int)
@@ -323,8 +323,8 @@
 0:14        'u' ( temp uint)
 0:14        AtomicExchange ( temp uint)
 0:14          indirect index (layout( row_major std430) buffer uint)
-0:14            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:14              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:14            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:14              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:14              Constant:
 0:14                0 (const uint)
 0:14            right-shift ( temp int)
@@ -334,10 +334,10 @@
 0:14                2 (const int)
 0:14          Constant:
 0:14            1 (const int)
-0:15      AtomicMax ( temp void)
+0:15      AtomicMax ( temp uint)
 0:15        indirect index (layout( row_major std430) buffer uint)
-0:15          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:15            'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:15          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:15            'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:15            Constant:
 0:15              0 (const uint)
 0:15          right-shift ( temp int)
@@ -351,8 +351,8 @@
 0:16        'u' ( temp uint)
 0:16        AtomicMax ( temp uint)
 0:16          indirect index (layout( row_major std430) buffer uint)
-0:16            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:16              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:16            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:16              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:16              Constant:
 0:16                0 (const uint)
 0:16            right-shift ( temp int)
@@ -362,10 +362,10 @@
 0:16                2 (const int)
 0:16          Constant:
 0:16            1 (const int)
-0:17      AtomicMin ( temp void)
+0:17      AtomicMin ( temp uint)
 0:17        indirect index (layout( row_major std430) buffer uint)
-0:17          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:17            'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:17          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:17            'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:17            Constant:
 0:17              0 (const uint)
 0:17          right-shift ( temp int)
@@ -379,8 +379,8 @@
 0:18        'u' ( temp uint)
 0:18        AtomicMin ( temp uint)
 0:18          indirect index (layout( row_major std430) buffer uint)
-0:18            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:18              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:18            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:18              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:18              Constant:
 0:18                0 (const uint)
 0:18            right-shift ( temp int)
@@ -390,10 +390,10 @@
 0:18                2 (const int)
 0:18          Constant:
 0:18            1 (const int)
-0:19      AtomicOr ( temp void)
+0:19      AtomicOr ( temp uint)
 0:19        indirect index (layout( row_major std430) buffer uint)
-0:19          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:19            'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:19          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:19            'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:19            Constant:
 0:19              0 (const uint)
 0:19          right-shift ( temp int)
@@ -407,8 +407,8 @@
 0:20        'u' ( temp uint)
 0:20        AtomicOr ( temp uint)
 0:20          indirect index (layout( row_major std430) buffer uint)
-0:20            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:20              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:20            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:20              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:20              Constant:
 0:20                0 (const uint)
 0:20            right-shift ( temp int)
@@ -418,10 +418,10 @@
 0:20                2 (const int)
 0:20          Constant:
 0:20            1 (const int)
-0:21      AtomicXor ( temp void)
+0:21      AtomicXor ( temp uint)
 0:21        indirect index (layout( row_major std430) buffer uint)
-0:21          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:21            'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:21          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:21            'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:21            Constant:
 0:21              0 (const uint)
 0:21          right-shift ( temp int)
@@ -435,8 +435,8 @@
 0:22        'u' ( temp uint)
 0:22        AtomicXor ( temp uint)
 0:22          indirect index (layout( row_major std430) buffer uint)
-0:22            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:22              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:22            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:22              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:22              Constant:
 0:22                0 (const uint)
 0:22            right-shift ( temp int)
@@ -450,8 +450,8 @@
 0:24        Construct vec4 ( temp 4-component vector of float)
 0:24          Convert uint to float ( temp float)
 0:24            indirect index (layout( row_major std430) buffer uint)
-0:24              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:24                'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:24              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:24                'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:24                Constant:
 0:24                  0 (const uint)
 0:24              right-shift ( temp int)
@@ -469,12 +469,12 @@
 0:5        Function Call: @main(u1; ( temp 4-component vector of float)
 0:?           'pos' ( temp uint)
 0:?   Linker Objects
-0:?     'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:?     'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 0:?     'pos' (layout( location=0) flat in uint)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 87
 
                               Capability Shader
@@ -542,14 +542,14 @@
            29(u):      7(ptr) Variable Function
               22:     18(int) ShiftRightArithmetic 20 21
               24:     23(ptr) AccessChain 17(sbuf) 19 22
-              28:           2 AtomicIAdd 24 26 27 25
+              28:      6(int) AtomicIAdd 24 26 27 25
               30:     18(int) ShiftRightArithmetic 20 21
               31:     23(ptr) AccessChain 17(sbuf) 19 30
               32:      6(int) AtomicIAdd 31 26 27 25
                               Store 29(u) 32
               33:     18(int) ShiftRightArithmetic 20 21
               34:     23(ptr) AccessChain 17(sbuf) 19 33
-              35:           2 AtomicAnd 34 26 27 25
+              35:      6(int) AtomicAnd 34 26 27 25
               36:     18(int) ShiftRightArithmetic 20 21
               37:     23(ptr) AccessChain 17(sbuf) 19 36
               38:      6(int) AtomicAnd 37 26 27 25
@@ -565,28 +565,28 @@
                               Store 29(u) 45
               46:     18(int) ShiftRightArithmetic 20 21
               47:     23(ptr) AccessChain 17(sbuf) 19 46
-              48:           2 AtomicSMax 47 26 27 25
+              48:      6(int) AtomicUMax 47 26 27 25
               49:     18(int) ShiftRightArithmetic 20 21
               50:     23(ptr) AccessChain 17(sbuf) 19 49
               51:      6(int) AtomicUMax 50 26 27 25
                               Store 29(u) 51
               52:     18(int) ShiftRightArithmetic 20 21
               53:     23(ptr) AccessChain 17(sbuf) 19 52
-              54:           2 AtomicSMin 53 26 27 25
+              54:      6(int) AtomicUMin 53 26 27 25
               55:     18(int) ShiftRightArithmetic 20 21
               56:     23(ptr) AccessChain 17(sbuf) 19 55
               57:      6(int) AtomicUMin 56 26 27 25
                               Store 29(u) 57
               58:     18(int) ShiftRightArithmetic 20 21
               59:     23(ptr) AccessChain 17(sbuf) 19 58
-              60:           2 AtomicOr 59 26 27 25
+              60:      6(int) AtomicOr 59 26 27 25
               61:     18(int) ShiftRightArithmetic 20 21
               62:     23(ptr) AccessChain 17(sbuf) 19 61
               63:      6(int) AtomicOr 62 26 27 25
                               Store 29(u) 63
               64:     18(int) ShiftRightArithmetic 20 21
               65:     23(ptr) AccessChain 17(sbuf) 19 64
-              66:           2 AtomicXor 65 26 27 25
+              66:      6(int) AtomicXor 65 26 27 25
               67:     18(int) ShiftRightArithmetic 20 21
               68:     23(ptr) AccessChain 17(sbuf) 19 67
               69:      6(int) AtomicXor 68 26 27 25
diff --git a/Test/baseResults/hlsl.structbuffer.byte.frag.out b/Test/baseResults/hlsl.structbuffer.byte.frag.out
index a4084ae..a9831a2 100644
--- a/Test/baseResults/hlsl.structbuffer.byte.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.byte.frag.out
@@ -10,8 +10,8 @@
 0:7        move second child to first child ( temp uint)
 0:7          'size' ( temp uint)
 0:7          array length ( temp uint)
-0:7            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:7              'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:7            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:7              'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:7              Constant:
 0:7                0 (const uint)
 0:12      Branch: Return with expression
@@ -20,8 +20,8 @@
 0:9            add ( temp 4-component vector of float)
 0:9              Convert uint to float ( temp float)
 0:9                indirect index (layout( row_major std430) buffer uint)
-0:9                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:9                    'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:9                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:9                    'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:9                    Constant:
 0:9                      0 (const uint)
 0:9                  right-shift ( temp int)
@@ -41,15 +41,15 @@
 0:10                        Constant:
 0:10                          2 (const int)
 0:?                     Construct vec2 ( temp 2-component vector of uint)
-0:10                      indirect index ( temp float)
-0:10                        @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:10                          'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:10                      indirect index ( temp uint)
+0:10                        @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:10                          'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:10                          Constant:
 0:10                            0 (const uint)
 0:10                        'byteAddrTemp' ( temp int)
-0:10                      indirect index ( temp float)
-0:10                        @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:10                          'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:10                      indirect index ( temp uint)
+0:10                        @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:10                          'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:10                          Constant:
 0:10                            0 (const uint)
 0:10                        add ( temp int)
@@ -73,24 +73,24 @@
 0:11                      Constant:
 0:11                        2 (const int)
 0:?                   Construct vec3 ( temp 3-component vector of uint)
-0:11                    indirect index ( temp float)
-0:11                      @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11                        'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11                    indirect index ( temp uint)
+0:11                      @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:11                        'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:11                        Constant:
 0:11                          0 (const uint)
 0:11                      'byteAddrTemp' ( temp int)
-0:11                    indirect index ( temp float)
-0:11                      @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11                        'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11                    indirect index ( temp uint)
+0:11                      @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:11                        'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:11                        Constant:
 0:11                          0 (const uint)
 0:11                      add ( temp int)
 0:11                        'byteAddrTemp' ( temp int)
 0:11                        Constant:
 0:11                          1 (const int)
-0:11                    indirect index ( temp float)
-0:11                      @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11                        'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11                    indirect index ( temp uint)
+0:11                      @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:11                        'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:11                        Constant:
 0:11                          0 (const uint)
 0:11                      add ( temp int)
@@ -111,33 +111,33 @@
 0:12                  Constant:
 0:12                    2 (const int)
 0:?               Construct vec4 ( temp 4-component vector of uint)
-0:12                indirect index ( temp float)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                indirect index ( temp uint)
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  'byteAddrTemp' ( temp int)
-0:12                indirect index ( temp float)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                indirect index ( temp uint)
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  add ( temp int)
 0:12                    'byteAddrTemp' ( temp int)
 0:12                    Constant:
 0:12                      1 (const int)
-0:12                indirect index ( temp float)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                indirect index ( temp uint)
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  add ( temp int)
 0:12                    'byteAddrTemp' ( temp int)
 0:12                    Constant:
 0:12                      2 (const int)
-0:12                indirect index ( temp float)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                indirect index ( temp uint)
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  add ( temp int)
@@ -155,7 +155,7 @@
 0:5        Function Call: @main(u1; ( temp 4-component vector of float)
 0:?           'pos' ( temp uint)
 0:?   Linker Objects
-0:?     'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:?     'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 0:?     'pos' (layout( location=0) flat in uint)
 
@@ -174,8 +174,8 @@
 0:7        move second child to first child ( temp uint)
 0:7          'size' ( temp uint)
 0:7          array length ( temp uint)
-0:7            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:7              'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:7            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:7              'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:7              Constant:
 0:7                0 (const uint)
 0:12      Branch: Return with expression
@@ -184,8 +184,8 @@
 0:9            add ( temp 4-component vector of float)
 0:9              Convert uint to float ( temp float)
 0:9                indirect index (layout( row_major std430) buffer uint)
-0:9                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:9                    'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:9                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:9                    'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:9                    Constant:
 0:9                      0 (const uint)
 0:9                  right-shift ( temp int)
@@ -205,15 +205,15 @@
 0:10                        Constant:
 0:10                          2 (const int)
 0:?                     Construct vec2 ( temp 2-component vector of uint)
-0:10                      indirect index ( temp float)
-0:10                        @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:10                          'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:10                      indirect index ( temp uint)
+0:10                        @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:10                          'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:10                          Constant:
 0:10                            0 (const uint)
 0:10                        'byteAddrTemp' ( temp int)
-0:10                      indirect index ( temp float)
-0:10                        @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:10                          'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:10                      indirect index ( temp uint)
+0:10                        @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:10                          'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:10                          Constant:
 0:10                            0 (const uint)
 0:10                        add ( temp int)
@@ -237,24 +237,24 @@
 0:11                      Constant:
 0:11                        2 (const int)
 0:?                   Construct vec3 ( temp 3-component vector of uint)
-0:11                    indirect index ( temp float)
-0:11                      @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11                        'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11                    indirect index ( temp uint)
+0:11                      @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:11                        'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:11                        Constant:
 0:11                          0 (const uint)
 0:11                      'byteAddrTemp' ( temp int)
-0:11                    indirect index ( temp float)
-0:11                      @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11                        'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11                    indirect index ( temp uint)
+0:11                      @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:11                        'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:11                        Constant:
 0:11                          0 (const uint)
 0:11                      add ( temp int)
 0:11                        'byteAddrTemp' ( temp int)
 0:11                        Constant:
 0:11                          1 (const int)
-0:11                    indirect index ( temp float)
-0:11                      @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11                        'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11                    indirect index ( temp uint)
+0:11                      @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:11                        'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:11                        Constant:
 0:11                          0 (const uint)
 0:11                      add ( temp int)
@@ -275,33 +275,33 @@
 0:12                  Constant:
 0:12                    2 (const int)
 0:?               Construct vec4 ( temp 4-component vector of uint)
-0:12                indirect index ( temp float)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                indirect index ( temp uint)
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  'byteAddrTemp' ( temp int)
-0:12                indirect index ( temp float)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                indirect index ( temp uint)
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  add ( temp int)
 0:12                    'byteAddrTemp' ( temp int)
 0:12                    Constant:
 0:12                      1 (const int)
-0:12                indirect index ( temp float)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                indirect index ( temp uint)
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  add ( temp int)
 0:12                    'byteAddrTemp' ( temp int)
 0:12                    Constant:
 0:12                      2 (const int)
-0:12                indirect index ( temp float)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                indirect index ( temp uint)
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  add ( temp int)
@@ -319,12 +319,12 @@
 0:5        Function Call: @main(u1; ( temp 4-component vector of float)
 0:?           'pos' ( temp uint)
 0:?   Linker Objects
-0:?     'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:?     'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 0:?     'pos' (layout( location=0) flat in uint)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // 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 baed6ff..65945b4 100644
--- a/Test/baseResults/hlsl.structbuffer.coherent.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.coherent.frag.out
@@ -8,8 +8,8 @@
 0:?     Sequence
 0:13      move second child to first child ( temp float)
 0:13        indirect index (layout( row_major std430) buffer float)
-0:13          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of float)
-0:13            'sbuf2' (layout( row_major std430) coherent buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
+0:13          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of float)
+0:13            'sbuf2' (layout( row_major std430) coherent buffer block{layout( row_major std430) buffer unsized 1-element array of float @data})
 0:13            Constant:
 0:13              0 (const uint)
 0:13          add ( temp uint)
@@ -22,8 +22,8 @@
 0:17        move second child to first child ( temp uint)
 0:17          'size' ( temp uint)
 0:17          array length ( temp uint)
-0:17            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test})
-0:17              'sbuf' (layout( row_major std430) coherent buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test} @data})
+0:17            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test})
+0:17              'sbuf' (layout( row_major std430) coherent buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test} @data})
 0:17              Constant:
 0:17                0 (const uint)
 0:17        move second child to first child ( temp uint)
@@ -34,8 +34,8 @@
 0:19        Condition
 0:19        test: direct index for structure ( temp bool)
 0:19          indirect index (layout( row_major std430) buffer structure{ temp 3-component vector of float color,  temp bool test})
-0:19            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test})
-0:19              'sbuf' (layout( row_major std430) coherent buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test} @data})
+0:19            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test})
+0:19              'sbuf' (layout( row_major std430) coherent buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test} @data})
 0:19              Constant:
 0:19                0 (const uint)
 0:19            'pos' ( in uint)
@@ -47,16 +47,16 @@
 0:20            add ( temp 3-component vector of float)
 0:20              color: direct index for structure ( temp 3-component vector of float)
 0:20                indirect index (layout( row_major std430) buffer structure{ temp 3-component vector of float color,  temp bool test})
-0:20                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test})
-0:20                    'sbuf' (layout( row_major std430) coherent buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test} @data})
+0:20                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test})
+0:20                    'sbuf' (layout( row_major std430) coherent buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test} @data})
 0:20                    Constant:
 0:20                      0 (const uint)
 0:20                  'pos' ( in uint)
 0:20                Constant:
 0:20                  0 (const int)
 0:20              indirect index (layout( row_major std430) buffer float)
-0:20                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of float)
-0:20                  'sbuf2' (layout( row_major std430) coherent buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
+0:20                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of float)
+0:20                  'sbuf2' (layout( row_major std430) coherent buffer block{layout( row_major std430) buffer unsized 1-element array of float @data})
 0:20                  Constant:
 0:20                    0 (const uint)
 0:20                'pos' ( in uint)
@@ -80,8 +80,8 @@
 0:12        Function Call: @main(u1; ( temp 4-component vector of float)
 0:?           'pos' ( temp uint)
 0:?   Linker Objects
-0:?     'sbuf' (layout( row_major std430) coherent buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test} @data})
-0:?     'sbuf2' (layout( row_major std430) coherent buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
+0:?     'sbuf' (layout( row_major std430) coherent buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test} @data})
+0:?     'sbuf2' (layout( row_major std430) coherent buffer block{layout( row_major std430) buffer unsized 1-element array of float @data})
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 0:?     'pos' (layout( location=0) flat in uint)
 
@@ -98,8 +98,8 @@
 0:?     Sequence
 0:13      move second child to first child ( temp float)
 0:13        indirect index (layout( row_major std430) buffer float)
-0:13          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of float)
-0:13            'sbuf2' (layout( row_major std430) coherent buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
+0:13          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of float)
+0:13            'sbuf2' (layout( row_major std430) coherent buffer block{layout( row_major std430) buffer unsized 1-element array of float @data})
 0:13            Constant:
 0:13              0 (const uint)
 0:13          add ( temp uint)
@@ -112,8 +112,8 @@
 0:17        move second child to first child ( temp uint)
 0:17          'size' ( temp uint)
 0:17          array length ( temp uint)
-0:17            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test})
-0:17              'sbuf' (layout( row_major std430) coherent buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test} @data})
+0:17            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test})
+0:17              'sbuf' (layout( row_major std430) coherent buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test} @data})
 0:17              Constant:
 0:17                0 (const uint)
 0:17        move second child to first child ( temp uint)
@@ -124,8 +124,8 @@
 0:19        Condition
 0:19        test: direct index for structure ( temp bool)
 0:19          indirect index (layout( row_major std430) buffer structure{ temp 3-component vector of float color,  temp bool test})
-0:19            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test})
-0:19              'sbuf' (layout( row_major std430) coherent buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test} @data})
+0:19            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test})
+0:19              'sbuf' (layout( row_major std430) coherent buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test} @data})
 0:19              Constant:
 0:19                0 (const uint)
 0:19            'pos' ( in uint)
@@ -137,16 +137,16 @@
 0:20            add ( temp 3-component vector of float)
 0:20              color: direct index for structure ( temp 3-component vector of float)
 0:20                indirect index (layout( row_major std430) buffer structure{ temp 3-component vector of float color,  temp bool test})
-0:20                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test})
-0:20                    'sbuf' (layout( row_major std430) coherent buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test} @data})
+0:20                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test})
+0:20                    'sbuf' (layout( row_major std430) coherent buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test} @data})
 0:20                    Constant:
 0:20                      0 (const uint)
 0:20                  'pos' ( in uint)
 0:20                Constant:
 0:20                  0 (const int)
 0:20              indirect index (layout( row_major std430) buffer float)
-0:20                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of float)
-0:20                  'sbuf2' (layout( row_major std430) coherent buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
+0:20                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of float)
+0:20                  'sbuf2' (layout( row_major std430) coherent buffer block{layout( row_major std430) buffer unsized 1-element array of float @data})
 0:20                  Constant:
 0:20                    0 (const uint)
 0:20                'pos' ( in uint)
@@ -170,13 +170,13 @@
 0:12        Function Call: @main(u1; ( temp 4-component vector of float)
 0:?           'pos' ( temp uint)
 0:?   Linker Objects
-0:?     'sbuf' (layout( row_major std430) coherent buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test} @data})
-0:?     'sbuf2' (layout( row_major std430) coherent buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
+0:?     'sbuf' (layout( row_major std430) coherent buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test} @data})
+0:?     'sbuf2' (layout( row_major std430) coherent buffer block{layout( row_major std430) buffer unsized 1-element array of float @data})
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 0:?     'pos' (layout( location=0) flat in uint)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // 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 9b49bc7..d1591d5 100644
--- a/Test/baseResults/hlsl.structbuffer.floatidx.comp.out
+++ b/Test/baseResults/hlsl.structbuffer.floatidx.comp.out
@@ -10,18 +10,18 @@
 0:14        move second child to first child ( temp structure{ temp 4-component vector of float color,  temp 2-component vector of uint threadId})
 0:14          'data' ( temp structure{ temp 4-component vector of float color,  temp 2-component vector of uint threadId})
 0:14          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of float color,  temp 2-component vector of uint threadId})
-0:14            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of float color,  temp 2-component vector of uint threadId})
-0:14              'csb' (layout( binding=1 row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of float color,  temp 2-component vector of uint threadId} @data})
+0:14            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of float color,  temp 2-component vector of uint threadId})
+0:14              'csb' (layout( binding=1 row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of float color,  temp 2-component vector of uint threadId} @data})
 0:14              Constant:
 0:14                0 (const uint)
 0:14            add ( temp uint)
 0:14              AtomicAdd ( temp uint)
-0:14                @count: direct index for structure ( temp int)
-0:14                  'csb@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer int @count})
+0:14                @count: direct index for structure ( temp uint)
+0:14                  'csb@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer uint @count})
 0:14                  Constant:
 0:14                    0 (const int)
 0:14                Constant:
-0:14                  -1 (const int)
+0:14                  4294967295 (const uint)
 0:14              Constant:
 0:14                -1 (const int)
 0:15      Sequence
@@ -53,8 +53,8 @@
 0:16        'storeTemp' ( temp 4-component vector of float)
 0:18      move second child to first child ( temp 4-component vector of float)
 0:18        indirect index (layout( row_major std430) buffer 4-component vector of float)
-0:18          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of 4-component vector of float)
-0:18            'rwsb' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:18          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of 4-component vector of float)
+0:18            'rwsb' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of float @data})
 0:18            Constant:
 0:18              0 (const uint)
 0:18          Convert float to uint ( temp uint)
@@ -63,8 +63,8 @@
 0:18              Constant:
 0:18                0 (const int)
 0:18        indirect index (layout( row_major std430) buffer 4-component vector of float)
-0:18          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of 4-component vector of float)
-0:18            'rwsb' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:18          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of 4-component vector of float)
+0:18            'rwsb' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of float @data})
 0:18            Constant:
 0:18              0 (const uint)
 0:18          Convert float to uint ( temp uint)
@@ -82,9 +82,9 @@
 0:?         'nThreadId' ( temp 3-component vector of uint)
 0:?   Linker Objects
 0:?     'outtx' (layout( rgba32f) uniform image2D)
-0:?     'csb' (layout( binding=1 row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of float color,  temp 2-component vector of uint threadId} @data})
-0:?     'csb@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer int @count})
-0:?     'rwsb' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:?     'csb' (layout( binding=1 row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of float color,  temp 2-component vector of uint threadId} @data})
+0:?     'csb@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer uint @count})
+0:?     'rwsb' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of float @data})
 0:?     'nThreadId' ( in 3-component vector of uint GlobalInvocationID)
 
 
@@ -102,18 +102,18 @@
 0:14        move second child to first child ( temp structure{ temp 4-component vector of float color,  temp 2-component vector of uint threadId})
 0:14          'data' ( temp structure{ temp 4-component vector of float color,  temp 2-component vector of uint threadId})
 0:14          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of float color,  temp 2-component vector of uint threadId})
-0:14            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of float color,  temp 2-component vector of uint threadId})
-0:14              'csb' (layout( binding=1 row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of float color,  temp 2-component vector of uint threadId} @data})
+0:14            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of float color,  temp 2-component vector of uint threadId})
+0:14              'csb' (layout( binding=1 row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of float color,  temp 2-component vector of uint threadId} @data})
 0:14              Constant:
 0:14                0 (const uint)
 0:14            add ( temp uint)
 0:14              AtomicAdd ( temp uint)
-0:14                @count: direct index for structure ( temp int)
-0:14                  'csb@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer int @count})
+0:14                @count: direct index for structure ( temp uint)
+0:14                  'csb@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer uint @count})
 0:14                  Constant:
 0:14                    0 (const int)
 0:14                Constant:
-0:14                  -1 (const int)
+0:14                  4294967295 (const uint)
 0:14              Constant:
 0:14                -1 (const int)
 0:15      Sequence
@@ -145,8 +145,8 @@
 0:16        'storeTemp' ( temp 4-component vector of float)
 0:18      move second child to first child ( temp 4-component vector of float)
 0:18        indirect index (layout( row_major std430) buffer 4-component vector of float)
-0:18          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of 4-component vector of float)
-0:18            'rwsb' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:18          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of 4-component vector of float)
+0:18            'rwsb' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of float @data})
 0:18            Constant:
 0:18              0 (const uint)
 0:18          Convert float to uint ( temp uint)
@@ -155,8 +155,8 @@
 0:18              Constant:
 0:18                0 (const int)
 0:18        indirect index (layout( row_major std430) buffer 4-component vector of float)
-0:18          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of 4-component vector of float)
-0:18            'rwsb' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:18          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of 4-component vector of float)
+0:18            'rwsb' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of float @data})
 0:18            Constant:
 0:18              0 (const uint)
 0:18          Convert float to uint ( temp uint)
@@ -174,19 +174,19 @@
 0:?         'nThreadId' ( temp 3-component vector of uint)
 0:?   Linker Objects
 0:?     'outtx' (layout( rgba32f) uniform image2D)
-0:?     'csb' (layout( binding=1 row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of float color,  temp 2-component vector of uint threadId} @data})
-0:?     'csb@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer int @count})
-0:?     'rwsb' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:?     'csb' (layout( binding=1 row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of float color,  temp 2-component vector of uint threadId} @data})
+0:?     'csb@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer uint @count})
+0:?     'rwsb' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of float @data})
 0:?     'nThreadId' ( in 3-component vector of uint GlobalInvocationID)
 
 // Module Version 10000
-// Generated by (magic number): 80002
-// Id's are bound by 84
+// Generated by (magic number): 80006
+// Id's are bound by 85
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint GLCompute 4  "main" 79
+                              EntryPoint GLCompute 4  "main" 80
                               ExecutionMode 4 LocalSize 1 1 1
                               Source HLSL 500
                               Name 4  "main"
@@ -205,15 +205,15 @@
                               Name 26  "csb@count"
                               MemberName 26(csb@count) 0  "@count"
                               Name 28  "csb@count"
-                              Name 48  "coord"
-                              Name 52  "storeTemp"
-                              Name 57  "outtx"
-                              Name 63  "rwsb"
-                              MemberName 63(rwsb) 0  "@data"
-                              Name 65  "rwsb"
-                              Name 77  "nThreadId"
-                              Name 79  "nThreadId"
-                              Name 81  "param"
+                              Name 49  "coord"
+                              Name 53  "storeTemp"
+                              Name 58  "outtx"
+                              Name 64  "rwsb"
+                              MemberName 64(rwsb) 0  "@data"
+                              Name 66  "rwsb"
+                              Name 78  "nThreadId"
+                              Name 80  "nThreadId"
+                              Name 82  "param"
                               MemberDecorate 19(sb_t) 0 Offset 0
                               MemberDecorate 19(sb_t) 1 Offset 16
                               Decorate 20 ArrayStride 32
@@ -224,12 +224,12 @@
                               MemberDecorate 26(csb@count) 0 Offset 0
                               Decorate 26(csb@count) BufferBlock
                               Decorate 28(csb@count) DescriptorSet 0
-                              Decorate 57(outtx) DescriptorSet 0
-                              Decorate 62 ArrayStride 16
-                              MemberDecorate 63(rwsb) 0 Offset 0
-                              Decorate 63(rwsb) BufferBlock
-                              Decorate 65(rwsb) DescriptorSet 0
-                              Decorate 79(nThreadId) BuiltIn GlobalInvocationId
+                              Decorate 58(outtx) DescriptorSet 0
+                              Decorate 63 ArrayStride 16
+                              MemberDecorate 64(rwsb) 0 Offset 0
+                              Decorate 64(rwsb) BufferBlock
+                              Decorate 66(rwsb) DescriptorSet 0
+                              Decorate 80(nThreadId) BuiltIn GlobalInvocationId
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
@@ -248,79 +248,80 @@
          23(csb):     22(ptr) Variable Uniform
               24:             TypeInt 32 1
               25:     24(int) Constant 0
-   26(csb@count):             TypeStruct 24(int)
+   26(csb@count):             TypeStruct 6(int)
               27:             TypePointer Uniform 26(csb@count)
    28(csb@count):     27(ptr) Variable Uniform
-              29:             TypePointer Uniform 24(int)
-              31:     24(int) Constant 4294967295
+              29:             TypePointer Uniform 6(int)
+              31:      6(int) Constant 4294967295
               32:      6(int) Constant 1
               33:      6(int) Constant 0
-              36:             TypePointer Uniform 19(sb_t)
-              40:             TypePointer Function 14(fvec4)
-              43:     24(int) Constant 1
-              44:             TypePointer Function 15(ivec2)
-              46:             TypeVector 13(float) 2
-              47:             TypePointer Function 46(fvec2)
-              55:             TypeImage 13(float) 2D nonsampled format:Rgba32f
-              56:             TypePointer UniformConstant 55
-       57(outtx):     56(ptr) Variable UniformConstant
-              62:             TypeRuntimeArray 14(fvec4)
-        63(rwsb):             TypeStruct 62
-              64:             TypePointer Uniform 63(rwsb)
-        65(rwsb):     64(ptr) Variable Uniform
-              66:             TypePointer Function 13(float)
-              73:             TypePointer Uniform 14(fvec4)
-              78:             TypePointer Input 7(ivec3)
-   79(nThreadId):     78(ptr) Variable Input
+              35:     24(int) Constant 4294967295
+              37:             TypePointer Uniform 19(sb_t)
+              41:             TypePointer Function 14(fvec4)
+              44:     24(int) Constant 1
+              45:             TypePointer Function 15(ivec2)
+              47:             TypeVector 13(float) 2
+              48:             TypePointer Function 47(fvec2)
+              56:             TypeImage 13(float) 2D nonsampled format:Rgba32f
+              57:             TypePointer UniformConstant 56
+       58(outtx):     57(ptr) Variable UniformConstant
+              63:             TypeRuntimeArray 14(fvec4)
+        64(rwsb):             TypeStruct 63
+              65:             TypePointer Uniform 64(rwsb)
+        66(rwsb):     65(ptr) Variable Uniform
+              67:             TypePointer Function 13(float)
+              74:             TypePointer Uniform 14(fvec4)
+              79:             TypePointer Input 7(ivec3)
+   80(nThreadId):     79(ptr) Variable Input
          4(main):           2 Function None 3
                5:             Label
-   77(nThreadId):      8(ptr) Variable Function
-       81(param):      8(ptr) Variable Function
-              80:    7(ivec3) Load 79(nThreadId)
-                              Store 77(nThreadId) 80
-              82:    7(ivec3) Load 77(nThreadId)
-                              Store 81(param) 82
-              83:           2 FunctionCall 11(@main(vu3;) 81(param)
+   78(nThreadId):      8(ptr) Variable Function
+       82(param):      8(ptr) Variable Function
+              81:    7(ivec3) Load 80(nThreadId)
+                              Store 78(nThreadId) 81
+              83:    7(ivec3) Load 78(nThreadId)
+                              Store 82(param) 83
+              84:           2 FunctionCall 11(@main(vu3;) 82(param)
                               Return
                               FunctionEnd
   11(@main(vu3;):           2 Function None 9
    10(nThreadId):      8(ptr) FunctionParameter
               12:             Label
         18(data):     17(ptr) Variable Function
-       48(coord):     47(ptr) Variable Function
-   52(storeTemp):     40(ptr) Variable Function
+       49(coord):     48(ptr) Variable Function
+   53(storeTemp):     41(ptr) Variable Function
               30:     29(ptr) AccessChain 28(csb@count) 25
               34:      6(int) AtomicIAdd 30 32 33 31
-              35:      6(int) IAdd 34 31
-              37:     36(ptr) AccessChain 23(csb) 25 35
-              38:    19(sb_t) Load 37
-              39:   14(fvec4) CompositeExtract 38 0
-              41:     40(ptr) AccessChain 18(data) 25
-                              Store 41 39
-              42:   15(ivec2) CompositeExtract 38 1
-              45:     44(ptr) AccessChain 18(data) 43
-                              Store 45 42
-              49:     44(ptr) AccessChain 18(data) 43
-              50:   15(ivec2) Load 49
-              51:   46(fvec2) ConvertUToF 50
-                              Store 48(coord) 51
-              53:     40(ptr) AccessChain 18(data) 25
-              54:   14(fvec4) Load 53
-                              Store 52(storeTemp) 54
-              58:          55 Load 57(outtx)
-              59:   46(fvec2) Load 48(coord)
-              60:   15(ivec2) ConvertFToU 59
-              61:   14(fvec4) Load 52(storeTemp)
-                              ImageWrite 58 60 61
-              67:     66(ptr) AccessChain 48(coord) 33
-              68:   13(float) Load 67
-              69:      6(int) ConvertFToU 68
-              70:     66(ptr) AccessChain 48(coord) 32
-              71:   13(float) Load 70
-              72:      6(int) ConvertFToU 71
-              74:     73(ptr) AccessChain 65(rwsb) 25 72
-              75:   14(fvec4) Load 74
-              76:     73(ptr) AccessChain 65(rwsb) 25 69
-                              Store 76 75
+              36:      6(int) IAdd 34 35
+              38:     37(ptr) AccessChain 23(csb) 25 36
+              39:    19(sb_t) Load 38
+              40:   14(fvec4) CompositeExtract 39 0
+              42:     41(ptr) AccessChain 18(data) 25
+                              Store 42 40
+              43:   15(ivec2) CompositeExtract 39 1
+              46:     45(ptr) AccessChain 18(data) 44
+                              Store 46 43
+              50:     45(ptr) AccessChain 18(data) 44
+              51:   15(ivec2) Load 50
+              52:   47(fvec2) ConvertUToF 51
+                              Store 49(coord) 52
+              54:     41(ptr) AccessChain 18(data) 25
+              55:   14(fvec4) Load 54
+                              Store 53(storeTemp) 55
+              59:          56 Load 58(outtx)
+              60:   47(fvec2) Load 49(coord)
+              61:   15(ivec2) ConvertFToU 60
+              62:   14(fvec4) Load 53(storeTemp)
+                              ImageWrite 59 61 62
+              68:     67(ptr) AccessChain 49(coord) 33
+              69:   13(float) Load 68
+              70:      6(int) ConvertFToU 69
+              71:     67(ptr) AccessChain 49(coord) 32
+              72:   13(float) Load 71
+              73:      6(int) ConvertFToU 72
+              75:     74(ptr) AccessChain 66(rwsb) 25 73
+              76:   14(fvec4) Load 75
+              77:     74(ptr) AccessChain 66(rwsb) 25 70
+                              Store 77 76
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.structbuffer.fn.frag.out b/Test/baseResults/hlsl.structbuffer.fn.frag.out
index e5e68f1..396ab20 100644
--- a/Test/baseResults/hlsl.structbuffer.fn.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.fn.frag.out
@@ -4,27 +4,27 @@
 0:? Sequence
 0:5  Function Definition: get(block--vu4[0]1;u1; ( temp 4-component vector of uint)
 0:5    Function Parameters: 
-0:5      'sb' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
+0:5      'sb' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of uint @data})
 0:5      'bufferOffset' ( in uint)
 0:?     Sequence
 0:6      Branch: Return with expression
 0:6        indirect index (layout( row_major std430) buffer 4-component vector of uint)
-0:6          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint)
-0:6            'sb' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
+0:6          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of 4-component vector of uint)
+0:6            'sb' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of uint @data})
 0:6            Constant:
 0:6              0 (const uint)
 0:6          'bufferOffset' ( in uint)
 0:10  Function Definition: set(block--vu4[0]1;u1;vu4; ( temp void)
 0:10    Function Parameters: 
-0:10      'sb' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
-0:10      'sb@count' ( buffer block{layout( row_major std430) buffer int @count})
+0:10      'sb' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of uint @data})
+0:10      'sb@count' ( buffer block{layout( row_major std430) buffer uint @count})
 0:10      'bufferOffset' ( in uint)
 0:10      'data' ( in 4-component vector of uint)
 0:?     Sequence
 0:11      move second child to first child ( temp 4-component vector of uint)
 0:11        indirect index ( buffer 4-component vector of uint)
-0:11          @data: direct index for structure ( buffer implicitly-sized array of 4-component vector of uint)
-0:11            'sb' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
+0:11          @data: direct index for structure ( buffer unsized 1-element array of 4-component vector of uint)
+0:11            'sb' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of uint @data})
 0:11            Constant:
 0:11              0 (const uint)
 0:11          'bufferOffset' ( in uint)
@@ -34,12 +34,12 @@
 0:20      'pos' ( in uint)
 0:?     Sequence
 0:21      Function Call: set(block--vu4[0]1;u1;vu4; ( temp void)
-0:21        'sbuf2' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
-0:21        'sbuf2@count' ( buffer block{layout( row_major std430) buffer int @count})
+0:21        'sbuf2' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of uint @data})
+0:21        'sbuf2@count' ( buffer block{layout( row_major std430) buffer uint @count})
 0:21        Constant:
 0:21          2 (const uint)
 0:21        Function Call: get(block--vu4[0]1;u1; ( temp 4-component vector of uint)
-0:21          'sbuf' (layout( binding=10 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
+0:21          'sbuf' (layout( binding=10 row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of uint @data})
 0:21          Constant:
 0:21            3 (const uint)
 0:23      Branch: Return with expression
@@ -59,10 +59,10 @@
 0:20        Function Call: @main(u1; ( temp 4-component vector of float)
 0:?           'pos' ( temp uint)
 0:?   Linker Objects
-0:?     'sbuf' (layout( binding=10 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
-0:?     'sbuf2' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
-0:?     'sbuf2@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer int @count})
-0:?     'sbuf3' (layout( binding=12 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of 3-component vector of uint @data})
+0:?     'sbuf' (layout( binding=10 row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of uint @data})
+0:?     'sbuf2' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of uint @data})
+0:?     'sbuf2@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer uint @count})
+0:?     'sbuf3' (layout( binding=12 row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of 3-component vector of uint @data})
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 0:?     'pos' (layout( location=0) flat in uint)
 
@@ -75,27 +75,27 @@
 0:? Sequence
 0:5  Function Definition: get(block--vu4[0]1;u1; ( temp 4-component vector of uint)
 0:5    Function Parameters: 
-0:5      'sb' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
+0:5      'sb' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of uint @data})
 0:5      'bufferOffset' ( in uint)
 0:?     Sequence
 0:6      Branch: Return with expression
 0:6        indirect index (layout( row_major std430) buffer 4-component vector of uint)
-0:6          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint)
-0:6            'sb' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
+0:6          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of 4-component vector of uint)
+0:6            'sb' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of uint @data})
 0:6            Constant:
 0:6              0 (const uint)
 0:6          'bufferOffset' ( in uint)
 0:10  Function Definition: set(block--vu4[0]1;u1;vu4; ( temp void)
 0:10    Function Parameters: 
-0:10      'sb' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
-0:10      'sb@count' ( buffer block{layout( row_major std430) buffer int @count})
+0:10      'sb' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of uint @data})
+0:10      'sb@count' ( buffer block{layout( row_major std430) buffer uint @count})
 0:10      'bufferOffset' ( in uint)
 0:10      'data' ( in 4-component vector of uint)
 0:?     Sequence
 0:11      move second child to first child ( temp 4-component vector of uint)
 0:11        indirect index ( buffer 4-component vector of uint)
-0:11          @data: direct index for structure ( buffer implicitly-sized array of 4-component vector of uint)
-0:11            'sb' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
+0:11          @data: direct index for structure ( buffer unsized 1-element array of 4-component vector of uint)
+0:11            'sb' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of uint @data})
 0:11            Constant:
 0:11              0 (const uint)
 0:11          'bufferOffset' ( in uint)
@@ -105,12 +105,12 @@
 0:20      'pos' ( in uint)
 0:?     Sequence
 0:21      Function Call: set(block--vu4[0]1;u1;vu4; ( temp void)
-0:21        'sbuf2' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
-0:21        'sbuf2@count' ( buffer block{layout( row_major std430) buffer int @count})
+0:21        'sbuf2' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of uint @data})
+0:21        'sbuf2@count' ( buffer block{layout( row_major std430) buffer uint @count})
 0:21        Constant:
 0:21          2 (const uint)
 0:21        Function Call: get(block--vu4[0]1;u1; ( temp 4-component vector of uint)
-0:21          'sbuf' (layout( binding=10 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
+0:21          'sbuf' (layout( binding=10 row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of uint @data})
 0:21          Constant:
 0:21            3 (const uint)
 0:23      Branch: Return with expression
@@ -130,21 +130,21 @@
 0:20        Function Call: @main(u1; ( temp 4-component vector of float)
 0:?           'pos' ( temp uint)
 0:?   Linker Objects
-0:?     'sbuf' (layout( binding=10 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
-0:?     'sbuf2' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
-0:?     'sbuf2@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer int @count})
-0:?     'sbuf3' (layout( binding=12 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of 3-component vector of uint @data})
+0:?     'sbuf' (layout( binding=10 row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of uint @data})
+0:?     'sbuf2' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of uint @data})
+0:?     'sbuf2@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer uint @count})
+0:?     'sbuf3' (layout( binding=12 row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of 3-component vector of uint @data})
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 0:?     'pos' (layout( location=0) flat in uint)
 
 // Module Version 10000
-// Generated by (magic number): 80002
-// Id's are bound by 83
+// Generated by (magic number): 80006
+// Id's are bound by 78
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 68 71
+                              EntryPoint Fragment 4  "main" 63 66
                               ExecutionMode 4 OriginUpperLeft
                               Source HLSL 500
                               Name 4  "main"
@@ -155,34 +155,31 @@
                               Name 14  "bufferOffset"
                               Name 18  ""
                               MemberName 18 0  "@data"
-                              Name 21  ""
-                              MemberName 21 0  "@count"
-                              Name 29  "set(block--vu4[0]1;u1;vu4;"
-                              Name 25  "sb"
-                              Name 26  "sb@count"
-                              Name 27  "bufferOffset"
-                              Name 28  "data"
-                              Name 35  "@main(u1;"
-                              Name 34  "pos"
+                              Name 20  ""
+                              MemberName 20 0  "@count"
+                              Name 28  "set(block--vu4[0]1;u1;vu4;"
+                              Name 24  "sb"
+                              Name 25  "sb@count"
+                              Name 26  "bufferOffset"
+                              Name 27  "data"
+                              Name 34  "@main(u1;"
+                              Name 33  "pos"
                               Name 47  "sbuf2"
-                              Name 49  "sbuf2@count"
-                              Name 52  "sbuf"
+                              Name 48  "sbuf2@count"
+                              Name 50  "sbuf"
+                              Name 52  "param"
                               Name 54  "param"
                               Name 55  "param"
-                              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"
+                              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"
                               Decorate 8 ArrayStride 16
                               MemberDecorate 9 0 NonWritable
                               MemberDecorate 9 0 Offset 0
@@ -191,76 +188,74 @@
                               Decorate 17 ArrayStride 16
                               MemberDecorate 18 0 Offset 0
                               Decorate 18 BufferBlock
-                              Decorate 21 BufferBlock
+                              Decorate 20 BufferBlock
                               Decorate 47(sbuf2) DescriptorSet 0
-                              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
+                              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
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
                7:             TypeVector 6(int) 4
                8:             TypeRuntimeArray 7(ivec4)
                9:             TypeStruct 8
-              10:             TypePointer Function 9(struct)
+              10:             TypePointer Uniform 9(struct)
               11:             TypePointer Function 6(int)
               12:             TypeFunction 7(ivec4) 10(ptr) 11(ptr)
               17:             TypeRuntimeArray 7(ivec4)
               18:             TypeStruct 17
-              19:             TypePointer Function 18(struct)
-              20:             TypeInt 32 1
-              21:             TypeStruct 20(int)
-              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
-              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
+              19:             TypePointer Uniform 18(struct)
+              20:             TypeStruct 6(int)
+              21:             TypePointer Uniform 20(struct)
+              22:             TypePointer Function 7(ivec4)
+              23:             TypeFunction 2 19(ptr) 21(ptr) 11(ptr) 22(ptr)
+              30:             TypeFloat 32
+              31:             TypeVector 30(float) 4
+              32:             TypeFunction 31(fvec4) 11(ptr)
+              36:             TypeInt 32 1
+              37:     36(int) Constant 0
+              39:             TypePointer Uniform 7(ivec4)
+       47(sbuf2):     19(ptr) Variable Uniform
+ 48(sbuf2@count):     21(ptr) Variable Uniform
+              49:      6(int) Constant 2
+        50(sbuf):     10(ptr) Variable Uniform
+              51:      6(int) Constant 3
+              57:   30(float) Constant 0
+              58:   31(fvec4) ConstantComposite 57 57 57 57
+              62:             TypePointer Input 6(int)
+         63(pos):     62(ptr) Variable Input
+              65:             TypePointer Output 31(fvec4)
+66(@entryPointOutput):     65(ptr) Variable Output
+ 70(sbuf2@count):             TypeStruct 6(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
          4(main):           2 Function None 3
                5:             Label
-         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
+         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:   31(fvec4) FunctionCall 34(@main(u1;) 67(param)
+                              Store 66(@entryPointOutput) 69
                               Return
                               FunctionEnd
 15(get(block--vu4[0]1;u1;):    7(ivec4) Function None 12
@@ -268,35 +263,32 @@
 14(bufferOffset):     11(ptr) FunctionParameter
               16:             Label
               38:      6(int) Load 14(bufferOffset)
-              39:     23(ptr) AccessChain 13(sb) 37 38
-              40:    7(ivec4) Load 39
-                              ReturnValue 40
+              40:     39(ptr) AccessChain 13(sb) 37 38
+              41:    7(ivec4) Load 40
+                              ReturnValue 41
                               FunctionEnd
-29(set(block--vu4[0]1;u1;vu4;):           2 Function None 24
-          25(sb):     19(ptr) FunctionParameter
-    26(sb@count):     22(ptr) FunctionParameter
-27(bufferOffset):     11(ptr) FunctionParameter
-        28(data):     23(ptr) FunctionParameter
-              30:             Label
-              43:      6(int) Load 27(bufferOffset)
-              44:    7(ivec4) Load 28(data)
-              45:     23(ptr) AccessChain 25(sb) 37 43
-                              Store 45 44
+28(set(block--vu4[0]1;u1;vu4;):           2 Function None 23
+          24(sb):     19(ptr) FunctionParameter
+    25(sb@count):     21(ptr) FunctionParameter
+26(bufferOffset):     11(ptr) FunctionParameter
+        27(data):     22(ptr) FunctionParameter
+              29:             Label
+              44:      6(int) Load 26(bufferOffset)
+              45:    7(ivec4) Load 27(data)
+              46:     39(ptr) AccessChain 24(sb) 37 44
+                              Store 46 45
                               Return
                               FunctionEnd
-   35(@main(u1;):   32(fvec4) Function None 33
-         34(pos):     11(ptr) FunctionParameter
-              36:             Label
-       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
+   34(@main(u1;):   31(fvec4) Function None 32
+         33(pos):     11(ptr) FunctionParameter
+              35:             Label
+       52(param):     11(ptr) Variable Function
+       54(param):     11(ptr) Variable Function
+       55(param):     22(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
                               Store 55(param) 53
-              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
+              56:           2 FunctionCall 28(set(block--vu4[0]1;u1;vu4;) 47(sbuf2) 48(sbuf2@count) 54(param) 55(param)
+                              ReturnValue 58
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.structbuffer.fn2.comp.out b/Test/baseResults/hlsl.structbuffer.fn2.comp.out
index bb84b99..95f2b85 100644
--- a/Test/baseResults/hlsl.structbuffer.fn2.comp.out
+++ b/Test/baseResults/hlsl.structbuffer.fn2.comp.out
@@ -5,7 +5,7 @@
 0:5  Function Definition: testLoad(u1;block--u1[0]1; ( temp 2-component vector of uint)
 0:5    Function Parameters: 
 0:5      'loc' ( in uint)
-0:5      'buffer' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:5      'buffer' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:?     Sequence
 0:6      Sequence
 0:6        move second child to first child ( temp 2-component vector of uint)
@@ -18,15 +18,15 @@
 0:6                Constant:
 0:6                  2 (const int)
 0:?             Construct vec2 ( temp 2-component vector of uint)
-0:6              indirect index ( temp float)
-0:6                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:6                  'buffer' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:6              indirect index ( temp uint)
+0:6                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:6                  'buffer' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:6                  Constant:
 0:6                    0 (const uint)
 0:6                'byteAddrTemp' ( temp int)
-0:6              indirect index ( temp float)
-0:6                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:6                  'buffer' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:6              indirect index ( temp uint)
+0:6                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:6                  'buffer' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:6                  Constant:
 0:6                    0 (const uint)
 0:6                add ( temp int)
@@ -44,7 +44,7 @@
 0:13          'result' ( temp 2-component vector of uint)
 0:13          Function Call: testLoad(u1;block--u1[0]1; ( temp 2-component vector of uint)
 0:13            'dispatchId' ( in uint)
-0:13            'g_input' (layout( binding=0 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:13            'g_input' (layout( binding=0 row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:14      Sequence
 0:14        imageStore ( temp void)
 0:14          'g_output' (layout( binding=1 rg32ui) uniform uimageBuffer)
@@ -60,7 +60,7 @@
 0:12      Function Call: @main(u1; ( temp void)
 0:?         'dispatchId' ( temp uint)
 0:?   Linker Objects
-0:?     'g_input' (layout( binding=0 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:?     'g_input' (layout( binding=0 row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:?     'g_output' (layout( binding=1 rg32ui) uniform uimageBuffer)
 0:?     'dispatchId' ( in uint GlobalInvocationID)
 
@@ -74,7 +74,7 @@
 0:5  Function Definition: testLoad(u1;block--u1[0]1; ( temp 2-component vector of uint)
 0:5    Function Parameters: 
 0:5      'loc' ( in uint)
-0:5      'buffer' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:5      'buffer' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:?     Sequence
 0:6      Sequence
 0:6        move second child to first child ( temp 2-component vector of uint)
@@ -87,15 +87,15 @@
 0:6                Constant:
 0:6                  2 (const int)
 0:?             Construct vec2 ( temp 2-component vector of uint)
-0:6              indirect index ( temp float)
-0:6                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:6                  'buffer' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:6              indirect index ( temp uint)
+0:6                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:6                  'buffer' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:6                  Constant:
 0:6                    0 (const uint)
 0:6                'byteAddrTemp' ( temp int)
-0:6              indirect index ( temp float)
-0:6                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:6                  'buffer' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:6              indirect index ( temp uint)
+0:6                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:6                  'buffer' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:6                  Constant:
 0:6                    0 (const uint)
 0:6                add ( temp int)
@@ -113,7 +113,7 @@
 0:13          'result' ( temp 2-component vector of uint)
 0:13          Function Call: testLoad(u1;block--u1[0]1; ( temp 2-component vector of uint)
 0:13            'dispatchId' ( in uint)
-0:13            'g_input' (layout( binding=0 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:13            'g_input' (layout( binding=0 row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:14      Sequence
 0:14        imageStore ( temp void)
 0:14          'g_output' (layout( binding=1 rg32ui) uniform uimageBuffer)
@@ -129,20 +129,20 @@
 0:12      Function Call: @main(u1; ( temp void)
 0:?         'dispatchId' ( temp uint)
 0:?   Linker Objects
-0:?     'g_input' (layout( binding=0 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:?     'g_input' (layout( binding=0 row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:?     'g_output' (layout( binding=1 rg32ui) uniform uimageBuffer)
 0:?     'dispatchId' ( in uint GlobalInvocationID)
 
 // Module Version 10000
-// Generated by (magic number): 80002
-// Id's are bound by 62
+// Generated by (magic number): 80006
+// Id's are bound by 61
 
                               Capability Shader
                               Capability ImageBuffer
                               Capability StorageImageExtendedFormats
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint GLCompute 4  "main" 57
+                              EntryPoint GLCompute 4  "main" 56
                               ExecutionMode 4 LocalSize 256 1 1
                               Source HLSL 500
                               Name 4  "main"
@@ -155,14 +155,13 @@
                               Name 18  "dispatchId"
                               Name 22  "result"
                               Name 25  "byteAddrTemp"
-                              Name 42  "result"
+                              Name 43  "result"
                               Name 44  "g_input"
                               Name 45  "param"
-                              Name 47  "param"
-                              Name 51  "g_output"
-                              Name 55  "dispatchId"
-                              Name 57  "dispatchId"
-                              Name 59  "param"
+                              Name 50  "g_output"
+                              Name 54  "dispatchId"
+                              Name 56  "dispatchId"
+                              Name 58  "param"
                               Decorate 8 ArrayStride 4
                               MemberDecorate 9 0 NonWritable
                               MemberDecorate 9 0 Offset 0
@@ -170,16 +169,16 @@
                               Decorate 14(buffer) NonWritable
                               Decorate 44(g_input) DescriptorSet 0
                               Decorate 44(g_input) Binding 0
-                              Decorate 51(g_output) DescriptorSet 0
-                              Decorate 51(g_output) Binding 1
-                              Decorate 57(dispatchId) BuiltIn GlobalInvocationId
+                              Decorate 50(g_output) DescriptorSet 0
+                              Decorate 50(g_output) Binding 1
+                              Decorate 56(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 Function 9(struct)
+              10:             TypePointer Uniform 9(struct)
               11:             TypeVector 6(int) 2
               12:             TypeFunction 11(ivec2) 7(ptr) 10(ptr)
               17:             TypeFunction 2 7(ptr)
@@ -188,23 +187,23 @@
               24:             TypePointer Function 23(int)
               27:     23(int) Constant 2
               29:     23(int) Constant 0
-              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
+              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
          4(main):           2 Function None 3
                5:             Label
-  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)
+  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)
                               Return
                               FunctionEnd
 15(testLoad(u1;block--u1[0]1;):   11(ivec2) Function None 12
@@ -217,30 +216,29 @@
               28:     23(int) ShiftRightLogical 26 27
                               Store 25(byteAddrTemp) 28
               30:     23(int) Load 25(byteAddrTemp)
-              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
+              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
                               FunctionEnd
    19(@main(u1;):           2 Function None 17
   18(dispatchId):      7(ptr) FunctionParameter
               20:             Label
-      42(result):     21(ptr) Variable Function
+      43(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
-              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
+              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
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.structbuffer.frag.out b/Test/baseResults/hlsl.structbuffer.frag.out
index 187a41b..7e8fc44 100644
--- a/Test/baseResults/hlsl.structbuffer.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.frag.out
@@ -10,8 +10,8 @@
 0:13        move second child to first child ( temp structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2})
 0:13          'mydata' ( temp structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2})
 0:13          indirect index (layout( row_major std430) buffer structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2})
-0:13            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2})
-0:13              'sbuf' (layout( binding=10 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2} @data})
+0:13            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2})
+0:13              'sbuf' (layout( binding=10 row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2} @data})
 0:13              Constant:
 0:13                0 (const uint)
 0:13            'pos' ( in uint)
@@ -19,8 +19,8 @@
 0:17        move second child to first child ( temp uint)
 0:17          'size' ( temp uint)
 0:17          array length ( temp uint)
-0:17            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2})
-0:17              'sbuf' (layout( binding=10 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2} @data})
+0:17            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2})
+0:17              'sbuf' (layout( binding=10 row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2} @data})
 0:17              Constant:
 0:17                0 (const uint)
 0:17        move second child to first child ( temp uint)
@@ -31,8 +31,8 @@
 0:19        Condition
 0:19        test: direct index for structure ( temp bool)
 0:19          indirect index (layout( row_major std430) buffer structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2})
-0:19            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2})
-0:19              'sbuf' (layout( binding=10 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2} @data})
+0:19            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2})
+0:19              'sbuf' (layout( binding=10 row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2} @data})
 0:19              Constant:
 0:19                0 (const uint)
 0:19            'pos' ( in uint)
@@ -44,16 +44,16 @@
 0:20            add ( temp 3-component vector of float)
 0:20              color: direct index for structure ( temp 3-component vector of float)
 0:20                indirect index (layout( row_major std430) buffer structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2})
-0:20                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2})
-0:20                    'sbuf' (layout( binding=10 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2} @data})
+0:20                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2})
+0:20                    'sbuf' (layout( binding=10 row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2} @data})
 0:20                    Constant:
 0:20                      0 (const uint)
 0:20                  'pos' ( in uint)
 0:20                Constant:
 0:20                  0 (const int)
 0:20              indirect index (layout( row_major std430) buffer float)
-0:20                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of float)
-0:20                  'sbuf2' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
+0:20                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of float)
+0:20                  'sbuf2' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of float @data})
 0:20                  Constant:
 0:20                    0 (const uint)
 0:20                'pos' ( in uint)
@@ -86,8 +86,8 @@
 0:12        Function Call: @main(u1; ( temp 4-component vector of float)
 0:?           'pos' ( temp uint)
 0:?   Linker Objects
-0:?     'sbuf' (layout( binding=10 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2} @data})
-0:?     'sbuf2' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
+0:?     'sbuf' (layout( binding=10 row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2} @data})
+0:?     'sbuf2' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of float @data})
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 0:?     'pos' (layout( location=0) flat in uint)
 
@@ -106,8 +106,8 @@
 0:13        move second child to first child ( temp structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2})
 0:13          'mydata' ( temp structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2})
 0:13          indirect index (layout( row_major std430) buffer structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2})
-0:13            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2})
-0:13              'sbuf' (layout( binding=10 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2} @data})
+0:13            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2})
+0:13              'sbuf' (layout( binding=10 row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2} @data})
 0:13              Constant:
 0:13                0 (const uint)
 0:13            'pos' ( in uint)
@@ -115,8 +115,8 @@
 0:17        move second child to first child ( temp uint)
 0:17          'size' ( temp uint)
 0:17          array length ( temp uint)
-0:17            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2})
-0:17              'sbuf' (layout( binding=10 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2} @data})
+0:17            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2})
+0:17              'sbuf' (layout( binding=10 row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2} @data})
 0:17              Constant:
 0:17                0 (const uint)
 0:17        move second child to first child ( temp uint)
@@ -127,8 +127,8 @@
 0:19        Condition
 0:19        test: direct index for structure ( temp bool)
 0:19          indirect index (layout( row_major std430) buffer structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2})
-0:19            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2})
-0:19              'sbuf' (layout( binding=10 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2} @data})
+0:19            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2})
+0:19              'sbuf' (layout( binding=10 row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2} @data})
 0:19              Constant:
 0:19                0 (const uint)
 0:19            'pos' ( in uint)
@@ -140,16 +140,16 @@
 0:20            add ( temp 3-component vector of float)
 0:20              color: direct index for structure ( temp 3-component vector of float)
 0:20                indirect index (layout( row_major std430) buffer structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2})
-0:20                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2})
-0:20                    'sbuf' (layout( binding=10 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2} @data})
+0:20                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2})
+0:20                    'sbuf' (layout( binding=10 row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2} @data})
 0:20                    Constant:
 0:20                      0 (const uint)
 0:20                  'pos' ( in uint)
 0:20                Constant:
 0:20                  0 (const int)
 0:20              indirect index (layout( row_major std430) buffer float)
-0:20                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of float)
-0:20                  'sbuf2' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
+0:20                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of float)
+0:20                  'sbuf2' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of float @data})
 0:20                  Constant:
 0:20                    0 (const uint)
 0:20                'pos' ( in uint)
@@ -182,13 +182,13 @@
 0:12        Function Call: @main(u1; ( temp 4-component vector of float)
 0:?           'pos' ( temp uint)
 0:?   Linker Objects
-0:?     'sbuf' (layout( binding=10 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2} @data})
-0:?     'sbuf2' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
+0:?     'sbuf' (layout( binding=10 row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2} @data})
+0:?     'sbuf2' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of float @data})
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 0:?     'pos' (layout( location=0) flat in uint)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 96
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.structbuffer.incdec.frag.hlslfun1.out b/Test/baseResults/hlsl.structbuffer.incdec.frag.hlslfun1.out
new file mode 100644
index 0000000..b5cb56d
--- /dev/null
+++ b/Test/baseResults/hlsl.structbuffer.incdec.frag.hlslfun1.out
@@ -0,0 +1,125 @@
+hlsl.structbuffer.incdec.frag
+// Module Version 10000
+// Generated by (magic number): 80006
+// Id's are bound by 70
+
+                              Capability Shader
+                              Extension  "SPV_GOOGLE_hlsl_functionality1"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 63 66
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 500
+                              Name 4  "main"
+                              Name 12  "@main(u1;"
+                              Name 11  "pos"
+                              Name 16  "result"
+                              Name 20  "sbuf_rw_i"
+                              MemberName 20(sbuf_rw_i) 0  "@data"
+                              Name 22  "sbuf_rw_i"
+                              Name 26  "sbuf_rw_d"
+                              Name 27  "sbuf_rw_nocounter"
+                              Name 33  "c1"
+                              Name 34  "sbuf_rw_i@count"
+                              MemberName 34(sbuf_rw_i@count) 0  "@count"
+                              Name 36  "sbuf_rw_i@count"
+                              Name 41  "c2"
+                              Name 42  "sbuf_rw_d@count"
+                              Name 61  "pos"
+                              Name 63  "pos"
+                              Name 66  "@entryPointOutput"
+                              Name 67  "param"
+                              Decorate 19 ArrayStride 16
+                              MemberDecorate 20(sbuf_rw_i) 0 Offset 0
+                              Decorate 20(sbuf_rw_i) BufferBlock
+                              Decorate 22(sbuf_rw_i) DescriptorSet 0
+                              Decorate 26(sbuf_rw_d) DescriptorSet 0
+                              Decorate 27(sbuf_rw_nocounter) DescriptorSet 0
+                              MemberDecorate 34(sbuf_rw_i@count) 0 Offset 0
+                              Decorate 34(sbuf_rw_i@count) BufferBlock
+                              Decorate 36(sbuf_rw_i@count) DescriptorSet 0
+                              Decorate 42(sbuf_rw_d@count) DescriptorSet 0
+                              Decorate 63(pos) Flat
+                              Decorate 63(pos) Location 0
+                              DecorateStringGOOGLE 63(pos) DecorationHlslSemanticGOOGLE  "FOO"
+                              Decorate 66(@entryPointOutput) Location 0
+                              DecorateStringGOOGLE 66(@entryPointOutput) DecorationHlslSemanticGOOGLE  "SV_TARGET0"
+                              DecorateId 22(sbuf_rw_i) DecorationHlslCounterBufferGOOGLE 36(sbuf_rw_i@count)
+                              DecorateId 26(sbuf_rw_d) DecorationHlslCounterBufferGOOGLE 42(sbuf_rw_d@count)
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypePointer Function 6(int)
+               8:             TypeFloat 32
+               9:             TypeVector 8(float) 4
+              10:             TypeFunction 9(fvec4) 7(ptr)
+              14:             TypeVector 6(int) 4
+              15:             TypePointer Function 14(ivec4)
+              17:      6(int) Constant 0
+              18:   14(ivec4) ConstantComposite 17 17 17 17
+              19:             TypeRuntimeArray 14(ivec4)
+   20(sbuf_rw_i):             TypeStruct 19
+              21:             TypePointer Uniform 20(sbuf_rw_i)
+   22(sbuf_rw_i):     21(ptr) Variable Uniform
+              23:             TypeInt 32 1
+              24:     23(int) Constant 0
+              25:     23(int) Constant 7
+   26(sbuf_rw_d):     21(ptr) Variable Uniform
+27(sbuf_rw_nocounter):     21(ptr) Variable Uniform
+              28:     23(int) Constant 5
+              29:      6(int) Constant 2
+              30:   14(ivec4) ConstantComposite 29 29 29 29
+              31:             TypePointer Uniform 14(ivec4)
+34(sbuf_rw_i@count):             TypeStruct 6(int)
+              35:             TypePointer Uniform 34(sbuf_rw_i@count)
+36(sbuf_rw_i@count):     35(ptr) Variable Uniform
+              37:             TypePointer Uniform 6(int)
+              39:      6(int) Constant 1
+42(sbuf_rw_d@count):     35(ptr) Variable Uniform
+              44:      6(int) Constant 4294967295
+              46:     23(int) Constant 4294967295
+              62:             TypePointer Input 6(int)
+         63(pos):     62(ptr) Variable Input
+              65:             TypePointer Output 9(fvec4)
+66(@entryPointOutput):     65(ptr) Variable Output
+         4(main):           2 Function None 3
+               5:             Label
+         61(pos):      7(ptr) Variable Function
+       67(param):      7(ptr) Variable Function
+              64:      6(int) Load 63(pos)
+                              Store 61(pos) 64
+              68:      6(int) Load 61(pos)
+                              Store 67(param) 68
+              69:    9(fvec4) FunctionCall 12(@main(u1;) 67(param)
+                              Store 66(@entryPointOutput) 69
+                              Return
+                              FunctionEnd
+   12(@main(u1;):    9(fvec4) Function None 10
+         11(pos):      7(ptr) FunctionParameter
+              13:             Label
+      16(result):     15(ptr) Variable Function
+          33(c1):      7(ptr) Variable Function
+          41(c2):      7(ptr) Variable Function
+                              Store 16(result) 18
+              32:     31(ptr) AccessChain 27(sbuf_rw_nocounter) 24 28
+                              Store 32 30
+              38:     37(ptr) AccessChain 36(sbuf_rw_i@count) 24
+              40:      6(int) AtomicIAdd 38 39 17 39
+                              Store 33(c1) 40
+              43:     37(ptr) AccessChain 42(sbuf_rw_d@count) 24
+              45:      6(int) AtomicIAdd 43 39 17 44
+              47:      6(int) IAdd 45 46
+                              Store 41(c2) 47
+              48:      7(ptr) AccessChain 16(result) 17
+              49:      6(int) Load 48
+              50:    8(float) ConvertUToF 49
+              51:      7(ptr) AccessChain 16(result) 39
+              52:      6(int) Load 51
+              53:    8(float) ConvertUToF 52
+              54:      6(int) Load 33(c1)
+              55:    8(float) ConvertUToF 54
+              56:      6(int) Load 41(c2)
+              57:    8(float) ConvertUToF 56
+              58:    9(fvec4) CompositeConstruct 50 53 55 57
+                              ReturnValue 58
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.structbuffer.incdec.frag.out b/Test/baseResults/hlsl.structbuffer.incdec.frag.out
index a63fcbe..0afea5b 100644
--- a/Test/baseResults/hlsl.structbuffer.incdec.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.incdec.frag.out
@@ -15,23 +15,23 @@
 0:8            0 (const uint)
 0:8            0 (const uint)
 0:10      direct index (layout( row_major std430) buffer 4-component vector of uint)
-0:10        @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint)
-0:10          'sbuf_rw_i' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
+0:10        @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of 4-component vector of uint)
+0:10          'sbuf_rw_i' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of uint @data})
 0:10          Constant:
 0:10            0 (const uint)
 0:10        Constant:
 0:10          7 (const int)
 0:11      direct index (layout( row_major std430) buffer 4-component vector of uint)
-0:11        @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint)
-0:11          'sbuf_rw_d' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
+0:11        @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of 4-component vector of uint)
+0:11          'sbuf_rw_d' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of uint @data})
 0:11          Constant:
 0:11            0 (const uint)
 0:11        Constant:
 0:11          7 (const int)
 0:13      move second child to first child ( temp 4-component vector of uint)
 0:13        direct index (layout( row_major std430) buffer 4-component vector of uint)
-0:13          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint)
-0:13            'sbuf_rw_nocounter' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
+0:13          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of 4-component vector of uint)
+0:13            'sbuf_rw_nocounter' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of uint @data})
 0:13            Constant:
 0:13              0 (const uint)
 0:13          Constant:
@@ -45,23 +45,23 @@
 0:15        move second child to first child ( temp uint)
 0:15          'c1' ( temp uint)
 0:15          AtomicAdd ( temp uint)
-0:15            @count: direct index for structure ( temp int)
-0:15              'sbuf_rw_i@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer int @count})
+0:15            @count: direct index for structure ( temp uint)
+0:15              'sbuf_rw_i@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer uint @count})
 0:15              Constant:
 0:15                0 (const int)
 0:15            Constant:
-0:15              1 (const int)
+0:15              1 (const uint)
 0:16      Sequence
 0:16        move second child to first child ( temp uint)
 0:16          'c2' ( temp uint)
 0:16          add ( temp uint)
 0:16            AtomicAdd ( temp uint)
-0:16              @count: direct index for structure ( temp int)
-0:16                'sbuf_rw_d@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer int @count})
+0:16              @count: direct index for structure ( temp uint)
+0:16                'sbuf_rw_d@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer uint @count})
 0:16                Constant:
 0:16                  0 (const int)
 0:16              Constant:
-0:16                -1 (const int)
+0:16                4294967295 (const uint)
 0:16            Constant:
 0:16              -1 (const int)
 0:18      Branch: Return with expression
@@ -91,11 +91,11 @@
 0:7        Function Call: @main(u1; ( temp 4-component vector of float)
 0:?           'pos' ( temp uint)
 0:?   Linker Objects
-0:?     'sbuf_rw_i' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
-0:?     'sbuf_rw_i@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer int @count})
-0:?     'sbuf_rw_d' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
-0:?     'sbuf_rw_d@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer int @count})
-0:?     'sbuf_rw_nocounter' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
+0:?     'sbuf_rw_i' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of uint @data})
+0:?     'sbuf_rw_i@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer uint @count})
+0:?     'sbuf_rw_d' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of uint @data})
+0:?     'sbuf_rw_d@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer uint @count})
+0:?     'sbuf_rw_nocounter' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of uint @data})
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 0:?     'pos' (layout( location=0) flat in uint)
 
@@ -119,23 +119,23 @@
 0:8            0 (const uint)
 0:8            0 (const uint)
 0:10      direct index (layout( row_major std430) buffer 4-component vector of uint)
-0:10        @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint)
-0:10          'sbuf_rw_i' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
+0:10        @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of 4-component vector of uint)
+0:10          'sbuf_rw_i' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of uint @data})
 0:10          Constant:
 0:10            0 (const uint)
 0:10        Constant:
 0:10          7 (const int)
 0:11      direct index (layout( row_major std430) buffer 4-component vector of uint)
-0:11        @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint)
-0:11          'sbuf_rw_d' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
+0:11        @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of 4-component vector of uint)
+0:11          'sbuf_rw_d' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of uint @data})
 0:11          Constant:
 0:11            0 (const uint)
 0:11        Constant:
 0:11          7 (const int)
 0:13      move second child to first child ( temp 4-component vector of uint)
 0:13        direct index (layout( row_major std430) buffer 4-component vector of uint)
-0:13          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint)
-0:13            'sbuf_rw_nocounter' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
+0:13          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of 4-component vector of uint)
+0:13            'sbuf_rw_nocounter' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of uint @data})
 0:13            Constant:
 0:13              0 (const uint)
 0:13          Constant:
@@ -149,23 +149,23 @@
 0:15        move second child to first child ( temp uint)
 0:15          'c1' ( temp uint)
 0:15          AtomicAdd ( temp uint)
-0:15            @count: direct index for structure ( temp int)
-0:15              'sbuf_rw_i@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer int @count})
+0:15            @count: direct index for structure ( temp uint)
+0:15              'sbuf_rw_i@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer uint @count})
 0:15              Constant:
 0:15                0 (const int)
 0:15            Constant:
-0:15              1 (const int)
+0:15              1 (const uint)
 0:16      Sequence
 0:16        move second child to first child ( temp uint)
 0:16          'c2' ( temp uint)
 0:16          add ( temp uint)
 0:16            AtomicAdd ( temp uint)
-0:16              @count: direct index for structure ( temp int)
-0:16                'sbuf_rw_d@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer int @count})
+0:16              @count: direct index for structure ( temp uint)
+0:16                'sbuf_rw_d@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer uint @count})
 0:16                Constant:
 0:16                  0 (const int)
 0:16              Constant:
-0:16                -1 (const int)
+0:16                4294967295 (const uint)
 0:16            Constant:
 0:16              -1 (const int)
 0:18      Branch: Return with expression
@@ -195,16 +195,16 @@
 0:7        Function Call: @main(u1; ( temp 4-component vector of float)
 0:?           'pos' ( temp uint)
 0:?   Linker Objects
-0:?     'sbuf_rw_i' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
-0:?     'sbuf_rw_i@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer int @count})
-0:?     'sbuf_rw_d' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
-0:?     'sbuf_rw_d@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer int @count})
-0:?     'sbuf_rw_nocounter' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
+0:?     'sbuf_rw_i' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of uint @data})
+0:?     'sbuf_rw_i@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer uint @count})
+0:?     'sbuf_rw_d' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of uint @data})
+0:?     'sbuf_rw_d@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer uint @count})
+0:?     'sbuf_rw_nocounter' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of uint @data})
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 0:?     'pos' (layout( location=0) flat in uint)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 70
 
                               Capability Shader
@@ -226,8 +226,8 @@
                               Name 34  "sbuf_rw_i@count"
                               MemberName 34(sbuf_rw_i@count) 0  "@count"
                               Name 36  "sbuf_rw_i@count"
-                              Name 42  "c2"
-                              Name 43  "sbuf_rw_d@count"
+                              Name 41  "c2"
+                              Name 42  "sbuf_rw_d@count"
                               Name 61  "pos"
                               Name 63  "pos"
                               Name 66  "@entryPointOutput"
@@ -241,7 +241,7 @@
                               MemberDecorate 34(sbuf_rw_i@count) 0 Offset 0
                               Decorate 34(sbuf_rw_i@count) BufferBlock
                               Decorate 36(sbuf_rw_i@count) DescriptorSet 0
-                              Decorate 43(sbuf_rw_d@count) DescriptorSet 0
+                              Decorate 42(sbuf_rw_d@count) DescriptorSet 0
                               Decorate 63(pos) Flat
                               Decorate 63(pos) Location 0
                               Decorate 66(@entryPointOutput) Location 0
@@ -269,14 +269,14 @@
               29:      6(int) Constant 2
               30:   14(ivec4) ConstantComposite 29 29 29 29
               31:             TypePointer Uniform 14(ivec4)
-34(sbuf_rw_i@count):             TypeStruct 23(int)
+34(sbuf_rw_i@count):             TypeStruct 6(int)
               35:             TypePointer Uniform 34(sbuf_rw_i@count)
 36(sbuf_rw_i@count):     35(ptr) Variable Uniform
-              37:             TypePointer Uniform 23(int)
-              39:     23(int) Constant 1
-              40:      6(int) Constant 1
-43(sbuf_rw_d@count):     35(ptr) Variable Uniform
-              45:     23(int) Constant 4294967295
+              37:             TypePointer Uniform 6(int)
+              39:      6(int) Constant 1
+42(sbuf_rw_d@count):     35(ptr) Variable Uniform
+              44:      6(int) Constant 4294967295
+              46:     23(int) Constant 4294967295
               62:             TypePointer Input 6(int)
          63(pos):     62(ptr) Variable Input
               65:             TypePointer Output 9(fvec4)
@@ -298,26 +298,26 @@
               13:             Label
       16(result):     15(ptr) Variable Function
           33(c1):      7(ptr) Variable Function
-          42(c2):      7(ptr) Variable Function
+          41(c2):      7(ptr) Variable Function
                               Store 16(result) 18
               32:     31(ptr) AccessChain 27(sbuf_rw_nocounter) 24 28
                               Store 32 30
               38:     37(ptr) AccessChain 36(sbuf_rw_i@count) 24
-              41:      6(int) AtomicIAdd 38 40 17 39
-                              Store 33(c1) 41
-              44:     37(ptr) AccessChain 43(sbuf_rw_d@count) 24
-              46:      6(int) AtomicIAdd 44 40 17 45
-              47:      6(int) IAdd 46 45
-                              Store 42(c2) 47
+              40:      6(int) AtomicIAdd 38 39 17 39
+                              Store 33(c1) 40
+              43:     37(ptr) AccessChain 42(sbuf_rw_d@count) 24
+              45:      6(int) AtomicIAdd 43 39 17 44
+              47:      6(int) IAdd 45 46
+                              Store 41(c2) 47
               48:      7(ptr) AccessChain 16(result) 17
               49:      6(int) Load 48
               50:    8(float) ConvertUToF 49
-              51:      7(ptr) AccessChain 16(result) 40
+              51:      7(ptr) AccessChain 16(result) 39
               52:      6(int) Load 51
               53:    8(float) ConvertUToF 52
               54:      6(int) Load 33(c1)
               55:    8(float) ConvertUToF 54
-              56:      6(int) Load 42(c2)
+              56:      6(int) Load 41(c2)
               57:    8(float) ConvertUToF 56
               58:    9(fvec4) CompositeConstruct 50 53 55 57
                               ReturnValue 58
diff --git a/Test/baseResults/hlsl.structbuffer.rw.frag.out b/Test/baseResults/hlsl.structbuffer.rw.frag.out
index 87d50f0..96b700e 100644
--- a/Test/baseResults/hlsl.structbuffer.rw.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.rw.frag.out
@@ -8,8 +8,8 @@
 0:?     Sequence
 0:13      move second child to first child ( temp float)
 0:13        indirect index (layout( row_major std430) buffer float)
-0:13          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of float)
-0:13            'sbuf2' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
+0:13          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of float)
+0:13            'sbuf2' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of float @data})
 0:13            Constant:
 0:13              0 (const uint)
 0:13          add ( temp uint)
@@ -22,8 +22,8 @@
 0:17        move second child to first child ( temp uint)
 0:17          'size' ( temp uint)
 0:17          array length ( temp uint)
-0:17            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test})
-0:17              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test} @data})
+0:17            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test})
+0:17              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test} @data})
 0:17              Constant:
 0:17                0 (const uint)
 0:17        move second child to first child ( temp uint)
@@ -34,8 +34,8 @@
 0:19        Condition
 0:19        test: direct index for structure ( temp bool)
 0:19          indirect index (layout( row_major std430) buffer structure{ temp 3-component vector of float color,  temp bool test})
-0:19            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test})
-0:19              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test} @data})
+0:19            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test})
+0:19              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test} @data})
 0:19              Constant:
 0:19                0 (const uint)
 0:19            'pos' ( in uint)
@@ -47,16 +47,16 @@
 0:20            add ( temp 3-component vector of float)
 0:20              color: direct index for structure ( temp 3-component vector of float)
 0:20                indirect index (layout( row_major std430) buffer structure{ temp 3-component vector of float color,  temp bool test})
-0:20                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test})
-0:20                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test} @data})
+0:20                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test})
+0:20                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test} @data})
 0:20                    Constant:
 0:20                      0 (const uint)
 0:20                  'pos' ( in uint)
 0:20                Constant:
 0:20                  0 (const int)
 0:20              indirect index (layout( row_major std430) buffer float)
-0:20                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of float)
-0:20                  'sbuf2' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
+0:20                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of float)
+0:20                  'sbuf2' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of float @data})
 0:20                  Constant:
 0:20                    0 (const uint)
 0:20                'pos' ( in uint)
@@ -80,8 +80,8 @@
 0:12        Function Call: @main(u1; ( temp 4-component vector of float)
 0:?           'pos' ( temp uint)
 0:?   Linker Objects
-0:?     'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test} @data})
-0:?     'sbuf2' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
+0:?     'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test} @data})
+0:?     'sbuf2' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of float @data})
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 0:?     'pos' (layout( location=0) flat in uint)
 
@@ -98,8 +98,8 @@
 0:?     Sequence
 0:13      move second child to first child ( temp float)
 0:13        indirect index (layout( row_major std430) buffer float)
-0:13          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of float)
-0:13            'sbuf2' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
+0:13          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of float)
+0:13            'sbuf2' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of float @data})
 0:13            Constant:
 0:13              0 (const uint)
 0:13          add ( temp uint)
@@ -112,8 +112,8 @@
 0:17        move second child to first child ( temp uint)
 0:17          'size' ( temp uint)
 0:17          array length ( temp uint)
-0:17            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test})
-0:17              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test} @data})
+0:17            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test})
+0:17              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test} @data})
 0:17              Constant:
 0:17                0 (const uint)
 0:17        move second child to first child ( temp uint)
@@ -124,8 +124,8 @@
 0:19        Condition
 0:19        test: direct index for structure ( temp bool)
 0:19          indirect index (layout( row_major std430) buffer structure{ temp 3-component vector of float color,  temp bool test})
-0:19            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test})
-0:19              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test} @data})
+0:19            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test})
+0:19              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test} @data})
 0:19              Constant:
 0:19                0 (const uint)
 0:19            'pos' ( in uint)
@@ -137,16 +137,16 @@
 0:20            add ( temp 3-component vector of float)
 0:20              color: direct index for structure ( temp 3-component vector of float)
 0:20                indirect index (layout( row_major std430) buffer structure{ temp 3-component vector of float color,  temp bool test})
-0:20                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test})
-0:20                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test} @data})
+0:20                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test})
+0:20                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test} @data})
 0:20                    Constant:
 0:20                      0 (const uint)
 0:20                  'pos' ( in uint)
 0:20                Constant:
 0:20                  0 (const int)
 0:20              indirect index (layout( row_major std430) buffer float)
-0:20                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of float)
-0:20                  'sbuf2' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
+0:20                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of float)
+0:20                  'sbuf2' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of float @data})
 0:20                  Constant:
 0:20                    0 (const uint)
 0:20                'pos' ( in uint)
@@ -170,13 +170,13 @@
 0:12        Function Call: @main(u1; ( temp 4-component vector of float)
 0:?           'pos' ( temp uint)
 0:?   Linker Objects
-0:?     'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test} @data})
-0:?     'sbuf2' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
+0:?     'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test} @data})
+0:?     'sbuf2' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of float @data})
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 0:?     'pos' (layout( location=0) flat in uint)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // 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 77c2744..3bee143 100644
--- a/Test/baseResults/hlsl.structbuffer.rwbyte.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.rwbyte.frag.out
@@ -10,8 +10,8 @@
 0:7        move second child to first child ( temp uint)
 0:7          'size' ( temp uint)
 0:7          array length ( temp uint)
-0:7            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:7              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:7            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:7              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:7              Constant:
 0:7                0 (const uint)
 0:?       Sequence
@@ -21,23 +21,22 @@
 0:9            'pos' ( in uint)
 0:9            Constant:
 0:9              2 (const int)
-0:9        move second child to first child ( temp float)
-0:9          indirect index ( temp float)
-0:9            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:9              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:9        move second child to first child ( temp uint)
+0:9          indirect index (layout( row_major std430) buffer uint)
+0:9            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:9              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:9              Constant:
 0:9                0 (const uint)
 0:9            'byteAddrTemp' ( temp int)
-0:9          Convert uint to float ( temp float)
-0:9            indirect index (layout( row_major std430) buffer uint)
-0:9              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:9                'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
-0:9                Constant:
-0:9                  0 (const uint)
-0:9              right-shift ( temp int)
-0:9                'pos' ( in uint)
-0:9                Constant:
-0:9                  2 (const int)
+0:9          indirect index (layout( row_major std430) buffer uint)
+0:9            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:9              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
+0:9              Constant:
+0:9                0 (const uint)
+0:9            right-shift ( temp int)
+0:9              'pos' ( in uint)
+0:9              Constant:
+0:9                2 (const int)
 0:?       Sequence
 0:10        move second child to first child ( temp int)
 0:10          'byteAddrTemp' ( temp int)
@@ -45,14 +44,14 @@
 0:10            'pos' ( in uint)
 0:10            Constant:
 0:10              2 (const int)
-0:10        move second child to first child ( temp float)
-0:10          indirect index ( temp float)
-0:10            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:10              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:10        move second child to first child ( temp uint)
+0:10          indirect index (layout( row_major std430) buffer uint)
+0:10            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:10              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:10              Constant:
 0:10                0 (const uint)
 0:10            'byteAddrTemp' ( temp int)
-0:10          direct index ( temp float)
+0:10          direct index ( temp uint)
 0:?             Sequence
 0:10              move second child to first child ( temp int)
 0:10                'byteAddrTemp' ( temp int)
@@ -61,15 +60,15 @@
 0:10                  Constant:
 0:10                    2 (const int)
 0:?               Construct vec2 ( temp 2-component vector of uint)
-0:10                indirect index ( temp float)
-0:10                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:10                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:10                indirect index ( temp uint)
+0:10                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:10                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:10                    Constant:
 0:10                      0 (const uint)
 0:10                  'byteAddrTemp' ( temp int)
-0:10                indirect index ( temp float)
-0:10                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:10                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:10                indirect index ( temp uint)
+0:10                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:10                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:10                    Constant:
 0:10                      0 (const uint)
 0:10                  add ( temp int)
@@ -78,17 +77,17 @@
 0:10                      1 (const int)
 0:10            Constant:
 0:10              0 (const int)
-0:10        move second child to first child ( temp float)
-0:10          indirect index ( temp float)
-0:10            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:10              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:10        move second child to first child ( temp uint)
+0:10          indirect index (layout( row_major std430) buffer uint)
+0:10            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:10              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:10              Constant:
 0:10                0 (const uint)
 0:10            add ( temp int)
 0:10              'byteAddrTemp' ( temp int)
 0:10              Constant:
 0:10                1 (const int)
-0:10          direct index ( temp float)
+0:10          direct index ( temp uint)
 0:?             Sequence
 0:10              move second child to first child ( temp int)
 0:10                'byteAddrTemp' ( temp int)
@@ -97,15 +96,15 @@
 0:10                  Constant:
 0:10                    2 (const int)
 0:?               Construct vec2 ( temp 2-component vector of uint)
-0:10                indirect index ( temp float)
-0:10                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:10                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:10                indirect index ( temp uint)
+0:10                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:10                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:10                    Constant:
 0:10                      0 (const uint)
 0:10                  'byteAddrTemp' ( temp int)
-0:10                indirect index ( temp float)
-0:10                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:10                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:10                indirect index ( temp uint)
+0:10                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:10                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:10                    Constant:
 0:10                      0 (const uint)
 0:10                  add ( temp int)
@@ -121,14 +120,14 @@
 0:11            'pos' ( in uint)
 0:11            Constant:
 0:11              2 (const int)
-0:11        move second child to first child ( temp float)
-0:11          indirect index ( temp float)
-0:11            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11        move second child to first child ( temp uint)
+0:11          indirect index (layout( row_major std430) buffer uint)
+0:11            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:11              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:11              Constant:
 0:11                0 (const uint)
 0:11            'byteAddrTemp' ( temp int)
-0:11          direct index ( temp float)
+0:11          direct index ( temp uint)
 0:?             Sequence
 0:11              move second child to first child ( temp int)
 0:11                'byteAddrTemp' ( temp int)
@@ -137,24 +136,24 @@
 0:11                  Constant:
 0:11                    2 (const int)
 0:?               Construct vec3 ( temp 3-component vector of uint)
-0:11                indirect index ( temp float)
-0:11                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11                indirect index ( temp uint)
+0:11                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:11                    Constant:
 0:11                      0 (const uint)
 0:11                  'byteAddrTemp' ( temp int)
-0:11                indirect index ( temp float)
-0:11                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11                indirect index ( temp uint)
+0:11                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:11                    Constant:
 0:11                      0 (const uint)
 0:11                  add ( temp int)
 0:11                    'byteAddrTemp' ( temp int)
 0:11                    Constant:
 0:11                      1 (const int)
-0:11                indirect index ( temp float)
-0:11                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11                indirect index ( temp uint)
+0:11                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:11                    Constant:
 0:11                      0 (const uint)
 0:11                  add ( temp int)
@@ -163,17 +162,17 @@
 0:11                      2 (const int)
 0:11            Constant:
 0:11              0 (const int)
-0:11        move second child to first child ( temp float)
-0:11          indirect index ( temp float)
-0:11            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11        move second child to first child ( temp uint)
+0:11          indirect index (layout( row_major std430) buffer uint)
+0:11            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:11              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:11              Constant:
 0:11                0 (const uint)
 0:11            add ( temp int)
 0:11              'byteAddrTemp' ( temp int)
 0:11              Constant:
 0:11                1 (const int)
-0:11          direct index ( temp float)
+0:11          direct index ( temp uint)
 0:?             Sequence
 0:11              move second child to first child ( temp int)
 0:11                'byteAddrTemp' ( temp int)
@@ -182,24 +181,24 @@
 0:11                  Constant:
 0:11                    2 (const int)
 0:?               Construct vec3 ( temp 3-component vector of uint)
-0:11                indirect index ( temp float)
-0:11                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11                indirect index ( temp uint)
+0:11                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:11                    Constant:
 0:11                      0 (const uint)
 0:11                  'byteAddrTemp' ( temp int)
-0:11                indirect index ( temp float)
-0:11                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11                indirect index ( temp uint)
+0:11                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:11                    Constant:
 0:11                      0 (const uint)
 0:11                  add ( temp int)
 0:11                    'byteAddrTemp' ( temp int)
 0:11                    Constant:
 0:11                      1 (const int)
-0:11                indirect index ( temp float)
-0:11                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11                indirect index ( temp uint)
+0:11                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:11                    Constant:
 0:11                      0 (const uint)
 0:11                  add ( temp int)
@@ -208,17 +207,17 @@
 0:11                      2 (const int)
 0:11            Constant:
 0:11              1 (const int)
-0:11        move second child to first child ( temp float)
-0:11          indirect index ( temp float)
-0:11            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11        move second child to first child ( temp uint)
+0:11          indirect index (layout( row_major std430) buffer uint)
+0:11            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:11              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:11              Constant:
 0:11                0 (const uint)
 0:11            add ( temp int)
 0:11              'byteAddrTemp' ( temp int)
 0:11              Constant:
 0:11                2 (const int)
-0:11          direct index ( temp float)
+0:11          direct index ( temp uint)
 0:?             Sequence
 0:11              move second child to first child ( temp int)
 0:11                'byteAddrTemp' ( temp int)
@@ -227,24 +226,24 @@
 0:11                  Constant:
 0:11                    2 (const int)
 0:?               Construct vec3 ( temp 3-component vector of uint)
-0:11                indirect index ( temp float)
-0:11                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11                indirect index ( temp uint)
+0:11                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:11                    Constant:
 0:11                      0 (const uint)
 0:11                  'byteAddrTemp' ( temp int)
-0:11                indirect index ( temp float)
-0:11                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11                indirect index ( temp uint)
+0:11                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:11                    Constant:
 0:11                      0 (const uint)
 0:11                  add ( temp int)
 0:11                    'byteAddrTemp' ( temp int)
 0:11                    Constant:
 0:11                      1 (const int)
-0:11                indirect index ( temp float)
-0:11                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11                indirect index ( temp uint)
+0:11                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:11                    Constant:
 0:11                      0 (const uint)
 0:11                  add ( temp int)
@@ -260,14 +259,14 @@
 0:12            'pos' ( in uint)
 0:12            Constant:
 0:12              2 (const int)
-0:12        move second child to first child ( temp float)
-0:12          indirect index ( temp float)
-0:12            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12        move second child to first child ( temp uint)
+0:12          indirect index (layout( row_major std430) buffer uint)
+0:12            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12              Constant:
 0:12                0 (const uint)
 0:12            'byteAddrTemp' ( temp int)
-0:12          direct index ( temp float)
+0:12          direct index ( temp uint)
 0:?             Sequence
 0:12              move second child to first child ( temp int)
 0:12                'byteAddrTemp' ( temp int)
@@ -276,33 +275,33 @@
 0:12                  Constant:
 0:12                    2 (const int)
 0:?               Construct vec4 ( temp 4-component vector of uint)
-0:12                indirect index ( temp float)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                indirect index ( temp uint)
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  'byteAddrTemp' ( temp int)
-0:12                indirect index ( temp float)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                indirect index ( temp uint)
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  add ( temp int)
 0:12                    'byteAddrTemp' ( temp int)
 0:12                    Constant:
 0:12                      1 (const int)
-0:12                indirect index ( temp float)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                indirect index ( temp uint)
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  add ( temp int)
 0:12                    'byteAddrTemp' ( temp int)
 0:12                    Constant:
 0:12                      2 (const int)
-0:12                indirect index ( temp float)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                indirect index ( temp uint)
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  add ( temp int)
@@ -311,17 +310,17 @@
 0:12                      3 (const int)
 0:12            Constant:
 0:12              0 (const int)
-0:12        move second child to first child ( temp float)
-0:12          indirect index ( temp float)
-0:12            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12        move second child to first child ( temp uint)
+0:12          indirect index (layout( row_major std430) buffer uint)
+0:12            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12              Constant:
 0:12                0 (const uint)
 0:12            add ( temp int)
 0:12              'byteAddrTemp' ( temp int)
 0:12              Constant:
 0:12                1 (const int)
-0:12          direct index ( temp float)
+0:12          direct index ( temp uint)
 0:?             Sequence
 0:12              move second child to first child ( temp int)
 0:12                'byteAddrTemp' ( temp int)
@@ -330,33 +329,33 @@
 0:12                  Constant:
 0:12                    2 (const int)
 0:?               Construct vec4 ( temp 4-component vector of uint)
-0:12                indirect index ( temp float)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                indirect index ( temp uint)
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  'byteAddrTemp' ( temp int)
-0:12                indirect index ( temp float)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                indirect index ( temp uint)
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  add ( temp int)
 0:12                    'byteAddrTemp' ( temp int)
 0:12                    Constant:
 0:12                      1 (const int)
-0:12                indirect index ( temp float)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                indirect index ( temp uint)
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  add ( temp int)
 0:12                    'byteAddrTemp' ( temp int)
 0:12                    Constant:
 0:12                      2 (const int)
-0:12                indirect index ( temp float)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                indirect index ( temp uint)
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  add ( temp int)
@@ -365,17 +364,17 @@
 0:12                      3 (const int)
 0:12            Constant:
 0:12              1 (const int)
-0:12        move second child to first child ( temp float)
-0:12          indirect index ( temp float)
-0:12            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12        move second child to first child ( temp uint)
+0:12          indirect index (layout( row_major std430) buffer uint)
+0:12            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12              Constant:
 0:12                0 (const uint)
 0:12            add ( temp int)
 0:12              'byteAddrTemp' ( temp int)
 0:12              Constant:
 0:12                2 (const int)
-0:12          direct index ( temp float)
+0:12          direct index ( temp uint)
 0:?             Sequence
 0:12              move second child to first child ( temp int)
 0:12                'byteAddrTemp' ( temp int)
@@ -384,33 +383,33 @@
 0:12                  Constant:
 0:12                    2 (const int)
 0:?               Construct vec4 ( temp 4-component vector of uint)
-0:12                indirect index ( temp float)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                indirect index ( temp uint)
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  'byteAddrTemp' ( temp int)
-0:12                indirect index ( temp float)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                indirect index ( temp uint)
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  add ( temp int)
 0:12                    'byteAddrTemp' ( temp int)
 0:12                    Constant:
 0:12                      1 (const int)
-0:12                indirect index ( temp float)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                indirect index ( temp uint)
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  add ( temp int)
 0:12                    'byteAddrTemp' ( temp int)
 0:12                    Constant:
 0:12                      2 (const int)
-0:12                indirect index ( temp float)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                indirect index ( temp uint)
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  add ( temp int)
@@ -419,17 +418,17 @@
 0:12                      3 (const int)
 0:12            Constant:
 0:12              2 (const int)
-0:12        move second child to first child ( temp float)
-0:12          indirect index ( temp float)
-0:12            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12        move second child to first child ( temp uint)
+0:12          indirect index (layout( row_major std430) buffer uint)
+0:12            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12              Constant:
 0:12                0 (const uint)
 0:12            add ( temp int)
 0:12              'byteAddrTemp' ( temp int)
 0:12              Constant:
 0:12                3 (const int)
-0:12          direct index ( temp float)
+0:12          direct index ( temp uint)
 0:?             Sequence
 0:12              move second child to first child ( temp int)
 0:12                'byteAddrTemp' ( temp int)
@@ -438,33 +437,33 @@
 0:12                  Constant:
 0:12                    2 (const int)
 0:?               Construct vec4 ( temp 4-component vector of uint)
-0:12                indirect index ( temp float)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                indirect index ( temp uint)
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  'byteAddrTemp' ( temp int)
-0:12                indirect index ( temp float)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                indirect index ( temp uint)
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  add ( temp int)
 0:12                    'byteAddrTemp' ( temp int)
 0:12                    Constant:
 0:12                      1 (const int)
-0:12                indirect index ( temp float)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                indirect index ( temp uint)
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  add ( temp int)
 0:12                    'byteAddrTemp' ( temp int)
 0:12                    Constant:
 0:12                      2 (const int)
-0:12                indirect index ( temp float)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                indirect index ( temp uint)
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  add ( temp int)
@@ -477,8 +476,8 @@
 0:14        Construct vec4 ( temp 4-component vector of float)
 0:14          Convert uint to float ( temp float)
 0:14            indirect index (layout( row_major std430) buffer uint)
-0:14              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:14                'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:14              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:14                'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:14                Constant:
 0:14                  0 (const uint)
 0:14              right-shift ( temp int)
@@ -496,7 +495,7 @@
 0:5        Function Call: @main(u1; ( temp 4-component vector of float)
 0:?           'pos' ( temp uint)
 0:?   Linker Objects
-0:?     'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:?     'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 0:?     'pos' (layout( location=0) flat in uint)
 
@@ -515,8 +514,8 @@
 0:7        move second child to first child ( temp uint)
 0:7          'size' ( temp uint)
 0:7          array length ( temp uint)
-0:7            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:7              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:7            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:7              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:7              Constant:
 0:7                0 (const uint)
 0:?       Sequence
@@ -526,23 +525,22 @@
 0:9            'pos' ( in uint)
 0:9            Constant:
 0:9              2 (const int)
-0:9        move second child to first child ( temp float)
-0:9          indirect index ( temp float)
-0:9            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:9              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:9        move second child to first child ( temp uint)
+0:9          indirect index (layout( row_major std430) buffer uint)
+0:9            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:9              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:9              Constant:
 0:9                0 (const uint)
 0:9            'byteAddrTemp' ( temp int)
-0:9          Convert uint to float ( temp float)
-0:9            indirect index (layout( row_major std430) buffer uint)
-0:9              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:9                'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
-0:9                Constant:
-0:9                  0 (const uint)
-0:9              right-shift ( temp int)
-0:9                'pos' ( in uint)
-0:9                Constant:
-0:9                  2 (const int)
+0:9          indirect index (layout( row_major std430) buffer uint)
+0:9            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:9              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
+0:9              Constant:
+0:9                0 (const uint)
+0:9            right-shift ( temp int)
+0:9              'pos' ( in uint)
+0:9              Constant:
+0:9                2 (const int)
 0:?       Sequence
 0:10        move second child to first child ( temp int)
 0:10          'byteAddrTemp' ( temp int)
@@ -550,14 +548,14 @@
 0:10            'pos' ( in uint)
 0:10            Constant:
 0:10              2 (const int)
-0:10        move second child to first child ( temp float)
-0:10          indirect index ( temp float)
-0:10            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:10              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:10        move second child to first child ( temp uint)
+0:10          indirect index (layout( row_major std430) buffer uint)
+0:10            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:10              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:10              Constant:
 0:10                0 (const uint)
 0:10            'byteAddrTemp' ( temp int)
-0:10          direct index ( temp float)
+0:10          direct index ( temp uint)
 0:?             Sequence
 0:10              move second child to first child ( temp int)
 0:10                'byteAddrTemp' ( temp int)
@@ -566,15 +564,15 @@
 0:10                  Constant:
 0:10                    2 (const int)
 0:?               Construct vec2 ( temp 2-component vector of uint)
-0:10                indirect index ( temp float)
-0:10                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:10                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:10                indirect index ( temp uint)
+0:10                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:10                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:10                    Constant:
 0:10                      0 (const uint)
 0:10                  'byteAddrTemp' ( temp int)
-0:10                indirect index ( temp float)
-0:10                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:10                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:10                indirect index ( temp uint)
+0:10                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:10                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:10                    Constant:
 0:10                      0 (const uint)
 0:10                  add ( temp int)
@@ -583,17 +581,17 @@
 0:10                      1 (const int)
 0:10            Constant:
 0:10              0 (const int)
-0:10        move second child to first child ( temp float)
-0:10          indirect index ( temp float)
-0:10            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:10              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:10        move second child to first child ( temp uint)
+0:10          indirect index (layout( row_major std430) buffer uint)
+0:10            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:10              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:10              Constant:
 0:10                0 (const uint)
 0:10            add ( temp int)
 0:10              'byteAddrTemp' ( temp int)
 0:10              Constant:
 0:10                1 (const int)
-0:10          direct index ( temp float)
+0:10          direct index ( temp uint)
 0:?             Sequence
 0:10              move second child to first child ( temp int)
 0:10                'byteAddrTemp' ( temp int)
@@ -602,15 +600,15 @@
 0:10                  Constant:
 0:10                    2 (const int)
 0:?               Construct vec2 ( temp 2-component vector of uint)
-0:10                indirect index ( temp float)
-0:10                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:10                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:10                indirect index ( temp uint)
+0:10                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:10                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:10                    Constant:
 0:10                      0 (const uint)
 0:10                  'byteAddrTemp' ( temp int)
-0:10                indirect index ( temp float)
-0:10                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:10                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:10                indirect index ( temp uint)
+0:10                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:10                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:10                    Constant:
 0:10                      0 (const uint)
 0:10                  add ( temp int)
@@ -626,14 +624,14 @@
 0:11            'pos' ( in uint)
 0:11            Constant:
 0:11              2 (const int)
-0:11        move second child to first child ( temp float)
-0:11          indirect index ( temp float)
-0:11            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11        move second child to first child ( temp uint)
+0:11          indirect index (layout( row_major std430) buffer uint)
+0:11            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:11              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:11              Constant:
 0:11                0 (const uint)
 0:11            'byteAddrTemp' ( temp int)
-0:11          direct index ( temp float)
+0:11          direct index ( temp uint)
 0:?             Sequence
 0:11              move second child to first child ( temp int)
 0:11                'byteAddrTemp' ( temp int)
@@ -642,24 +640,24 @@
 0:11                  Constant:
 0:11                    2 (const int)
 0:?               Construct vec3 ( temp 3-component vector of uint)
-0:11                indirect index ( temp float)
-0:11                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11                indirect index ( temp uint)
+0:11                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:11                    Constant:
 0:11                      0 (const uint)
 0:11                  'byteAddrTemp' ( temp int)
-0:11                indirect index ( temp float)
-0:11                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11                indirect index ( temp uint)
+0:11                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:11                    Constant:
 0:11                      0 (const uint)
 0:11                  add ( temp int)
 0:11                    'byteAddrTemp' ( temp int)
 0:11                    Constant:
 0:11                      1 (const int)
-0:11                indirect index ( temp float)
-0:11                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11                indirect index ( temp uint)
+0:11                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:11                    Constant:
 0:11                      0 (const uint)
 0:11                  add ( temp int)
@@ -668,17 +666,17 @@
 0:11                      2 (const int)
 0:11            Constant:
 0:11              0 (const int)
-0:11        move second child to first child ( temp float)
-0:11          indirect index ( temp float)
-0:11            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11        move second child to first child ( temp uint)
+0:11          indirect index (layout( row_major std430) buffer uint)
+0:11            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:11              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:11              Constant:
 0:11                0 (const uint)
 0:11            add ( temp int)
 0:11              'byteAddrTemp' ( temp int)
 0:11              Constant:
 0:11                1 (const int)
-0:11          direct index ( temp float)
+0:11          direct index ( temp uint)
 0:?             Sequence
 0:11              move second child to first child ( temp int)
 0:11                'byteAddrTemp' ( temp int)
@@ -687,24 +685,24 @@
 0:11                  Constant:
 0:11                    2 (const int)
 0:?               Construct vec3 ( temp 3-component vector of uint)
-0:11                indirect index ( temp float)
-0:11                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11                indirect index ( temp uint)
+0:11                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:11                    Constant:
 0:11                      0 (const uint)
 0:11                  'byteAddrTemp' ( temp int)
-0:11                indirect index ( temp float)
-0:11                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11                indirect index ( temp uint)
+0:11                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:11                    Constant:
 0:11                      0 (const uint)
 0:11                  add ( temp int)
 0:11                    'byteAddrTemp' ( temp int)
 0:11                    Constant:
 0:11                      1 (const int)
-0:11                indirect index ( temp float)
-0:11                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11                indirect index ( temp uint)
+0:11                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:11                    Constant:
 0:11                      0 (const uint)
 0:11                  add ( temp int)
@@ -713,17 +711,17 @@
 0:11                      2 (const int)
 0:11            Constant:
 0:11              1 (const int)
-0:11        move second child to first child ( temp float)
-0:11          indirect index ( temp float)
-0:11            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11        move second child to first child ( temp uint)
+0:11          indirect index (layout( row_major std430) buffer uint)
+0:11            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:11              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:11              Constant:
 0:11                0 (const uint)
 0:11            add ( temp int)
 0:11              'byteAddrTemp' ( temp int)
 0:11              Constant:
 0:11                2 (const int)
-0:11          direct index ( temp float)
+0:11          direct index ( temp uint)
 0:?             Sequence
 0:11              move second child to first child ( temp int)
 0:11                'byteAddrTemp' ( temp int)
@@ -732,24 +730,24 @@
 0:11                  Constant:
 0:11                    2 (const int)
 0:?               Construct vec3 ( temp 3-component vector of uint)
-0:11                indirect index ( temp float)
-0:11                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11                indirect index ( temp uint)
+0:11                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:11                    Constant:
 0:11                      0 (const uint)
 0:11                  'byteAddrTemp' ( temp int)
-0:11                indirect index ( temp float)
-0:11                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11                indirect index ( temp uint)
+0:11                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:11                    Constant:
 0:11                      0 (const uint)
 0:11                  add ( temp int)
 0:11                    'byteAddrTemp' ( temp int)
 0:11                    Constant:
 0:11                      1 (const int)
-0:11                indirect index ( temp float)
-0:11                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11                indirect index ( temp uint)
+0:11                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:11                    Constant:
 0:11                      0 (const uint)
 0:11                  add ( temp int)
@@ -765,14 +763,14 @@
 0:12            'pos' ( in uint)
 0:12            Constant:
 0:12              2 (const int)
-0:12        move second child to first child ( temp float)
-0:12          indirect index ( temp float)
-0:12            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12        move second child to first child ( temp uint)
+0:12          indirect index (layout( row_major std430) buffer uint)
+0:12            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12              Constant:
 0:12                0 (const uint)
 0:12            'byteAddrTemp' ( temp int)
-0:12          direct index ( temp float)
+0:12          direct index ( temp uint)
 0:?             Sequence
 0:12              move second child to first child ( temp int)
 0:12                'byteAddrTemp' ( temp int)
@@ -781,33 +779,33 @@
 0:12                  Constant:
 0:12                    2 (const int)
 0:?               Construct vec4 ( temp 4-component vector of uint)
-0:12                indirect index ( temp float)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                indirect index ( temp uint)
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  'byteAddrTemp' ( temp int)
-0:12                indirect index ( temp float)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                indirect index ( temp uint)
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  add ( temp int)
 0:12                    'byteAddrTemp' ( temp int)
 0:12                    Constant:
 0:12                      1 (const int)
-0:12                indirect index ( temp float)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                indirect index ( temp uint)
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  add ( temp int)
 0:12                    'byteAddrTemp' ( temp int)
 0:12                    Constant:
 0:12                      2 (const int)
-0:12                indirect index ( temp float)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                indirect index ( temp uint)
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  add ( temp int)
@@ -816,17 +814,17 @@
 0:12                      3 (const int)
 0:12            Constant:
 0:12              0 (const int)
-0:12        move second child to first child ( temp float)
-0:12          indirect index ( temp float)
-0:12            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12        move second child to first child ( temp uint)
+0:12          indirect index (layout( row_major std430) buffer uint)
+0:12            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12              Constant:
 0:12                0 (const uint)
 0:12            add ( temp int)
 0:12              'byteAddrTemp' ( temp int)
 0:12              Constant:
 0:12                1 (const int)
-0:12          direct index ( temp float)
+0:12          direct index ( temp uint)
 0:?             Sequence
 0:12              move second child to first child ( temp int)
 0:12                'byteAddrTemp' ( temp int)
@@ -835,33 +833,33 @@
 0:12                  Constant:
 0:12                    2 (const int)
 0:?               Construct vec4 ( temp 4-component vector of uint)
-0:12                indirect index ( temp float)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                indirect index ( temp uint)
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  'byteAddrTemp' ( temp int)
-0:12                indirect index ( temp float)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                indirect index ( temp uint)
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  add ( temp int)
 0:12                    'byteAddrTemp' ( temp int)
 0:12                    Constant:
 0:12                      1 (const int)
-0:12                indirect index ( temp float)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                indirect index ( temp uint)
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  add ( temp int)
 0:12                    'byteAddrTemp' ( temp int)
 0:12                    Constant:
 0:12                      2 (const int)
-0:12                indirect index ( temp float)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                indirect index ( temp uint)
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  add ( temp int)
@@ -870,17 +868,17 @@
 0:12                      3 (const int)
 0:12            Constant:
 0:12              1 (const int)
-0:12        move second child to first child ( temp float)
-0:12          indirect index ( temp float)
-0:12            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12        move second child to first child ( temp uint)
+0:12          indirect index (layout( row_major std430) buffer uint)
+0:12            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12              Constant:
 0:12                0 (const uint)
 0:12            add ( temp int)
 0:12              'byteAddrTemp' ( temp int)
 0:12              Constant:
 0:12                2 (const int)
-0:12          direct index ( temp float)
+0:12          direct index ( temp uint)
 0:?             Sequence
 0:12              move second child to first child ( temp int)
 0:12                'byteAddrTemp' ( temp int)
@@ -889,33 +887,33 @@
 0:12                  Constant:
 0:12                    2 (const int)
 0:?               Construct vec4 ( temp 4-component vector of uint)
-0:12                indirect index ( temp float)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                indirect index ( temp uint)
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  'byteAddrTemp' ( temp int)
-0:12                indirect index ( temp float)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                indirect index ( temp uint)
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  add ( temp int)
 0:12                    'byteAddrTemp' ( temp int)
 0:12                    Constant:
 0:12                      1 (const int)
-0:12                indirect index ( temp float)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                indirect index ( temp uint)
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  add ( temp int)
 0:12                    'byteAddrTemp' ( temp int)
 0:12                    Constant:
 0:12                      2 (const int)
-0:12                indirect index ( temp float)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                indirect index ( temp uint)
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  add ( temp int)
@@ -924,17 +922,17 @@
 0:12                      3 (const int)
 0:12            Constant:
 0:12              2 (const int)
-0:12        move second child to first child ( temp float)
-0:12          indirect index ( temp float)
-0:12            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12        move second child to first child ( temp uint)
+0:12          indirect index (layout( row_major std430) buffer uint)
+0:12            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12              Constant:
 0:12                0 (const uint)
 0:12            add ( temp int)
 0:12              'byteAddrTemp' ( temp int)
 0:12              Constant:
 0:12                3 (const int)
-0:12          direct index ( temp float)
+0:12          direct index ( temp uint)
 0:?             Sequence
 0:12              move second child to first child ( temp int)
 0:12                'byteAddrTemp' ( temp int)
@@ -943,33 +941,33 @@
 0:12                  Constant:
 0:12                    2 (const int)
 0:?               Construct vec4 ( temp 4-component vector of uint)
-0:12                indirect index ( temp float)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                indirect index ( temp uint)
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  'byteAddrTemp' ( temp int)
-0:12                indirect index ( temp float)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                indirect index ( temp uint)
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  add ( temp int)
 0:12                    'byteAddrTemp' ( temp int)
 0:12                    Constant:
 0:12                      1 (const int)
-0:12                indirect index ( temp float)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                indirect index ( temp uint)
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  add ( temp int)
 0:12                    'byteAddrTemp' ( temp int)
 0:12                    Constant:
 0:12                      2 (const int)
-0:12                indirect index ( temp float)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                indirect index ( temp uint)
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  add ( temp int)
@@ -982,8 +980,8 @@
 0:14        Construct vec4 ( temp 4-component vector of float)
 0:14          Convert uint to float ( temp float)
 0:14            indirect index (layout( row_major std430) buffer uint)
-0:14              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:14                'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:14              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:14                'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:14                Constant:
 0:14                  0 (const uint)
 0:14              right-shift ( temp int)
@@ -1001,18 +999,18 @@
 0:5        Function Call: @main(u1; ( temp 4-component vector of float)
 0:?           'pos' ( temp uint)
 0:?   Linker Objects
-0:?     'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:?     'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 0:?     'pos' (layout( location=0) flat in uint)
 
 // Module Version 10000
-// Generated by (magic number): 80002
-// Id's are bound by 240
+// Generated by (magic number): 80006
+// Id's are bound by 239
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 233 236
+                              EntryPoint Fragment 4  "main" 232 235
                               ExecutionMode 4 OriginUpperLeft
                               Source HLSL 500
                               Name 4  "main"
@@ -1023,23 +1021,23 @@
                               MemberName 16(sbuf) 0  "@data"
                               Name 18  "sbuf"
                               Name 22  "byteAddrTemp"
-                              Name 35  "byteAddrTemp"
-                              Name 39  "byteAddrTemp"
-                              Name 70  "byteAddrTemp"
-                              Name 74  "byteAddrTemp"
-                              Name 129  "byteAddrTemp"
-                              Name 133  "byteAddrTemp"
-                              Name 231  "pos"
-                              Name 233  "pos"
-                              Name 236  "@entryPointOutput"
-                              Name 237  "param"
+                              Name 34  "byteAddrTemp"
+                              Name 38  "byteAddrTemp"
+                              Name 69  "byteAddrTemp"
+                              Name 73  "byteAddrTemp"
+                              Name 128  "byteAddrTemp"
+                              Name 132  "byteAddrTemp"
+                              Name 230  "pos"
+                              Name 232  "pos"
+                              Name 235  "@entryPointOutput"
+                              Name 236  "param"
                               Decorate 15 ArrayStride 4
                               MemberDecorate 16(sbuf) 0 Offset 0
                               Decorate 16(sbuf) BufferBlock
                               Decorate 18(sbuf) DescriptorSet 0
-                              Decorate 233(pos) Flat
-                              Decorate 233(pos) Location 0
-                              Decorate 236(@entryPointOutput) Location 0
+                              Decorate 232(pos) Flat
+                              Decorate 232(pos) Location 0
+                              Decorate 235(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
@@ -1056,29 +1054,29 @@
               24:     19(int) Constant 2
               26:     19(int) Constant 0
               30:             TypePointer Uniform 6(int)
-              46:     19(int) Constant 1
-              50:             TypeVector 6(int) 2
-              52:      6(int) Constant 0
-              67:      6(int) Constant 1
-              88:             TypeVector 6(int) 3
-             126:      6(int) Constant 2
-             148:     19(int) Constant 3
-             152:             TypeVector 6(int) 4
-             220:      6(int) Constant 3
-             232:             TypePointer Input 6(int)
-        233(pos):    232(ptr) Variable Input
-             235:             TypePointer Output 9(fvec4)
-236(@entryPointOutput):    235(ptr) Variable Output
+              45:     19(int) Constant 1
+              49:             TypeVector 6(int) 2
+              51:      6(int) Constant 0
+              66:      6(int) Constant 1
+              87:             TypeVector 6(int) 3
+             125:      6(int) Constant 2
+             147:     19(int) Constant 3
+             151:             TypeVector 6(int) 4
+             219:      6(int) Constant 3
+             231:             TypePointer Input 6(int)
+        232(pos):    231(ptr) Variable Input
+             234:             TypePointer Output 9(fvec4)
+235(@entryPointOutput):    234(ptr) Variable Output
          4(main):           2 Function None 3
                5:             Label
-        231(pos):      7(ptr) Variable Function
-      237(param):      7(ptr) Variable Function
-             234:      6(int) Load 233(pos)
-                              Store 231(pos) 234
-             238:      6(int) Load 231(pos)
-                              Store 237(param) 238
-             239:    9(fvec4) FunctionCall 12(@main(u1;) 237(param)
-                              Store 236(@entryPointOutput) 239
+        230(pos):      7(ptr) Variable Function
+      236(param):      7(ptr) Variable Function
+             233:      6(int) Load 232(pos)
+                              Store 230(pos) 233
+             237:      6(int) Load 230(pos)
+                              Store 236(param) 237
+             238:    9(fvec4) FunctionCall 12(@main(u1;) 236(param)
+                              Store 235(@entryPointOutput) 238
                               Return
                               FunctionEnd
    12(@main(u1;):    9(fvec4) Function None 10
@@ -1086,12 +1084,12 @@
               13:             Label
         14(size):      7(ptr) Variable Function
 22(byteAddrTemp):     21(ptr) Variable Function
-35(byteAddrTemp):     21(ptr) Variable Function
-39(byteAddrTemp):     21(ptr) Variable Function
-70(byteAddrTemp):     21(ptr) Variable Function
-74(byteAddrTemp):     21(ptr) Variable Function
-129(byteAddrTemp):     21(ptr) Variable Function
-133(byteAddrTemp):     21(ptr) Variable Function
+34(byteAddrTemp):     21(ptr) Variable Function
+38(byteAddrTemp):     21(ptr) Variable Function
+69(byteAddrTemp):     21(ptr) Variable Function
+73(byteAddrTemp):     21(ptr) Variable Function
+128(byteAddrTemp):     21(ptr) Variable Function
+132(byteAddrTemp):     21(ptr) Variable Function
               20:     19(int) ArrayLength 18(sbuf) 0
                               Store 14(size) 20
               23:      6(int) Load 11(pos)
@@ -1102,208 +1100,207 @@
               29:     19(int) ShiftRightLogical 28 24
               31:     30(ptr) AccessChain 18(sbuf) 26 29
               32:      6(int) Load 31
-              33:    8(float) ConvertUToF 32
-              34:     30(ptr) AccessChain 18(sbuf) 26 27
-                              Store 34 33
-              36:      6(int) Load 11(pos)
-              37:     19(int) ShiftRightLogical 36 24
-                              Store 35(byteAddrTemp) 37
-              38:     19(int) Load 35(byteAddrTemp)
-              40:      6(int) Load 11(pos)
-              41:     19(int) ShiftRightLogical 40 24
-                              Store 39(byteAddrTemp) 41
-              42:     19(int) Load 39(byteAddrTemp)
-              43:     30(ptr) AccessChain 18(sbuf) 26 42
-              44:      6(int) Load 43
-              45:     19(int) Load 39(byteAddrTemp)
-              47:     19(int) IAdd 45 46
-              48:     30(ptr) AccessChain 18(sbuf) 26 47
-              49:      6(int) Load 48
-              51:   50(ivec2) CompositeConstruct 44 49
-              53:      6(int) CompositeExtract 51 0
-              54:     30(ptr) AccessChain 18(sbuf) 26 38
-                              Store 54 53
-              55:     19(int) Load 35(byteAddrTemp)
-              56:     19(int) IAdd 55 46
-              57:      6(int) Load 11(pos)
-              58:     19(int) ShiftRightLogical 57 24
-                              Store 39(byteAddrTemp) 58
-              59:     19(int) Load 39(byteAddrTemp)
-              60:     30(ptr) AccessChain 18(sbuf) 26 59
-              61:      6(int) Load 60
-              62:     19(int) Load 39(byteAddrTemp)
-              63:     19(int) IAdd 62 46
-              64:     30(ptr) AccessChain 18(sbuf) 26 63
-              65:      6(int) Load 64
-              66:   50(ivec2) CompositeConstruct 61 65
-              68:      6(int) CompositeExtract 66 1
-              69:     30(ptr) AccessChain 18(sbuf) 26 56
-                              Store 69 68
-              71:      6(int) Load 11(pos)
-              72:     19(int) ShiftRightLogical 71 24
-                              Store 70(byteAddrTemp) 72
-              73:     19(int) Load 70(byteAddrTemp)
-              75:      6(int) Load 11(pos)
-              76:     19(int) ShiftRightLogical 75 24
-                              Store 74(byteAddrTemp) 76
-              77:     19(int) Load 74(byteAddrTemp)
-              78:     30(ptr) AccessChain 18(sbuf) 26 77
-              79:      6(int) Load 78
-              80:     19(int) Load 74(byteAddrTemp)
-              81:     19(int) IAdd 80 46
-              82:     30(ptr) AccessChain 18(sbuf) 26 81
-              83:      6(int) Load 82
-              84:     19(int) Load 74(byteAddrTemp)
-              85:     19(int) IAdd 84 24
-              86:     30(ptr) AccessChain 18(sbuf) 26 85
-              87:      6(int) Load 86
-              89:   88(ivec3) CompositeConstruct 79 83 87
-              90:      6(int) CompositeExtract 89 0
-              91:     30(ptr) AccessChain 18(sbuf) 26 73
-                              Store 91 90
-              92:     19(int) Load 70(byteAddrTemp)
-              93:     19(int) IAdd 92 46
-              94:      6(int) Load 11(pos)
-              95:     19(int) ShiftRightLogical 94 24
-                              Store 74(byteAddrTemp) 95
-              96:     19(int) Load 74(byteAddrTemp)
-              97:     30(ptr) AccessChain 18(sbuf) 26 96
-              98:      6(int) Load 97
-              99:     19(int) Load 74(byteAddrTemp)
-             100:     19(int) IAdd 99 46
-             101:     30(ptr) AccessChain 18(sbuf) 26 100
-             102:      6(int) Load 101
-             103:     19(int) Load 74(byteAddrTemp)
-             104:     19(int) IAdd 103 24
-             105:     30(ptr) AccessChain 18(sbuf) 26 104
-             106:      6(int) Load 105
-             107:   88(ivec3) CompositeConstruct 98 102 106
-             108:      6(int) CompositeExtract 107 1
-             109:     30(ptr) AccessChain 18(sbuf) 26 93
-                              Store 109 108
-             110:     19(int) Load 70(byteAddrTemp)
-             111:     19(int) IAdd 110 24
-             112:      6(int) Load 11(pos)
-             113:     19(int) ShiftRightLogical 112 24
-                              Store 74(byteAddrTemp) 113
-             114:     19(int) Load 74(byteAddrTemp)
-             115:     30(ptr) AccessChain 18(sbuf) 26 114
-             116:      6(int) Load 115
-             117:     19(int) Load 74(byteAddrTemp)
-             118:     19(int) IAdd 117 46
-             119:     30(ptr) AccessChain 18(sbuf) 26 118
-             120:      6(int) Load 119
-             121:     19(int) Load 74(byteAddrTemp)
-             122:     19(int) IAdd 121 24
-             123:     30(ptr) AccessChain 18(sbuf) 26 122
-             124:      6(int) Load 123
-             125:   88(ivec3) CompositeConstruct 116 120 124
-             127:      6(int) CompositeExtract 125 2
-             128:     30(ptr) AccessChain 18(sbuf) 26 111
-                              Store 128 127
-             130:      6(int) Load 11(pos)
-             131:     19(int) ShiftRightLogical 130 24
-                              Store 129(byteAddrTemp) 131
-             132:     19(int) Load 129(byteAddrTemp)
-             134:      6(int) Load 11(pos)
-             135:     19(int) ShiftRightLogical 134 24
-                              Store 133(byteAddrTemp) 135
-             136:     19(int) Load 133(byteAddrTemp)
-             137:     30(ptr) AccessChain 18(sbuf) 26 136
-             138:      6(int) Load 137
-             139:     19(int) Load 133(byteAddrTemp)
-             140:     19(int) IAdd 139 46
-             141:     30(ptr) AccessChain 18(sbuf) 26 140
-             142:      6(int) Load 141
-             143:     19(int) Load 133(byteAddrTemp)
-             144:     19(int) IAdd 143 24
-             145:     30(ptr) AccessChain 18(sbuf) 26 144
-             146:      6(int) Load 145
-             147:     19(int) Load 133(byteAddrTemp)
-             149:     19(int) IAdd 147 148
-             150:     30(ptr) AccessChain 18(sbuf) 26 149
-             151:      6(int) Load 150
-             153:  152(ivec4) CompositeConstruct 138 142 146 151
-             154:      6(int) CompositeExtract 153 0
-             155:     30(ptr) AccessChain 18(sbuf) 26 132
-                              Store 155 154
-             156:     19(int) Load 129(byteAddrTemp)
-             157:     19(int) IAdd 156 46
-             158:      6(int) Load 11(pos)
-             159:     19(int) ShiftRightLogical 158 24
-                              Store 133(byteAddrTemp) 159
-             160:     19(int) Load 133(byteAddrTemp)
-             161:     30(ptr) AccessChain 18(sbuf) 26 160
-             162:      6(int) Load 161
-             163:     19(int) Load 133(byteAddrTemp)
-             164:     19(int) IAdd 163 46
-             165:     30(ptr) AccessChain 18(sbuf) 26 164
-             166:      6(int) Load 165
-             167:     19(int) Load 133(byteAddrTemp)
-             168:     19(int) IAdd 167 24
-             169:     30(ptr) AccessChain 18(sbuf) 26 168
-             170:      6(int) Load 169
-             171:     19(int) Load 133(byteAddrTemp)
-             172:     19(int) IAdd 171 148
-             173:     30(ptr) AccessChain 18(sbuf) 26 172
-             174:      6(int) Load 173
-             175:  152(ivec4) CompositeConstruct 162 166 170 174
-             176:      6(int) CompositeExtract 175 1
-             177:     30(ptr) AccessChain 18(sbuf) 26 157
-                              Store 177 176
-             178:     19(int) Load 129(byteAddrTemp)
-             179:     19(int) IAdd 178 24
-             180:      6(int) Load 11(pos)
-             181:     19(int) ShiftRightLogical 180 24
-                              Store 133(byteAddrTemp) 181
-             182:     19(int) Load 133(byteAddrTemp)
-             183:     30(ptr) AccessChain 18(sbuf) 26 182
-             184:      6(int) Load 183
-             185:     19(int) Load 133(byteAddrTemp)
-             186:     19(int) IAdd 185 46
-             187:     30(ptr) AccessChain 18(sbuf) 26 186
-             188:      6(int) Load 187
-             189:     19(int) Load 133(byteAddrTemp)
-             190:     19(int) IAdd 189 24
-             191:     30(ptr) AccessChain 18(sbuf) 26 190
-             192:      6(int) Load 191
-             193:     19(int) Load 133(byteAddrTemp)
-             194:     19(int) IAdd 193 148
-             195:     30(ptr) AccessChain 18(sbuf) 26 194
-             196:      6(int) Load 195
-             197:  152(ivec4) CompositeConstruct 184 188 192 196
-             198:      6(int) CompositeExtract 197 2
-             199:     30(ptr) AccessChain 18(sbuf) 26 179
-                              Store 199 198
-             200:     19(int) Load 129(byteAddrTemp)
-             201:     19(int) IAdd 200 148
-             202:      6(int) Load 11(pos)
-             203:     19(int) ShiftRightLogical 202 24
-                              Store 133(byteAddrTemp) 203
-             204:     19(int) Load 133(byteAddrTemp)
-             205:     30(ptr) AccessChain 18(sbuf) 26 204
-             206:      6(int) Load 205
-             207:     19(int) Load 133(byteAddrTemp)
-             208:     19(int) IAdd 207 46
-             209:     30(ptr) AccessChain 18(sbuf) 26 208
-             210:      6(int) Load 209
-             211:     19(int) Load 133(byteAddrTemp)
-             212:     19(int) IAdd 211 24
-             213:     30(ptr) AccessChain 18(sbuf) 26 212
-             214:      6(int) Load 213
-             215:     19(int) Load 133(byteAddrTemp)
-             216:     19(int) IAdd 215 148
-             217:     30(ptr) AccessChain 18(sbuf) 26 216
-             218:      6(int) Load 217
-             219:  152(ivec4) CompositeConstruct 206 210 214 218
-             221:      6(int) CompositeExtract 219 3
-             222:     30(ptr) AccessChain 18(sbuf) 26 201
-                              Store 222 221
-             223:      6(int) Load 11(pos)
-             224:     19(int) ShiftRightLogical 223 24
-             225:     30(ptr) AccessChain 18(sbuf) 26 224
-             226:      6(int) Load 225
-             227:    8(float) ConvertUToF 226
-             228:    9(fvec4) CompositeConstruct 227 227 227 227
-                              ReturnValue 228
+              33:     30(ptr) AccessChain 18(sbuf) 26 27
+                              Store 33 32
+              35:      6(int) Load 11(pos)
+              36:     19(int) ShiftRightLogical 35 24
+                              Store 34(byteAddrTemp) 36
+              37:     19(int) Load 34(byteAddrTemp)
+              39:      6(int) Load 11(pos)
+              40:     19(int) ShiftRightLogical 39 24
+                              Store 38(byteAddrTemp) 40
+              41:     19(int) Load 38(byteAddrTemp)
+              42:     30(ptr) AccessChain 18(sbuf) 26 41
+              43:      6(int) Load 42
+              44:     19(int) Load 38(byteAddrTemp)
+              46:     19(int) IAdd 44 45
+              47:     30(ptr) AccessChain 18(sbuf) 26 46
+              48:      6(int) Load 47
+              50:   49(ivec2) CompositeConstruct 43 48
+              52:      6(int) CompositeExtract 50 0
+              53:     30(ptr) AccessChain 18(sbuf) 26 37
+                              Store 53 52
+              54:     19(int) Load 34(byteAddrTemp)
+              55:     19(int) IAdd 54 45
+              56:      6(int) Load 11(pos)
+              57:     19(int) ShiftRightLogical 56 24
+                              Store 38(byteAddrTemp) 57
+              58:     19(int) Load 38(byteAddrTemp)
+              59:     30(ptr) AccessChain 18(sbuf) 26 58
+              60:      6(int) Load 59
+              61:     19(int) Load 38(byteAddrTemp)
+              62:     19(int) IAdd 61 45
+              63:     30(ptr) AccessChain 18(sbuf) 26 62
+              64:      6(int) Load 63
+              65:   49(ivec2) CompositeConstruct 60 64
+              67:      6(int) CompositeExtract 65 1
+              68:     30(ptr) AccessChain 18(sbuf) 26 55
+                              Store 68 67
+              70:      6(int) Load 11(pos)
+              71:     19(int) ShiftRightLogical 70 24
+                              Store 69(byteAddrTemp) 71
+              72:     19(int) Load 69(byteAddrTemp)
+              74:      6(int) Load 11(pos)
+              75:     19(int) ShiftRightLogical 74 24
+                              Store 73(byteAddrTemp) 75
+              76:     19(int) Load 73(byteAddrTemp)
+              77:     30(ptr) AccessChain 18(sbuf) 26 76
+              78:      6(int) Load 77
+              79:     19(int) Load 73(byteAddrTemp)
+              80:     19(int) IAdd 79 45
+              81:     30(ptr) AccessChain 18(sbuf) 26 80
+              82:      6(int) Load 81
+              83:     19(int) Load 73(byteAddrTemp)
+              84:     19(int) IAdd 83 24
+              85:     30(ptr) AccessChain 18(sbuf) 26 84
+              86:      6(int) Load 85
+              88:   87(ivec3) CompositeConstruct 78 82 86
+              89:      6(int) CompositeExtract 88 0
+              90:     30(ptr) AccessChain 18(sbuf) 26 72
+                              Store 90 89
+              91:     19(int) Load 69(byteAddrTemp)
+              92:     19(int) IAdd 91 45
+              93:      6(int) Load 11(pos)
+              94:     19(int) ShiftRightLogical 93 24
+                              Store 73(byteAddrTemp) 94
+              95:     19(int) Load 73(byteAddrTemp)
+              96:     30(ptr) AccessChain 18(sbuf) 26 95
+              97:      6(int) Load 96
+              98:     19(int) Load 73(byteAddrTemp)
+              99:     19(int) IAdd 98 45
+             100:     30(ptr) AccessChain 18(sbuf) 26 99
+             101:      6(int) Load 100
+             102:     19(int) Load 73(byteAddrTemp)
+             103:     19(int) IAdd 102 24
+             104:     30(ptr) AccessChain 18(sbuf) 26 103
+             105:      6(int) Load 104
+             106:   87(ivec3) CompositeConstruct 97 101 105
+             107:      6(int) CompositeExtract 106 1
+             108:     30(ptr) AccessChain 18(sbuf) 26 92
+                              Store 108 107
+             109:     19(int) Load 69(byteAddrTemp)
+             110:     19(int) IAdd 109 24
+             111:      6(int) Load 11(pos)
+             112:     19(int) ShiftRightLogical 111 24
+                              Store 73(byteAddrTemp) 112
+             113:     19(int) Load 73(byteAddrTemp)
+             114:     30(ptr) AccessChain 18(sbuf) 26 113
+             115:      6(int) Load 114
+             116:     19(int) Load 73(byteAddrTemp)
+             117:     19(int) IAdd 116 45
+             118:     30(ptr) AccessChain 18(sbuf) 26 117
+             119:      6(int) Load 118
+             120:     19(int) Load 73(byteAddrTemp)
+             121:     19(int) IAdd 120 24
+             122:     30(ptr) AccessChain 18(sbuf) 26 121
+             123:      6(int) Load 122
+             124:   87(ivec3) CompositeConstruct 115 119 123
+             126:      6(int) CompositeExtract 124 2
+             127:     30(ptr) AccessChain 18(sbuf) 26 110
+                              Store 127 126
+             129:      6(int) Load 11(pos)
+             130:     19(int) ShiftRightLogical 129 24
+                              Store 128(byteAddrTemp) 130
+             131:     19(int) Load 128(byteAddrTemp)
+             133:      6(int) Load 11(pos)
+             134:     19(int) ShiftRightLogical 133 24
+                              Store 132(byteAddrTemp) 134
+             135:     19(int) Load 132(byteAddrTemp)
+             136:     30(ptr) AccessChain 18(sbuf) 26 135
+             137:      6(int) Load 136
+             138:     19(int) Load 132(byteAddrTemp)
+             139:     19(int) IAdd 138 45
+             140:     30(ptr) AccessChain 18(sbuf) 26 139
+             141:      6(int) Load 140
+             142:     19(int) Load 132(byteAddrTemp)
+             143:     19(int) IAdd 142 24
+             144:     30(ptr) AccessChain 18(sbuf) 26 143
+             145:      6(int) Load 144
+             146:     19(int) Load 132(byteAddrTemp)
+             148:     19(int) IAdd 146 147
+             149:     30(ptr) AccessChain 18(sbuf) 26 148
+             150:      6(int) Load 149
+             152:  151(ivec4) CompositeConstruct 137 141 145 150
+             153:      6(int) CompositeExtract 152 0
+             154:     30(ptr) AccessChain 18(sbuf) 26 131
+                              Store 154 153
+             155:     19(int) Load 128(byteAddrTemp)
+             156:     19(int) IAdd 155 45
+             157:      6(int) Load 11(pos)
+             158:     19(int) ShiftRightLogical 157 24
+                              Store 132(byteAddrTemp) 158
+             159:     19(int) Load 132(byteAddrTemp)
+             160:     30(ptr) AccessChain 18(sbuf) 26 159
+             161:      6(int) Load 160
+             162:     19(int) Load 132(byteAddrTemp)
+             163:     19(int) IAdd 162 45
+             164:     30(ptr) AccessChain 18(sbuf) 26 163
+             165:      6(int) Load 164
+             166:     19(int) Load 132(byteAddrTemp)
+             167:     19(int) IAdd 166 24
+             168:     30(ptr) AccessChain 18(sbuf) 26 167
+             169:      6(int) Load 168
+             170:     19(int) Load 132(byteAddrTemp)
+             171:     19(int) IAdd 170 147
+             172:     30(ptr) AccessChain 18(sbuf) 26 171
+             173:      6(int) Load 172
+             174:  151(ivec4) CompositeConstruct 161 165 169 173
+             175:      6(int) CompositeExtract 174 1
+             176:     30(ptr) AccessChain 18(sbuf) 26 156
+                              Store 176 175
+             177:     19(int) Load 128(byteAddrTemp)
+             178:     19(int) IAdd 177 24
+             179:      6(int) Load 11(pos)
+             180:     19(int) ShiftRightLogical 179 24
+                              Store 132(byteAddrTemp) 180
+             181:     19(int) Load 132(byteAddrTemp)
+             182:     30(ptr) AccessChain 18(sbuf) 26 181
+             183:      6(int) Load 182
+             184:     19(int) Load 132(byteAddrTemp)
+             185:     19(int) IAdd 184 45
+             186:     30(ptr) AccessChain 18(sbuf) 26 185
+             187:      6(int) Load 186
+             188:     19(int) Load 132(byteAddrTemp)
+             189:     19(int) IAdd 188 24
+             190:     30(ptr) AccessChain 18(sbuf) 26 189
+             191:      6(int) Load 190
+             192:     19(int) Load 132(byteAddrTemp)
+             193:     19(int) IAdd 192 147
+             194:     30(ptr) AccessChain 18(sbuf) 26 193
+             195:      6(int) Load 194
+             196:  151(ivec4) CompositeConstruct 183 187 191 195
+             197:      6(int) CompositeExtract 196 2
+             198:     30(ptr) AccessChain 18(sbuf) 26 178
+                              Store 198 197
+             199:     19(int) Load 128(byteAddrTemp)
+             200:     19(int) IAdd 199 147
+             201:      6(int) Load 11(pos)
+             202:     19(int) ShiftRightLogical 201 24
+                              Store 132(byteAddrTemp) 202
+             203:     19(int) Load 132(byteAddrTemp)
+             204:     30(ptr) AccessChain 18(sbuf) 26 203
+             205:      6(int) Load 204
+             206:     19(int) Load 132(byteAddrTemp)
+             207:     19(int) IAdd 206 45
+             208:     30(ptr) AccessChain 18(sbuf) 26 207
+             209:      6(int) Load 208
+             210:     19(int) Load 132(byteAddrTemp)
+             211:     19(int) IAdd 210 24
+             212:     30(ptr) AccessChain 18(sbuf) 26 211
+             213:      6(int) Load 212
+             214:     19(int) Load 132(byteAddrTemp)
+             215:     19(int) IAdd 214 147
+             216:     30(ptr) AccessChain 18(sbuf) 26 215
+             217:      6(int) Load 216
+             218:  151(ivec4) CompositeConstruct 205 209 213 217
+             220:      6(int) CompositeExtract 218 3
+             221:     30(ptr) AccessChain 18(sbuf) 26 200
+                              Store 221 220
+             222:      6(int) Load 11(pos)
+             223:     19(int) ShiftRightLogical 222 24
+             224:     30(ptr) AccessChain 18(sbuf) 26 223
+             225:      6(int) Load 224
+             226:    8(float) ConvertUToF 225
+             227:    9(fvec4) CompositeConstruct 226 226 226 226
+                              ReturnValue 227
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.structin.vert.out b/Test/baseResults/hlsl.structin.vert.out
index 45304f5..a58a7d7 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): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 94
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.subpass.frag.out b/Test/baseResults/hlsl.subpass.frag.out
index 470699a..c971724 100644
--- a/Test/baseResults/hlsl.subpass.frag.out
+++ b/Test/baseResults/hlsl.subpass.frag.out
@@ -430,7 +430,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 204
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.switch.frag.out b/Test/baseResults/hlsl.switch.frag.out
index f1e3a4e..422a872 100755
--- a/Test/baseResults/hlsl.switch.frag.out
+++ b/Test/baseResults/hlsl.switch.frag.out
@@ -36,7 +36,7 @@
 0:17            Pre-Decrement ( temp 4-component vector of float)
 0:17              'input' ( in 4-component vector of float)
 0:18            Branch: Break
-0:21      switch
+0:21      switch: DontFlatten
 0:21      condition
 0:21        'c' ( in int)
 0:21      body
@@ -186,7 +186,7 @@
 0:17            Pre-Decrement ( temp 4-component vector of float)
 0:17              'input' ( in 4-component vector of float)
 0:18            Branch: Break
-0:21      switch
+0:21      switch: DontFlatten
 0:21      condition
 0:21        'c' ( in int)
 0:21      body
@@ -296,7 +296,7 @@
 0:?     'd' (layout( location=2) flat in int)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // 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 380a8bf..60efe5d 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): 80002
+// Generated by (magic number): 80006
 // 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 521ff74..e70ac88 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): 80002
+// Generated by (magic number): 80006
 // 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 2a62e85..bc2fda9 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): 80002
+// Generated by (magic number): 80006
 // 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 f1edfbd..1e17ad5 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): 80002
+// Generated by (magic number): 80006
 // 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 3800604..529c142 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): 80002
+// Generated by (magic number): 80006
 // 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 88783f6..7ca8f11 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): 80002
+// Generated by (magic number): 80006
 // 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 2aa7bd2..504a535 100644
--- a/Test/baseResults/hlsl.texture.struct.frag.out
+++ b/Test/baseResults/hlsl.texture.struct.frag.out
@@ -838,7 +838,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 240
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.texture.subvec4.frag.out b/Test/baseResults/hlsl.texture.subvec4.frag.out
index deaa82b..2b9702a 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): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 130
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.texturebuffer.frag.out b/Test/baseResults/hlsl.texturebuffer.frag.out
new file mode 100644
index 0000000..2802272
--- /dev/null
+++ b/Test/baseResults/hlsl.texturebuffer.frag.out
@@ -0,0 +1,153 @@
+hlsl.texturebuffer.frag
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:15  Function Definition: @main(vf4; ( temp 4-component vector of float)
+0:15    Function Parameters: 
+0:15      'pos' ( in 4-component vector of float)
+0:?     Sequence
+0:16      Branch: Return with expression
+0:16        add ( temp 4-component vector of float)
+0:16          f: direct index for structure (layout( row_major std430) buffer 4-component vector of float)
+0:16            'TextureBuffer_var' (layout( binding=0 row_major std430) readonly buffer block{layout( row_major std430) buffer 4-component vector of float f, layout( row_major std430) buffer 4-component vector of int i})
+0:16            Constant:
+0:16              0 (const int)
+0:16          f2: direct index for structure (layout( row_major std430) buffer 4-component vector of float)
+0:16            'anon@0' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer 4-component vector of float f2, layout( row_major std430) buffer 4-component vector of int i2})
+0:16            Constant:
+0:16              0 (const uint)
+0:15  Function Definition: main( ( temp void)
+0:15    Function Parameters: 
+0:?     Sequence
+0:15      move second child to first child ( temp 4-component vector of float)
+0:?         'pos' ( temp 4-component vector of float)
+0:?         'pos' ( in 4-component vector of float FragCoord)
+0:15      move second child to first child ( temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:15        Function Call: @main(vf4; ( temp 4-component vector of float)
+0:?           'pos' ( temp 4-component vector of float)
+0:?   Linker Objects
+0:?     'TextureBuffer_var' (layout( binding=0 row_major std430) readonly buffer block{layout( row_major std430) buffer 4-component vector of float f, layout( row_major std430) buffer 4-component vector of int i})
+0:?     'anon@0' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer 4-component vector of float f2, layout( row_major std430) buffer 4-component vector of int i2})
+0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:?     'pos' ( in 4-component vector of float FragCoord)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:15  Function Definition: @main(vf4; ( temp 4-component vector of float)
+0:15    Function Parameters: 
+0:15      'pos' ( in 4-component vector of float)
+0:?     Sequence
+0:16      Branch: Return with expression
+0:16        add ( temp 4-component vector of float)
+0:16          f: direct index for structure (layout( row_major std430) buffer 4-component vector of float)
+0:16            'TextureBuffer_var' (layout( binding=0 row_major std430) readonly buffer block{layout( row_major std430) buffer 4-component vector of float f, layout( row_major std430) buffer 4-component vector of int i})
+0:16            Constant:
+0:16              0 (const int)
+0:16          f2: direct index for structure (layout( row_major std430) buffer 4-component vector of float)
+0:16            'anon@0' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer 4-component vector of float f2, layout( row_major std430) buffer 4-component vector of int i2})
+0:16            Constant:
+0:16              0 (const uint)
+0:15  Function Definition: main( ( temp void)
+0:15    Function Parameters: 
+0:?     Sequence
+0:15      move second child to first child ( temp 4-component vector of float)
+0:?         'pos' ( temp 4-component vector of float)
+0:?         'pos' ( in 4-component vector of float FragCoord)
+0:15      move second child to first child ( temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:15        Function Call: @main(vf4; ( temp 4-component vector of float)
+0:?           'pos' ( temp 4-component vector of float)
+0:?   Linker Objects
+0:?     'TextureBuffer_var' (layout( binding=0 row_major std430) readonly buffer block{layout( row_major std430) buffer 4-component vector of float f, layout( row_major std430) buffer 4-component vector of int i})
+0:?     'anon@0' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer 4-component vector of float f2, layout( row_major std430) buffer 4-component vector of int i2})
+0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:?     'pos' ( in 4-component vector of float FragCoord)
+
+// Module Version 10000
+// Generated by (magic number): 80006
+// Id's are bound by 39
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 32 35
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 500
+                              Name 4  "main"
+                              Name 11  "@main(vf4;"
+                              Name 10  "pos"
+                              Name 15  "TextureBuffer_var"
+                              MemberName 15(TextureBuffer_var) 0  "f"
+                              MemberName 15(TextureBuffer_var) 1  "i"
+                              Name 17  "TextureBuffer_var"
+                              Name 22  "tbuf2"
+                              MemberName 22(tbuf2) 0  "f2"
+                              MemberName 22(tbuf2) 1  "i2"
+                              Name 24  ""
+                              Name 30  "pos"
+                              Name 32  "pos"
+                              Name 35  "@entryPointOutput"
+                              Name 36  "param"
+                              MemberDecorate 15(TextureBuffer_var) 0 NonWritable
+                              MemberDecorate 15(TextureBuffer_var) 0 Offset 0
+                              MemberDecorate 15(TextureBuffer_var) 1 NonWritable
+                              MemberDecorate 15(TextureBuffer_var) 1 Offset 16
+                              Decorate 15(TextureBuffer_var) BufferBlock
+                              Decorate 17(TextureBuffer_var) DescriptorSet 0
+                              Decorate 17(TextureBuffer_var) Binding 0
+                              MemberDecorate 22(tbuf2) 0 NonWritable
+                              MemberDecorate 22(tbuf2) 0 Offset 0
+                              MemberDecorate 22(tbuf2) 1 NonWritable
+                              MemberDecorate 22(tbuf2) 1 Offset 16
+                              Decorate 22(tbuf2) BufferBlock
+                              Decorate 24 DescriptorSet 0
+                              Decorate 32(pos) BuiltIn FragCoord
+                              Decorate 35(@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:             TypeInt 32 1
+              14:             TypeVector 13(int) 4
+15(TextureBuffer_var):             TypeStruct 7(fvec4) 14(ivec4)
+              16:             TypePointer Uniform 15(TextureBuffer_var)
+17(TextureBuffer_var):     16(ptr) Variable Uniform
+              18:     13(int) Constant 0
+              19:             TypePointer Uniform 7(fvec4)
+       22(tbuf2):             TypeStruct 7(fvec4) 14(ivec4)
+              23:             TypePointer Uniform 22(tbuf2)
+              24:     23(ptr) Variable Uniform
+              31:             TypePointer Input 7(fvec4)
+         32(pos):     31(ptr) Variable Input
+              34:             TypePointer Output 7(fvec4)
+35(@entryPointOutput):     34(ptr) Variable Output
+         4(main):           2 Function None 3
+               5:             Label
+         30(pos):      8(ptr) Variable Function
+       36(param):      8(ptr) Variable Function
+              33:    7(fvec4) Load 32(pos)
+                              Store 30(pos) 33
+              37:    7(fvec4) Load 30(pos)
+                              Store 36(param) 37
+              38:    7(fvec4) FunctionCall 11(@main(vf4;) 36(param)
+                              Store 35(@entryPointOutput) 38
+                              Return
+                              FunctionEnd
+  11(@main(vf4;):    7(fvec4) Function None 9
+         10(pos):      8(ptr) FunctionParameter
+              12:             Label
+              20:     19(ptr) AccessChain 17(TextureBuffer_var) 18
+              21:    7(fvec4) Load 20
+              25:     19(ptr) AccessChain 24 18
+              26:    7(fvec4) Load 25
+              27:    7(fvec4) FAdd 21 26
+                              ReturnValue 27
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.this.frag.out b/Test/baseResults/hlsl.this.frag.out
index f538abc..13700c2 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): 80002
+// Generated by (magic number): 80006
 // 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 94bea4c..4684bab 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): 80002
+// Generated by (magic number): 80006
 // 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 6e6bef0..2464ec9 100644
--- a/Test/baseResults/hlsl.tx.overload.frag.out
+++ b/Test/baseResults/hlsl.tx.overload.frag.out
@@ -134,7 +134,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 73
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.type.half.frag.out b/Test/baseResults/hlsl.type.half.frag.out
index 75750f9..b8c5ed7 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): 80002
+// Generated by (magic number): 80006
 // 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 fe6ac01..57907a0 100644
--- a/Test/baseResults/hlsl.type.identifier.frag.out
+++ b/Test/baseResults/hlsl.type.identifier.frag.out
@@ -86,7 +86,7 @@
 0:25                    'uint' ( temp mediump uint)
 0:25                'min16float' ( temp mediump float)
 0:25              'min10float' ( temp mediump float)
-0:25            Test condition and select ( temp mediump float)
+0:25            Test condition and select ( temp mediump float): no shortcircuit
 0:25              Condition
 0:25              direct index ( temp bool)
 0:25                'bool' ( temp 2-element array of bool)
@@ -221,7 +221,7 @@
 0:25                    'uint' ( temp mediump uint)
 0:25                'min16float' ( temp mediump float)
 0:25              'min10float' ( temp mediump float)
-0:25            Test condition and select ( temp mediump float)
+0:25            Test condition and select ( temp mediump float): no shortcircuit
 0:25              Condition
 0:25              direct index ( temp bool)
 0:25                'bool' ( temp 2-element array of bool)
@@ -266,13 +266,13 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80002
-// Id's are bound by 109
+// Generated by (magic number): 80006
+// Id's are bound by 105
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 107
+                              EntryPoint Fragment 4  "main" 103
                               ExecutionMode 4 OriginUpperLeft
                               Source HLSL 500
                               Name 4  "main"
@@ -289,9 +289,9 @@
                               Name 56  "foo_t"
                               MemberName 56(foo_t) 0  "float"
                               Name 58  "float"
-                              Name 86  "param"
-                              Name 93  "half2x3"
-                              Name 107  "@entryPointOutput"
+                              Name 82  "param"
+                              Name 89  "half2x3"
+                              Name 103  "@entryPointOutput"
                               Decorate 49(min16float) RelaxedPrecision
                               Decorate 50 RelaxedPrecision
                               Decorate 51 RelaxedPrecision
@@ -308,15 +308,14 @@
                               Decorate 72 RelaxedPrecision
                               Decorate 73 RelaxedPrecision
                               Decorate 74 RelaxedPrecision
-                              Decorate 80 RelaxedPrecision
+                              Decorate 77 RelaxedPrecision
+                              Decorate 78 RelaxedPrecision
+                              Decorate 79 RelaxedPrecision
                               Decorate 81 RelaxedPrecision
                               Decorate 83 RelaxedPrecision
                               Decorate 84 RelaxedPrecision
                               Decorate 85 RelaxedPrecision
-                              Decorate 87 RelaxedPrecision
-                              Decorate 88 RelaxedPrecision
-                              Decorate 89 RelaxedPrecision
-                              Decorate 107(@entryPointOutput) Location 0
+                              Decorate 103(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -341,16 +340,16 @@
        56(foo_t):             TypeStruct 6(float)
               57:             TypePointer Function 56(foo_t)
               59:    6(float) Constant 1109917696
-              90:             TypeVector 6(float) 3
-              91:             TypeMatrix 90(fvec3) 2
-              92:             TypePointer Function 91
-              97:     22(int) Constant 0
-             106:             TypePointer Output 12(fvec4)
-107(@entryPointOutput):    106(ptr) Variable Output
+              86:             TypeVector 6(float) 3
+              87:             TypeMatrix 86(fvec3) 2
+              88:             TypePointer Function 87
+              93:     22(int) Constant 0
+             102:             TypePointer Output 12(fvec4)
+103(@entryPointOutput):    102(ptr) Variable Output
          4(main):           2 Function None 3
                5:             Label
-             108:   12(fvec4) FunctionCall 14(@main()
-                              Store 107(@entryPointOutput) 108
+             104:   12(fvec4) FunctionCall 14(@main()
+                              Store 103(@entryPointOutput) 104
                               Return
                               FunctionEnd
       10(fn(f1;):    6(float) Function None 8
@@ -369,9 +368,8 @@
   52(min10float):      7(ptr) Variable Function
         54(half):      7(ptr) Variable Function
        58(float):     57(ptr) Variable Function
-              75:      7(ptr) Variable Function
-       86(param):      7(ptr) Variable Function
-     93(half2x3):     92(ptr) Variable Function
+       82(param):      7(ptr) Variable Function
+     89(half2x3):     88(ptr) Variable Function
                               Store 19(float) 20
               27:    6(float) Load 19(float)
               29:    21(bool) FOrdNotEqual 27 28
@@ -412,36 +410,27 @@
               72:    6(float) FAdd 70 71
               73:    6(float) Load 52(min10float)
               74:    6(float) FAdd 72 73
-              76:     37(ptr) AccessChain 26(bool) 40
-              77:    21(bool) Load 76
-                              SelectionMerge 79 None
-                              BranchConditional 77 78 82
-              78:               Label
-              80:     33(int)   Load 35(int)
-              81:    6(float)   ConvertSToF 80
-                                Store 75 81
-                                Branch 79
-              82:               Label
-              83:    6(float)   Load 19(float)
-                                Store 75 83
-                                Branch 79
-              79:             Label
-              84:    6(float) Load 75
-              85:    6(float) FAdd 74 84
-              87:    6(float) Load 19(float)
-                              Store 86(param) 87
-              88:    6(float) FunctionCall 10(fn(f1;) 86(param)
-              89:    6(float) FAdd 85 88
-                              Store 19(float) 89
-              94:    6(float) Load 19(float)
+              75:     37(ptr) AccessChain 26(bool) 40
+              76:    21(bool) Load 75
+              77:     33(int) Load 35(int)
+              78:    6(float) ConvertSToF 77
+              79:    6(float) Load 19(float)
+              80:    6(float) Select 76 78 79
+              81:    6(float) FAdd 74 80
+              83:    6(float) Load 19(float)
+                              Store 82(param) 83
+              84:    6(float) FunctionCall 10(fn(f1;) 82(param)
+              85:    6(float) FAdd 81 84
+                              Store 19(float) 85
+              90:    6(float) Load 19(float)
+              91:    6(float) Load 19(float)
+              92:    6(float) FMul 90 91
+              94:      7(ptr) AccessChain 89(half2x3) 40 93
+                              Store 94 92
               95:    6(float) Load 19(float)
-              96:    6(float) FMul 94 95
-              98:      7(ptr) AccessChain 93(half2x3) 40 97
-                              Store 98 96
-              99:    6(float) Load 19(float)
-             100:      7(ptr) AccessChain 93(half2x3) 40 97
-             101:    6(float) Load 100
-             102:    6(float) FAdd 99 101
-             103:   12(fvec4) CompositeConstruct 102 102 102 102
-                              ReturnValue 103
+              96:      7(ptr) AccessChain 89(half2x3) 40 93
+              97:    6(float) Load 96
+              98:    6(float) FAdd 95 97
+              99:   12(fvec4) CompositeConstruct 98 98 98 98
+                              ReturnValue 99
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.typeGraphCopy.vert.out b/Test/baseResults/hlsl.typeGraphCopy.vert.out
index 4ae33e2..61f7560 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): 80002
+// Generated by (magic number): 80006
 // 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 3f3e34c..e2125b4 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): 80002
+// Generated by (magic number): 80006
 // 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 e685c2c..0ac4581 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): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 27
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.wavebroadcast.comp.out b/Test/baseResults/hlsl.wavebroadcast.comp.out
new file mode 100644
index 0000000..5c84fb3
--- /dev/null
+++ b/Test/baseResults/hlsl.wavebroadcast.comp.out
@@ -0,0 +1,2731 @@
+hlsl.wavebroadcast.comp
+Shader version: 500
+local_size = (32, 16, 1)
+0:? Sequence
+0:13  Function Definition: @CSMain(vu3; ( temp void)
+0:13    Function Parameters: 
+0:13      'dti' ( in 3-component vector of uint)
+0:?     Sequence
+0:14      move second child to first child ( temp 4-component vector of uint)
+0:14        u: direct index for structure ( temp 4-component vector of uint)
+0:14          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:14            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:14              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:14              Constant:
+0:14                0 (const uint)
+0:14            direct index ( temp uint)
+0:14              'dti' ( in 3-component vector of uint)
+0:14              Constant:
+0:14                0 (const int)
+0:14          Constant:
+0:14            0 (const int)
+0:14        subgroupShuffle ( temp 4-component vector of uint)
+0:14          u: direct index for structure ( temp 4-component vector of uint)
+0:14            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:14              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:14                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:14                Constant:
+0:14                  0 (const uint)
+0:14              direct index ( temp uint)
+0:14                'dti' ( in 3-component vector of uint)
+0:14                Constant:
+0:14                  0 (const int)
+0:14            Constant:
+0:14              0 (const int)
+0:14          Constant:
+0:14            13 (const uint)
+0:15      move second child to first child ( temp uint)
+0:15        direct index ( temp uint)
+0:15          u: direct index for structure ( temp 4-component vector of uint)
+0:15            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:15              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:15                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:15                Constant:
+0:15                  0 (const uint)
+0:15              direct index ( temp uint)
+0:15                'dti' ( in 3-component vector of uint)
+0:15                Constant:
+0:15                  0 (const int)
+0:15            Constant:
+0:15              0 (const int)
+0:15          Constant:
+0:15            0 (const int)
+0:15        subgroupShuffle ( temp uint)
+0:15          direct index ( temp uint)
+0:15            u: direct index for structure ( temp 4-component vector of uint)
+0:15              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:15                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:15                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:15                  Constant:
+0:15                    0 (const uint)
+0:15                direct index ( temp uint)
+0:15                  'dti' ( in 3-component vector of uint)
+0:15                  Constant:
+0:15                    0 (const int)
+0:15              Constant:
+0:15                0 (const int)
+0:15            Constant:
+0:15              0 (const int)
+0:15          Constant:
+0:15            13 (const uint)
+0:16      move second child to first child ( temp 2-component vector of uint)
+0:16        vector swizzle ( temp 2-component vector of uint)
+0:16          u: direct index for structure ( temp 4-component vector of uint)
+0:16            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:16              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:16                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:16                Constant:
+0:16                  0 (const uint)
+0:16              direct index ( temp uint)
+0:16                'dti' ( in 3-component vector of uint)
+0:16                Constant:
+0:16                  0 (const int)
+0:16            Constant:
+0:16              0 (const int)
+0:16          Sequence
+0:16            Constant:
+0:16              0 (const int)
+0:16            Constant:
+0:16              1 (const int)
+0:16        subgroupShuffle ( temp 2-component vector of uint)
+0:16          vector swizzle ( temp 2-component vector of uint)
+0:16            u: direct index for structure ( temp 4-component vector of uint)
+0:16              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:16                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:16                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:16                  Constant:
+0:16                    0 (const uint)
+0:16                direct index ( temp uint)
+0:16                  'dti' ( in 3-component vector of uint)
+0:16                  Constant:
+0:16                    0 (const int)
+0:16              Constant:
+0:16                0 (const int)
+0:16            Sequence
+0:16              Constant:
+0:16                0 (const int)
+0:16              Constant:
+0:16                1 (const int)
+0:16          Constant:
+0:16            13 (const uint)
+0:17      move second child to first child ( temp 3-component vector of uint)
+0:17        vector swizzle ( temp 3-component vector of uint)
+0:17          u: direct index for structure ( temp 4-component vector of uint)
+0:17            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:17              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:17                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:17                Constant:
+0:17                  0 (const uint)
+0:17              direct index ( temp uint)
+0:17                'dti' ( in 3-component vector of uint)
+0:17                Constant:
+0:17                  0 (const int)
+0:17            Constant:
+0:17              0 (const int)
+0:17          Sequence
+0:17            Constant:
+0:17              0 (const int)
+0:17            Constant:
+0:17              1 (const int)
+0:17            Constant:
+0:17              2 (const int)
+0:17        subgroupShuffle ( temp 3-component vector of uint)
+0:17          vector swizzle ( temp 3-component vector of uint)
+0:17            u: direct index for structure ( temp 4-component vector of uint)
+0:17              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:17                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:17                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:17                  Constant:
+0:17                    0 (const uint)
+0:17                direct index ( temp uint)
+0:17                  'dti' ( in 3-component vector of uint)
+0:17                  Constant:
+0:17                    0 (const int)
+0:17              Constant:
+0:17                0 (const int)
+0:17            Sequence
+0:17              Constant:
+0:17                0 (const int)
+0:17              Constant:
+0:17                1 (const int)
+0:17              Constant:
+0:17                2 (const int)
+0:17          Constant:
+0:17            13 (const uint)
+0:19      move second child to first child ( temp 4-component vector of int)
+0:19        i: direct index for structure ( temp 4-component vector of int)
+0:19          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:19            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:19              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:19              Constant:
+0:19                0 (const uint)
+0:19            direct index ( temp uint)
+0:19              'dti' ( in 3-component vector of uint)
+0:19              Constant:
+0:19                0 (const int)
+0:19          Constant:
+0:19            1 (const int)
+0:19        subgroupShuffle ( temp 4-component vector of int)
+0:19          i: direct index for structure ( temp 4-component vector of int)
+0:19            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:19              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:19                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:19                Constant:
+0:19                  0 (const uint)
+0:19              direct index ( temp uint)
+0:19                'dti' ( in 3-component vector of uint)
+0:19                Constant:
+0:19                  0 (const int)
+0:19            Constant:
+0:19              1 (const int)
+0:19          Constant:
+0:19            13 (const uint)
+0:20      move second child to first child ( temp int)
+0:20        direct index ( temp int)
+0:20          i: direct index for structure ( temp 4-component vector of int)
+0:20            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:20              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:20                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:20                Constant:
+0:20                  0 (const uint)
+0:20              direct index ( temp uint)
+0:20                'dti' ( in 3-component vector of uint)
+0:20                Constant:
+0:20                  0 (const int)
+0:20            Constant:
+0:20              1 (const int)
+0:20          Constant:
+0:20            0 (const int)
+0:20        subgroupShuffle ( temp int)
+0:20          direct index ( temp int)
+0:20            i: direct index for structure ( temp 4-component vector of int)
+0:20              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:20                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:20                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:20                  Constant:
+0:20                    0 (const uint)
+0:20                direct index ( temp uint)
+0:20                  'dti' ( in 3-component vector of uint)
+0:20                  Constant:
+0:20                    0 (const int)
+0:20              Constant:
+0:20                1 (const int)
+0:20            Constant:
+0:20              0 (const int)
+0:20          Constant:
+0:20            13 (const uint)
+0:21      move second child to first child ( temp 2-component vector of int)
+0:21        vector swizzle ( temp 2-component vector of int)
+0:21          i: direct index for structure ( temp 4-component vector of int)
+0:21            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:21              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:21                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:21                Constant:
+0:21                  0 (const uint)
+0:21              direct index ( temp uint)
+0:21                'dti' ( in 3-component vector of uint)
+0:21                Constant:
+0:21                  0 (const int)
+0:21            Constant:
+0:21              1 (const int)
+0:21          Sequence
+0:21            Constant:
+0:21              0 (const int)
+0:21            Constant:
+0:21              1 (const int)
+0:21        subgroupShuffle ( temp 2-component vector of int)
+0:21          vector swizzle ( temp 2-component vector of int)
+0:21            i: direct index for structure ( temp 4-component vector of int)
+0:21              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:21                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:21                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:21                  Constant:
+0:21                    0 (const uint)
+0:21                direct index ( temp uint)
+0:21                  'dti' ( in 3-component vector of uint)
+0:21                  Constant:
+0:21                    0 (const int)
+0:21              Constant:
+0:21                1 (const int)
+0:21            Sequence
+0:21              Constant:
+0:21                0 (const int)
+0:21              Constant:
+0:21                1 (const int)
+0:21          Constant:
+0:21            13 (const uint)
+0:22      move second child to first child ( temp 3-component vector of int)
+0:22        vector swizzle ( temp 3-component vector of int)
+0:22          i: direct index for structure ( temp 4-component vector of int)
+0:22            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:22              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:22                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:22                Constant:
+0:22                  0 (const uint)
+0:22              direct index ( temp uint)
+0:22                'dti' ( in 3-component vector of uint)
+0:22                Constant:
+0:22                  0 (const int)
+0:22            Constant:
+0:22              1 (const int)
+0:22          Sequence
+0:22            Constant:
+0:22              0 (const int)
+0:22            Constant:
+0:22              1 (const int)
+0:22            Constant:
+0:22              2 (const int)
+0:22        subgroupShuffle ( temp 3-component vector of int)
+0:22          vector swizzle ( temp 3-component vector of int)
+0:22            i: direct index for structure ( temp 4-component vector of int)
+0:22              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:22                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:22                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:22                  Constant:
+0:22                    0 (const uint)
+0:22                direct index ( temp uint)
+0:22                  'dti' ( in 3-component vector of uint)
+0:22                  Constant:
+0:22                    0 (const int)
+0:22              Constant:
+0:22                1 (const int)
+0:22            Sequence
+0:22              Constant:
+0:22                0 (const int)
+0:22              Constant:
+0:22                1 (const int)
+0:22              Constant:
+0:22                2 (const int)
+0:22          Constant:
+0:22            13 (const uint)
+0:24      move second child to first child ( temp 4-component vector of float)
+0:24        f: direct index for structure ( temp 4-component vector of float)
+0:24          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:24            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:24              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:24              Constant:
+0:24                0 (const uint)
+0:24            direct index ( temp uint)
+0:24              'dti' ( in 3-component vector of uint)
+0:24              Constant:
+0:24                0 (const int)
+0:24          Constant:
+0:24            2 (const int)
+0:24        subgroupShuffle ( temp 4-component vector of float)
+0:24          f: direct index for structure ( temp 4-component vector of float)
+0:24            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:24              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:24                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:24                Constant:
+0:24                  0 (const uint)
+0:24              direct index ( temp uint)
+0:24                'dti' ( in 3-component vector of uint)
+0:24                Constant:
+0:24                  0 (const int)
+0:24            Constant:
+0:24              2 (const int)
+0:24          Constant:
+0:24            13 (const uint)
+0:25      move second child to first child ( temp float)
+0:25        direct index ( temp float)
+0:25          f: direct index for structure ( temp 4-component vector of float)
+0:25            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:25              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:25                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:25                Constant:
+0:25                  0 (const uint)
+0:25              direct index ( temp uint)
+0:25                'dti' ( in 3-component vector of uint)
+0:25                Constant:
+0:25                  0 (const int)
+0:25            Constant:
+0:25              2 (const int)
+0:25          Constant:
+0:25            0 (const int)
+0:25        subgroupShuffle ( temp float)
+0:25          direct index ( temp float)
+0:25            f: direct index for structure ( temp 4-component vector of float)
+0:25              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:25                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:25                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:25                  Constant:
+0:25                    0 (const uint)
+0:25                direct index ( temp uint)
+0:25                  'dti' ( in 3-component vector of uint)
+0:25                  Constant:
+0:25                    0 (const int)
+0:25              Constant:
+0:25                2 (const int)
+0:25            Constant:
+0:25              0 (const int)
+0:25          Constant:
+0:25            13 (const uint)
+0:26      move second child to first child ( temp 2-component vector of float)
+0:26        vector swizzle ( temp 2-component vector of float)
+0:26          f: direct index for structure ( temp 4-component vector of float)
+0:26            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:26              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:26                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:26                Constant:
+0:26                  0 (const uint)
+0:26              direct index ( temp uint)
+0:26                'dti' ( in 3-component vector of uint)
+0:26                Constant:
+0:26                  0 (const int)
+0:26            Constant:
+0:26              2 (const int)
+0:26          Sequence
+0:26            Constant:
+0:26              0 (const int)
+0:26            Constant:
+0:26              1 (const int)
+0:26        subgroupShuffle ( temp 2-component vector of float)
+0:26          vector swizzle ( temp 2-component vector of float)
+0:26            f: direct index for structure ( temp 4-component vector of float)
+0:26              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:26                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:26                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:26                  Constant:
+0:26                    0 (const uint)
+0:26                direct index ( temp uint)
+0:26                  'dti' ( in 3-component vector of uint)
+0:26                  Constant:
+0:26                    0 (const int)
+0:26              Constant:
+0:26                2 (const int)
+0:26            Sequence
+0:26              Constant:
+0:26                0 (const int)
+0:26              Constant:
+0:26                1 (const int)
+0:26          Constant:
+0:26            13 (const uint)
+0:27      move second child to first child ( temp 3-component vector of float)
+0:27        vector swizzle ( temp 3-component vector of float)
+0:27          f: direct index for structure ( temp 4-component vector of float)
+0:27            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:27              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:27                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:27                Constant:
+0:27                  0 (const uint)
+0:27              direct index ( temp uint)
+0:27                'dti' ( in 3-component vector of uint)
+0:27                Constant:
+0:27                  0 (const int)
+0:27            Constant:
+0:27              2 (const int)
+0:27          Sequence
+0:27            Constant:
+0:27              0 (const int)
+0:27            Constant:
+0:27              1 (const int)
+0:27            Constant:
+0:27              2 (const int)
+0:27        subgroupShuffle ( temp 3-component vector of float)
+0:27          vector swizzle ( temp 3-component vector of float)
+0:27            f: direct index for structure ( temp 4-component vector of float)
+0:27              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:27                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:27                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:27                  Constant:
+0:27                    0 (const uint)
+0:27                direct index ( temp uint)
+0:27                  'dti' ( in 3-component vector of uint)
+0:27                  Constant:
+0:27                    0 (const int)
+0:27              Constant:
+0:27                2 (const int)
+0:27            Sequence
+0:27              Constant:
+0:27                0 (const int)
+0:27              Constant:
+0:27                1 (const int)
+0:27              Constant:
+0:27                2 (const int)
+0:27          Constant:
+0:27            13 (const uint)
+0:29      move second child to first child ( temp 4-component vector of double)
+0:29        d: direct index for structure ( temp 4-component vector of double)
+0:29          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:29            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:29              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:29              Constant:
+0:29                0 (const uint)
+0:29            direct index ( temp uint)
+0:29              'dti' ( in 3-component vector of uint)
+0:29              Constant:
+0:29                0 (const int)
+0:29          Constant:
+0:29            3 (const int)
+0:29        subgroupBroadcastFirst ( temp 4-component vector of double)
+0:29          d: direct index for structure ( temp 4-component vector of double)
+0:29            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:29              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:29                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:29                Constant:
+0:29                  0 (const uint)
+0:29              direct index ( temp uint)
+0:29                'dti' ( in 3-component vector of uint)
+0:29                Constant:
+0:29                  0 (const int)
+0:29            Constant:
+0:29              3 (const int)
+0:30      move second child to first child ( temp double)
+0:30        direct index ( temp double)
+0:30          d: direct index for structure ( temp 4-component vector of double)
+0:30            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:30              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:30                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:30                Constant:
+0:30                  0 (const uint)
+0:30              direct index ( temp uint)
+0:30                'dti' ( in 3-component vector of uint)
+0:30                Constant:
+0:30                  0 (const int)
+0:30            Constant:
+0:30              3 (const int)
+0:30          Constant:
+0:30            0 (const int)
+0:30        subgroupBroadcastFirst ( temp double)
+0:30          direct index ( temp double)
+0:30            d: direct index for structure ( temp 4-component vector of double)
+0:30              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:30                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:30                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:30                  Constant:
+0:30                    0 (const uint)
+0:30                direct index ( temp uint)
+0:30                  'dti' ( in 3-component vector of uint)
+0:30                  Constant:
+0:30                    0 (const int)
+0:30              Constant:
+0:30                3 (const int)
+0:30            Constant:
+0:30              0 (const int)
+0:31      move second child to first child ( temp 2-component vector of double)
+0:31        vector swizzle ( temp 2-component vector of double)
+0:31          d: direct index for structure ( temp 4-component vector of double)
+0:31            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:31              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:31                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:31                Constant:
+0:31                  0 (const uint)
+0:31              direct index ( temp uint)
+0:31                'dti' ( in 3-component vector of uint)
+0:31                Constant:
+0:31                  0 (const int)
+0:31            Constant:
+0:31              3 (const int)
+0:31          Sequence
+0:31            Constant:
+0:31              0 (const int)
+0:31            Constant:
+0:31              1 (const int)
+0:31        subgroupBroadcastFirst ( temp 2-component vector of double)
+0:31          vector swizzle ( temp 2-component vector of double)
+0:31            d: direct index for structure ( temp 4-component vector of double)
+0:31              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:31                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:31                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:31                  Constant:
+0:31                    0 (const uint)
+0:31                direct index ( temp uint)
+0:31                  'dti' ( in 3-component vector of uint)
+0:31                  Constant:
+0:31                    0 (const int)
+0:31              Constant:
+0:31                3 (const int)
+0:31            Sequence
+0:31              Constant:
+0:31                0 (const int)
+0:31              Constant:
+0:31                1 (const int)
+0:32      move second child to first child ( temp 3-component vector of double)
+0:32        vector swizzle ( temp 3-component vector of double)
+0:32          d: direct index for structure ( temp 4-component vector of double)
+0:32            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:32              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:32                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:32                Constant:
+0:32                  0 (const uint)
+0:32              direct index ( temp uint)
+0:32                'dti' ( in 3-component vector of uint)
+0:32                Constant:
+0:32                  0 (const int)
+0:32            Constant:
+0:32              3 (const int)
+0:32          Sequence
+0:32            Constant:
+0:32              0 (const int)
+0:32            Constant:
+0:32              1 (const int)
+0:32            Constant:
+0:32              2 (const int)
+0:32        subgroupBroadcastFirst ( temp 3-component vector of double)
+0:32          vector swizzle ( temp 3-component vector of double)
+0:32            d: direct index for structure ( temp 4-component vector of double)
+0:32              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:32                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:32                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:32                  Constant:
+0:32                    0 (const uint)
+0:32                direct index ( temp uint)
+0:32                  'dti' ( in 3-component vector of uint)
+0:32                  Constant:
+0:32                    0 (const int)
+0:32              Constant:
+0:32                3 (const int)
+0:32            Sequence
+0:32              Constant:
+0:32                0 (const int)
+0:32              Constant:
+0:32                1 (const int)
+0:32              Constant:
+0:32                2 (const int)
+0:34      move second child to first child ( temp 4-component vector of uint)
+0:34        u: direct index for structure ( temp 4-component vector of uint)
+0:34          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:34            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:34              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:34              Constant:
+0:34                0 (const uint)
+0:34            direct index ( temp uint)
+0:34              'dti' ( in 3-component vector of uint)
+0:34              Constant:
+0:34                0 (const int)
+0:34          Constant:
+0:34            0 (const int)
+0:34        subgroupBroadcastFirst ( temp 4-component vector of uint)
+0:34          u: direct index for structure ( temp 4-component vector of uint)
+0:34            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:34              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:34                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:34                Constant:
+0:34                  0 (const uint)
+0:34              direct index ( temp uint)
+0:34                'dti' ( in 3-component vector of uint)
+0:34                Constant:
+0:34                  0 (const int)
+0:34            Constant:
+0:34              0 (const int)
+0:35      move second child to first child ( temp uint)
+0:35        direct index ( temp uint)
+0:35          u: direct index for structure ( temp 4-component vector of uint)
+0:35            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:35              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:35                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:35                Constant:
+0:35                  0 (const uint)
+0:35              direct index ( temp uint)
+0:35                'dti' ( in 3-component vector of uint)
+0:35                Constant:
+0:35                  0 (const int)
+0:35            Constant:
+0:35              0 (const int)
+0:35          Constant:
+0:35            0 (const int)
+0:35        subgroupBroadcastFirst ( temp uint)
+0:35          direct index ( temp uint)
+0:35            u: direct index for structure ( temp 4-component vector of uint)
+0:35              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:35                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:35                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:35                  Constant:
+0:35                    0 (const uint)
+0:35                direct index ( temp uint)
+0:35                  'dti' ( in 3-component vector of uint)
+0:35                  Constant:
+0:35                    0 (const int)
+0:35              Constant:
+0:35                0 (const int)
+0:35            Constant:
+0:35              0 (const int)
+0:36      move second child to first child ( temp 2-component vector of uint)
+0:36        vector swizzle ( temp 2-component vector of uint)
+0:36          u: direct index for structure ( temp 4-component vector of uint)
+0:36            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:36              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:36                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:36                Constant:
+0:36                  0 (const uint)
+0:36              direct index ( temp uint)
+0:36                'dti' ( in 3-component vector of uint)
+0:36                Constant:
+0:36                  0 (const int)
+0:36            Constant:
+0:36              0 (const int)
+0:36          Sequence
+0:36            Constant:
+0:36              0 (const int)
+0:36            Constant:
+0:36              1 (const int)
+0:36        subgroupBroadcastFirst ( temp 2-component vector of uint)
+0:36          vector swizzle ( temp 2-component vector of uint)
+0:36            u: direct index for structure ( temp 4-component vector of uint)
+0:36              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:36                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:36                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:36                  Constant:
+0:36                    0 (const uint)
+0:36                direct index ( temp uint)
+0:36                  'dti' ( in 3-component vector of uint)
+0:36                  Constant:
+0:36                    0 (const int)
+0:36              Constant:
+0:36                0 (const int)
+0:36            Sequence
+0:36              Constant:
+0:36                0 (const int)
+0:36              Constant:
+0:36                1 (const int)
+0:37      move second child to first child ( temp 3-component vector of uint)
+0:37        vector swizzle ( temp 3-component vector of uint)
+0:37          u: direct index for structure ( temp 4-component vector of uint)
+0:37            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:37              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:37                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:37                Constant:
+0:37                  0 (const uint)
+0:37              direct index ( temp uint)
+0:37                'dti' ( in 3-component vector of uint)
+0:37                Constant:
+0:37                  0 (const int)
+0:37            Constant:
+0:37              0 (const int)
+0:37          Sequence
+0:37            Constant:
+0:37              0 (const int)
+0:37            Constant:
+0:37              1 (const int)
+0:37            Constant:
+0:37              2 (const int)
+0:37        subgroupBroadcastFirst ( temp 3-component vector of uint)
+0:37          vector swizzle ( temp 3-component vector of uint)
+0:37            u: direct index for structure ( temp 4-component vector of uint)
+0:37              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:37                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:37                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:37                  Constant:
+0:37                    0 (const uint)
+0:37                direct index ( temp uint)
+0:37                  'dti' ( in 3-component vector of uint)
+0:37                  Constant:
+0:37                    0 (const int)
+0:37              Constant:
+0:37                0 (const int)
+0:37            Sequence
+0:37              Constant:
+0:37                0 (const int)
+0:37              Constant:
+0:37                1 (const int)
+0:37              Constant:
+0:37                2 (const int)
+0:39      move second child to first child ( temp 4-component vector of int)
+0:39        i: direct index for structure ( temp 4-component vector of int)
+0:39          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:39            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:39              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:39              Constant:
+0:39                0 (const uint)
+0:39            direct index ( temp uint)
+0:39              'dti' ( in 3-component vector of uint)
+0:39              Constant:
+0:39                0 (const int)
+0:39          Constant:
+0:39            1 (const int)
+0:39        subgroupBroadcastFirst ( temp 4-component vector of int)
+0:39          i: direct index for structure ( temp 4-component vector of int)
+0:39            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:39              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:39                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:39                Constant:
+0:39                  0 (const uint)
+0:39              direct index ( temp uint)
+0:39                'dti' ( in 3-component vector of uint)
+0:39                Constant:
+0:39                  0 (const int)
+0:39            Constant:
+0:39              1 (const int)
+0:40      move second child to first child ( temp int)
+0:40        direct index ( temp int)
+0:40          i: direct index for structure ( temp 4-component vector of int)
+0:40            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:40              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:40                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:40                Constant:
+0:40                  0 (const uint)
+0:40              direct index ( temp uint)
+0:40                'dti' ( in 3-component vector of uint)
+0:40                Constant:
+0:40                  0 (const int)
+0:40            Constant:
+0:40              1 (const int)
+0:40          Constant:
+0:40            0 (const int)
+0:40        subgroupBroadcastFirst ( temp int)
+0:40          direct index ( temp int)
+0:40            i: direct index for structure ( temp 4-component vector of int)
+0:40              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:40                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:40                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:40                  Constant:
+0:40                    0 (const uint)
+0:40                direct index ( temp uint)
+0:40                  'dti' ( in 3-component vector of uint)
+0:40                  Constant:
+0:40                    0 (const int)
+0:40              Constant:
+0:40                1 (const int)
+0:40            Constant:
+0:40              0 (const int)
+0:41      move second child to first child ( temp 2-component vector of int)
+0:41        vector swizzle ( temp 2-component vector of int)
+0:41          i: direct index for structure ( temp 4-component vector of int)
+0:41            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:41              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:41                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:41                Constant:
+0:41                  0 (const uint)
+0:41              direct index ( temp uint)
+0:41                'dti' ( in 3-component vector of uint)
+0:41                Constant:
+0:41                  0 (const int)
+0:41            Constant:
+0:41              1 (const int)
+0:41          Sequence
+0:41            Constant:
+0:41              0 (const int)
+0:41            Constant:
+0:41              1 (const int)
+0:41        subgroupBroadcastFirst ( temp 2-component vector of int)
+0:41          vector swizzle ( temp 2-component vector of int)
+0:41            i: direct index for structure ( temp 4-component vector of int)
+0:41              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:41                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:41                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:41                  Constant:
+0:41                    0 (const uint)
+0:41                direct index ( temp uint)
+0:41                  'dti' ( in 3-component vector of uint)
+0:41                  Constant:
+0:41                    0 (const int)
+0:41              Constant:
+0:41                1 (const int)
+0:41            Sequence
+0:41              Constant:
+0:41                0 (const int)
+0:41              Constant:
+0:41                1 (const int)
+0:42      move second child to first child ( temp 3-component vector of int)
+0:42        vector swizzle ( temp 3-component vector of int)
+0:42          i: direct index for structure ( temp 4-component vector of int)
+0:42            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:42              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:42                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:42                Constant:
+0:42                  0 (const uint)
+0:42              direct index ( temp uint)
+0:42                'dti' ( in 3-component vector of uint)
+0:42                Constant:
+0:42                  0 (const int)
+0:42            Constant:
+0:42              1 (const int)
+0:42          Sequence
+0:42            Constant:
+0:42              0 (const int)
+0:42            Constant:
+0:42              1 (const int)
+0:42            Constant:
+0:42              2 (const int)
+0:42        subgroupBroadcastFirst ( temp 3-component vector of int)
+0:42          vector swizzle ( temp 3-component vector of int)
+0:42            i: direct index for structure ( temp 4-component vector of int)
+0:42              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:42                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:42                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:42                  Constant:
+0:42                    0 (const uint)
+0:42                direct index ( temp uint)
+0:42                  'dti' ( in 3-component vector of uint)
+0:42                  Constant:
+0:42                    0 (const int)
+0:42              Constant:
+0:42                1 (const int)
+0:42            Sequence
+0:42              Constant:
+0:42                0 (const int)
+0:42              Constant:
+0:42                1 (const int)
+0:42              Constant:
+0:42                2 (const int)
+0:44      move second child to first child ( temp 4-component vector of float)
+0:44        f: direct index for structure ( temp 4-component vector of float)
+0:44          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:44            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:44              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:44              Constant:
+0:44                0 (const uint)
+0:44            direct index ( temp uint)
+0:44              'dti' ( in 3-component vector of uint)
+0:44              Constant:
+0:44                0 (const int)
+0:44          Constant:
+0:44            2 (const int)
+0:44        subgroupBroadcastFirst ( temp 4-component vector of float)
+0:44          f: direct index for structure ( temp 4-component vector of float)
+0:44            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:44              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:44                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:44                Constant:
+0:44                  0 (const uint)
+0:44              direct index ( temp uint)
+0:44                'dti' ( in 3-component vector of uint)
+0:44                Constant:
+0:44                  0 (const int)
+0:44            Constant:
+0:44              2 (const int)
+0:45      move second child to first child ( temp float)
+0:45        direct index ( temp float)
+0:45          f: direct index for structure ( temp 4-component vector of float)
+0:45            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:45              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:45                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:45                Constant:
+0:45                  0 (const uint)
+0:45              direct index ( temp uint)
+0:45                'dti' ( in 3-component vector of uint)
+0:45                Constant:
+0:45                  0 (const int)
+0:45            Constant:
+0:45              2 (const int)
+0:45          Constant:
+0:45            0 (const int)
+0:45        subgroupBroadcastFirst ( temp float)
+0:45          direct index ( temp float)
+0:45            f: direct index for structure ( temp 4-component vector of float)
+0:45              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:45                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:45                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:45                  Constant:
+0:45                    0 (const uint)
+0:45                direct index ( temp uint)
+0:45                  'dti' ( in 3-component vector of uint)
+0:45                  Constant:
+0:45                    0 (const int)
+0:45              Constant:
+0:45                2 (const int)
+0:45            Constant:
+0:45              0 (const int)
+0:46      move second child to first child ( temp 2-component vector of float)
+0:46        vector swizzle ( temp 2-component vector of float)
+0:46          f: direct index for structure ( temp 4-component vector of float)
+0:46            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:46              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:46                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:46                Constant:
+0:46                  0 (const uint)
+0:46              direct index ( temp uint)
+0:46                'dti' ( in 3-component vector of uint)
+0:46                Constant:
+0:46                  0 (const int)
+0:46            Constant:
+0:46              2 (const int)
+0:46          Sequence
+0:46            Constant:
+0:46              0 (const int)
+0:46            Constant:
+0:46              1 (const int)
+0:46        subgroupBroadcastFirst ( temp 2-component vector of float)
+0:46          vector swizzle ( temp 2-component vector of float)
+0:46            f: direct index for structure ( temp 4-component vector of float)
+0:46              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:46                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:46                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:46                  Constant:
+0:46                    0 (const uint)
+0:46                direct index ( temp uint)
+0:46                  'dti' ( in 3-component vector of uint)
+0:46                  Constant:
+0:46                    0 (const int)
+0:46              Constant:
+0:46                2 (const int)
+0:46            Sequence
+0:46              Constant:
+0:46                0 (const int)
+0:46              Constant:
+0:46                1 (const int)
+0:47      move second child to first child ( temp 3-component vector of float)
+0:47        vector swizzle ( temp 3-component vector of float)
+0:47          f: direct index for structure ( temp 4-component vector of float)
+0:47            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:47              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:47                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:47                Constant:
+0:47                  0 (const uint)
+0:47              direct index ( temp uint)
+0:47                'dti' ( in 3-component vector of uint)
+0:47                Constant:
+0:47                  0 (const int)
+0:47            Constant:
+0:47              2 (const int)
+0:47          Sequence
+0:47            Constant:
+0:47              0 (const int)
+0:47            Constant:
+0:47              1 (const int)
+0:47            Constant:
+0:47              2 (const int)
+0:47        subgroupBroadcastFirst ( temp 3-component vector of float)
+0:47          vector swizzle ( temp 3-component vector of float)
+0:47            f: direct index for structure ( temp 4-component vector of float)
+0:47              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:47                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:47                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:47                  Constant:
+0:47                    0 (const uint)
+0:47                direct index ( temp uint)
+0:47                  'dti' ( in 3-component vector of uint)
+0:47                  Constant:
+0:47                    0 (const int)
+0:47              Constant:
+0:47                2 (const int)
+0:47            Sequence
+0:47              Constant:
+0:47                0 (const int)
+0:47              Constant:
+0:47                1 (const int)
+0:47              Constant:
+0:47                2 (const int)
+0:49      move second child to first child ( temp 4-component vector of double)
+0:49        d: direct index for structure ( temp 4-component vector of double)
+0:49          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:49            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:49              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:49              Constant:
+0:49                0 (const uint)
+0:49            direct index ( temp uint)
+0:49              'dti' ( in 3-component vector of uint)
+0:49              Constant:
+0:49                0 (const int)
+0:49          Constant:
+0:49            3 (const int)
+0:49        subgroupBroadcastFirst ( temp 4-component vector of double)
+0:49          d: direct index for structure ( temp 4-component vector of double)
+0:49            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:49              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:49                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:49                Constant:
+0:49                  0 (const uint)
+0:49              direct index ( temp uint)
+0:49                'dti' ( in 3-component vector of uint)
+0:49                Constant:
+0:49                  0 (const int)
+0:49            Constant:
+0:49              3 (const int)
+0:50      move second child to first child ( temp double)
+0:50        direct index ( temp double)
+0:50          d: direct index for structure ( temp 4-component vector of double)
+0:50            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:50              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:50                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:50                Constant:
+0:50                  0 (const uint)
+0:50              direct index ( temp uint)
+0:50                'dti' ( in 3-component vector of uint)
+0:50                Constant:
+0:50                  0 (const int)
+0:50            Constant:
+0:50              3 (const int)
+0:50          Constant:
+0:50            0 (const int)
+0:50        subgroupBroadcastFirst ( temp double)
+0:50          direct index ( temp double)
+0:50            d: direct index for structure ( temp 4-component vector of double)
+0:50              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:50                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:50                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:50                  Constant:
+0:50                    0 (const uint)
+0:50                direct index ( temp uint)
+0:50                  'dti' ( in 3-component vector of uint)
+0:50                  Constant:
+0:50                    0 (const int)
+0:50              Constant:
+0:50                3 (const int)
+0:50            Constant:
+0:50              0 (const int)
+0:51      move second child to first child ( temp 2-component vector of double)
+0:51        vector swizzle ( temp 2-component vector of double)
+0:51          d: direct index for structure ( temp 4-component vector of double)
+0:51            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:51              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:51                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:51                Constant:
+0:51                  0 (const uint)
+0:51              direct index ( temp uint)
+0:51                'dti' ( in 3-component vector of uint)
+0:51                Constant:
+0:51                  0 (const int)
+0:51            Constant:
+0:51              3 (const int)
+0:51          Sequence
+0:51            Constant:
+0:51              0 (const int)
+0:51            Constant:
+0:51              1 (const int)
+0:51        subgroupBroadcastFirst ( temp 2-component vector of double)
+0:51          vector swizzle ( temp 2-component vector of double)
+0:51            d: direct index for structure ( temp 4-component vector of double)
+0:51              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:51                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:51                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:51                  Constant:
+0:51                    0 (const uint)
+0:51                direct index ( temp uint)
+0:51                  'dti' ( in 3-component vector of uint)
+0:51                  Constant:
+0:51                    0 (const int)
+0:51              Constant:
+0:51                3 (const int)
+0:51            Sequence
+0:51              Constant:
+0:51                0 (const int)
+0:51              Constant:
+0:51                1 (const int)
+0:52      move second child to first child ( temp 3-component vector of double)
+0:52        vector swizzle ( temp 3-component vector of double)
+0:52          d: direct index for structure ( temp 4-component vector of double)
+0:52            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:52              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:52                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:52                Constant:
+0:52                  0 (const uint)
+0:52              direct index ( temp uint)
+0:52                'dti' ( in 3-component vector of uint)
+0:52                Constant:
+0:52                  0 (const int)
+0:52            Constant:
+0:52              3 (const int)
+0:52          Sequence
+0:52            Constant:
+0:52              0 (const int)
+0:52            Constant:
+0:52              1 (const int)
+0:52            Constant:
+0:52              2 (const int)
+0:52        subgroupBroadcastFirst ( temp 3-component vector of double)
+0:52          vector swizzle ( temp 3-component vector of double)
+0:52            d: direct index for structure ( temp 4-component vector of double)
+0:52              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:52                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:52                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:52                  Constant:
+0:52                    0 (const uint)
+0:52                direct index ( temp uint)
+0:52                  'dti' ( in 3-component vector of uint)
+0:52                  Constant:
+0:52                    0 (const int)
+0:52              Constant:
+0:52                3 (const int)
+0:52            Sequence
+0:52              Constant:
+0:52                0 (const int)
+0:52              Constant:
+0:52                1 (const int)
+0:52              Constant:
+0:52                2 (const int)
+0:13  Function Definition: CSMain( ( temp void)
+0:13    Function Parameters: 
+0:?     Sequence
+0:13      move second child to first child ( temp 3-component vector of uint)
+0:?         'dti' ( temp 3-component vector of uint)
+0:?         'dti' ( in 3-component vector of uint GlobalInvocationID)
+0:13      Function Call: @CSMain(vu3; ( temp void)
+0:?         'dti' ( temp 3-component vector of uint)
+0:?   Linker Objects
+0:?     'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:?     'dti' ( in 3-component vector of uint GlobalInvocationID)
+
+
+Linked compute stage:
+
+
+Shader version: 500
+local_size = (32, 16, 1)
+0:? Sequence
+0:13  Function Definition: @CSMain(vu3; ( temp void)
+0:13    Function Parameters: 
+0:13      'dti' ( in 3-component vector of uint)
+0:?     Sequence
+0:14      move second child to first child ( temp 4-component vector of uint)
+0:14        u: direct index for structure ( temp 4-component vector of uint)
+0:14          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:14            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:14              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:14              Constant:
+0:14                0 (const uint)
+0:14            direct index ( temp uint)
+0:14              'dti' ( in 3-component vector of uint)
+0:14              Constant:
+0:14                0 (const int)
+0:14          Constant:
+0:14            0 (const int)
+0:14        subgroupShuffle ( temp 4-component vector of uint)
+0:14          u: direct index for structure ( temp 4-component vector of uint)
+0:14            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:14              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:14                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:14                Constant:
+0:14                  0 (const uint)
+0:14              direct index ( temp uint)
+0:14                'dti' ( in 3-component vector of uint)
+0:14                Constant:
+0:14                  0 (const int)
+0:14            Constant:
+0:14              0 (const int)
+0:14          Constant:
+0:14            13 (const uint)
+0:15      move second child to first child ( temp uint)
+0:15        direct index ( temp uint)
+0:15          u: direct index for structure ( temp 4-component vector of uint)
+0:15            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:15              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:15                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:15                Constant:
+0:15                  0 (const uint)
+0:15              direct index ( temp uint)
+0:15                'dti' ( in 3-component vector of uint)
+0:15                Constant:
+0:15                  0 (const int)
+0:15            Constant:
+0:15              0 (const int)
+0:15          Constant:
+0:15            0 (const int)
+0:15        subgroupShuffle ( temp uint)
+0:15          direct index ( temp uint)
+0:15            u: direct index for structure ( temp 4-component vector of uint)
+0:15              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:15                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:15                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:15                  Constant:
+0:15                    0 (const uint)
+0:15                direct index ( temp uint)
+0:15                  'dti' ( in 3-component vector of uint)
+0:15                  Constant:
+0:15                    0 (const int)
+0:15              Constant:
+0:15                0 (const int)
+0:15            Constant:
+0:15              0 (const int)
+0:15          Constant:
+0:15            13 (const uint)
+0:16      move second child to first child ( temp 2-component vector of uint)
+0:16        vector swizzle ( temp 2-component vector of uint)
+0:16          u: direct index for structure ( temp 4-component vector of uint)
+0:16            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:16              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:16                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:16                Constant:
+0:16                  0 (const uint)
+0:16              direct index ( temp uint)
+0:16                'dti' ( in 3-component vector of uint)
+0:16                Constant:
+0:16                  0 (const int)
+0:16            Constant:
+0:16              0 (const int)
+0:16          Sequence
+0:16            Constant:
+0:16              0 (const int)
+0:16            Constant:
+0:16              1 (const int)
+0:16        subgroupShuffle ( temp 2-component vector of uint)
+0:16          vector swizzle ( temp 2-component vector of uint)
+0:16            u: direct index for structure ( temp 4-component vector of uint)
+0:16              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:16                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:16                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:16                  Constant:
+0:16                    0 (const uint)
+0:16                direct index ( temp uint)
+0:16                  'dti' ( in 3-component vector of uint)
+0:16                  Constant:
+0:16                    0 (const int)
+0:16              Constant:
+0:16                0 (const int)
+0:16            Sequence
+0:16              Constant:
+0:16                0 (const int)
+0:16              Constant:
+0:16                1 (const int)
+0:16          Constant:
+0:16            13 (const uint)
+0:17      move second child to first child ( temp 3-component vector of uint)
+0:17        vector swizzle ( temp 3-component vector of uint)
+0:17          u: direct index for structure ( temp 4-component vector of uint)
+0:17            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:17              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:17                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:17                Constant:
+0:17                  0 (const uint)
+0:17              direct index ( temp uint)
+0:17                'dti' ( in 3-component vector of uint)
+0:17                Constant:
+0:17                  0 (const int)
+0:17            Constant:
+0:17              0 (const int)
+0:17          Sequence
+0:17            Constant:
+0:17              0 (const int)
+0:17            Constant:
+0:17              1 (const int)
+0:17            Constant:
+0:17              2 (const int)
+0:17        subgroupShuffle ( temp 3-component vector of uint)
+0:17          vector swizzle ( temp 3-component vector of uint)
+0:17            u: direct index for structure ( temp 4-component vector of uint)
+0:17              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:17                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:17                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:17                  Constant:
+0:17                    0 (const uint)
+0:17                direct index ( temp uint)
+0:17                  'dti' ( in 3-component vector of uint)
+0:17                  Constant:
+0:17                    0 (const int)
+0:17              Constant:
+0:17                0 (const int)
+0:17            Sequence
+0:17              Constant:
+0:17                0 (const int)
+0:17              Constant:
+0:17                1 (const int)
+0:17              Constant:
+0:17                2 (const int)
+0:17          Constant:
+0:17            13 (const uint)
+0:19      move second child to first child ( temp 4-component vector of int)
+0:19        i: direct index for structure ( temp 4-component vector of int)
+0:19          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:19            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:19              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:19              Constant:
+0:19                0 (const uint)
+0:19            direct index ( temp uint)
+0:19              'dti' ( in 3-component vector of uint)
+0:19              Constant:
+0:19                0 (const int)
+0:19          Constant:
+0:19            1 (const int)
+0:19        subgroupShuffle ( temp 4-component vector of int)
+0:19          i: direct index for structure ( temp 4-component vector of int)
+0:19            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:19              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:19                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:19                Constant:
+0:19                  0 (const uint)
+0:19              direct index ( temp uint)
+0:19                'dti' ( in 3-component vector of uint)
+0:19                Constant:
+0:19                  0 (const int)
+0:19            Constant:
+0:19              1 (const int)
+0:19          Constant:
+0:19            13 (const uint)
+0:20      move second child to first child ( temp int)
+0:20        direct index ( temp int)
+0:20          i: direct index for structure ( temp 4-component vector of int)
+0:20            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:20              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:20                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:20                Constant:
+0:20                  0 (const uint)
+0:20              direct index ( temp uint)
+0:20                'dti' ( in 3-component vector of uint)
+0:20                Constant:
+0:20                  0 (const int)
+0:20            Constant:
+0:20              1 (const int)
+0:20          Constant:
+0:20            0 (const int)
+0:20        subgroupShuffle ( temp int)
+0:20          direct index ( temp int)
+0:20            i: direct index for structure ( temp 4-component vector of int)
+0:20              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:20                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:20                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:20                  Constant:
+0:20                    0 (const uint)
+0:20                direct index ( temp uint)
+0:20                  'dti' ( in 3-component vector of uint)
+0:20                  Constant:
+0:20                    0 (const int)
+0:20              Constant:
+0:20                1 (const int)
+0:20            Constant:
+0:20              0 (const int)
+0:20          Constant:
+0:20            13 (const uint)
+0:21      move second child to first child ( temp 2-component vector of int)
+0:21        vector swizzle ( temp 2-component vector of int)
+0:21          i: direct index for structure ( temp 4-component vector of int)
+0:21            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:21              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:21                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:21                Constant:
+0:21                  0 (const uint)
+0:21              direct index ( temp uint)
+0:21                'dti' ( in 3-component vector of uint)
+0:21                Constant:
+0:21                  0 (const int)
+0:21            Constant:
+0:21              1 (const int)
+0:21          Sequence
+0:21            Constant:
+0:21              0 (const int)
+0:21            Constant:
+0:21              1 (const int)
+0:21        subgroupShuffle ( temp 2-component vector of int)
+0:21          vector swizzle ( temp 2-component vector of int)
+0:21            i: direct index for structure ( temp 4-component vector of int)
+0:21              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:21                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:21                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:21                  Constant:
+0:21                    0 (const uint)
+0:21                direct index ( temp uint)
+0:21                  'dti' ( in 3-component vector of uint)
+0:21                  Constant:
+0:21                    0 (const int)
+0:21              Constant:
+0:21                1 (const int)
+0:21            Sequence
+0:21              Constant:
+0:21                0 (const int)
+0:21              Constant:
+0:21                1 (const int)
+0:21          Constant:
+0:21            13 (const uint)
+0:22      move second child to first child ( temp 3-component vector of int)
+0:22        vector swizzle ( temp 3-component vector of int)
+0:22          i: direct index for structure ( temp 4-component vector of int)
+0:22            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:22              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:22                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:22                Constant:
+0:22                  0 (const uint)
+0:22              direct index ( temp uint)
+0:22                'dti' ( in 3-component vector of uint)
+0:22                Constant:
+0:22                  0 (const int)
+0:22            Constant:
+0:22              1 (const int)
+0:22          Sequence
+0:22            Constant:
+0:22              0 (const int)
+0:22            Constant:
+0:22              1 (const int)
+0:22            Constant:
+0:22              2 (const int)
+0:22        subgroupShuffle ( temp 3-component vector of int)
+0:22          vector swizzle ( temp 3-component vector of int)
+0:22            i: direct index for structure ( temp 4-component vector of int)
+0:22              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:22                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:22                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:22                  Constant:
+0:22                    0 (const uint)
+0:22                direct index ( temp uint)
+0:22                  'dti' ( in 3-component vector of uint)
+0:22                  Constant:
+0:22                    0 (const int)
+0:22              Constant:
+0:22                1 (const int)
+0:22            Sequence
+0:22              Constant:
+0:22                0 (const int)
+0:22              Constant:
+0:22                1 (const int)
+0:22              Constant:
+0:22                2 (const int)
+0:22          Constant:
+0:22            13 (const uint)
+0:24      move second child to first child ( temp 4-component vector of float)
+0:24        f: direct index for structure ( temp 4-component vector of float)
+0:24          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:24            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:24              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:24              Constant:
+0:24                0 (const uint)
+0:24            direct index ( temp uint)
+0:24              'dti' ( in 3-component vector of uint)
+0:24              Constant:
+0:24                0 (const int)
+0:24          Constant:
+0:24            2 (const int)
+0:24        subgroupShuffle ( temp 4-component vector of float)
+0:24          f: direct index for structure ( temp 4-component vector of float)
+0:24            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:24              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:24                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:24                Constant:
+0:24                  0 (const uint)
+0:24              direct index ( temp uint)
+0:24                'dti' ( in 3-component vector of uint)
+0:24                Constant:
+0:24                  0 (const int)
+0:24            Constant:
+0:24              2 (const int)
+0:24          Constant:
+0:24            13 (const uint)
+0:25      move second child to first child ( temp float)
+0:25        direct index ( temp float)
+0:25          f: direct index for structure ( temp 4-component vector of float)
+0:25            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:25              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:25                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:25                Constant:
+0:25                  0 (const uint)
+0:25              direct index ( temp uint)
+0:25                'dti' ( in 3-component vector of uint)
+0:25                Constant:
+0:25                  0 (const int)
+0:25            Constant:
+0:25              2 (const int)
+0:25          Constant:
+0:25            0 (const int)
+0:25        subgroupShuffle ( temp float)
+0:25          direct index ( temp float)
+0:25            f: direct index for structure ( temp 4-component vector of float)
+0:25              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:25                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:25                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:25                  Constant:
+0:25                    0 (const uint)
+0:25                direct index ( temp uint)
+0:25                  'dti' ( in 3-component vector of uint)
+0:25                  Constant:
+0:25                    0 (const int)
+0:25              Constant:
+0:25                2 (const int)
+0:25            Constant:
+0:25              0 (const int)
+0:25          Constant:
+0:25            13 (const uint)
+0:26      move second child to first child ( temp 2-component vector of float)
+0:26        vector swizzle ( temp 2-component vector of float)
+0:26          f: direct index for structure ( temp 4-component vector of float)
+0:26            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:26              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:26                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:26                Constant:
+0:26                  0 (const uint)
+0:26              direct index ( temp uint)
+0:26                'dti' ( in 3-component vector of uint)
+0:26                Constant:
+0:26                  0 (const int)
+0:26            Constant:
+0:26              2 (const int)
+0:26          Sequence
+0:26            Constant:
+0:26              0 (const int)
+0:26            Constant:
+0:26              1 (const int)
+0:26        subgroupShuffle ( temp 2-component vector of float)
+0:26          vector swizzle ( temp 2-component vector of float)
+0:26            f: direct index for structure ( temp 4-component vector of float)
+0:26              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:26                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:26                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:26                  Constant:
+0:26                    0 (const uint)
+0:26                direct index ( temp uint)
+0:26                  'dti' ( in 3-component vector of uint)
+0:26                  Constant:
+0:26                    0 (const int)
+0:26              Constant:
+0:26                2 (const int)
+0:26            Sequence
+0:26              Constant:
+0:26                0 (const int)
+0:26              Constant:
+0:26                1 (const int)
+0:26          Constant:
+0:26            13 (const uint)
+0:27      move second child to first child ( temp 3-component vector of float)
+0:27        vector swizzle ( temp 3-component vector of float)
+0:27          f: direct index for structure ( temp 4-component vector of float)
+0:27            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:27              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:27                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:27                Constant:
+0:27                  0 (const uint)
+0:27              direct index ( temp uint)
+0:27                'dti' ( in 3-component vector of uint)
+0:27                Constant:
+0:27                  0 (const int)
+0:27            Constant:
+0:27              2 (const int)
+0:27          Sequence
+0:27            Constant:
+0:27              0 (const int)
+0:27            Constant:
+0:27              1 (const int)
+0:27            Constant:
+0:27              2 (const int)
+0:27        subgroupShuffle ( temp 3-component vector of float)
+0:27          vector swizzle ( temp 3-component vector of float)
+0:27            f: direct index for structure ( temp 4-component vector of float)
+0:27              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:27                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:27                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:27                  Constant:
+0:27                    0 (const uint)
+0:27                direct index ( temp uint)
+0:27                  'dti' ( in 3-component vector of uint)
+0:27                  Constant:
+0:27                    0 (const int)
+0:27              Constant:
+0:27                2 (const int)
+0:27            Sequence
+0:27              Constant:
+0:27                0 (const int)
+0:27              Constant:
+0:27                1 (const int)
+0:27              Constant:
+0:27                2 (const int)
+0:27          Constant:
+0:27            13 (const uint)
+0:29      move second child to first child ( temp 4-component vector of double)
+0:29        d: direct index for structure ( temp 4-component vector of double)
+0:29          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:29            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:29              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:29              Constant:
+0:29                0 (const uint)
+0:29            direct index ( temp uint)
+0:29              'dti' ( in 3-component vector of uint)
+0:29              Constant:
+0:29                0 (const int)
+0:29          Constant:
+0:29            3 (const int)
+0:29        subgroupBroadcastFirst ( temp 4-component vector of double)
+0:29          d: direct index for structure ( temp 4-component vector of double)
+0:29            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:29              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:29                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:29                Constant:
+0:29                  0 (const uint)
+0:29              direct index ( temp uint)
+0:29                'dti' ( in 3-component vector of uint)
+0:29                Constant:
+0:29                  0 (const int)
+0:29            Constant:
+0:29              3 (const int)
+0:30      move second child to first child ( temp double)
+0:30        direct index ( temp double)
+0:30          d: direct index for structure ( temp 4-component vector of double)
+0:30            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:30              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:30                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:30                Constant:
+0:30                  0 (const uint)
+0:30              direct index ( temp uint)
+0:30                'dti' ( in 3-component vector of uint)
+0:30                Constant:
+0:30                  0 (const int)
+0:30            Constant:
+0:30              3 (const int)
+0:30          Constant:
+0:30            0 (const int)
+0:30        subgroupBroadcastFirst ( temp double)
+0:30          direct index ( temp double)
+0:30            d: direct index for structure ( temp 4-component vector of double)
+0:30              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:30                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:30                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:30                  Constant:
+0:30                    0 (const uint)
+0:30                direct index ( temp uint)
+0:30                  'dti' ( in 3-component vector of uint)
+0:30                  Constant:
+0:30                    0 (const int)
+0:30              Constant:
+0:30                3 (const int)
+0:30            Constant:
+0:30              0 (const int)
+0:31      move second child to first child ( temp 2-component vector of double)
+0:31        vector swizzle ( temp 2-component vector of double)
+0:31          d: direct index for structure ( temp 4-component vector of double)
+0:31            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:31              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:31                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:31                Constant:
+0:31                  0 (const uint)
+0:31              direct index ( temp uint)
+0:31                'dti' ( in 3-component vector of uint)
+0:31                Constant:
+0:31                  0 (const int)
+0:31            Constant:
+0:31              3 (const int)
+0:31          Sequence
+0:31            Constant:
+0:31              0 (const int)
+0:31            Constant:
+0:31              1 (const int)
+0:31        subgroupBroadcastFirst ( temp 2-component vector of double)
+0:31          vector swizzle ( temp 2-component vector of double)
+0:31            d: direct index for structure ( temp 4-component vector of double)
+0:31              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:31                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:31                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:31                  Constant:
+0:31                    0 (const uint)
+0:31                direct index ( temp uint)
+0:31                  'dti' ( in 3-component vector of uint)
+0:31                  Constant:
+0:31                    0 (const int)
+0:31              Constant:
+0:31                3 (const int)
+0:31            Sequence
+0:31              Constant:
+0:31                0 (const int)
+0:31              Constant:
+0:31                1 (const int)
+0:32      move second child to first child ( temp 3-component vector of double)
+0:32        vector swizzle ( temp 3-component vector of double)
+0:32          d: direct index for structure ( temp 4-component vector of double)
+0:32            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:32              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:32                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:32                Constant:
+0:32                  0 (const uint)
+0:32              direct index ( temp uint)
+0:32                'dti' ( in 3-component vector of uint)
+0:32                Constant:
+0:32                  0 (const int)
+0:32            Constant:
+0:32              3 (const int)
+0:32          Sequence
+0:32            Constant:
+0:32              0 (const int)
+0:32            Constant:
+0:32              1 (const int)
+0:32            Constant:
+0:32              2 (const int)
+0:32        subgroupBroadcastFirst ( temp 3-component vector of double)
+0:32          vector swizzle ( temp 3-component vector of double)
+0:32            d: direct index for structure ( temp 4-component vector of double)
+0:32              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:32                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:32                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:32                  Constant:
+0:32                    0 (const uint)
+0:32                direct index ( temp uint)
+0:32                  'dti' ( in 3-component vector of uint)
+0:32                  Constant:
+0:32                    0 (const int)
+0:32              Constant:
+0:32                3 (const int)
+0:32            Sequence
+0:32              Constant:
+0:32                0 (const int)
+0:32              Constant:
+0:32                1 (const int)
+0:32              Constant:
+0:32                2 (const int)
+0:34      move second child to first child ( temp 4-component vector of uint)
+0:34        u: direct index for structure ( temp 4-component vector of uint)
+0:34          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:34            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:34              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:34              Constant:
+0:34                0 (const uint)
+0:34            direct index ( temp uint)
+0:34              'dti' ( in 3-component vector of uint)
+0:34              Constant:
+0:34                0 (const int)
+0:34          Constant:
+0:34            0 (const int)
+0:34        subgroupBroadcastFirst ( temp 4-component vector of uint)
+0:34          u: direct index for structure ( temp 4-component vector of uint)
+0:34            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:34              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:34                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:34                Constant:
+0:34                  0 (const uint)
+0:34              direct index ( temp uint)
+0:34                'dti' ( in 3-component vector of uint)
+0:34                Constant:
+0:34                  0 (const int)
+0:34            Constant:
+0:34              0 (const int)
+0:35      move second child to first child ( temp uint)
+0:35        direct index ( temp uint)
+0:35          u: direct index for structure ( temp 4-component vector of uint)
+0:35            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:35              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:35                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:35                Constant:
+0:35                  0 (const uint)
+0:35              direct index ( temp uint)
+0:35                'dti' ( in 3-component vector of uint)
+0:35                Constant:
+0:35                  0 (const int)
+0:35            Constant:
+0:35              0 (const int)
+0:35          Constant:
+0:35            0 (const int)
+0:35        subgroupBroadcastFirst ( temp uint)
+0:35          direct index ( temp uint)
+0:35            u: direct index for structure ( temp 4-component vector of uint)
+0:35              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:35                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:35                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:35                  Constant:
+0:35                    0 (const uint)
+0:35                direct index ( temp uint)
+0:35                  'dti' ( in 3-component vector of uint)
+0:35                  Constant:
+0:35                    0 (const int)
+0:35              Constant:
+0:35                0 (const int)
+0:35            Constant:
+0:35              0 (const int)
+0:36      move second child to first child ( temp 2-component vector of uint)
+0:36        vector swizzle ( temp 2-component vector of uint)
+0:36          u: direct index for structure ( temp 4-component vector of uint)
+0:36            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:36              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:36                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:36                Constant:
+0:36                  0 (const uint)
+0:36              direct index ( temp uint)
+0:36                'dti' ( in 3-component vector of uint)
+0:36                Constant:
+0:36                  0 (const int)
+0:36            Constant:
+0:36              0 (const int)
+0:36          Sequence
+0:36            Constant:
+0:36              0 (const int)
+0:36            Constant:
+0:36              1 (const int)
+0:36        subgroupBroadcastFirst ( temp 2-component vector of uint)
+0:36          vector swizzle ( temp 2-component vector of uint)
+0:36            u: direct index for structure ( temp 4-component vector of uint)
+0:36              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:36                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:36                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:36                  Constant:
+0:36                    0 (const uint)
+0:36                direct index ( temp uint)
+0:36                  'dti' ( in 3-component vector of uint)
+0:36                  Constant:
+0:36                    0 (const int)
+0:36              Constant:
+0:36                0 (const int)
+0:36            Sequence
+0:36              Constant:
+0:36                0 (const int)
+0:36              Constant:
+0:36                1 (const int)
+0:37      move second child to first child ( temp 3-component vector of uint)
+0:37        vector swizzle ( temp 3-component vector of uint)
+0:37          u: direct index for structure ( temp 4-component vector of uint)
+0:37            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:37              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:37                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:37                Constant:
+0:37                  0 (const uint)
+0:37              direct index ( temp uint)
+0:37                'dti' ( in 3-component vector of uint)
+0:37                Constant:
+0:37                  0 (const int)
+0:37            Constant:
+0:37              0 (const int)
+0:37          Sequence
+0:37            Constant:
+0:37              0 (const int)
+0:37            Constant:
+0:37              1 (const int)
+0:37            Constant:
+0:37              2 (const int)
+0:37        subgroupBroadcastFirst ( temp 3-component vector of uint)
+0:37          vector swizzle ( temp 3-component vector of uint)
+0:37            u: direct index for structure ( temp 4-component vector of uint)
+0:37              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:37                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:37                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:37                  Constant:
+0:37                    0 (const uint)
+0:37                direct index ( temp uint)
+0:37                  'dti' ( in 3-component vector of uint)
+0:37                  Constant:
+0:37                    0 (const int)
+0:37              Constant:
+0:37                0 (const int)
+0:37            Sequence
+0:37              Constant:
+0:37                0 (const int)
+0:37              Constant:
+0:37                1 (const int)
+0:37              Constant:
+0:37                2 (const int)
+0:39      move second child to first child ( temp 4-component vector of int)
+0:39        i: direct index for structure ( temp 4-component vector of int)
+0:39          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:39            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:39              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:39              Constant:
+0:39                0 (const uint)
+0:39            direct index ( temp uint)
+0:39              'dti' ( in 3-component vector of uint)
+0:39              Constant:
+0:39                0 (const int)
+0:39          Constant:
+0:39            1 (const int)
+0:39        subgroupBroadcastFirst ( temp 4-component vector of int)
+0:39          i: direct index for structure ( temp 4-component vector of int)
+0:39            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:39              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:39                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:39                Constant:
+0:39                  0 (const uint)
+0:39              direct index ( temp uint)
+0:39                'dti' ( in 3-component vector of uint)
+0:39                Constant:
+0:39                  0 (const int)
+0:39            Constant:
+0:39              1 (const int)
+0:40      move second child to first child ( temp int)
+0:40        direct index ( temp int)
+0:40          i: direct index for structure ( temp 4-component vector of int)
+0:40            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:40              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:40                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:40                Constant:
+0:40                  0 (const uint)
+0:40              direct index ( temp uint)
+0:40                'dti' ( in 3-component vector of uint)
+0:40                Constant:
+0:40                  0 (const int)
+0:40            Constant:
+0:40              1 (const int)
+0:40          Constant:
+0:40            0 (const int)
+0:40        subgroupBroadcastFirst ( temp int)
+0:40          direct index ( temp int)
+0:40            i: direct index for structure ( temp 4-component vector of int)
+0:40              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:40                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:40                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:40                  Constant:
+0:40                    0 (const uint)
+0:40                direct index ( temp uint)
+0:40                  'dti' ( in 3-component vector of uint)
+0:40                  Constant:
+0:40                    0 (const int)
+0:40              Constant:
+0:40                1 (const int)
+0:40            Constant:
+0:40              0 (const int)
+0:41      move second child to first child ( temp 2-component vector of int)
+0:41        vector swizzle ( temp 2-component vector of int)
+0:41          i: direct index for structure ( temp 4-component vector of int)
+0:41            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:41              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:41                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:41                Constant:
+0:41                  0 (const uint)
+0:41              direct index ( temp uint)
+0:41                'dti' ( in 3-component vector of uint)
+0:41                Constant:
+0:41                  0 (const int)
+0:41            Constant:
+0:41              1 (const int)
+0:41          Sequence
+0:41            Constant:
+0:41              0 (const int)
+0:41            Constant:
+0:41              1 (const int)
+0:41        subgroupBroadcastFirst ( temp 2-component vector of int)
+0:41          vector swizzle ( temp 2-component vector of int)
+0:41            i: direct index for structure ( temp 4-component vector of int)
+0:41              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:41                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:41                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:41                  Constant:
+0:41                    0 (const uint)
+0:41                direct index ( temp uint)
+0:41                  'dti' ( in 3-component vector of uint)
+0:41                  Constant:
+0:41                    0 (const int)
+0:41              Constant:
+0:41                1 (const int)
+0:41            Sequence
+0:41              Constant:
+0:41                0 (const int)
+0:41              Constant:
+0:41                1 (const int)
+0:42      move second child to first child ( temp 3-component vector of int)
+0:42        vector swizzle ( temp 3-component vector of int)
+0:42          i: direct index for structure ( temp 4-component vector of int)
+0:42            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:42              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:42                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:42                Constant:
+0:42                  0 (const uint)
+0:42              direct index ( temp uint)
+0:42                'dti' ( in 3-component vector of uint)
+0:42                Constant:
+0:42                  0 (const int)
+0:42            Constant:
+0:42              1 (const int)
+0:42          Sequence
+0:42            Constant:
+0:42              0 (const int)
+0:42            Constant:
+0:42              1 (const int)
+0:42            Constant:
+0:42              2 (const int)
+0:42        subgroupBroadcastFirst ( temp 3-component vector of int)
+0:42          vector swizzle ( temp 3-component vector of int)
+0:42            i: direct index for structure ( temp 4-component vector of int)
+0:42              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:42                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:42                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:42                  Constant:
+0:42                    0 (const uint)
+0:42                direct index ( temp uint)
+0:42                  'dti' ( in 3-component vector of uint)
+0:42                  Constant:
+0:42                    0 (const int)
+0:42              Constant:
+0:42                1 (const int)
+0:42            Sequence
+0:42              Constant:
+0:42                0 (const int)
+0:42              Constant:
+0:42                1 (const int)
+0:42              Constant:
+0:42                2 (const int)
+0:44      move second child to first child ( temp 4-component vector of float)
+0:44        f: direct index for structure ( temp 4-component vector of float)
+0:44          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:44            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:44              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:44              Constant:
+0:44                0 (const uint)
+0:44            direct index ( temp uint)
+0:44              'dti' ( in 3-component vector of uint)
+0:44              Constant:
+0:44                0 (const int)
+0:44          Constant:
+0:44            2 (const int)
+0:44        subgroupBroadcastFirst ( temp 4-component vector of float)
+0:44          f: direct index for structure ( temp 4-component vector of float)
+0:44            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:44              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:44                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:44                Constant:
+0:44                  0 (const uint)
+0:44              direct index ( temp uint)
+0:44                'dti' ( in 3-component vector of uint)
+0:44                Constant:
+0:44                  0 (const int)
+0:44            Constant:
+0:44              2 (const int)
+0:45      move second child to first child ( temp float)
+0:45        direct index ( temp float)
+0:45          f: direct index for structure ( temp 4-component vector of float)
+0:45            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:45              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:45                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:45                Constant:
+0:45                  0 (const uint)
+0:45              direct index ( temp uint)
+0:45                'dti' ( in 3-component vector of uint)
+0:45                Constant:
+0:45                  0 (const int)
+0:45            Constant:
+0:45              2 (const int)
+0:45          Constant:
+0:45            0 (const int)
+0:45        subgroupBroadcastFirst ( temp float)
+0:45          direct index ( temp float)
+0:45            f: direct index for structure ( temp 4-component vector of float)
+0:45              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:45                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:45                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:45                  Constant:
+0:45                    0 (const uint)
+0:45                direct index ( temp uint)
+0:45                  'dti' ( in 3-component vector of uint)
+0:45                  Constant:
+0:45                    0 (const int)
+0:45              Constant:
+0:45                2 (const int)
+0:45            Constant:
+0:45              0 (const int)
+0:46      move second child to first child ( temp 2-component vector of float)
+0:46        vector swizzle ( temp 2-component vector of float)
+0:46          f: direct index for structure ( temp 4-component vector of float)
+0:46            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:46              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:46                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:46                Constant:
+0:46                  0 (const uint)
+0:46              direct index ( temp uint)
+0:46                'dti' ( in 3-component vector of uint)
+0:46                Constant:
+0:46                  0 (const int)
+0:46            Constant:
+0:46              2 (const int)
+0:46          Sequence
+0:46            Constant:
+0:46              0 (const int)
+0:46            Constant:
+0:46              1 (const int)
+0:46        subgroupBroadcastFirst ( temp 2-component vector of float)
+0:46          vector swizzle ( temp 2-component vector of float)
+0:46            f: direct index for structure ( temp 4-component vector of float)
+0:46              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:46                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:46                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:46                  Constant:
+0:46                    0 (const uint)
+0:46                direct index ( temp uint)
+0:46                  'dti' ( in 3-component vector of uint)
+0:46                  Constant:
+0:46                    0 (const int)
+0:46              Constant:
+0:46                2 (const int)
+0:46            Sequence
+0:46              Constant:
+0:46                0 (const int)
+0:46              Constant:
+0:46                1 (const int)
+0:47      move second child to first child ( temp 3-component vector of float)
+0:47        vector swizzle ( temp 3-component vector of float)
+0:47          f: direct index for structure ( temp 4-component vector of float)
+0:47            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:47              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:47                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:47                Constant:
+0:47                  0 (const uint)
+0:47              direct index ( temp uint)
+0:47                'dti' ( in 3-component vector of uint)
+0:47                Constant:
+0:47                  0 (const int)
+0:47            Constant:
+0:47              2 (const int)
+0:47          Sequence
+0:47            Constant:
+0:47              0 (const int)
+0:47            Constant:
+0:47              1 (const int)
+0:47            Constant:
+0:47              2 (const int)
+0:47        subgroupBroadcastFirst ( temp 3-component vector of float)
+0:47          vector swizzle ( temp 3-component vector of float)
+0:47            f: direct index for structure ( temp 4-component vector of float)
+0:47              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:47                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:47                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:47                  Constant:
+0:47                    0 (const uint)
+0:47                direct index ( temp uint)
+0:47                  'dti' ( in 3-component vector of uint)
+0:47                  Constant:
+0:47                    0 (const int)
+0:47              Constant:
+0:47                2 (const int)
+0:47            Sequence
+0:47              Constant:
+0:47                0 (const int)
+0:47              Constant:
+0:47                1 (const int)
+0:47              Constant:
+0:47                2 (const int)
+0:49      move second child to first child ( temp 4-component vector of double)
+0:49        d: direct index for structure ( temp 4-component vector of double)
+0:49          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:49            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:49              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:49              Constant:
+0:49                0 (const uint)
+0:49            direct index ( temp uint)
+0:49              'dti' ( in 3-component vector of uint)
+0:49              Constant:
+0:49                0 (const int)
+0:49          Constant:
+0:49            3 (const int)
+0:49        subgroupBroadcastFirst ( temp 4-component vector of double)
+0:49          d: direct index for structure ( temp 4-component vector of double)
+0:49            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:49              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:49                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:49                Constant:
+0:49                  0 (const uint)
+0:49              direct index ( temp uint)
+0:49                'dti' ( in 3-component vector of uint)
+0:49                Constant:
+0:49                  0 (const int)
+0:49            Constant:
+0:49              3 (const int)
+0:50      move second child to first child ( temp double)
+0:50        direct index ( temp double)
+0:50          d: direct index for structure ( temp 4-component vector of double)
+0:50            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:50              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:50                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:50                Constant:
+0:50                  0 (const uint)
+0:50              direct index ( temp uint)
+0:50                'dti' ( in 3-component vector of uint)
+0:50                Constant:
+0:50                  0 (const int)
+0:50            Constant:
+0:50              3 (const int)
+0:50          Constant:
+0:50            0 (const int)
+0:50        subgroupBroadcastFirst ( temp double)
+0:50          direct index ( temp double)
+0:50            d: direct index for structure ( temp 4-component vector of double)
+0:50              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:50                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:50                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:50                  Constant:
+0:50                    0 (const uint)
+0:50                direct index ( temp uint)
+0:50                  'dti' ( in 3-component vector of uint)
+0:50                  Constant:
+0:50                    0 (const int)
+0:50              Constant:
+0:50                3 (const int)
+0:50            Constant:
+0:50              0 (const int)
+0:51      move second child to first child ( temp 2-component vector of double)
+0:51        vector swizzle ( temp 2-component vector of double)
+0:51          d: direct index for structure ( temp 4-component vector of double)
+0:51            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:51              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:51                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:51                Constant:
+0:51                  0 (const uint)
+0:51              direct index ( temp uint)
+0:51                'dti' ( in 3-component vector of uint)
+0:51                Constant:
+0:51                  0 (const int)
+0:51            Constant:
+0:51              3 (const int)
+0:51          Sequence
+0:51            Constant:
+0:51              0 (const int)
+0:51            Constant:
+0:51              1 (const int)
+0:51        subgroupBroadcastFirst ( temp 2-component vector of double)
+0:51          vector swizzle ( temp 2-component vector of double)
+0:51            d: direct index for structure ( temp 4-component vector of double)
+0:51              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:51                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:51                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:51                  Constant:
+0:51                    0 (const uint)
+0:51                direct index ( temp uint)
+0:51                  'dti' ( in 3-component vector of uint)
+0:51                  Constant:
+0:51                    0 (const int)
+0:51              Constant:
+0:51                3 (const int)
+0:51            Sequence
+0:51              Constant:
+0:51                0 (const int)
+0:51              Constant:
+0:51                1 (const int)
+0:52      move second child to first child ( temp 3-component vector of double)
+0:52        vector swizzle ( temp 3-component vector of double)
+0:52          d: direct index for structure ( temp 4-component vector of double)
+0:52            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:52              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:52                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:52                Constant:
+0:52                  0 (const uint)
+0:52              direct index ( temp uint)
+0:52                'dti' ( in 3-component vector of uint)
+0:52                Constant:
+0:52                  0 (const int)
+0:52            Constant:
+0:52              3 (const int)
+0:52          Sequence
+0:52            Constant:
+0:52              0 (const int)
+0:52            Constant:
+0:52              1 (const int)
+0:52            Constant:
+0:52              2 (const int)
+0:52        subgroupBroadcastFirst ( temp 3-component vector of double)
+0:52          vector swizzle ( temp 3-component vector of double)
+0:52            d: direct index for structure ( temp 4-component vector of double)
+0:52              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:52                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:52                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:52                  Constant:
+0:52                    0 (const uint)
+0:52                direct index ( temp uint)
+0:52                  'dti' ( in 3-component vector of uint)
+0:52                  Constant:
+0:52                    0 (const int)
+0:52              Constant:
+0:52                3 (const int)
+0:52            Sequence
+0:52              Constant:
+0:52                0 (const int)
+0:52              Constant:
+0:52                1 (const int)
+0:52              Constant:
+0:52                2 (const int)
+0:13  Function Definition: CSMain( ( temp void)
+0:13    Function Parameters: 
+0:?     Sequence
+0:13      move second child to first child ( temp 3-component vector of uint)
+0:?         'dti' ( temp 3-component vector of uint)
+0:?         'dti' ( in 3-component vector of uint GlobalInvocationID)
+0:13      Function Call: @CSMain(vu3; ( temp void)
+0:?         'dti' ( temp 3-component vector of uint)
+0:?   Linker Objects
+0:?     'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:?     'dti' ( in 3-component vector of uint GlobalInvocationID)
+
+// Module Version 10300
+// Generated by (magic number): 80006
+// Id's are bound by 359
+
+                              Capability Shader
+                              Capability Float64
+                              Capability GroupNonUniform
+                              Capability GroupNonUniformBallot
+                              Capability GroupNonUniformShuffle
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "CSMain" 354
+                              ExecutionMode 4 LocalSize 32 16 1
+                              Source HLSL 500
+                              Name 4  "CSMain"
+                              Name 11  "@CSMain(vu3;"
+                              Name 10  "dti"
+                              Name 20  "Types"
+                              MemberName 20(Types) 0  "u"
+                              MemberName 20(Types) 1  "i"
+                              MemberName 20(Types) 2  "f"
+                              MemberName 20(Types) 3  "d"
+                              Name 22  "data"
+                              MemberName 22(data) 0  "@data"
+                              Name 24  "data"
+                              Name 352  "dti"
+                              Name 354  "dti"
+                              Name 356  "param"
+                              MemberDecorate 20(Types) 0 Offset 0
+                              MemberDecorate 20(Types) 1 Offset 16
+                              MemberDecorate 20(Types) 2 Offset 32
+                              MemberDecorate 20(Types) 3 Offset 64
+                              Decorate 21 ArrayStride 96
+                              MemberDecorate 22(data) 0 Offset 0
+                              Decorate 22(data) BufferBlock
+                              Decorate 24(data) DescriptorSet 0
+                              Decorate 354(dti) BuiltIn GlobalInvocationId
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypeVector 6(int) 3
+               8:             TypePointer Function 7(ivec3)
+               9:             TypeFunction 2 8(ptr)
+              13:             TypeVector 6(int) 4
+              14:             TypeInt 32 1
+              15:             TypeVector 14(int) 4
+              16:             TypeFloat 32
+              17:             TypeVector 16(float) 4
+              18:             TypeFloat 64
+              19:             TypeVector 18(float) 4
+       20(Types):             TypeStruct 13(ivec4) 15(ivec4) 17(fvec4) 19(fvec4)
+              21:             TypeRuntimeArray 20(Types)
+        22(data):             TypeStruct 21
+              23:             TypePointer Uniform 22(data)
+        24(data):     23(ptr) Variable Uniform
+              25:     14(int) Constant 0
+              26:      6(int) Constant 0
+              27:             TypePointer Function 6(int)
+              32:             TypePointer Uniform 13(ivec4)
+              35:      6(int) Constant 13
+              36:      6(int) Constant 3
+              43:             TypePointer Uniform 6(int)
+              52:             TypeVector 6(int) 2
+              73:     14(int) Constant 1
+              76:             TypePointer Uniform 15(ivec4)
+              85:             TypePointer Uniform 14(int)
+              94:             TypeVector 14(int) 2
+             106:             TypeVector 14(int) 3
+             116:     14(int) Constant 2
+             119:             TypePointer Uniform 17(fvec4)
+             128:             TypePointer Uniform 16(float)
+             137:             TypeVector 16(float) 2
+             149:             TypeVector 16(float) 3
+             159:     14(int) Constant 3
+             162:             TypePointer Uniform 19(fvec4)
+             171:             TypePointer Uniform 18(float)
+             180:             TypeVector 18(float) 2
+             192:             TypeVector 18(float) 3
+             353:             TypePointer Input 7(ivec3)
+        354(dti):    353(ptr) Variable Input
+       4(CSMain):           2 Function None 3
+               5:             Label
+        352(dti):      8(ptr) Variable Function
+      356(param):      8(ptr) Variable Function
+             355:    7(ivec3) Load 354(dti)
+                              Store 352(dti) 355
+             357:    7(ivec3) Load 352(dti)
+                              Store 356(param) 357
+             358:           2 FunctionCall 11(@CSMain(vu3;) 356(param)
+                              Return
+                              FunctionEnd
+11(@CSMain(vu3;):           2 Function None 9
+         10(dti):      8(ptr) FunctionParameter
+              12:             Label
+              28:     27(ptr) AccessChain 10(dti) 26
+              29:      6(int) Load 28
+              30:     27(ptr) AccessChain 10(dti) 26
+              31:      6(int) Load 30
+              33:     32(ptr) AccessChain 24(data) 25 31 25
+              34:   13(ivec4) Load 33
+              37:   13(ivec4) GroupNonUniformShuffle 36 34 35
+              38:     32(ptr) AccessChain 24(data) 25 29 25
+                              Store 38 37
+              39:     27(ptr) AccessChain 10(dti) 26
+              40:      6(int) Load 39
+              41:     27(ptr) AccessChain 10(dti) 26
+              42:      6(int) Load 41
+              44:     43(ptr) AccessChain 24(data) 25 42 25 26
+              45:      6(int) Load 44
+              46:      6(int) GroupNonUniformShuffle 36 45 35
+              47:     43(ptr) AccessChain 24(data) 25 40 25 26
+                              Store 47 46
+              48:     27(ptr) AccessChain 10(dti) 26
+              49:      6(int) Load 48
+              50:     27(ptr) AccessChain 10(dti) 26
+              51:      6(int) Load 50
+              53:     32(ptr) AccessChain 24(data) 25 51 25
+              54:   13(ivec4) Load 53
+              55:   52(ivec2) VectorShuffle 54 54 0 1
+              56:   52(ivec2) GroupNonUniformShuffle 36 55 35
+              57:     32(ptr) AccessChain 24(data) 25 49 25
+              58:   13(ivec4) Load 57
+              59:   13(ivec4) VectorShuffle 58 56 4 5 2 3
+                              Store 57 59
+              60:     27(ptr) AccessChain 10(dti) 26
+              61:      6(int) Load 60
+              62:     27(ptr) AccessChain 10(dti) 26
+              63:      6(int) Load 62
+              64:     32(ptr) AccessChain 24(data) 25 63 25
+              65:   13(ivec4) Load 64
+              66:    7(ivec3) VectorShuffle 65 65 0 1 2
+              67:    7(ivec3) GroupNonUniformShuffle 36 66 35
+              68:     32(ptr) AccessChain 24(data) 25 61 25
+              69:   13(ivec4) Load 68
+              70:   13(ivec4) VectorShuffle 69 67 4 5 6 3
+                              Store 68 70
+              71:     27(ptr) AccessChain 10(dti) 26
+              72:      6(int) Load 71
+              74:     27(ptr) AccessChain 10(dti) 26
+              75:      6(int) Load 74
+              77:     76(ptr) AccessChain 24(data) 25 75 73
+              78:   15(ivec4) Load 77
+              79:   15(ivec4) GroupNonUniformShuffle 36 78 35
+              80:     76(ptr) AccessChain 24(data) 25 72 73
+                              Store 80 79
+              81:     27(ptr) AccessChain 10(dti) 26
+              82:      6(int) Load 81
+              83:     27(ptr) AccessChain 10(dti) 26
+              84:      6(int) Load 83
+              86:     85(ptr) AccessChain 24(data) 25 84 73 26
+              87:     14(int) Load 86
+              88:     14(int) GroupNonUniformShuffle 36 87 35
+              89:     85(ptr) AccessChain 24(data) 25 82 73 26
+                              Store 89 88
+              90:     27(ptr) AccessChain 10(dti) 26
+              91:      6(int) Load 90
+              92:     27(ptr) AccessChain 10(dti) 26
+              93:      6(int) Load 92
+              95:     76(ptr) AccessChain 24(data) 25 93 73
+              96:   15(ivec4) Load 95
+              97:   94(ivec2) VectorShuffle 96 96 0 1
+              98:   94(ivec2) GroupNonUniformShuffle 36 97 35
+              99:     76(ptr) AccessChain 24(data) 25 91 73
+             100:   15(ivec4) Load 99
+             101:   15(ivec4) VectorShuffle 100 98 4 5 2 3
+                              Store 99 101
+             102:     27(ptr) AccessChain 10(dti) 26
+             103:      6(int) Load 102
+             104:     27(ptr) AccessChain 10(dti) 26
+             105:      6(int) Load 104
+             107:     76(ptr) AccessChain 24(data) 25 105 73
+             108:   15(ivec4) Load 107
+             109:  106(ivec3) VectorShuffle 108 108 0 1 2
+             110:  106(ivec3) GroupNonUniformShuffle 36 109 35
+             111:     76(ptr) AccessChain 24(data) 25 103 73
+             112:   15(ivec4) Load 111
+             113:   15(ivec4) VectorShuffle 112 110 4 5 6 3
+                              Store 111 113
+             114:     27(ptr) AccessChain 10(dti) 26
+             115:      6(int) Load 114
+             117:     27(ptr) AccessChain 10(dti) 26
+             118:      6(int) Load 117
+             120:    119(ptr) AccessChain 24(data) 25 118 116
+             121:   17(fvec4) Load 120
+             122:   17(fvec4) GroupNonUniformShuffle 36 121 35
+             123:    119(ptr) AccessChain 24(data) 25 115 116
+                              Store 123 122
+             124:     27(ptr) AccessChain 10(dti) 26
+             125:      6(int) Load 124
+             126:     27(ptr) AccessChain 10(dti) 26
+             127:      6(int) Load 126
+             129:    128(ptr) AccessChain 24(data) 25 127 116 26
+             130:   16(float) Load 129
+             131:   16(float) GroupNonUniformShuffle 36 130 35
+             132:    128(ptr) AccessChain 24(data) 25 125 116 26
+                              Store 132 131
+             133:     27(ptr) AccessChain 10(dti) 26
+             134:      6(int) Load 133
+             135:     27(ptr) AccessChain 10(dti) 26
+             136:      6(int) Load 135
+             138:    119(ptr) AccessChain 24(data) 25 136 116
+             139:   17(fvec4) Load 138
+             140:  137(fvec2) VectorShuffle 139 139 0 1
+             141:  137(fvec2) GroupNonUniformShuffle 36 140 35
+             142:    119(ptr) AccessChain 24(data) 25 134 116
+             143:   17(fvec4) Load 142
+             144:   17(fvec4) VectorShuffle 143 141 4 5 2 3
+                              Store 142 144
+             145:     27(ptr) AccessChain 10(dti) 26
+             146:      6(int) Load 145
+             147:     27(ptr) AccessChain 10(dti) 26
+             148:      6(int) Load 147
+             150:    119(ptr) AccessChain 24(data) 25 148 116
+             151:   17(fvec4) Load 150
+             152:  149(fvec3) VectorShuffle 151 151 0 1 2
+             153:  149(fvec3) GroupNonUniformShuffle 36 152 35
+             154:    119(ptr) AccessChain 24(data) 25 146 116
+             155:   17(fvec4) Load 154
+             156:   17(fvec4) VectorShuffle 155 153 4 5 6 3
+                              Store 154 156
+             157:     27(ptr) AccessChain 10(dti) 26
+             158:      6(int) Load 157
+             160:     27(ptr) AccessChain 10(dti) 26
+             161:      6(int) Load 160
+             163:    162(ptr) AccessChain 24(data) 25 161 159
+             164:   19(fvec4) Load 163
+             165:   19(fvec4) GroupNonUniformBroadcastFirst 36 164
+             166:    162(ptr) AccessChain 24(data) 25 158 159
+                              Store 166 165
+             167:     27(ptr) AccessChain 10(dti) 26
+             168:      6(int) Load 167
+             169:     27(ptr) AccessChain 10(dti) 26
+             170:      6(int) Load 169
+             172:    171(ptr) AccessChain 24(data) 25 170 159 26
+             173:   18(float) Load 172
+             174:   18(float) GroupNonUniformBroadcastFirst 36 173
+             175:    171(ptr) AccessChain 24(data) 25 168 159 26
+                              Store 175 174
+             176:     27(ptr) AccessChain 10(dti) 26
+             177:      6(int) Load 176
+             178:     27(ptr) AccessChain 10(dti) 26
+             179:      6(int) Load 178
+             181:    162(ptr) AccessChain 24(data) 25 179 159
+             182:   19(fvec4) Load 181
+             183:  180(fvec2) VectorShuffle 182 182 0 1
+             184:  180(fvec2) GroupNonUniformBroadcastFirst 36 183
+             185:    162(ptr) AccessChain 24(data) 25 177 159
+             186:   19(fvec4) Load 185
+             187:   19(fvec4) VectorShuffle 186 184 4 5 2 3
+                              Store 185 187
+             188:     27(ptr) AccessChain 10(dti) 26
+             189:      6(int) Load 188
+             190:     27(ptr) AccessChain 10(dti) 26
+             191:      6(int) Load 190
+             193:    162(ptr) AccessChain 24(data) 25 191 159
+             194:   19(fvec4) Load 193
+             195:  192(fvec3) VectorShuffle 194 194 0 1 2
+             196:  192(fvec3) GroupNonUniformBroadcastFirst 36 195
+             197:    162(ptr) AccessChain 24(data) 25 189 159
+             198:   19(fvec4) Load 197
+             199:   19(fvec4) VectorShuffle 198 196 4 5 6 3
+                              Store 197 199
+             200:     27(ptr) AccessChain 10(dti) 26
+             201:      6(int) Load 200
+             202:     27(ptr) AccessChain 10(dti) 26
+             203:      6(int) Load 202
+             204:     32(ptr) AccessChain 24(data) 25 203 25
+             205:   13(ivec4) Load 204
+             206:   13(ivec4) GroupNonUniformBroadcastFirst 36 205
+             207:     32(ptr) AccessChain 24(data) 25 201 25
+                              Store 207 206
+             208:     27(ptr) AccessChain 10(dti) 26
+             209:      6(int) Load 208
+             210:     27(ptr) AccessChain 10(dti) 26
+             211:      6(int) Load 210
+             212:     43(ptr) AccessChain 24(data) 25 211 25 26
+             213:      6(int) Load 212
+             214:      6(int) GroupNonUniformBroadcastFirst 36 213
+             215:     43(ptr) AccessChain 24(data) 25 209 25 26
+                              Store 215 214
+             216:     27(ptr) AccessChain 10(dti) 26
+             217:      6(int) Load 216
+             218:     27(ptr) AccessChain 10(dti) 26
+             219:      6(int) Load 218
+             220:     32(ptr) AccessChain 24(data) 25 219 25
+             221:   13(ivec4) Load 220
+             222:   52(ivec2) VectorShuffle 221 221 0 1
+             223:   52(ivec2) GroupNonUniformBroadcastFirst 36 222
+             224:     32(ptr) AccessChain 24(data) 25 217 25
+             225:   13(ivec4) Load 224
+             226:   13(ivec4) VectorShuffle 225 223 4 5 2 3
+                              Store 224 226
+             227:     27(ptr) AccessChain 10(dti) 26
+             228:      6(int) Load 227
+             229:     27(ptr) AccessChain 10(dti) 26
+             230:      6(int) Load 229
+             231:     32(ptr) AccessChain 24(data) 25 230 25
+             232:   13(ivec4) Load 231
+             233:    7(ivec3) VectorShuffle 232 232 0 1 2
+             234:    7(ivec3) GroupNonUniformBroadcastFirst 36 233
+             235:     32(ptr) AccessChain 24(data) 25 228 25
+             236:   13(ivec4) Load 235
+             237:   13(ivec4) VectorShuffle 236 234 4 5 6 3
+                              Store 235 237
+             238:     27(ptr) AccessChain 10(dti) 26
+             239:      6(int) Load 238
+             240:     27(ptr) AccessChain 10(dti) 26
+             241:      6(int) Load 240
+             242:     76(ptr) AccessChain 24(data) 25 241 73
+             243:   15(ivec4) Load 242
+             244:   15(ivec4) GroupNonUniformBroadcastFirst 36 243
+             245:     76(ptr) AccessChain 24(data) 25 239 73
+                              Store 245 244
+             246:     27(ptr) AccessChain 10(dti) 26
+             247:      6(int) Load 246
+             248:     27(ptr) AccessChain 10(dti) 26
+             249:      6(int) Load 248
+             250:     85(ptr) AccessChain 24(data) 25 249 73 26
+             251:     14(int) Load 250
+             252:     14(int) GroupNonUniformBroadcastFirst 36 251
+             253:     85(ptr) AccessChain 24(data) 25 247 73 26
+                              Store 253 252
+             254:     27(ptr) AccessChain 10(dti) 26
+             255:      6(int) Load 254
+             256:     27(ptr) AccessChain 10(dti) 26
+             257:      6(int) Load 256
+             258:     76(ptr) AccessChain 24(data) 25 257 73
+             259:   15(ivec4) Load 258
+             260:   94(ivec2) VectorShuffle 259 259 0 1
+             261:   94(ivec2) GroupNonUniformBroadcastFirst 36 260
+             262:     76(ptr) AccessChain 24(data) 25 255 73
+             263:   15(ivec4) Load 262
+             264:   15(ivec4) VectorShuffle 263 261 4 5 2 3
+                              Store 262 264
+             265:     27(ptr) AccessChain 10(dti) 26
+             266:      6(int) Load 265
+             267:     27(ptr) AccessChain 10(dti) 26
+             268:      6(int) Load 267
+             269:     76(ptr) AccessChain 24(data) 25 268 73
+             270:   15(ivec4) Load 269
+             271:  106(ivec3) VectorShuffle 270 270 0 1 2
+             272:  106(ivec3) GroupNonUniformBroadcastFirst 36 271
+             273:     76(ptr) AccessChain 24(data) 25 266 73
+             274:   15(ivec4) Load 273
+             275:   15(ivec4) VectorShuffle 274 272 4 5 6 3
+                              Store 273 275
+             276:     27(ptr) AccessChain 10(dti) 26
+             277:      6(int) Load 276
+             278:     27(ptr) AccessChain 10(dti) 26
+             279:      6(int) Load 278
+             280:    119(ptr) AccessChain 24(data) 25 279 116
+             281:   17(fvec4) Load 280
+             282:   17(fvec4) GroupNonUniformBroadcastFirst 36 281
+             283:    119(ptr) AccessChain 24(data) 25 277 116
+                              Store 283 282
+             284:     27(ptr) AccessChain 10(dti) 26
+             285:      6(int) Load 284
+             286:     27(ptr) AccessChain 10(dti) 26
+             287:      6(int) Load 286
+             288:    128(ptr) AccessChain 24(data) 25 287 116 26
+             289:   16(float) Load 288
+             290:   16(float) GroupNonUniformBroadcastFirst 36 289
+             291:    128(ptr) AccessChain 24(data) 25 285 116 26
+                              Store 291 290
+             292:     27(ptr) AccessChain 10(dti) 26
+             293:      6(int) Load 292
+             294:     27(ptr) AccessChain 10(dti) 26
+             295:      6(int) Load 294
+             296:    119(ptr) AccessChain 24(data) 25 295 116
+             297:   17(fvec4) Load 296
+             298:  137(fvec2) VectorShuffle 297 297 0 1
+             299:  137(fvec2) GroupNonUniformBroadcastFirst 36 298
+             300:    119(ptr) AccessChain 24(data) 25 293 116
+             301:   17(fvec4) Load 300
+             302:   17(fvec4) VectorShuffle 301 299 4 5 2 3
+                              Store 300 302
+             303:     27(ptr) AccessChain 10(dti) 26
+             304:      6(int) Load 303
+             305:     27(ptr) AccessChain 10(dti) 26
+             306:      6(int) Load 305
+             307:    119(ptr) AccessChain 24(data) 25 306 116
+             308:   17(fvec4) Load 307
+             309:  149(fvec3) VectorShuffle 308 308 0 1 2
+             310:  149(fvec3) GroupNonUniformBroadcastFirst 36 309
+             311:    119(ptr) AccessChain 24(data) 25 304 116
+             312:   17(fvec4) Load 311
+             313:   17(fvec4) VectorShuffle 312 310 4 5 6 3
+                              Store 311 313
+             314:     27(ptr) AccessChain 10(dti) 26
+             315:      6(int) Load 314
+             316:     27(ptr) AccessChain 10(dti) 26
+             317:      6(int) Load 316
+             318:    162(ptr) AccessChain 24(data) 25 317 159
+             319:   19(fvec4) Load 318
+             320:   19(fvec4) GroupNonUniformBroadcastFirst 36 319
+             321:    162(ptr) AccessChain 24(data) 25 315 159
+                              Store 321 320
+             322:     27(ptr) AccessChain 10(dti) 26
+             323:      6(int) Load 322
+             324:     27(ptr) AccessChain 10(dti) 26
+             325:      6(int) Load 324
+             326:    171(ptr) AccessChain 24(data) 25 325 159 26
+             327:   18(float) Load 326
+             328:   18(float) GroupNonUniformBroadcastFirst 36 327
+             329:    171(ptr) AccessChain 24(data) 25 323 159 26
+                              Store 329 328
+             330:     27(ptr) AccessChain 10(dti) 26
+             331:      6(int) Load 330
+             332:     27(ptr) AccessChain 10(dti) 26
+             333:      6(int) Load 332
+             334:    162(ptr) AccessChain 24(data) 25 333 159
+             335:   19(fvec4) Load 334
+             336:  180(fvec2) VectorShuffle 335 335 0 1
+             337:  180(fvec2) GroupNonUniformBroadcastFirst 36 336
+             338:    162(ptr) AccessChain 24(data) 25 331 159
+             339:   19(fvec4) Load 338
+             340:   19(fvec4) VectorShuffle 339 337 4 5 2 3
+                              Store 338 340
+             341:     27(ptr) AccessChain 10(dti) 26
+             342:      6(int) Load 341
+             343:     27(ptr) AccessChain 10(dti) 26
+             344:      6(int) Load 343
+             345:    162(ptr) AccessChain 24(data) 25 344 159
+             346:   19(fvec4) Load 345
+             347:  192(fvec3) VectorShuffle 346 346 0 1 2
+             348:  192(fvec3) GroupNonUniformBroadcastFirst 36 347
+             349:    162(ptr) AccessChain 24(data) 25 342 159
+             350:   19(fvec4) Load 349
+             351:   19(fvec4) VectorShuffle 350 348 4 5 6 3
+                              Store 349 351
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.waveprefix.comp.out b/Test/baseResults/hlsl.waveprefix.comp.out
new file mode 100644
index 0000000..fbc2055
--- /dev/null
+++ b/Test/baseResults/hlsl.waveprefix.comp.out
@@ -0,0 +1,2766 @@
+hlsl.waveprefix.comp
+Shader version: 500
+local_size = (32, 16, 1)
+0:? Sequence
+0:13  Function Definition: @CSMain(vu3; ( temp void)
+0:13    Function Parameters: 
+0:13      'dti' ( in 3-component vector of uint)
+0:?     Sequence
+0:14      move second child to first child ( temp 4-component vector of uint)
+0:14        u: direct index for structure ( temp 4-component vector of uint)
+0:14          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:14            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:14              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:14              Constant:
+0:14                0 (const uint)
+0:14            direct index ( temp uint)
+0:14              'dti' ( in 3-component vector of uint)
+0:14              Constant:
+0:14                0 (const int)
+0:14          Constant:
+0:14            0 (const int)
+0:14        subgroupInclusiveAdd ( temp 4-component vector of uint)
+0:14          u: direct index for structure ( temp 4-component vector of uint)
+0:14            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:14              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:14                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:14                Constant:
+0:14                  0 (const uint)
+0:14              direct index ( temp uint)
+0:14                'dti' ( in 3-component vector of uint)
+0:14                Constant:
+0:14                  0 (const int)
+0:14            Constant:
+0:14              0 (const int)
+0:15      move second child to first child ( temp uint)
+0:15        direct index ( temp uint)
+0:15          u: direct index for structure ( temp 4-component vector of uint)
+0:15            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:15              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:15                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:15                Constant:
+0:15                  0 (const uint)
+0:15              direct index ( temp uint)
+0:15                'dti' ( in 3-component vector of uint)
+0:15                Constant:
+0:15                  0 (const int)
+0:15            Constant:
+0:15              0 (const int)
+0:15          Constant:
+0:15            0 (const int)
+0:15        subgroupInclusiveAdd ( temp uint)
+0:15          direct index ( temp uint)
+0:15            u: direct index for structure ( temp 4-component vector of uint)
+0:15              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:15                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:15                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:15                  Constant:
+0:15                    0 (const uint)
+0:15                direct index ( temp uint)
+0:15                  'dti' ( in 3-component vector of uint)
+0:15                  Constant:
+0:15                    0 (const int)
+0:15              Constant:
+0:15                0 (const int)
+0:15            Constant:
+0:15              0 (const int)
+0:16      move second child to first child ( temp 2-component vector of uint)
+0:16        vector swizzle ( temp 2-component vector of uint)
+0:16          u: direct index for structure ( temp 4-component vector of uint)
+0:16            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:16              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:16                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:16                Constant:
+0:16                  0 (const uint)
+0:16              direct index ( temp uint)
+0:16                'dti' ( in 3-component vector of uint)
+0:16                Constant:
+0:16                  0 (const int)
+0:16            Constant:
+0:16              0 (const int)
+0:16          Sequence
+0:16            Constant:
+0:16              0 (const int)
+0:16            Constant:
+0:16              1 (const int)
+0:16        subgroupInclusiveAdd ( temp 2-component vector of uint)
+0:16          vector swizzle ( temp 2-component vector of uint)
+0:16            u: direct index for structure ( temp 4-component vector of uint)
+0:16              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:16                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:16                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:16                  Constant:
+0:16                    0 (const uint)
+0:16                direct index ( temp uint)
+0:16                  'dti' ( in 3-component vector of uint)
+0:16                  Constant:
+0:16                    0 (const int)
+0:16              Constant:
+0:16                0 (const int)
+0:16            Sequence
+0:16              Constant:
+0:16                0 (const int)
+0:16              Constant:
+0:16                1 (const int)
+0:17      move second child to first child ( temp 3-component vector of uint)
+0:17        vector swizzle ( temp 3-component vector of uint)
+0:17          u: direct index for structure ( temp 4-component vector of uint)
+0:17            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:17              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:17                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:17                Constant:
+0:17                  0 (const uint)
+0:17              direct index ( temp uint)
+0:17                'dti' ( in 3-component vector of uint)
+0:17                Constant:
+0:17                  0 (const int)
+0:17            Constant:
+0:17              0 (const int)
+0:17          Sequence
+0:17            Constant:
+0:17              0 (const int)
+0:17            Constant:
+0:17              1 (const int)
+0:17            Constant:
+0:17              2 (const int)
+0:17        subgroupInclusiveAdd ( temp 3-component vector of uint)
+0:17          vector swizzle ( temp 3-component vector of uint)
+0:17            u: direct index for structure ( temp 4-component vector of uint)
+0:17              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:17                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:17                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:17                  Constant:
+0:17                    0 (const uint)
+0:17                direct index ( temp uint)
+0:17                  'dti' ( in 3-component vector of uint)
+0:17                  Constant:
+0:17                    0 (const int)
+0:17              Constant:
+0:17                0 (const int)
+0:17            Sequence
+0:17              Constant:
+0:17                0 (const int)
+0:17              Constant:
+0:17                1 (const int)
+0:17              Constant:
+0:17                2 (const int)
+0:19      move second child to first child ( temp 4-component vector of int)
+0:19        i: direct index for structure ( temp 4-component vector of int)
+0:19          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:19            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:19              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:19              Constant:
+0:19                0 (const uint)
+0:19            direct index ( temp uint)
+0:19              'dti' ( in 3-component vector of uint)
+0:19              Constant:
+0:19                0 (const int)
+0:19          Constant:
+0:19            1 (const int)
+0:19        subgroupInclusiveAdd ( temp 4-component vector of int)
+0:19          i: direct index for structure ( temp 4-component vector of int)
+0:19            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:19              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:19                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:19                Constant:
+0:19                  0 (const uint)
+0:19              direct index ( temp uint)
+0:19                'dti' ( in 3-component vector of uint)
+0:19                Constant:
+0:19                  0 (const int)
+0:19            Constant:
+0:19              1 (const int)
+0:20      move second child to first child ( temp int)
+0:20        direct index ( temp int)
+0:20          i: direct index for structure ( temp 4-component vector of int)
+0:20            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:20              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:20                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:20                Constant:
+0:20                  0 (const uint)
+0:20              direct index ( temp uint)
+0:20                'dti' ( in 3-component vector of uint)
+0:20                Constant:
+0:20                  0 (const int)
+0:20            Constant:
+0:20              1 (const int)
+0:20          Constant:
+0:20            0 (const int)
+0:20        subgroupInclusiveAdd ( temp int)
+0:20          direct index ( temp int)
+0:20            i: direct index for structure ( temp 4-component vector of int)
+0:20              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:20                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:20                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:20                  Constant:
+0:20                    0 (const uint)
+0:20                direct index ( temp uint)
+0:20                  'dti' ( in 3-component vector of uint)
+0:20                  Constant:
+0:20                    0 (const int)
+0:20              Constant:
+0:20                1 (const int)
+0:20            Constant:
+0:20              0 (const int)
+0:21      move second child to first child ( temp 2-component vector of int)
+0:21        vector swizzle ( temp 2-component vector of int)
+0:21          i: direct index for structure ( temp 4-component vector of int)
+0:21            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:21              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:21                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:21                Constant:
+0:21                  0 (const uint)
+0:21              direct index ( temp uint)
+0:21                'dti' ( in 3-component vector of uint)
+0:21                Constant:
+0:21                  0 (const int)
+0:21            Constant:
+0:21              1 (const int)
+0:21          Sequence
+0:21            Constant:
+0:21              0 (const int)
+0:21            Constant:
+0:21              1 (const int)
+0:21        subgroupInclusiveAdd ( temp 2-component vector of int)
+0:21          vector swizzle ( temp 2-component vector of int)
+0:21            i: direct index for structure ( temp 4-component vector of int)
+0:21              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:21                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:21                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:21                  Constant:
+0:21                    0 (const uint)
+0:21                direct index ( temp uint)
+0:21                  'dti' ( in 3-component vector of uint)
+0:21                  Constant:
+0:21                    0 (const int)
+0:21              Constant:
+0:21                1 (const int)
+0:21            Sequence
+0:21              Constant:
+0:21                0 (const int)
+0:21              Constant:
+0:21                1 (const int)
+0:22      move second child to first child ( temp 3-component vector of int)
+0:22        vector swizzle ( temp 3-component vector of int)
+0:22          i: direct index for structure ( temp 4-component vector of int)
+0:22            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:22              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:22                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:22                Constant:
+0:22                  0 (const uint)
+0:22              direct index ( temp uint)
+0:22                'dti' ( in 3-component vector of uint)
+0:22                Constant:
+0:22                  0 (const int)
+0:22            Constant:
+0:22              1 (const int)
+0:22          Sequence
+0:22            Constant:
+0:22              0 (const int)
+0:22            Constant:
+0:22              1 (const int)
+0:22            Constant:
+0:22              2 (const int)
+0:22        subgroupInclusiveAdd ( temp 3-component vector of int)
+0:22          vector swizzle ( temp 3-component vector of int)
+0:22            i: direct index for structure ( temp 4-component vector of int)
+0:22              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:22                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:22                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:22                  Constant:
+0:22                    0 (const uint)
+0:22                direct index ( temp uint)
+0:22                  'dti' ( in 3-component vector of uint)
+0:22                  Constant:
+0:22                    0 (const int)
+0:22              Constant:
+0:22                1 (const int)
+0:22            Sequence
+0:22              Constant:
+0:22                0 (const int)
+0:22              Constant:
+0:22                1 (const int)
+0:22              Constant:
+0:22                2 (const int)
+0:24      move second child to first child ( temp 4-component vector of float)
+0:24        f: direct index for structure ( temp 4-component vector of float)
+0:24          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:24            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:24              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:24              Constant:
+0:24                0 (const uint)
+0:24            direct index ( temp uint)
+0:24              'dti' ( in 3-component vector of uint)
+0:24              Constant:
+0:24                0 (const int)
+0:24          Constant:
+0:24            2 (const int)
+0:24        subgroupInclusiveAdd ( temp 4-component vector of float)
+0:24          f: direct index for structure ( temp 4-component vector of float)
+0:24            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:24              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:24                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:24                Constant:
+0:24                  0 (const uint)
+0:24              direct index ( temp uint)
+0:24                'dti' ( in 3-component vector of uint)
+0:24                Constant:
+0:24                  0 (const int)
+0:24            Constant:
+0:24              2 (const int)
+0:25      move second child to first child ( temp float)
+0:25        direct index ( temp float)
+0:25          f: direct index for structure ( temp 4-component vector of float)
+0:25            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:25              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:25                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:25                Constant:
+0:25                  0 (const uint)
+0:25              direct index ( temp uint)
+0:25                'dti' ( in 3-component vector of uint)
+0:25                Constant:
+0:25                  0 (const int)
+0:25            Constant:
+0:25              2 (const int)
+0:25          Constant:
+0:25            0 (const int)
+0:25        subgroupInclusiveAdd ( temp float)
+0:25          direct index ( temp float)
+0:25            f: direct index for structure ( temp 4-component vector of float)
+0:25              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:25                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:25                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:25                  Constant:
+0:25                    0 (const uint)
+0:25                direct index ( temp uint)
+0:25                  'dti' ( in 3-component vector of uint)
+0:25                  Constant:
+0:25                    0 (const int)
+0:25              Constant:
+0:25                2 (const int)
+0:25            Constant:
+0:25              0 (const int)
+0:26      move second child to first child ( temp 2-component vector of float)
+0:26        vector swizzle ( temp 2-component vector of float)
+0:26          f: direct index for structure ( temp 4-component vector of float)
+0:26            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:26              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:26                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:26                Constant:
+0:26                  0 (const uint)
+0:26              direct index ( temp uint)
+0:26                'dti' ( in 3-component vector of uint)
+0:26                Constant:
+0:26                  0 (const int)
+0:26            Constant:
+0:26              2 (const int)
+0:26          Sequence
+0:26            Constant:
+0:26              0 (const int)
+0:26            Constant:
+0:26              1 (const int)
+0:26        subgroupInclusiveAdd ( temp 2-component vector of float)
+0:26          vector swizzle ( temp 2-component vector of float)
+0:26            f: direct index for structure ( temp 4-component vector of float)
+0:26              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:26                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:26                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:26                  Constant:
+0:26                    0 (const uint)
+0:26                direct index ( temp uint)
+0:26                  'dti' ( in 3-component vector of uint)
+0:26                  Constant:
+0:26                    0 (const int)
+0:26              Constant:
+0:26                2 (const int)
+0:26            Sequence
+0:26              Constant:
+0:26                0 (const int)
+0:26              Constant:
+0:26                1 (const int)
+0:27      move second child to first child ( temp 3-component vector of float)
+0:27        vector swizzle ( temp 3-component vector of float)
+0:27          f: direct index for structure ( temp 4-component vector of float)
+0:27            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:27              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:27                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:27                Constant:
+0:27                  0 (const uint)
+0:27              direct index ( temp uint)
+0:27                'dti' ( in 3-component vector of uint)
+0:27                Constant:
+0:27                  0 (const int)
+0:27            Constant:
+0:27              2 (const int)
+0:27          Sequence
+0:27            Constant:
+0:27              0 (const int)
+0:27            Constant:
+0:27              1 (const int)
+0:27            Constant:
+0:27              2 (const int)
+0:27        subgroupInclusiveAdd ( temp 3-component vector of float)
+0:27          vector swizzle ( temp 3-component vector of float)
+0:27            f: direct index for structure ( temp 4-component vector of float)
+0:27              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:27                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:27                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:27                  Constant:
+0:27                    0 (const uint)
+0:27                direct index ( temp uint)
+0:27                  'dti' ( in 3-component vector of uint)
+0:27                  Constant:
+0:27                    0 (const int)
+0:27              Constant:
+0:27                2 (const int)
+0:27            Sequence
+0:27              Constant:
+0:27                0 (const int)
+0:27              Constant:
+0:27                1 (const int)
+0:27              Constant:
+0:27                2 (const int)
+0:29      move second child to first child ( temp 4-component vector of double)
+0:29        d: direct index for structure ( temp 4-component vector of double)
+0:29          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:29            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:29              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:29              Constant:
+0:29                0 (const uint)
+0:29            direct index ( temp uint)
+0:29              'dti' ( in 3-component vector of uint)
+0:29              Constant:
+0:29                0 (const int)
+0:29          Constant:
+0:29            3 (const int)
+0:29        subgroupInclusiveAdd ( temp 4-component vector of double)
+0:29          d: direct index for structure ( temp 4-component vector of double)
+0:29            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:29              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:29                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:29                Constant:
+0:29                  0 (const uint)
+0:29              direct index ( temp uint)
+0:29                'dti' ( in 3-component vector of uint)
+0:29                Constant:
+0:29                  0 (const int)
+0:29            Constant:
+0:29              3 (const int)
+0:30      move second child to first child ( temp double)
+0:30        direct index ( temp double)
+0:30          d: direct index for structure ( temp 4-component vector of double)
+0:30            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:30              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:30                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:30                Constant:
+0:30                  0 (const uint)
+0:30              direct index ( temp uint)
+0:30                'dti' ( in 3-component vector of uint)
+0:30                Constant:
+0:30                  0 (const int)
+0:30            Constant:
+0:30              3 (const int)
+0:30          Constant:
+0:30            0 (const int)
+0:30        subgroupInclusiveAdd ( temp double)
+0:30          direct index ( temp double)
+0:30            d: direct index for structure ( temp 4-component vector of double)
+0:30              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:30                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:30                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:30                  Constant:
+0:30                    0 (const uint)
+0:30                direct index ( temp uint)
+0:30                  'dti' ( in 3-component vector of uint)
+0:30                  Constant:
+0:30                    0 (const int)
+0:30              Constant:
+0:30                3 (const int)
+0:30            Constant:
+0:30              0 (const int)
+0:31      move second child to first child ( temp 2-component vector of double)
+0:31        vector swizzle ( temp 2-component vector of double)
+0:31          d: direct index for structure ( temp 4-component vector of double)
+0:31            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:31              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:31                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:31                Constant:
+0:31                  0 (const uint)
+0:31              direct index ( temp uint)
+0:31                'dti' ( in 3-component vector of uint)
+0:31                Constant:
+0:31                  0 (const int)
+0:31            Constant:
+0:31              3 (const int)
+0:31          Sequence
+0:31            Constant:
+0:31              0 (const int)
+0:31            Constant:
+0:31              1 (const int)
+0:31        subgroupInclusiveAdd ( temp 2-component vector of double)
+0:31          vector swizzle ( temp 2-component vector of double)
+0:31            d: direct index for structure ( temp 4-component vector of double)
+0:31              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:31                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:31                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:31                  Constant:
+0:31                    0 (const uint)
+0:31                direct index ( temp uint)
+0:31                  'dti' ( in 3-component vector of uint)
+0:31                  Constant:
+0:31                    0 (const int)
+0:31              Constant:
+0:31                3 (const int)
+0:31            Sequence
+0:31              Constant:
+0:31                0 (const int)
+0:31              Constant:
+0:31                1 (const int)
+0:32      move second child to first child ( temp 3-component vector of double)
+0:32        vector swizzle ( temp 3-component vector of double)
+0:32          d: direct index for structure ( temp 4-component vector of double)
+0:32            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:32              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:32                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:32                Constant:
+0:32                  0 (const uint)
+0:32              direct index ( temp uint)
+0:32                'dti' ( in 3-component vector of uint)
+0:32                Constant:
+0:32                  0 (const int)
+0:32            Constant:
+0:32              3 (const int)
+0:32          Sequence
+0:32            Constant:
+0:32              0 (const int)
+0:32            Constant:
+0:32              1 (const int)
+0:32            Constant:
+0:32              2 (const int)
+0:32        subgroupInclusiveAdd ( temp 3-component vector of double)
+0:32          vector swizzle ( temp 3-component vector of double)
+0:32            d: direct index for structure ( temp 4-component vector of double)
+0:32              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:32                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:32                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:32                  Constant:
+0:32                    0 (const uint)
+0:32                direct index ( temp uint)
+0:32                  'dti' ( in 3-component vector of uint)
+0:32                  Constant:
+0:32                    0 (const int)
+0:32              Constant:
+0:32                3 (const int)
+0:32            Sequence
+0:32              Constant:
+0:32                0 (const int)
+0:32              Constant:
+0:32                1 (const int)
+0:32              Constant:
+0:32                2 (const int)
+0:34      move second child to first child ( temp 4-component vector of uint)
+0:34        u: direct index for structure ( temp 4-component vector of uint)
+0:34          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:34            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:34              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:34              Constant:
+0:34                0 (const uint)
+0:34            direct index ( temp uint)
+0:34              'dti' ( in 3-component vector of uint)
+0:34              Constant:
+0:34                0 (const int)
+0:34          Constant:
+0:34            0 (const int)
+0:34        subgroupInclusiveMul ( temp 4-component vector of uint)
+0:34          u: direct index for structure ( temp 4-component vector of uint)
+0:34            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:34              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:34                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:34                Constant:
+0:34                  0 (const uint)
+0:34              direct index ( temp uint)
+0:34                'dti' ( in 3-component vector of uint)
+0:34                Constant:
+0:34                  0 (const int)
+0:34            Constant:
+0:34              0 (const int)
+0:35      move second child to first child ( temp uint)
+0:35        direct index ( temp uint)
+0:35          u: direct index for structure ( temp 4-component vector of uint)
+0:35            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:35              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:35                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:35                Constant:
+0:35                  0 (const uint)
+0:35              direct index ( temp uint)
+0:35                'dti' ( in 3-component vector of uint)
+0:35                Constant:
+0:35                  0 (const int)
+0:35            Constant:
+0:35              0 (const int)
+0:35          Constant:
+0:35            0 (const int)
+0:35        subgroupInclusiveMul ( temp uint)
+0:35          direct index ( temp uint)
+0:35            u: direct index for structure ( temp 4-component vector of uint)
+0:35              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:35                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:35                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:35                  Constant:
+0:35                    0 (const uint)
+0:35                direct index ( temp uint)
+0:35                  'dti' ( in 3-component vector of uint)
+0:35                  Constant:
+0:35                    0 (const int)
+0:35              Constant:
+0:35                0 (const int)
+0:35            Constant:
+0:35              0 (const int)
+0:36      move second child to first child ( temp 2-component vector of uint)
+0:36        vector swizzle ( temp 2-component vector of uint)
+0:36          u: direct index for structure ( temp 4-component vector of uint)
+0:36            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:36              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:36                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:36                Constant:
+0:36                  0 (const uint)
+0:36              direct index ( temp uint)
+0:36                'dti' ( in 3-component vector of uint)
+0:36                Constant:
+0:36                  0 (const int)
+0:36            Constant:
+0:36              0 (const int)
+0:36          Sequence
+0:36            Constant:
+0:36              0 (const int)
+0:36            Constant:
+0:36              1 (const int)
+0:36        subgroupInclusiveMul ( temp 2-component vector of uint)
+0:36          vector swizzle ( temp 2-component vector of uint)
+0:36            u: direct index for structure ( temp 4-component vector of uint)
+0:36              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:36                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:36                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:36                  Constant:
+0:36                    0 (const uint)
+0:36                direct index ( temp uint)
+0:36                  'dti' ( in 3-component vector of uint)
+0:36                  Constant:
+0:36                    0 (const int)
+0:36              Constant:
+0:36                0 (const int)
+0:36            Sequence
+0:36              Constant:
+0:36                0 (const int)
+0:36              Constant:
+0:36                1 (const int)
+0:37      move second child to first child ( temp 3-component vector of uint)
+0:37        vector swizzle ( temp 3-component vector of uint)
+0:37          u: direct index for structure ( temp 4-component vector of uint)
+0:37            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:37              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:37                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:37                Constant:
+0:37                  0 (const uint)
+0:37              direct index ( temp uint)
+0:37                'dti' ( in 3-component vector of uint)
+0:37                Constant:
+0:37                  0 (const int)
+0:37            Constant:
+0:37              0 (const int)
+0:37          Sequence
+0:37            Constant:
+0:37              0 (const int)
+0:37            Constant:
+0:37              1 (const int)
+0:37            Constant:
+0:37              2 (const int)
+0:37        subgroupInclusiveMul ( temp 3-component vector of uint)
+0:37          vector swizzle ( temp 3-component vector of uint)
+0:37            u: direct index for structure ( temp 4-component vector of uint)
+0:37              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:37                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:37                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:37                  Constant:
+0:37                    0 (const uint)
+0:37                direct index ( temp uint)
+0:37                  'dti' ( in 3-component vector of uint)
+0:37                  Constant:
+0:37                    0 (const int)
+0:37              Constant:
+0:37                0 (const int)
+0:37            Sequence
+0:37              Constant:
+0:37                0 (const int)
+0:37              Constant:
+0:37                1 (const int)
+0:37              Constant:
+0:37                2 (const int)
+0:39      move second child to first child ( temp 4-component vector of int)
+0:39        i: direct index for structure ( temp 4-component vector of int)
+0:39          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:39            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:39              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:39              Constant:
+0:39                0 (const uint)
+0:39            direct index ( temp uint)
+0:39              'dti' ( in 3-component vector of uint)
+0:39              Constant:
+0:39                0 (const int)
+0:39          Constant:
+0:39            1 (const int)
+0:39        subgroupInclusiveMul ( temp 4-component vector of int)
+0:39          i: direct index for structure ( temp 4-component vector of int)
+0:39            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:39              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:39                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:39                Constant:
+0:39                  0 (const uint)
+0:39              direct index ( temp uint)
+0:39                'dti' ( in 3-component vector of uint)
+0:39                Constant:
+0:39                  0 (const int)
+0:39            Constant:
+0:39              1 (const int)
+0:40      move second child to first child ( temp int)
+0:40        direct index ( temp int)
+0:40          i: direct index for structure ( temp 4-component vector of int)
+0:40            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:40              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:40                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:40                Constant:
+0:40                  0 (const uint)
+0:40              direct index ( temp uint)
+0:40                'dti' ( in 3-component vector of uint)
+0:40                Constant:
+0:40                  0 (const int)
+0:40            Constant:
+0:40              1 (const int)
+0:40          Constant:
+0:40            0 (const int)
+0:40        subgroupInclusiveMul ( temp int)
+0:40          direct index ( temp int)
+0:40            i: direct index for structure ( temp 4-component vector of int)
+0:40              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:40                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:40                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:40                  Constant:
+0:40                    0 (const uint)
+0:40                direct index ( temp uint)
+0:40                  'dti' ( in 3-component vector of uint)
+0:40                  Constant:
+0:40                    0 (const int)
+0:40              Constant:
+0:40                1 (const int)
+0:40            Constant:
+0:40              0 (const int)
+0:41      move second child to first child ( temp 2-component vector of int)
+0:41        vector swizzle ( temp 2-component vector of int)
+0:41          i: direct index for structure ( temp 4-component vector of int)
+0:41            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:41              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:41                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:41                Constant:
+0:41                  0 (const uint)
+0:41              direct index ( temp uint)
+0:41                'dti' ( in 3-component vector of uint)
+0:41                Constant:
+0:41                  0 (const int)
+0:41            Constant:
+0:41              1 (const int)
+0:41          Sequence
+0:41            Constant:
+0:41              0 (const int)
+0:41            Constant:
+0:41              1 (const int)
+0:41        subgroupInclusiveMul ( temp 2-component vector of int)
+0:41          vector swizzle ( temp 2-component vector of int)
+0:41            i: direct index for structure ( temp 4-component vector of int)
+0:41              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:41                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:41                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:41                  Constant:
+0:41                    0 (const uint)
+0:41                direct index ( temp uint)
+0:41                  'dti' ( in 3-component vector of uint)
+0:41                  Constant:
+0:41                    0 (const int)
+0:41              Constant:
+0:41                1 (const int)
+0:41            Sequence
+0:41              Constant:
+0:41                0 (const int)
+0:41              Constant:
+0:41                1 (const int)
+0:42      move second child to first child ( temp 3-component vector of int)
+0:42        vector swizzle ( temp 3-component vector of int)
+0:42          i: direct index for structure ( temp 4-component vector of int)
+0:42            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:42              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:42                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:42                Constant:
+0:42                  0 (const uint)
+0:42              direct index ( temp uint)
+0:42                'dti' ( in 3-component vector of uint)
+0:42                Constant:
+0:42                  0 (const int)
+0:42            Constant:
+0:42              1 (const int)
+0:42          Sequence
+0:42            Constant:
+0:42              0 (const int)
+0:42            Constant:
+0:42              1 (const int)
+0:42            Constant:
+0:42              2 (const int)
+0:42        subgroupInclusiveMul ( temp 3-component vector of int)
+0:42          vector swizzle ( temp 3-component vector of int)
+0:42            i: direct index for structure ( temp 4-component vector of int)
+0:42              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:42                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:42                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:42                  Constant:
+0:42                    0 (const uint)
+0:42                direct index ( temp uint)
+0:42                  'dti' ( in 3-component vector of uint)
+0:42                  Constant:
+0:42                    0 (const int)
+0:42              Constant:
+0:42                1 (const int)
+0:42            Sequence
+0:42              Constant:
+0:42                0 (const int)
+0:42              Constant:
+0:42                1 (const int)
+0:42              Constant:
+0:42                2 (const int)
+0:44      move second child to first child ( temp 4-component vector of float)
+0:44        f: direct index for structure ( temp 4-component vector of float)
+0:44          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:44            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:44              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:44              Constant:
+0:44                0 (const uint)
+0:44            direct index ( temp uint)
+0:44              'dti' ( in 3-component vector of uint)
+0:44              Constant:
+0:44                0 (const int)
+0:44          Constant:
+0:44            2 (const int)
+0:44        subgroupInclusiveMul ( temp 4-component vector of float)
+0:44          f: direct index for structure ( temp 4-component vector of float)
+0:44            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:44              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:44                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:44                Constant:
+0:44                  0 (const uint)
+0:44              direct index ( temp uint)
+0:44                'dti' ( in 3-component vector of uint)
+0:44                Constant:
+0:44                  0 (const int)
+0:44            Constant:
+0:44              2 (const int)
+0:45      move second child to first child ( temp float)
+0:45        direct index ( temp float)
+0:45          f: direct index for structure ( temp 4-component vector of float)
+0:45            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:45              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:45                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:45                Constant:
+0:45                  0 (const uint)
+0:45              direct index ( temp uint)
+0:45                'dti' ( in 3-component vector of uint)
+0:45                Constant:
+0:45                  0 (const int)
+0:45            Constant:
+0:45              2 (const int)
+0:45          Constant:
+0:45            0 (const int)
+0:45        subgroupInclusiveMul ( temp float)
+0:45          direct index ( temp float)
+0:45            f: direct index for structure ( temp 4-component vector of float)
+0:45              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:45                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:45                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:45                  Constant:
+0:45                    0 (const uint)
+0:45                direct index ( temp uint)
+0:45                  'dti' ( in 3-component vector of uint)
+0:45                  Constant:
+0:45                    0 (const int)
+0:45              Constant:
+0:45                2 (const int)
+0:45            Constant:
+0:45              0 (const int)
+0:46      move second child to first child ( temp 2-component vector of float)
+0:46        vector swizzle ( temp 2-component vector of float)
+0:46          f: direct index for structure ( temp 4-component vector of float)
+0:46            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:46              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:46                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:46                Constant:
+0:46                  0 (const uint)
+0:46              direct index ( temp uint)
+0:46                'dti' ( in 3-component vector of uint)
+0:46                Constant:
+0:46                  0 (const int)
+0:46            Constant:
+0:46              2 (const int)
+0:46          Sequence
+0:46            Constant:
+0:46              0 (const int)
+0:46            Constant:
+0:46              1 (const int)
+0:46        subgroupInclusiveMul ( temp 2-component vector of float)
+0:46          vector swizzle ( temp 2-component vector of float)
+0:46            f: direct index for structure ( temp 4-component vector of float)
+0:46              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:46                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:46                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:46                  Constant:
+0:46                    0 (const uint)
+0:46                direct index ( temp uint)
+0:46                  'dti' ( in 3-component vector of uint)
+0:46                  Constant:
+0:46                    0 (const int)
+0:46              Constant:
+0:46                2 (const int)
+0:46            Sequence
+0:46              Constant:
+0:46                0 (const int)
+0:46              Constant:
+0:46                1 (const int)
+0:47      move second child to first child ( temp 3-component vector of float)
+0:47        vector swizzle ( temp 3-component vector of float)
+0:47          f: direct index for structure ( temp 4-component vector of float)
+0:47            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:47              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:47                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:47                Constant:
+0:47                  0 (const uint)
+0:47              direct index ( temp uint)
+0:47                'dti' ( in 3-component vector of uint)
+0:47                Constant:
+0:47                  0 (const int)
+0:47            Constant:
+0:47              2 (const int)
+0:47          Sequence
+0:47            Constant:
+0:47              0 (const int)
+0:47            Constant:
+0:47              1 (const int)
+0:47            Constant:
+0:47              2 (const int)
+0:47        subgroupInclusiveMul ( temp 3-component vector of float)
+0:47          vector swizzle ( temp 3-component vector of float)
+0:47            f: direct index for structure ( temp 4-component vector of float)
+0:47              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:47                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:47                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:47                  Constant:
+0:47                    0 (const uint)
+0:47                direct index ( temp uint)
+0:47                  'dti' ( in 3-component vector of uint)
+0:47                  Constant:
+0:47                    0 (const int)
+0:47              Constant:
+0:47                2 (const int)
+0:47            Sequence
+0:47              Constant:
+0:47                0 (const int)
+0:47              Constant:
+0:47                1 (const int)
+0:47              Constant:
+0:47                2 (const int)
+0:49      move second child to first child ( temp 4-component vector of double)
+0:49        d: direct index for structure ( temp 4-component vector of double)
+0:49          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:49            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:49              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:49              Constant:
+0:49                0 (const uint)
+0:49            direct index ( temp uint)
+0:49              'dti' ( in 3-component vector of uint)
+0:49              Constant:
+0:49                0 (const int)
+0:49          Constant:
+0:49            3 (const int)
+0:49        subgroupInclusiveMul ( temp 4-component vector of double)
+0:49          d: direct index for structure ( temp 4-component vector of double)
+0:49            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:49              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:49                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:49                Constant:
+0:49                  0 (const uint)
+0:49              direct index ( temp uint)
+0:49                'dti' ( in 3-component vector of uint)
+0:49                Constant:
+0:49                  0 (const int)
+0:49            Constant:
+0:49              3 (const int)
+0:50      move second child to first child ( temp double)
+0:50        direct index ( temp double)
+0:50          d: direct index for structure ( temp 4-component vector of double)
+0:50            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:50              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:50                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:50                Constant:
+0:50                  0 (const uint)
+0:50              direct index ( temp uint)
+0:50                'dti' ( in 3-component vector of uint)
+0:50                Constant:
+0:50                  0 (const int)
+0:50            Constant:
+0:50              3 (const int)
+0:50          Constant:
+0:50            0 (const int)
+0:50        subgroupInclusiveMul ( temp double)
+0:50          direct index ( temp double)
+0:50            d: direct index for structure ( temp 4-component vector of double)
+0:50              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:50                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:50                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:50                  Constant:
+0:50                    0 (const uint)
+0:50                direct index ( temp uint)
+0:50                  'dti' ( in 3-component vector of uint)
+0:50                  Constant:
+0:50                    0 (const int)
+0:50              Constant:
+0:50                3 (const int)
+0:50            Constant:
+0:50              0 (const int)
+0:51      move second child to first child ( temp 2-component vector of double)
+0:51        vector swizzle ( temp 2-component vector of double)
+0:51          d: direct index for structure ( temp 4-component vector of double)
+0:51            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:51              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:51                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:51                Constant:
+0:51                  0 (const uint)
+0:51              direct index ( temp uint)
+0:51                'dti' ( in 3-component vector of uint)
+0:51                Constant:
+0:51                  0 (const int)
+0:51            Constant:
+0:51              3 (const int)
+0:51          Sequence
+0:51            Constant:
+0:51              0 (const int)
+0:51            Constant:
+0:51              1 (const int)
+0:51        subgroupInclusiveMul ( temp 2-component vector of double)
+0:51          vector swizzle ( temp 2-component vector of double)
+0:51            d: direct index for structure ( temp 4-component vector of double)
+0:51              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:51                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:51                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:51                  Constant:
+0:51                    0 (const uint)
+0:51                direct index ( temp uint)
+0:51                  'dti' ( in 3-component vector of uint)
+0:51                  Constant:
+0:51                    0 (const int)
+0:51              Constant:
+0:51                3 (const int)
+0:51            Sequence
+0:51              Constant:
+0:51                0 (const int)
+0:51              Constant:
+0:51                1 (const int)
+0:52      move second child to first child ( temp 3-component vector of double)
+0:52        vector swizzle ( temp 3-component vector of double)
+0:52          d: direct index for structure ( temp 4-component vector of double)
+0:52            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:52              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:52                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:52                Constant:
+0:52                  0 (const uint)
+0:52              direct index ( temp uint)
+0:52                'dti' ( in 3-component vector of uint)
+0:52                Constant:
+0:52                  0 (const int)
+0:52            Constant:
+0:52              3 (const int)
+0:52          Sequence
+0:52            Constant:
+0:52              0 (const int)
+0:52            Constant:
+0:52              1 (const int)
+0:52            Constant:
+0:52              2 (const int)
+0:52        subgroupInclusiveMul ( temp 3-component vector of double)
+0:52          vector swizzle ( temp 3-component vector of double)
+0:52            d: direct index for structure ( temp 4-component vector of double)
+0:52              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:52                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:52                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:52                  Constant:
+0:52                    0 (const uint)
+0:52                direct index ( temp uint)
+0:52                  'dti' ( in 3-component vector of uint)
+0:52                  Constant:
+0:52                    0 (const int)
+0:52              Constant:
+0:52                3 (const int)
+0:52            Sequence
+0:52              Constant:
+0:52                0 (const int)
+0:52              Constant:
+0:52                1 (const int)
+0:52              Constant:
+0:52                2 (const int)
+0:54      move second child to first child ( temp uint)
+0:54        direct index ( temp uint)
+0:54          u: direct index for structure ( temp 4-component vector of uint)
+0:54            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:54              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:54                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:54                Constant:
+0:54                  0 (const uint)
+0:54              direct index ( temp uint)
+0:54                'dti' ( in 3-component vector of uint)
+0:54                Constant:
+0:54                  0 (const int)
+0:54            Constant:
+0:54              0 (const int)
+0:54          Constant:
+0:54            0 (const int)
+0:54        subgroupBallotInclusiveBitCount ( temp uint)
+0:54          subgroupBallot ( temp 4-component vector of uint)
+0:54            Compare Equal ( temp bool)
+0:54              direct index ( temp uint)
+0:54                u: direct index for structure ( temp 4-component vector of uint)
+0:54                  indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:54                    @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:54                      'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:54                      Constant:
+0:54                        0 (const uint)
+0:54                    direct index ( temp uint)
+0:54                      'dti' ( in 3-component vector of uint)
+0:54                      Constant:
+0:54                        0 (const int)
+0:54                  Constant:
+0:54                    0 (const int)
+0:54                Constant:
+0:54                  0 (const int)
+0:54              Constant:
+0:54                0 (const uint)
+0:13  Function Definition: CSMain( ( temp void)
+0:13    Function Parameters: 
+0:?     Sequence
+0:13      move second child to first child ( temp 3-component vector of uint)
+0:?         'dti' ( temp 3-component vector of uint)
+0:?         'dti' ( in 3-component vector of uint GlobalInvocationID)
+0:13      Function Call: @CSMain(vu3; ( temp void)
+0:?         'dti' ( temp 3-component vector of uint)
+0:?   Linker Objects
+0:?     'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:?     'dti' ( in 3-component vector of uint GlobalInvocationID)
+
+
+Linked compute stage:
+
+
+Shader version: 500
+local_size = (32, 16, 1)
+0:? Sequence
+0:13  Function Definition: @CSMain(vu3; ( temp void)
+0:13    Function Parameters: 
+0:13      'dti' ( in 3-component vector of uint)
+0:?     Sequence
+0:14      move second child to first child ( temp 4-component vector of uint)
+0:14        u: direct index for structure ( temp 4-component vector of uint)
+0:14          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:14            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:14              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:14              Constant:
+0:14                0 (const uint)
+0:14            direct index ( temp uint)
+0:14              'dti' ( in 3-component vector of uint)
+0:14              Constant:
+0:14                0 (const int)
+0:14          Constant:
+0:14            0 (const int)
+0:14        subgroupInclusiveAdd ( temp 4-component vector of uint)
+0:14          u: direct index for structure ( temp 4-component vector of uint)
+0:14            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:14              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:14                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:14                Constant:
+0:14                  0 (const uint)
+0:14              direct index ( temp uint)
+0:14                'dti' ( in 3-component vector of uint)
+0:14                Constant:
+0:14                  0 (const int)
+0:14            Constant:
+0:14              0 (const int)
+0:15      move second child to first child ( temp uint)
+0:15        direct index ( temp uint)
+0:15          u: direct index for structure ( temp 4-component vector of uint)
+0:15            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:15              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:15                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:15                Constant:
+0:15                  0 (const uint)
+0:15              direct index ( temp uint)
+0:15                'dti' ( in 3-component vector of uint)
+0:15                Constant:
+0:15                  0 (const int)
+0:15            Constant:
+0:15              0 (const int)
+0:15          Constant:
+0:15            0 (const int)
+0:15        subgroupInclusiveAdd ( temp uint)
+0:15          direct index ( temp uint)
+0:15            u: direct index for structure ( temp 4-component vector of uint)
+0:15              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:15                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:15                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:15                  Constant:
+0:15                    0 (const uint)
+0:15                direct index ( temp uint)
+0:15                  'dti' ( in 3-component vector of uint)
+0:15                  Constant:
+0:15                    0 (const int)
+0:15              Constant:
+0:15                0 (const int)
+0:15            Constant:
+0:15              0 (const int)
+0:16      move second child to first child ( temp 2-component vector of uint)
+0:16        vector swizzle ( temp 2-component vector of uint)
+0:16          u: direct index for structure ( temp 4-component vector of uint)
+0:16            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:16              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:16                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:16                Constant:
+0:16                  0 (const uint)
+0:16              direct index ( temp uint)
+0:16                'dti' ( in 3-component vector of uint)
+0:16                Constant:
+0:16                  0 (const int)
+0:16            Constant:
+0:16              0 (const int)
+0:16          Sequence
+0:16            Constant:
+0:16              0 (const int)
+0:16            Constant:
+0:16              1 (const int)
+0:16        subgroupInclusiveAdd ( temp 2-component vector of uint)
+0:16          vector swizzle ( temp 2-component vector of uint)
+0:16            u: direct index for structure ( temp 4-component vector of uint)
+0:16              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:16                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:16                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:16                  Constant:
+0:16                    0 (const uint)
+0:16                direct index ( temp uint)
+0:16                  'dti' ( in 3-component vector of uint)
+0:16                  Constant:
+0:16                    0 (const int)
+0:16              Constant:
+0:16                0 (const int)
+0:16            Sequence
+0:16              Constant:
+0:16                0 (const int)
+0:16              Constant:
+0:16                1 (const int)
+0:17      move second child to first child ( temp 3-component vector of uint)
+0:17        vector swizzle ( temp 3-component vector of uint)
+0:17          u: direct index for structure ( temp 4-component vector of uint)
+0:17            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:17              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:17                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:17                Constant:
+0:17                  0 (const uint)
+0:17              direct index ( temp uint)
+0:17                'dti' ( in 3-component vector of uint)
+0:17                Constant:
+0:17                  0 (const int)
+0:17            Constant:
+0:17              0 (const int)
+0:17          Sequence
+0:17            Constant:
+0:17              0 (const int)
+0:17            Constant:
+0:17              1 (const int)
+0:17            Constant:
+0:17              2 (const int)
+0:17        subgroupInclusiveAdd ( temp 3-component vector of uint)
+0:17          vector swizzle ( temp 3-component vector of uint)
+0:17            u: direct index for structure ( temp 4-component vector of uint)
+0:17              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:17                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:17                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:17                  Constant:
+0:17                    0 (const uint)
+0:17                direct index ( temp uint)
+0:17                  'dti' ( in 3-component vector of uint)
+0:17                  Constant:
+0:17                    0 (const int)
+0:17              Constant:
+0:17                0 (const int)
+0:17            Sequence
+0:17              Constant:
+0:17                0 (const int)
+0:17              Constant:
+0:17                1 (const int)
+0:17              Constant:
+0:17                2 (const int)
+0:19      move second child to first child ( temp 4-component vector of int)
+0:19        i: direct index for structure ( temp 4-component vector of int)
+0:19          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:19            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:19              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:19              Constant:
+0:19                0 (const uint)
+0:19            direct index ( temp uint)
+0:19              'dti' ( in 3-component vector of uint)
+0:19              Constant:
+0:19                0 (const int)
+0:19          Constant:
+0:19            1 (const int)
+0:19        subgroupInclusiveAdd ( temp 4-component vector of int)
+0:19          i: direct index for structure ( temp 4-component vector of int)
+0:19            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:19              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:19                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:19                Constant:
+0:19                  0 (const uint)
+0:19              direct index ( temp uint)
+0:19                'dti' ( in 3-component vector of uint)
+0:19                Constant:
+0:19                  0 (const int)
+0:19            Constant:
+0:19              1 (const int)
+0:20      move second child to first child ( temp int)
+0:20        direct index ( temp int)
+0:20          i: direct index for structure ( temp 4-component vector of int)
+0:20            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:20              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:20                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:20                Constant:
+0:20                  0 (const uint)
+0:20              direct index ( temp uint)
+0:20                'dti' ( in 3-component vector of uint)
+0:20                Constant:
+0:20                  0 (const int)
+0:20            Constant:
+0:20              1 (const int)
+0:20          Constant:
+0:20            0 (const int)
+0:20        subgroupInclusiveAdd ( temp int)
+0:20          direct index ( temp int)
+0:20            i: direct index for structure ( temp 4-component vector of int)
+0:20              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:20                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:20                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:20                  Constant:
+0:20                    0 (const uint)
+0:20                direct index ( temp uint)
+0:20                  'dti' ( in 3-component vector of uint)
+0:20                  Constant:
+0:20                    0 (const int)
+0:20              Constant:
+0:20                1 (const int)
+0:20            Constant:
+0:20              0 (const int)
+0:21      move second child to first child ( temp 2-component vector of int)
+0:21        vector swizzle ( temp 2-component vector of int)
+0:21          i: direct index for structure ( temp 4-component vector of int)
+0:21            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:21              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:21                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:21                Constant:
+0:21                  0 (const uint)
+0:21              direct index ( temp uint)
+0:21                'dti' ( in 3-component vector of uint)
+0:21                Constant:
+0:21                  0 (const int)
+0:21            Constant:
+0:21              1 (const int)
+0:21          Sequence
+0:21            Constant:
+0:21              0 (const int)
+0:21            Constant:
+0:21              1 (const int)
+0:21        subgroupInclusiveAdd ( temp 2-component vector of int)
+0:21          vector swizzle ( temp 2-component vector of int)
+0:21            i: direct index for structure ( temp 4-component vector of int)
+0:21              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:21                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:21                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:21                  Constant:
+0:21                    0 (const uint)
+0:21                direct index ( temp uint)
+0:21                  'dti' ( in 3-component vector of uint)
+0:21                  Constant:
+0:21                    0 (const int)
+0:21              Constant:
+0:21                1 (const int)
+0:21            Sequence
+0:21              Constant:
+0:21                0 (const int)
+0:21              Constant:
+0:21                1 (const int)
+0:22      move second child to first child ( temp 3-component vector of int)
+0:22        vector swizzle ( temp 3-component vector of int)
+0:22          i: direct index for structure ( temp 4-component vector of int)
+0:22            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:22              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:22                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:22                Constant:
+0:22                  0 (const uint)
+0:22              direct index ( temp uint)
+0:22                'dti' ( in 3-component vector of uint)
+0:22                Constant:
+0:22                  0 (const int)
+0:22            Constant:
+0:22              1 (const int)
+0:22          Sequence
+0:22            Constant:
+0:22              0 (const int)
+0:22            Constant:
+0:22              1 (const int)
+0:22            Constant:
+0:22              2 (const int)
+0:22        subgroupInclusiveAdd ( temp 3-component vector of int)
+0:22          vector swizzle ( temp 3-component vector of int)
+0:22            i: direct index for structure ( temp 4-component vector of int)
+0:22              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:22                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:22                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:22                  Constant:
+0:22                    0 (const uint)
+0:22                direct index ( temp uint)
+0:22                  'dti' ( in 3-component vector of uint)
+0:22                  Constant:
+0:22                    0 (const int)
+0:22              Constant:
+0:22                1 (const int)
+0:22            Sequence
+0:22              Constant:
+0:22                0 (const int)
+0:22              Constant:
+0:22                1 (const int)
+0:22              Constant:
+0:22                2 (const int)
+0:24      move second child to first child ( temp 4-component vector of float)
+0:24        f: direct index for structure ( temp 4-component vector of float)
+0:24          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:24            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:24              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:24              Constant:
+0:24                0 (const uint)
+0:24            direct index ( temp uint)
+0:24              'dti' ( in 3-component vector of uint)
+0:24              Constant:
+0:24                0 (const int)
+0:24          Constant:
+0:24            2 (const int)
+0:24        subgroupInclusiveAdd ( temp 4-component vector of float)
+0:24          f: direct index for structure ( temp 4-component vector of float)
+0:24            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:24              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:24                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:24                Constant:
+0:24                  0 (const uint)
+0:24              direct index ( temp uint)
+0:24                'dti' ( in 3-component vector of uint)
+0:24                Constant:
+0:24                  0 (const int)
+0:24            Constant:
+0:24              2 (const int)
+0:25      move second child to first child ( temp float)
+0:25        direct index ( temp float)
+0:25          f: direct index for structure ( temp 4-component vector of float)
+0:25            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:25              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:25                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:25                Constant:
+0:25                  0 (const uint)
+0:25              direct index ( temp uint)
+0:25                'dti' ( in 3-component vector of uint)
+0:25                Constant:
+0:25                  0 (const int)
+0:25            Constant:
+0:25              2 (const int)
+0:25          Constant:
+0:25            0 (const int)
+0:25        subgroupInclusiveAdd ( temp float)
+0:25          direct index ( temp float)
+0:25            f: direct index for structure ( temp 4-component vector of float)
+0:25              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:25                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:25                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:25                  Constant:
+0:25                    0 (const uint)
+0:25                direct index ( temp uint)
+0:25                  'dti' ( in 3-component vector of uint)
+0:25                  Constant:
+0:25                    0 (const int)
+0:25              Constant:
+0:25                2 (const int)
+0:25            Constant:
+0:25              0 (const int)
+0:26      move second child to first child ( temp 2-component vector of float)
+0:26        vector swizzle ( temp 2-component vector of float)
+0:26          f: direct index for structure ( temp 4-component vector of float)
+0:26            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:26              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:26                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:26                Constant:
+0:26                  0 (const uint)
+0:26              direct index ( temp uint)
+0:26                'dti' ( in 3-component vector of uint)
+0:26                Constant:
+0:26                  0 (const int)
+0:26            Constant:
+0:26              2 (const int)
+0:26          Sequence
+0:26            Constant:
+0:26              0 (const int)
+0:26            Constant:
+0:26              1 (const int)
+0:26        subgroupInclusiveAdd ( temp 2-component vector of float)
+0:26          vector swizzle ( temp 2-component vector of float)
+0:26            f: direct index for structure ( temp 4-component vector of float)
+0:26              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:26                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:26                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:26                  Constant:
+0:26                    0 (const uint)
+0:26                direct index ( temp uint)
+0:26                  'dti' ( in 3-component vector of uint)
+0:26                  Constant:
+0:26                    0 (const int)
+0:26              Constant:
+0:26                2 (const int)
+0:26            Sequence
+0:26              Constant:
+0:26                0 (const int)
+0:26              Constant:
+0:26                1 (const int)
+0:27      move second child to first child ( temp 3-component vector of float)
+0:27        vector swizzle ( temp 3-component vector of float)
+0:27          f: direct index for structure ( temp 4-component vector of float)
+0:27            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:27              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:27                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:27                Constant:
+0:27                  0 (const uint)
+0:27              direct index ( temp uint)
+0:27                'dti' ( in 3-component vector of uint)
+0:27                Constant:
+0:27                  0 (const int)
+0:27            Constant:
+0:27              2 (const int)
+0:27          Sequence
+0:27            Constant:
+0:27              0 (const int)
+0:27            Constant:
+0:27              1 (const int)
+0:27            Constant:
+0:27              2 (const int)
+0:27        subgroupInclusiveAdd ( temp 3-component vector of float)
+0:27          vector swizzle ( temp 3-component vector of float)
+0:27            f: direct index for structure ( temp 4-component vector of float)
+0:27              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:27                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:27                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:27                  Constant:
+0:27                    0 (const uint)
+0:27                direct index ( temp uint)
+0:27                  'dti' ( in 3-component vector of uint)
+0:27                  Constant:
+0:27                    0 (const int)
+0:27              Constant:
+0:27                2 (const int)
+0:27            Sequence
+0:27              Constant:
+0:27                0 (const int)
+0:27              Constant:
+0:27                1 (const int)
+0:27              Constant:
+0:27                2 (const int)
+0:29      move second child to first child ( temp 4-component vector of double)
+0:29        d: direct index for structure ( temp 4-component vector of double)
+0:29          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:29            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:29              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:29              Constant:
+0:29                0 (const uint)
+0:29            direct index ( temp uint)
+0:29              'dti' ( in 3-component vector of uint)
+0:29              Constant:
+0:29                0 (const int)
+0:29          Constant:
+0:29            3 (const int)
+0:29        subgroupInclusiveAdd ( temp 4-component vector of double)
+0:29          d: direct index for structure ( temp 4-component vector of double)
+0:29            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:29              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:29                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:29                Constant:
+0:29                  0 (const uint)
+0:29              direct index ( temp uint)
+0:29                'dti' ( in 3-component vector of uint)
+0:29                Constant:
+0:29                  0 (const int)
+0:29            Constant:
+0:29              3 (const int)
+0:30      move second child to first child ( temp double)
+0:30        direct index ( temp double)
+0:30          d: direct index for structure ( temp 4-component vector of double)
+0:30            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:30              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:30                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:30                Constant:
+0:30                  0 (const uint)
+0:30              direct index ( temp uint)
+0:30                'dti' ( in 3-component vector of uint)
+0:30                Constant:
+0:30                  0 (const int)
+0:30            Constant:
+0:30              3 (const int)
+0:30          Constant:
+0:30            0 (const int)
+0:30        subgroupInclusiveAdd ( temp double)
+0:30          direct index ( temp double)
+0:30            d: direct index for structure ( temp 4-component vector of double)
+0:30              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:30                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:30                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:30                  Constant:
+0:30                    0 (const uint)
+0:30                direct index ( temp uint)
+0:30                  'dti' ( in 3-component vector of uint)
+0:30                  Constant:
+0:30                    0 (const int)
+0:30              Constant:
+0:30                3 (const int)
+0:30            Constant:
+0:30              0 (const int)
+0:31      move second child to first child ( temp 2-component vector of double)
+0:31        vector swizzle ( temp 2-component vector of double)
+0:31          d: direct index for structure ( temp 4-component vector of double)
+0:31            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:31              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:31                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:31                Constant:
+0:31                  0 (const uint)
+0:31              direct index ( temp uint)
+0:31                'dti' ( in 3-component vector of uint)
+0:31                Constant:
+0:31                  0 (const int)
+0:31            Constant:
+0:31              3 (const int)
+0:31          Sequence
+0:31            Constant:
+0:31              0 (const int)
+0:31            Constant:
+0:31              1 (const int)
+0:31        subgroupInclusiveAdd ( temp 2-component vector of double)
+0:31          vector swizzle ( temp 2-component vector of double)
+0:31            d: direct index for structure ( temp 4-component vector of double)
+0:31              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:31                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:31                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:31                  Constant:
+0:31                    0 (const uint)
+0:31                direct index ( temp uint)
+0:31                  'dti' ( in 3-component vector of uint)
+0:31                  Constant:
+0:31                    0 (const int)
+0:31              Constant:
+0:31                3 (const int)
+0:31            Sequence
+0:31              Constant:
+0:31                0 (const int)
+0:31              Constant:
+0:31                1 (const int)
+0:32      move second child to first child ( temp 3-component vector of double)
+0:32        vector swizzle ( temp 3-component vector of double)
+0:32          d: direct index for structure ( temp 4-component vector of double)
+0:32            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:32              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:32                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:32                Constant:
+0:32                  0 (const uint)
+0:32              direct index ( temp uint)
+0:32                'dti' ( in 3-component vector of uint)
+0:32                Constant:
+0:32                  0 (const int)
+0:32            Constant:
+0:32              3 (const int)
+0:32          Sequence
+0:32            Constant:
+0:32              0 (const int)
+0:32            Constant:
+0:32              1 (const int)
+0:32            Constant:
+0:32              2 (const int)
+0:32        subgroupInclusiveAdd ( temp 3-component vector of double)
+0:32          vector swizzle ( temp 3-component vector of double)
+0:32            d: direct index for structure ( temp 4-component vector of double)
+0:32              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:32                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:32                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:32                  Constant:
+0:32                    0 (const uint)
+0:32                direct index ( temp uint)
+0:32                  'dti' ( in 3-component vector of uint)
+0:32                  Constant:
+0:32                    0 (const int)
+0:32              Constant:
+0:32                3 (const int)
+0:32            Sequence
+0:32              Constant:
+0:32                0 (const int)
+0:32              Constant:
+0:32                1 (const int)
+0:32              Constant:
+0:32                2 (const int)
+0:34      move second child to first child ( temp 4-component vector of uint)
+0:34        u: direct index for structure ( temp 4-component vector of uint)
+0:34          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:34            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:34              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:34              Constant:
+0:34                0 (const uint)
+0:34            direct index ( temp uint)
+0:34              'dti' ( in 3-component vector of uint)
+0:34              Constant:
+0:34                0 (const int)
+0:34          Constant:
+0:34            0 (const int)
+0:34        subgroupInclusiveMul ( temp 4-component vector of uint)
+0:34          u: direct index for structure ( temp 4-component vector of uint)
+0:34            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:34              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:34                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:34                Constant:
+0:34                  0 (const uint)
+0:34              direct index ( temp uint)
+0:34                'dti' ( in 3-component vector of uint)
+0:34                Constant:
+0:34                  0 (const int)
+0:34            Constant:
+0:34              0 (const int)
+0:35      move second child to first child ( temp uint)
+0:35        direct index ( temp uint)
+0:35          u: direct index for structure ( temp 4-component vector of uint)
+0:35            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:35              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:35                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:35                Constant:
+0:35                  0 (const uint)
+0:35              direct index ( temp uint)
+0:35                'dti' ( in 3-component vector of uint)
+0:35                Constant:
+0:35                  0 (const int)
+0:35            Constant:
+0:35              0 (const int)
+0:35          Constant:
+0:35            0 (const int)
+0:35        subgroupInclusiveMul ( temp uint)
+0:35          direct index ( temp uint)
+0:35            u: direct index for structure ( temp 4-component vector of uint)
+0:35              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:35                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:35                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:35                  Constant:
+0:35                    0 (const uint)
+0:35                direct index ( temp uint)
+0:35                  'dti' ( in 3-component vector of uint)
+0:35                  Constant:
+0:35                    0 (const int)
+0:35              Constant:
+0:35                0 (const int)
+0:35            Constant:
+0:35              0 (const int)
+0:36      move second child to first child ( temp 2-component vector of uint)
+0:36        vector swizzle ( temp 2-component vector of uint)
+0:36          u: direct index for structure ( temp 4-component vector of uint)
+0:36            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:36              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:36                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:36                Constant:
+0:36                  0 (const uint)
+0:36              direct index ( temp uint)
+0:36                'dti' ( in 3-component vector of uint)
+0:36                Constant:
+0:36                  0 (const int)
+0:36            Constant:
+0:36              0 (const int)
+0:36          Sequence
+0:36            Constant:
+0:36              0 (const int)
+0:36            Constant:
+0:36              1 (const int)
+0:36        subgroupInclusiveMul ( temp 2-component vector of uint)
+0:36          vector swizzle ( temp 2-component vector of uint)
+0:36            u: direct index for structure ( temp 4-component vector of uint)
+0:36              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:36                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:36                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:36                  Constant:
+0:36                    0 (const uint)
+0:36                direct index ( temp uint)
+0:36                  'dti' ( in 3-component vector of uint)
+0:36                  Constant:
+0:36                    0 (const int)
+0:36              Constant:
+0:36                0 (const int)
+0:36            Sequence
+0:36              Constant:
+0:36                0 (const int)
+0:36              Constant:
+0:36                1 (const int)
+0:37      move second child to first child ( temp 3-component vector of uint)
+0:37        vector swizzle ( temp 3-component vector of uint)
+0:37          u: direct index for structure ( temp 4-component vector of uint)
+0:37            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:37              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:37                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:37                Constant:
+0:37                  0 (const uint)
+0:37              direct index ( temp uint)
+0:37                'dti' ( in 3-component vector of uint)
+0:37                Constant:
+0:37                  0 (const int)
+0:37            Constant:
+0:37              0 (const int)
+0:37          Sequence
+0:37            Constant:
+0:37              0 (const int)
+0:37            Constant:
+0:37              1 (const int)
+0:37            Constant:
+0:37              2 (const int)
+0:37        subgroupInclusiveMul ( temp 3-component vector of uint)
+0:37          vector swizzle ( temp 3-component vector of uint)
+0:37            u: direct index for structure ( temp 4-component vector of uint)
+0:37              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:37                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:37                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:37                  Constant:
+0:37                    0 (const uint)
+0:37                direct index ( temp uint)
+0:37                  'dti' ( in 3-component vector of uint)
+0:37                  Constant:
+0:37                    0 (const int)
+0:37              Constant:
+0:37                0 (const int)
+0:37            Sequence
+0:37              Constant:
+0:37                0 (const int)
+0:37              Constant:
+0:37                1 (const int)
+0:37              Constant:
+0:37                2 (const int)
+0:39      move second child to first child ( temp 4-component vector of int)
+0:39        i: direct index for structure ( temp 4-component vector of int)
+0:39          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:39            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:39              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:39              Constant:
+0:39                0 (const uint)
+0:39            direct index ( temp uint)
+0:39              'dti' ( in 3-component vector of uint)
+0:39              Constant:
+0:39                0 (const int)
+0:39          Constant:
+0:39            1 (const int)
+0:39        subgroupInclusiveMul ( temp 4-component vector of int)
+0:39          i: direct index for structure ( temp 4-component vector of int)
+0:39            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:39              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:39                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:39                Constant:
+0:39                  0 (const uint)
+0:39              direct index ( temp uint)
+0:39                'dti' ( in 3-component vector of uint)
+0:39                Constant:
+0:39                  0 (const int)
+0:39            Constant:
+0:39              1 (const int)
+0:40      move second child to first child ( temp int)
+0:40        direct index ( temp int)
+0:40          i: direct index for structure ( temp 4-component vector of int)
+0:40            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:40              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:40                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:40                Constant:
+0:40                  0 (const uint)
+0:40              direct index ( temp uint)
+0:40                'dti' ( in 3-component vector of uint)
+0:40                Constant:
+0:40                  0 (const int)
+0:40            Constant:
+0:40              1 (const int)
+0:40          Constant:
+0:40            0 (const int)
+0:40        subgroupInclusiveMul ( temp int)
+0:40          direct index ( temp int)
+0:40            i: direct index for structure ( temp 4-component vector of int)
+0:40              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:40                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:40                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:40                  Constant:
+0:40                    0 (const uint)
+0:40                direct index ( temp uint)
+0:40                  'dti' ( in 3-component vector of uint)
+0:40                  Constant:
+0:40                    0 (const int)
+0:40              Constant:
+0:40                1 (const int)
+0:40            Constant:
+0:40              0 (const int)
+0:41      move second child to first child ( temp 2-component vector of int)
+0:41        vector swizzle ( temp 2-component vector of int)
+0:41          i: direct index for structure ( temp 4-component vector of int)
+0:41            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:41              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:41                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:41                Constant:
+0:41                  0 (const uint)
+0:41              direct index ( temp uint)
+0:41                'dti' ( in 3-component vector of uint)
+0:41                Constant:
+0:41                  0 (const int)
+0:41            Constant:
+0:41              1 (const int)
+0:41          Sequence
+0:41            Constant:
+0:41              0 (const int)
+0:41            Constant:
+0:41              1 (const int)
+0:41        subgroupInclusiveMul ( temp 2-component vector of int)
+0:41          vector swizzle ( temp 2-component vector of int)
+0:41            i: direct index for structure ( temp 4-component vector of int)
+0:41              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:41                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:41                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:41                  Constant:
+0:41                    0 (const uint)
+0:41                direct index ( temp uint)
+0:41                  'dti' ( in 3-component vector of uint)
+0:41                  Constant:
+0:41                    0 (const int)
+0:41              Constant:
+0:41                1 (const int)
+0:41            Sequence
+0:41              Constant:
+0:41                0 (const int)
+0:41              Constant:
+0:41                1 (const int)
+0:42      move second child to first child ( temp 3-component vector of int)
+0:42        vector swizzle ( temp 3-component vector of int)
+0:42          i: direct index for structure ( temp 4-component vector of int)
+0:42            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:42              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:42                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:42                Constant:
+0:42                  0 (const uint)
+0:42              direct index ( temp uint)
+0:42                'dti' ( in 3-component vector of uint)
+0:42                Constant:
+0:42                  0 (const int)
+0:42            Constant:
+0:42              1 (const int)
+0:42          Sequence
+0:42            Constant:
+0:42              0 (const int)
+0:42            Constant:
+0:42              1 (const int)
+0:42            Constant:
+0:42              2 (const int)
+0:42        subgroupInclusiveMul ( temp 3-component vector of int)
+0:42          vector swizzle ( temp 3-component vector of int)
+0:42            i: direct index for structure ( temp 4-component vector of int)
+0:42              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:42                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:42                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:42                  Constant:
+0:42                    0 (const uint)
+0:42                direct index ( temp uint)
+0:42                  'dti' ( in 3-component vector of uint)
+0:42                  Constant:
+0:42                    0 (const int)
+0:42              Constant:
+0:42                1 (const int)
+0:42            Sequence
+0:42              Constant:
+0:42                0 (const int)
+0:42              Constant:
+0:42                1 (const int)
+0:42              Constant:
+0:42                2 (const int)
+0:44      move second child to first child ( temp 4-component vector of float)
+0:44        f: direct index for structure ( temp 4-component vector of float)
+0:44          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:44            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:44              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:44              Constant:
+0:44                0 (const uint)
+0:44            direct index ( temp uint)
+0:44              'dti' ( in 3-component vector of uint)
+0:44              Constant:
+0:44                0 (const int)
+0:44          Constant:
+0:44            2 (const int)
+0:44        subgroupInclusiveMul ( temp 4-component vector of float)
+0:44          f: direct index for structure ( temp 4-component vector of float)
+0:44            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:44              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:44                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:44                Constant:
+0:44                  0 (const uint)
+0:44              direct index ( temp uint)
+0:44                'dti' ( in 3-component vector of uint)
+0:44                Constant:
+0:44                  0 (const int)
+0:44            Constant:
+0:44              2 (const int)
+0:45      move second child to first child ( temp float)
+0:45        direct index ( temp float)
+0:45          f: direct index for structure ( temp 4-component vector of float)
+0:45            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:45              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:45                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:45                Constant:
+0:45                  0 (const uint)
+0:45              direct index ( temp uint)
+0:45                'dti' ( in 3-component vector of uint)
+0:45                Constant:
+0:45                  0 (const int)
+0:45            Constant:
+0:45              2 (const int)
+0:45          Constant:
+0:45            0 (const int)
+0:45        subgroupInclusiveMul ( temp float)
+0:45          direct index ( temp float)
+0:45            f: direct index for structure ( temp 4-component vector of float)
+0:45              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:45                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:45                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:45                  Constant:
+0:45                    0 (const uint)
+0:45                direct index ( temp uint)
+0:45                  'dti' ( in 3-component vector of uint)
+0:45                  Constant:
+0:45                    0 (const int)
+0:45              Constant:
+0:45                2 (const int)
+0:45            Constant:
+0:45              0 (const int)
+0:46      move second child to first child ( temp 2-component vector of float)
+0:46        vector swizzle ( temp 2-component vector of float)
+0:46          f: direct index for structure ( temp 4-component vector of float)
+0:46            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:46              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:46                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:46                Constant:
+0:46                  0 (const uint)
+0:46              direct index ( temp uint)
+0:46                'dti' ( in 3-component vector of uint)
+0:46                Constant:
+0:46                  0 (const int)
+0:46            Constant:
+0:46              2 (const int)
+0:46          Sequence
+0:46            Constant:
+0:46              0 (const int)
+0:46            Constant:
+0:46              1 (const int)
+0:46        subgroupInclusiveMul ( temp 2-component vector of float)
+0:46          vector swizzle ( temp 2-component vector of float)
+0:46            f: direct index for structure ( temp 4-component vector of float)
+0:46              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:46                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:46                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:46                  Constant:
+0:46                    0 (const uint)
+0:46                direct index ( temp uint)
+0:46                  'dti' ( in 3-component vector of uint)
+0:46                  Constant:
+0:46                    0 (const int)
+0:46              Constant:
+0:46                2 (const int)
+0:46            Sequence
+0:46              Constant:
+0:46                0 (const int)
+0:46              Constant:
+0:46                1 (const int)
+0:47      move second child to first child ( temp 3-component vector of float)
+0:47        vector swizzle ( temp 3-component vector of float)
+0:47          f: direct index for structure ( temp 4-component vector of float)
+0:47            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:47              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:47                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:47                Constant:
+0:47                  0 (const uint)
+0:47              direct index ( temp uint)
+0:47                'dti' ( in 3-component vector of uint)
+0:47                Constant:
+0:47                  0 (const int)
+0:47            Constant:
+0:47              2 (const int)
+0:47          Sequence
+0:47            Constant:
+0:47              0 (const int)
+0:47            Constant:
+0:47              1 (const int)
+0:47            Constant:
+0:47              2 (const int)
+0:47        subgroupInclusiveMul ( temp 3-component vector of float)
+0:47          vector swizzle ( temp 3-component vector of float)
+0:47            f: direct index for structure ( temp 4-component vector of float)
+0:47              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:47                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:47                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:47                  Constant:
+0:47                    0 (const uint)
+0:47                direct index ( temp uint)
+0:47                  'dti' ( in 3-component vector of uint)
+0:47                  Constant:
+0:47                    0 (const int)
+0:47              Constant:
+0:47                2 (const int)
+0:47            Sequence
+0:47              Constant:
+0:47                0 (const int)
+0:47              Constant:
+0:47                1 (const int)
+0:47              Constant:
+0:47                2 (const int)
+0:49      move second child to first child ( temp 4-component vector of double)
+0:49        d: direct index for structure ( temp 4-component vector of double)
+0:49          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:49            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:49              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:49              Constant:
+0:49                0 (const uint)
+0:49            direct index ( temp uint)
+0:49              'dti' ( in 3-component vector of uint)
+0:49              Constant:
+0:49                0 (const int)
+0:49          Constant:
+0:49            3 (const int)
+0:49        subgroupInclusiveMul ( temp 4-component vector of double)
+0:49          d: direct index for structure ( temp 4-component vector of double)
+0:49            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:49              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:49                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:49                Constant:
+0:49                  0 (const uint)
+0:49              direct index ( temp uint)
+0:49                'dti' ( in 3-component vector of uint)
+0:49                Constant:
+0:49                  0 (const int)
+0:49            Constant:
+0:49              3 (const int)
+0:50      move second child to first child ( temp double)
+0:50        direct index ( temp double)
+0:50          d: direct index for structure ( temp 4-component vector of double)
+0:50            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:50              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:50                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:50                Constant:
+0:50                  0 (const uint)
+0:50              direct index ( temp uint)
+0:50                'dti' ( in 3-component vector of uint)
+0:50                Constant:
+0:50                  0 (const int)
+0:50            Constant:
+0:50              3 (const int)
+0:50          Constant:
+0:50            0 (const int)
+0:50        subgroupInclusiveMul ( temp double)
+0:50          direct index ( temp double)
+0:50            d: direct index for structure ( temp 4-component vector of double)
+0:50              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:50                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:50                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:50                  Constant:
+0:50                    0 (const uint)
+0:50                direct index ( temp uint)
+0:50                  'dti' ( in 3-component vector of uint)
+0:50                  Constant:
+0:50                    0 (const int)
+0:50              Constant:
+0:50                3 (const int)
+0:50            Constant:
+0:50              0 (const int)
+0:51      move second child to first child ( temp 2-component vector of double)
+0:51        vector swizzle ( temp 2-component vector of double)
+0:51          d: direct index for structure ( temp 4-component vector of double)
+0:51            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:51              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:51                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:51                Constant:
+0:51                  0 (const uint)
+0:51              direct index ( temp uint)
+0:51                'dti' ( in 3-component vector of uint)
+0:51                Constant:
+0:51                  0 (const int)
+0:51            Constant:
+0:51              3 (const int)
+0:51          Sequence
+0:51            Constant:
+0:51              0 (const int)
+0:51            Constant:
+0:51              1 (const int)
+0:51        subgroupInclusiveMul ( temp 2-component vector of double)
+0:51          vector swizzle ( temp 2-component vector of double)
+0:51            d: direct index for structure ( temp 4-component vector of double)
+0:51              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:51                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:51                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:51                  Constant:
+0:51                    0 (const uint)
+0:51                direct index ( temp uint)
+0:51                  'dti' ( in 3-component vector of uint)
+0:51                  Constant:
+0:51                    0 (const int)
+0:51              Constant:
+0:51                3 (const int)
+0:51            Sequence
+0:51              Constant:
+0:51                0 (const int)
+0:51              Constant:
+0:51                1 (const int)
+0:52      move second child to first child ( temp 3-component vector of double)
+0:52        vector swizzle ( temp 3-component vector of double)
+0:52          d: direct index for structure ( temp 4-component vector of double)
+0:52            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:52              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:52                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:52                Constant:
+0:52                  0 (const uint)
+0:52              direct index ( temp uint)
+0:52                'dti' ( in 3-component vector of uint)
+0:52                Constant:
+0:52                  0 (const int)
+0:52            Constant:
+0:52              3 (const int)
+0:52          Sequence
+0:52            Constant:
+0:52              0 (const int)
+0:52            Constant:
+0:52              1 (const int)
+0:52            Constant:
+0:52              2 (const int)
+0:52        subgroupInclusiveMul ( temp 3-component vector of double)
+0:52          vector swizzle ( temp 3-component vector of double)
+0:52            d: direct index for structure ( temp 4-component vector of double)
+0:52              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:52                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:52                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:52                  Constant:
+0:52                    0 (const uint)
+0:52                direct index ( temp uint)
+0:52                  'dti' ( in 3-component vector of uint)
+0:52                  Constant:
+0:52                    0 (const int)
+0:52              Constant:
+0:52                3 (const int)
+0:52            Sequence
+0:52              Constant:
+0:52                0 (const int)
+0:52              Constant:
+0:52                1 (const int)
+0:52              Constant:
+0:52                2 (const int)
+0:54      move second child to first child ( temp uint)
+0:54        direct index ( temp uint)
+0:54          u: direct index for structure ( temp 4-component vector of uint)
+0:54            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:54              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:54                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:54                Constant:
+0:54                  0 (const uint)
+0:54              direct index ( temp uint)
+0:54                'dti' ( in 3-component vector of uint)
+0:54                Constant:
+0:54                  0 (const int)
+0:54            Constant:
+0:54              0 (const int)
+0:54          Constant:
+0:54            0 (const int)
+0:54        subgroupBallotInclusiveBitCount ( temp uint)
+0:54          subgroupBallot ( temp 4-component vector of uint)
+0:54            Compare Equal ( temp bool)
+0:54              direct index ( temp uint)
+0:54                u: direct index for structure ( temp 4-component vector of uint)
+0:54                  indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:54                    @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:54                      'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:54                      Constant:
+0:54                        0 (const uint)
+0:54                    direct index ( temp uint)
+0:54                      'dti' ( in 3-component vector of uint)
+0:54                      Constant:
+0:54                        0 (const int)
+0:54                  Constant:
+0:54                    0 (const int)
+0:54                Constant:
+0:54                  0 (const int)
+0:54              Constant:
+0:54                0 (const uint)
+0:13  Function Definition: CSMain( ( temp void)
+0:13    Function Parameters: 
+0:?     Sequence
+0:13      move second child to first child ( temp 3-component vector of uint)
+0:?         'dti' ( temp 3-component vector of uint)
+0:?         'dti' ( in 3-component vector of uint GlobalInvocationID)
+0:13      Function Call: @CSMain(vu3; ( temp void)
+0:?         'dti' ( temp 3-component vector of uint)
+0:?   Linker Objects
+0:?     'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:?     'dti' ( in 3-component vector of uint GlobalInvocationID)
+
+// Module Version 10300
+// Generated by (magic number): 80006
+// Id's are bound by 369
+
+                              Capability Shader
+                              Capability Float64
+                              Capability GroupNonUniform
+                              Capability GroupNonUniformArithmetic
+                              Capability GroupNonUniformBallot
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "CSMain" 364
+                              ExecutionMode 4 LocalSize 32 16 1
+                              Source HLSL 500
+                              Name 4  "CSMain"
+                              Name 11  "@CSMain(vu3;"
+                              Name 10  "dti"
+                              Name 20  "Types"
+                              MemberName 20(Types) 0  "u"
+                              MemberName 20(Types) 1  "i"
+                              MemberName 20(Types) 2  "f"
+                              MemberName 20(Types) 3  "d"
+                              Name 22  "data"
+                              MemberName 22(data) 0  "@data"
+                              Name 24  "data"
+                              Name 362  "dti"
+                              Name 364  "dti"
+                              Name 366  "param"
+                              MemberDecorate 20(Types) 0 Offset 0
+                              MemberDecorate 20(Types) 1 Offset 16
+                              MemberDecorate 20(Types) 2 Offset 32
+                              MemberDecorate 20(Types) 3 Offset 64
+                              Decorate 21 ArrayStride 96
+                              MemberDecorate 22(data) 0 Offset 0
+                              Decorate 22(data) BufferBlock
+                              Decorate 24(data) DescriptorSet 0
+                              Decorate 364(dti) BuiltIn GlobalInvocationId
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypeVector 6(int) 3
+               8:             TypePointer Function 7(ivec3)
+               9:             TypeFunction 2 8(ptr)
+              13:             TypeVector 6(int) 4
+              14:             TypeInt 32 1
+              15:             TypeVector 14(int) 4
+              16:             TypeFloat 32
+              17:             TypeVector 16(float) 4
+              18:             TypeFloat 64
+              19:             TypeVector 18(float) 4
+       20(Types):             TypeStruct 13(ivec4) 15(ivec4) 17(fvec4) 19(fvec4)
+              21:             TypeRuntimeArray 20(Types)
+        22(data):             TypeStruct 21
+              23:             TypePointer Uniform 22(data)
+        24(data):     23(ptr) Variable Uniform
+              25:     14(int) Constant 0
+              26:      6(int) Constant 0
+              27:             TypePointer Function 6(int)
+              32:             TypePointer Uniform 13(ivec4)
+              35:      6(int) Constant 3
+              42:             TypePointer Uniform 6(int)
+              51:             TypeVector 6(int) 2
+              72:     14(int) Constant 1
+              75:             TypePointer Uniform 15(ivec4)
+              84:             TypePointer Uniform 14(int)
+              93:             TypeVector 14(int) 2
+             105:             TypeVector 14(int) 3
+             115:     14(int) Constant 2
+             118:             TypePointer Uniform 17(fvec4)
+             127:             TypePointer Uniform 16(float)
+             136:             TypeVector 16(float) 2
+             148:             TypeVector 16(float) 3
+             158:     14(int) Constant 3
+             161:             TypePointer Uniform 19(fvec4)
+             170:             TypePointer Uniform 18(float)
+             179:             TypeVector 18(float) 2
+             191:             TypeVector 18(float) 3
+             357:             TypeBool
+             363:             TypePointer Input 7(ivec3)
+        364(dti):    363(ptr) Variable Input
+       4(CSMain):           2 Function None 3
+               5:             Label
+        362(dti):      8(ptr) Variable Function
+      366(param):      8(ptr) Variable Function
+             365:    7(ivec3) Load 364(dti)
+                              Store 362(dti) 365
+             367:    7(ivec3) Load 362(dti)
+                              Store 366(param) 367
+             368:           2 FunctionCall 11(@CSMain(vu3;) 366(param)
+                              Return
+                              FunctionEnd
+11(@CSMain(vu3;):           2 Function None 9
+         10(dti):      8(ptr) FunctionParameter
+              12:             Label
+              28:     27(ptr) AccessChain 10(dti) 26
+              29:      6(int) Load 28
+              30:     27(ptr) AccessChain 10(dti) 26
+              31:      6(int) Load 30
+              33:     32(ptr) AccessChain 24(data) 25 31 25
+              34:   13(ivec4) Load 33
+              36:   13(ivec4) GroupNonUniformIAdd 35 InclusiveScan 34
+              37:     32(ptr) AccessChain 24(data) 25 29 25
+                              Store 37 36
+              38:     27(ptr) AccessChain 10(dti) 26
+              39:      6(int) Load 38
+              40:     27(ptr) AccessChain 10(dti) 26
+              41:      6(int) Load 40
+              43:     42(ptr) AccessChain 24(data) 25 41 25 26
+              44:      6(int) Load 43
+              45:      6(int) GroupNonUniformIAdd 35 InclusiveScan 44
+              46:     42(ptr) AccessChain 24(data) 25 39 25 26
+                              Store 46 45
+              47:     27(ptr) AccessChain 10(dti) 26
+              48:      6(int) Load 47
+              49:     27(ptr) AccessChain 10(dti) 26
+              50:      6(int) Load 49
+              52:     32(ptr) AccessChain 24(data) 25 50 25
+              53:   13(ivec4) Load 52
+              54:   51(ivec2) VectorShuffle 53 53 0 1
+              55:   51(ivec2) GroupNonUniformIAdd 35 InclusiveScan 54
+              56:     32(ptr) AccessChain 24(data) 25 48 25
+              57:   13(ivec4) Load 56
+              58:   13(ivec4) VectorShuffle 57 55 4 5 2 3
+                              Store 56 58
+              59:     27(ptr) AccessChain 10(dti) 26
+              60:      6(int) Load 59
+              61:     27(ptr) AccessChain 10(dti) 26
+              62:      6(int) Load 61
+              63:     32(ptr) AccessChain 24(data) 25 62 25
+              64:   13(ivec4) Load 63
+              65:    7(ivec3) VectorShuffle 64 64 0 1 2
+              66:    7(ivec3) GroupNonUniformIAdd 35 InclusiveScan 65
+              67:     32(ptr) AccessChain 24(data) 25 60 25
+              68:   13(ivec4) Load 67
+              69:   13(ivec4) VectorShuffle 68 66 4 5 6 3
+                              Store 67 69
+              70:     27(ptr) AccessChain 10(dti) 26
+              71:      6(int) Load 70
+              73:     27(ptr) AccessChain 10(dti) 26
+              74:      6(int) Load 73
+              76:     75(ptr) AccessChain 24(data) 25 74 72
+              77:   15(ivec4) Load 76
+              78:   15(ivec4) GroupNonUniformIAdd 35 InclusiveScan 77
+              79:     75(ptr) AccessChain 24(data) 25 71 72
+                              Store 79 78
+              80:     27(ptr) AccessChain 10(dti) 26
+              81:      6(int) Load 80
+              82:     27(ptr) AccessChain 10(dti) 26
+              83:      6(int) Load 82
+              85:     84(ptr) AccessChain 24(data) 25 83 72 26
+              86:     14(int) Load 85
+              87:     14(int) GroupNonUniformIAdd 35 InclusiveScan 86
+              88:     84(ptr) AccessChain 24(data) 25 81 72 26
+                              Store 88 87
+              89:     27(ptr) AccessChain 10(dti) 26
+              90:      6(int) Load 89
+              91:     27(ptr) AccessChain 10(dti) 26
+              92:      6(int) Load 91
+              94:     75(ptr) AccessChain 24(data) 25 92 72
+              95:   15(ivec4) Load 94
+              96:   93(ivec2) VectorShuffle 95 95 0 1
+              97:   93(ivec2) GroupNonUniformIAdd 35 InclusiveScan 96
+              98:     75(ptr) AccessChain 24(data) 25 90 72
+              99:   15(ivec4) Load 98
+             100:   15(ivec4) VectorShuffle 99 97 4 5 2 3
+                              Store 98 100
+             101:     27(ptr) AccessChain 10(dti) 26
+             102:      6(int) Load 101
+             103:     27(ptr) AccessChain 10(dti) 26
+             104:      6(int) Load 103
+             106:     75(ptr) AccessChain 24(data) 25 104 72
+             107:   15(ivec4) Load 106
+             108:  105(ivec3) VectorShuffle 107 107 0 1 2
+             109:  105(ivec3) GroupNonUniformIAdd 35 InclusiveScan 108
+             110:     75(ptr) AccessChain 24(data) 25 102 72
+             111:   15(ivec4) Load 110
+             112:   15(ivec4) VectorShuffle 111 109 4 5 6 3
+                              Store 110 112
+             113:     27(ptr) AccessChain 10(dti) 26
+             114:      6(int) Load 113
+             116:     27(ptr) AccessChain 10(dti) 26
+             117:      6(int) Load 116
+             119:    118(ptr) AccessChain 24(data) 25 117 115
+             120:   17(fvec4) Load 119
+             121:   17(fvec4) GroupNonUniformFAdd 35 InclusiveScan 120
+             122:    118(ptr) AccessChain 24(data) 25 114 115
+                              Store 122 121
+             123:     27(ptr) AccessChain 10(dti) 26
+             124:      6(int) Load 123
+             125:     27(ptr) AccessChain 10(dti) 26
+             126:      6(int) Load 125
+             128:    127(ptr) AccessChain 24(data) 25 126 115 26
+             129:   16(float) Load 128
+             130:   16(float) GroupNonUniformFAdd 35 InclusiveScan 129
+             131:    127(ptr) AccessChain 24(data) 25 124 115 26
+                              Store 131 130
+             132:     27(ptr) AccessChain 10(dti) 26
+             133:      6(int) Load 132
+             134:     27(ptr) AccessChain 10(dti) 26
+             135:      6(int) Load 134
+             137:    118(ptr) AccessChain 24(data) 25 135 115
+             138:   17(fvec4) Load 137
+             139:  136(fvec2) VectorShuffle 138 138 0 1
+             140:  136(fvec2) GroupNonUniformFAdd 35 InclusiveScan 139
+             141:    118(ptr) AccessChain 24(data) 25 133 115
+             142:   17(fvec4) Load 141
+             143:   17(fvec4) VectorShuffle 142 140 4 5 2 3
+                              Store 141 143
+             144:     27(ptr) AccessChain 10(dti) 26
+             145:      6(int) Load 144
+             146:     27(ptr) AccessChain 10(dti) 26
+             147:      6(int) Load 146
+             149:    118(ptr) AccessChain 24(data) 25 147 115
+             150:   17(fvec4) Load 149
+             151:  148(fvec3) VectorShuffle 150 150 0 1 2
+             152:  148(fvec3) GroupNonUniformFAdd 35 InclusiveScan 151
+             153:    118(ptr) AccessChain 24(data) 25 145 115
+             154:   17(fvec4) Load 153
+             155:   17(fvec4) VectorShuffle 154 152 4 5 6 3
+                              Store 153 155
+             156:     27(ptr) AccessChain 10(dti) 26
+             157:      6(int) Load 156
+             159:     27(ptr) AccessChain 10(dti) 26
+             160:      6(int) Load 159
+             162:    161(ptr) AccessChain 24(data) 25 160 158
+             163:   19(fvec4) Load 162
+             164:   19(fvec4) GroupNonUniformFAdd 35 InclusiveScan 163
+             165:    161(ptr) AccessChain 24(data) 25 157 158
+                              Store 165 164
+             166:     27(ptr) AccessChain 10(dti) 26
+             167:      6(int) Load 166
+             168:     27(ptr) AccessChain 10(dti) 26
+             169:      6(int) Load 168
+             171:    170(ptr) AccessChain 24(data) 25 169 158 26
+             172:   18(float) Load 171
+             173:   18(float) GroupNonUniformFAdd 35 InclusiveScan 172
+             174:    170(ptr) AccessChain 24(data) 25 167 158 26
+                              Store 174 173
+             175:     27(ptr) AccessChain 10(dti) 26
+             176:      6(int) Load 175
+             177:     27(ptr) AccessChain 10(dti) 26
+             178:      6(int) Load 177
+             180:    161(ptr) AccessChain 24(data) 25 178 158
+             181:   19(fvec4) Load 180
+             182:  179(fvec2) VectorShuffle 181 181 0 1
+             183:  179(fvec2) GroupNonUniformFAdd 35 InclusiveScan 182
+             184:    161(ptr) AccessChain 24(data) 25 176 158
+             185:   19(fvec4) Load 184
+             186:   19(fvec4) VectorShuffle 185 183 4 5 2 3
+                              Store 184 186
+             187:     27(ptr) AccessChain 10(dti) 26
+             188:      6(int) Load 187
+             189:     27(ptr) AccessChain 10(dti) 26
+             190:      6(int) Load 189
+             192:    161(ptr) AccessChain 24(data) 25 190 158
+             193:   19(fvec4) Load 192
+             194:  191(fvec3) VectorShuffle 193 193 0 1 2
+             195:  191(fvec3) GroupNonUniformFAdd 35 InclusiveScan 194
+             196:    161(ptr) AccessChain 24(data) 25 188 158
+             197:   19(fvec4) Load 196
+             198:   19(fvec4) VectorShuffle 197 195 4 5 6 3
+                              Store 196 198
+             199:     27(ptr) AccessChain 10(dti) 26
+             200:      6(int) Load 199
+             201:     27(ptr) AccessChain 10(dti) 26
+             202:      6(int) Load 201
+             203:     32(ptr) AccessChain 24(data) 25 202 25
+             204:   13(ivec4) Load 203
+             205:   13(ivec4) GroupNonUniformIMul 35 InclusiveScan 204
+             206:     32(ptr) AccessChain 24(data) 25 200 25
+                              Store 206 205
+             207:     27(ptr) AccessChain 10(dti) 26
+             208:      6(int) Load 207
+             209:     27(ptr) AccessChain 10(dti) 26
+             210:      6(int) Load 209
+             211:     42(ptr) AccessChain 24(data) 25 210 25 26
+             212:      6(int) Load 211
+             213:      6(int) GroupNonUniformIMul 35 InclusiveScan 212
+             214:     42(ptr) AccessChain 24(data) 25 208 25 26
+                              Store 214 213
+             215:     27(ptr) AccessChain 10(dti) 26
+             216:      6(int) Load 215
+             217:     27(ptr) AccessChain 10(dti) 26
+             218:      6(int) Load 217
+             219:     32(ptr) AccessChain 24(data) 25 218 25
+             220:   13(ivec4) Load 219
+             221:   51(ivec2) VectorShuffle 220 220 0 1
+             222:   51(ivec2) GroupNonUniformIMul 35 InclusiveScan 221
+             223:     32(ptr) AccessChain 24(data) 25 216 25
+             224:   13(ivec4) Load 223
+             225:   13(ivec4) VectorShuffle 224 222 4 5 2 3
+                              Store 223 225
+             226:     27(ptr) AccessChain 10(dti) 26
+             227:      6(int) Load 226
+             228:     27(ptr) AccessChain 10(dti) 26
+             229:      6(int) Load 228
+             230:     32(ptr) AccessChain 24(data) 25 229 25
+             231:   13(ivec4) Load 230
+             232:    7(ivec3) VectorShuffle 231 231 0 1 2
+             233:    7(ivec3) GroupNonUniformIMul 35 InclusiveScan 232
+             234:     32(ptr) AccessChain 24(data) 25 227 25
+             235:   13(ivec4) Load 234
+             236:   13(ivec4) VectorShuffle 235 233 4 5 6 3
+                              Store 234 236
+             237:     27(ptr) AccessChain 10(dti) 26
+             238:      6(int) Load 237
+             239:     27(ptr) AccessChain 10(dti) 26
+             240:      6(int) Load 239
+             241:     75(ptr) AccessChain 24(data) 25 240 72
+             242:   15(ivec4) Load 241
+             243:   15(ivec4) GroupNonUniformIMul 35 InclusiveScan 242
+             244:     75(ptr) AccessChain 24(data) 25 238 72
+                              Store 244 243
+             245:     27(ptr) AccessChain 10(dti) 26
+             246:      6(int) Load 245
+             247:     27(ptr) AccessChain 10(dti) 26
+             248:      6(int) Load 247
+             249:     84(ptr) AccessChain 24(data) 25 248 72 26
+             250:     14(int) Load 249
+             251:     14(int) GroupNonUniformIMul 35 InclusiveScan 250
+             252:     84(ptr) AccessChain 24(data) 25 246 72 26
+                              Store 252 251
+             253:     27(ptr) AccessChain 10(dti) 26
+             254:      6(int) Load 253
+             255:     27(ptr) AccessChain 10(dti) 26
+             256:      6(int) Load 255
+             257:     75(ptr) AccessChain 24(data) 25 256 72
+             258:   15(ivec4) Load 257
+             259:   93(ivec2) VectorShuffle 258 258 0 1
+             260:   93(ivec2) GroupNonUniformIMul 35 InclusiveScan 259
+             261:     75(ptr) AccessChain 24(data) 25 254 72
+             262:   15(ivec4) Load 261
+             263:   15(ivec4) VectorShuffle 262 260 4 5 2 3
+                              Store 261 263
+             264:     27(ptr) AccessChain 10(dti) 26
+             265:      6(int) Load 264
+             266:     27(ptr) AccessChain 10(dti) 26
+             267:      6(int) Load 266
+             268:     75(ptr) AccessChain 24(data) 25 267 72
+             269:   15(ivec4) Load 268
+             270:  105(ivec3) VectorShuffle 269 269 0 1 2
+             271:  105(ivec3) GroupNonUniformIMul 35 InclusiveScan 270
+             272:     75(ptr) AccessChain 24(data) 25 265 72
+             273:   15(ivec4) Load 272
+             274:   15(ivec4) VectorShuffle 273 271 4 5 6 3
+                              Store 272 274
+             275:     27(ptr) AccessChain 10(dti) 26
+             276:      6(int) Load 275
+             277:     27(ptr) AccessChain 10(dti) 26
+             278:      6(int) Load 277
+             279:    118(ptr) AccessChain 24(data) 25 278 115
+             280:   17(fvec4) Load 279
+             281:   17(fvec4) GroupNonUniformFMul 35 InclusiveScan 280
+             282:    118(ptr) AccessChain 24(data) 25 276 115
+                              Store 282 281
+             283:     27(ptr) AccessChain 10(dti) 26
+             284:      6(int) Load 283
+             285:     27(ptr) AccessChain 10(dti) 26
+             286:      6(int) Load 285
+             287:    127(ptr) AccessChain 24(data) 25 286 115 26
+             288:   16(float) Load 287
+             289:   16(float) GroupNonUniformFMul 35 InclusiveScan 288
+             290:    127(ptr) AccessChain 24(data) 25 284 115 26
+                              Store 290 289
+             291:     27(ptr) AccessChain 10(dti) 26
+             292:      6(int) Load 291
+             293:     27(ptr) AccessChain 10(dti) 26
+             294:      6(int) Load 293
+             295:    118(ptr) AccessChain 24(data) 25 294 115
+             296:   17(fvec4) Load 295
+             297:  136(fvec2) VectorShuffle 296 296 0 1
+             298:  136(fvec2) GroupNonUniformFMul 35 InclusiveScan 297
+             299:    118(ptr) AccessChain 24(data) 25 292 115
+             300:   17(fvec4) Load 299
+             301:   17(fvec4) VectorShuffle 300 298 4 5 2 3
+                              Store 299 301
+             302:     27(ptr) AccessChain 10(dti) 26
+             303:      6(int) Load 302
+             304:     27(ptr) AccessChain 10(dti) 26
+             305:      6(int) Load 304
+             306:    118(ptr) AccessChain 24(data) 25 305 115
+             307:   17(fvec4) Load 306
+             308:  148(fvec3) VectorShuffle 307 307 0 1 2
+             309:  148(fvec3) GroupNonUniformFMul 35 InclusiveScan 308
+             310:    118(ptr) AccessChain 24(data) 25 303 115
+             311:   17(fvec4) Load 310
+             312:   17(fvec4) VectorShuffle 311 309 4 5 6 3
+                              Store 310 312
+             313:     27(ptr) AccessChain 10(dti) 26
+             314:      6(int) Load 313
+             315:     27(ptr) AccessChain 10(dti) 26
+             316:      6(int) Load 315
+             317:    161(ptr) AccessChain 24(data) 25 316 158
+             318:   19(fvec4) Load 317
+             319:   19(fvec4) GroupNonUniformFMul 35 InclusiveScan 318
+             320:    161(ptr) AccessChain 24(data) 25 314 158
+                              Store 320 319
+             321:     27(ptr) AccessChain 10(dti) 26
+             322:      6(int) Load 321
+             323:     27(ptr) AccessChain 10(dti) 26
+             324:      6(int) Load 323
+             325:    170(ptr) AccessChain 24(data) 25 324 158 26
+             326:   18(float) Load 325
+             327:   18(float) GroupNonUniformFMul 35 InclusiveScan 326
+             328:    170(ptr) AccessChain 24(data) 25 322 158 26
+                              Store 328 327
+             329:     27(ptr) AccessChain 10(dti) 26
+             330:      6(int) Load 329
+             331:     27(ptr) AccessChain 10(dti) 26
+             332:      6(int) Load 331
+             333:    161(ptr) AccessChain 24(data) 25 332 158
+             334:   19(fvec4) Load 333
+             335:  179(fvec2) VectorShuffle 334 334 0 1
+             336:  179(fvec2) GroupNonUniformFMul 35 InclusiveScan 335
+             337:    161(ptr) AccessChain 24(data) 25 330 158
+             338:   19(fvec4) Load 337
+             339:   19(fvec4) VectorShuffle 338 336 4 5 2 3
+                              Store 337 339
+             340:     27(ptr) AccessChain 10(dti) 26
+             341:      6(int) Load 340
+             342:     27(ptr) AccessChain 10(dti) 26
+             343:      6(int) Load 342
+             344:    161(ptr) AccessChain 24(data) 25 343 158
+             345:   19(fvec4) Load 344
+             346:  191(fvec3) VectorShuffle 345 345 0 1 2
+             347:  191(fvec3) GroupNonUniformFMul 35 InclusiveScan 346
+             348:    161(ptr) AccessChain 24(data) 25 341 158
+             349:   19(fvec4) Load 348
+             350:   19(fvec4) VectorShuffle 349 347 4 5 6 3
+                              Store 348 350
+             351:     27(ptr) AccessChain 10(dti) 26
+             352:      6(int) Load 351
+             353:     27(ptr) AccessChain 10(dti) 26
+             354:      6(int) Load 353
+             355:     42(ptr) AccessChain 24(data) 25 354 25 26
+             356:      6(int) Load 355
+             358:   357(bool) IEqual 356 26
+             359:   13(ivec4) GroupNonUniformBallot 35 358
+             360:      6(int) GroupNonUniformBallotBitCount 35 InclusiveScan 359
+             361:     42(ptr) AccessChain 24(data) 25 352 25 26
+                              Store 361 360
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.wavequad.comp.out b/Test/baseResults/hlsl.wavequad.comp.out
new file mode 100644
index 0000000..5e6af59
--- /dev/null
+++ b/Test/baseResults/hlsl.wavequad.comp.out
@@ -0,0 +1,9299 @@
+hlsl.wavequad.comp
+Shader version: 500
+local_size = (32, 16, 1)
+0:? Sequence
+0:13  Function Definition: @CSMain(vu3; ( temp void)
+0:13    Function Parameters: 
+0:13      'dti' ( in 3-component vector of uint)
+0:?     Sequence
+0:14      move second child to first child ( temp 4-component vector of uint)
+0:14        u: direct index for structure ( temp 4-component vector of uint)
+0:14          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:14            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:14              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:14              Constant:
+0:14                0 (const uint)
+0:14            direct index ( temp uint)
+0:14              'dti' ( in 3-component vector of uint)
+0:14              Constant:
+0:14                0 (const int)
+0:14          Constant:
+0:14            0 (const int)
+0:14        subgroupQuadBroadcast ( temp 4-component vector of uint)
+0:14          u: direct index for structure ( temp 4-component vector of uint)
+0:14            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:14              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:14                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:14                Constant:
+0:14                  0 (const uint)
+0:14              direct index ( temp uint)
+0:14                'dti' ( in 3-component vector of uint)
+0:14                Constant:
+0:14                  0 (const int)
+0:14            Constant:
+0:14              0 (const int)
+0:14          Constant:
+0:14            0 (const uint)
+0:15      move second child to first child ( temp uint)
+0:15        direct index ( temp uint)
+0:15          u: direct index for structure ( temp 4-component vector of uint)
+0:15            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:15              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:15                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:15                Constant:
+0:15                  0 (const uint)
+0:15              direct index ( temp uint)
+0:15                'dti' ( in 3-component vector of uint)
+0:15                Constant:
+0:15                  0 (const int)
+0:15            Constant:
+0:15              0 (const int)
+0:15          Constant:
+0:15            0 (const int)
+0:15        subgroupQuadBroadcast ( temp uint)
+0:15          direct index ( temp uint)
+0:15            u: direct index for structure ( temp 4-component vector of uint)
+0:15              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:15                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:15                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:15                  Constant:
+0:15                    0 (const uint)
+0:15                direct index ( temp uint)
+0:15                  'dti' ( in 3-component vector of uint)
+0:15                  Constant:
+0:15                    0 (const int)
+0:15              Constant:
+0:15                0 (const int)
+0:15            Constant:
+0:15              0 (const int)
+0:15          Constant:
+0:15            0 (const uint)
+0:16      move second child to first child ( temp 2-component vector of uint)
+0:16        vector swizzle ( temp 2-component vector of uint)
+0:16          u: direct index for structure ( temp 4-component vector of uint)
+0:16            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:16              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:16                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:16                Constant:
+0:16                  0 (const uint)
+0:16              direct index ( temp uint)
+0:16                'dti' ( in 3-component vector of uint)
+0:16                Constant:
+0:16                  0 (const int)
+0:16            Constant:
+0:16              0 (const int)
+0:16          Sequence
+0:16            Constant:
+0:16              0 (const int)
+0:16            Constant:
+0:16              1 (const int)
+0:16        subgroupQuadBroadcast ( temp 2-component vector of uint)
+0:16          vector swizzle ( temp 2-component vector of uint)
+0:16            u: direct index for structure ( temp 4-component vector of uint)
+0:16              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:16                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:16                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:16                  Constant:
+0:16                    0 (const uint)
+0:16                direct index ( temp uint)
+0:16                  'dti' ( in 3-component vector of uint)
+0:16                  Constant:
+0:16                    0 (const int)
+0:16              Constant:
+0:16                0 (const int)
+0:16            Sequence
+0:16              Constant:
+0:16                0 (const int)
+0:16              Constant:
+0:16                1 (const int)
+0:16          Constant:
+0:16            0 (const uint)
+0:17      move second child to first child ( temp 3-component vector of uint)
+0:17        vector swizzle ( temp 3-component vector of uint)
+0:17          u: direct index for structure ( temp 4-component vector of uint)
+0:17            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:17              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:17                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:17                Constant:
+0:17                  0 (const uint)
+0:17              direct index ( temp uint)
+0:17                'dti' ( in 3-component vector of uint)
+0:17                Constant:
+0:17                  0 (const int)
+0:17            Constant:
+0:17              0 (const int)
+0:17          Sequence
+0:17            Constant:
+0:17              0 (const int)
+0:17            Constant:
+0:17              1 (const int)
+0:17            Constant:
+0:17              2 (const int)
+0:17        subgroupQuadBroadcast ( temp 3-component vector of uint)
+0:17          vector swizzle ( temp 3-component vector of uint)
+0:17            u: direct index for structure ( temp 4-component vector of uint)
+0:17              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:17                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:17                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:17                  Constant:
+0:17                    0 (const uint)
+0:17                direct index ( temp uint)
+0:17                  'dti' ( in 3-component vector of uint)
+0:17                  Constant:
+0:17                    0 (const int)
+0:17              Constant:
+0:17                0 (const int)
+0:17            Sequence
+0:17              Constant:
+0:17                0 (const int)
+0:17              Constant:
+0:17                1 (const int)
+0:17              Constant:
+0:17                2 (const int)
+0:17          Constant:
+0:17            0 (const uint)
+0:19      move second child to first child ( temp 4-component vector of int)
+0:19        i: direct index for structure ( temp 4-component vector of int)
+0:19          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:19            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:19              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:19              Constant:
+0:19                0 (const uint)
+0:19            direct index ( temp uint)
+0:19              'dti' ( in 3-component vector of uint)
+0:19              Constant:
+0:19                0 (const int)
+0:19          Constant:
+0:19            1 (const int)
+0:19        subgroupQuadBroadcast ( temp 4-component vector of int)
+0:19          i: direct index for structure ( temp 4-component vector of int)
+0:19            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:19              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:19                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:19                Constant:
+0:19                  0 (const uint)
+0:19              direct index ( temp uint)
+0:19                'dti' ( in 3-component vector of uint)
+0:19                Constant:
+0:19                  0 (const int)
+0:19            Constant:
+0:19              1 (const int)
+0:19          Constant:
+0:19            0 (const uint)
+0:20      move second child to first child ( temp int)
+0:20        direct index ( temp int)
+0:20          i: direct index for structure ( temp 4-component vector of int)
+0:20            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:20              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:20                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:20                Constant:
+0:20                  0 (const uint)
+0:20              direct index ( temp uint)
+0:20                'dti' ( in 3-component vector of uint)
+0:20                Constant:
+0:20                  0 (const int)
+0:20            Constant:
+0:20              1 (const int)
+0:20          Constant:
+0:20            0 (const int)
+0:20        subgroupQuadBroadcast ( temp int)
+0:20          direct index ( temp int)
+0:20            i: direct index for structure ( temp 4-component vector of int)
+0:20              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:20                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:20                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:20                  Constant:
+0:20                    0 (const uint)
+0:20                direct index ( temp uint)
+0:20                  'dti' ( in 3-component vector of uint)
+0:20                  Constant:
+0:20                    0 (const int)
+0:20              Constant:
+0:20                1 (const int)
+0:20            Constant:
+0:20              0 (const int)
+0:20          Constant:
+0:20            0 (const uint)
+0:21      move second child to first child ( temp 2-component vector of int)
+0:21        vector swizzle ( temp 2-component vector of int)
+0:21          i: direct index for structure ( temp 4-component vector of int)
+0:21            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:21              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:21                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:21                Constant:
+0:21                  0 (const uint)
+0:21              direct index ( temp uint)
+0:21                'dti' ( in 3-component vector of uint)
+0:21                Constant:
+0:21                  0 (const int)
+0:21            Constant:
+0:21              1 (const int)
+0:21          Sequence
+0:21            Constant:
+0:21              0 (const int)
+0:21            Constant:
+0:21              1 (const int)
+0:21        subgroupQuadBroadcast ( temp 2-component vector of int)
+0:21          vector swizzle ( temp 2-component vector of int)
+0:21            i: direct index for structure ( temp 4-component vector of int)
+0:21              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:21                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:21                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:21                  Constant:
+0:21                    0 (const uint)
+0:21                direct index ( temp uint)
+0:21                  'dti' ( in 3-component vector of uint)
+0:21                  Constant:
+0:21                    0 (const int)
+0:21              Constant:
+0:21                1 (const int)
+0:21            Sequence
+0:21              Constant:
+0:21                0 (const int)
+0:21              Constant:
+0:21                1 (const int)
+0:21          Constant:
+0:21            0 (const uint)
+0:22      move second child to first child ( temp 3-component vector of int)
+0:22        vector swizzle ( temp 3-component vector of int)
+0:22          i: direct index for structure ( temp 4-component vector of int)
+0:22            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:22              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:22                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:22                Constant:
+0:22                  0 (const uint)
+0:22              direct index ( temp uint)
+0:22                'dti' ( in 3-component vector of uint)
+0:22                Constant:
+0:22                  0 (const int)
+0:22            Constant:
+0:22              1 (const int)
+0:22          Sequence
+0:22            Constant:
+0:22              0 (const int)
+0:22            Constant:
+0:22              1 (const int)
+0:22            Constant:
+0:22              2 (const int)
+0:22        subgroupQuadBroadcast ( temp 3-component vector of int)
+0:22          vector swizzle ( temp 3-component vector of int)
+0:22            i: direct index for structure ( temp 4-component vector of int)
+0:22              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:22                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:22                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:22                  Constant:
+0:22                    0 (const uint)
+0:22                direct index ( temp uint)
+0:22                  'dti' ( in 3-component vector of uint)
+0:22                  Constant:
+0:22                    0 (const int)
+0:22              Constant:
+0:22                1 (const int)
+0:22            Sequence
+0:22              Constant:
+0:22                0 (const int)
+0:22              Constant:
+0:22                1 (const int)
+0:22              Constant:
+0:22                2 (const int)
+0:22          Constant:
+0:22            0 (const uint)
+0:24      move second child to first child ( temp 4-component vector of float)
+0:24        f: direct index for structure ( temp 4-component vector of float)
+0:24          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:24            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:24              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:24              Constant:
+0:24                0 (const uint)
+0:24            direct index ( temp uint)
+0:24              'dti' ( in 3-component vector of uint)
+0:24              Constant:
+0:24                0 (const int)
+0:24          Constant:
+0:24            2 (const int)
+0:24        subgroupQuadBroadcast ( temp 4-component vector of float)
+0:24          f: direct index for structure ( temp 4-component vector of float)
+0:24            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:24              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:24                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:24                Constant:
+0:24                  0 (const uint)
+0:24              direct index ( temp uint)
+0:24                'dti' ( in 3-component vector of uint)
+0:24                Constant:
+0:24                  0 (const int)
+0:24            Constant:
+0:24              2 (const int)
+0:24          Constant:
+0:24            0 (const uint)
+0:25      move second child to first child ( temp float)
+0:25        direct index ( temp float)
+0:25          f: direct index for structure ( temp 4-component vector of float)
+0:25            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:25              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:25                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:25                Constant:
+0:25                  0 (const uint)
+0:25              direct index ( temp uint)
+0:25                'dti' ( in 3-component vector of uint)
+0:25                Constant:
+0:25                  0 (const int)
+0:25            Constant:
+0:25              2 (const int)
+0:25          Constant:
+0:25            0 (const int)
+0:25        subgroupQuadBroadcast ( temp float)
+0:25          direct index ( temp float)
+0:25            f: direct index for structure ( temp 4-component vector of float)
+0:25              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:25                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:25                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:25                  Constant:
+0:25                    0 (const uint)
+0:25                direct index ( temp uint)
+0:25                  'dti' ( in 3-component vector of uint)
+0:25                  Constant:
+0:25                    0 (const int)
+0:25              Constant:
+0:25                2 (const int)
+0:25            Constant:
+0:25              0 (const int)
+0:25          Constant:
+0:25            0 (const uint)
+0:26      move second child to first child ( temp 2-component vector of float)
+0:26        vector swizzle ( temp 2-component vector of float)
+0:26          f: direct index for structure ( temp 4-component vector of float)
+0:26            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:26              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:26                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:26                Constant:
+0:26                  0 (const uint)
+0:26              direct index ( temp uint)
+0:26                'dti' ( in 3-component vector of uint)
+0:26                Constant:
+0:26                  0 (const int)
+0:26            Constant:
+0:26              2 (const int)
+0:26          Sequence
+0:26            Constant:
+0:26              0 (const int)
+0:26            Constant:
+0:26              1 (const int)
+0:26        subgroupQuadBroadcast ( temp 2-component vector of float)
+0:26          vector swizzle ( temp 2-component vector of float)
+0:26            f: direct index for structure ( temp 4-component vector of float)
+0:26              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:26                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:26                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:26                  Constant:
+0:26                    0 (const uint)
+0:26                direct index ( temp uint)
+0:26                  'dti' ( in 3-component vector of uint)
+0:26                  Constant:
+0:26                    0 (const int)
+0:26              Constant:
+0:26                2 (const int)
+0:26            Sequence
+0:26              Constant:
+0:26                0 (const int)
+0:26              Constant:
+0:26                1 (const int)
+0:26          Constant:
+0:26            0 (const uint)
+0:27      move second child to first child ( temp 3-component vector of float)
+0:27        vector swizzle ( temp 3-component vector of float)
+0:27          f: direct index for structure ( temp 4-component vector of float)
+0:27            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:27              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:27                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:27                Constant:
+0:27                  0 (const uint)
+0:27              direct index ( temp uint)
+0:27                'dti' ( in 3-component vector of uint)
+0:27                Constant:
+0:27                  0 (const int)
+0:27            Constant:
+0:27              2 (const int)
+0:27          Sequence
+0:27            Constant:
+0:27              0 (const int)
+0:27            Constant:
+0:27              1 (const int)
+0:27            Constant:
+0:27              2 (const int)
+0:27        subgroupQuadBroadcast ( temp 3-component vector of float)
+0:27          vector swizzle ( temp 3-component vector of float)
+0:27            f: direct index for structure ( temp 4-component vector of float)
+0:27              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:27                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:27                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:27                  Constant:
+0:27                    0 (const uint)
+0:27                direct index ( temp uint)
+0:27                  'dti' ( in 3-component vector of uint)
+0:27                  Constant:
+0:27                    0 (const int)
+0:27              Constant:
+0:27                2 (const int)
+0:27            Sequence
+0:27              Constant:
+0:27                0 (const int)
+0:27              Constant:
+0:27                1 (const int)
+0:27              Constant:
+0:27                2 (const int)
+0:27          Constant:
+0:27            0 (const uint)
+0:29      move second child to first child ( temp 4-component vector of double)
+0:29        d: direct index for structure ( temp 4-component vector of double)
+0:29          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:29            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:29              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:29              Constant:
+0:29                0 (const uint)
+0:29            direct index ( temp uint)
+0:29              'dti' ( in 3-component vector of uint)
+0:29              Constant:
+0:29                0 (const int)
+0:29          Constant:
+0:29            3 (const int)
+0:29        subgroupQuadBroadcast ( temp 4-component vector of double)
+0:29          d: direct index for structure ( temp 4-component vector of double)
+0:29            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:29              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:29                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:29                Constant:
+0:29                  0 (const uint)
+0:29              direct index ( temp uint)
+0:29                'dti' ( in 3-component vector of uint)
+0:29                Constant:
+0:29                  0 (const int)
+0:29            Constant:
+0:29              3 (const int)
+0:29          Constant:
+0:29            0 (const uint)
+0:30      move second child to first child ( temp double)
+0:30        direct index ( temp double)
+0:30          d: direct index for structure ( temp 4-component vector of double)
+0:30            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:30              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:30                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:30                Constant:
+0:30                  0 (const uint)
+0:30              direct index ( temp uint)
+0:30                'dti' ( in 3-component vector of uint)
+0:30                Constant:
+0:30                  0 (const int)
+0:30            Constant:
+0:30              3 (const int)
+0:30          Constant:
+0:30            0 (const int)
+0:30        subgroupQuadBroadcast ( temp double)
+0:30          direct index ( temp double)
+0:30            d: direct index for structure ( temp 4-component vector of double)
+0:30              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:30                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:30                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:30                  Constant:
+0:30                    0 (const uint)
+0:30                direct index ( temp uint)
+0:30                  'dti' ( in 3-component vector of uint)
+0:30                  Constant:
+0:30                    0 (const int)
+0:30              Constant:
+0:30                3 (const int)
+0:30            Constant:
+0:30              0 (const int)
+0:30          Constant:
+0:30            0 (const uint)
+0:31      move second child to first child ( temp 2-component vector of double)
+0:31        vector swizzle ( temp 2-component vector of double)
+0:31          d: direct index for structure ( temp 4-component vector of double)
+0:31            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:31              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:31                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:31                Constant:
+0:31                  0 (const uint)
+0:31              direct index ( temp uint)
+0:31                'dti' ( in 3-component vector of uint)
+0:31                Constant:
+0:31                  0 (const int)
+0:31            Constant:
+0:31              3 (const int)
+0:31          Sequence
+0:31            Constant:
+0:31              0 (const int)
+0:31            Constant:
+0:31              1 (const int)
+0:31        subgroupQuadBroadcast ( temp 2-component vector of double)
+0:31          vector swizzle ( temp 2-component vector of double)
+0:31            d: direct index for structure ( temp 4-component vector of double)
+0:31              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:31                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:31                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:31                  Constant:
+0:31                    0 (const uint)
+0:31                direct index ( temp uint)
+0:31                  'dti' ( in 3-component vector of uint)
+0:31                  Constant:
+0:31                    0 (const int)
+0:31              Constant:
+0:31                3 (const int)
+0:31            Sequence
+0:31              Constant:
+0:31                0 (const int)
+0:31              Constant:
+0:31                1 (const int)
+0:31          Constant:
+0:31            0 (const uint)
+0:32      move second child to first child ( temp 3-component vector of double)
+0:32        vector swizzle ( temp 3-component vector of double)
+0:32          d: direct index for structure ( temp 4-component vector of double)
+0:32            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:32              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:32                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:32                Constant:
+0:32                  0 (const uint)
+0:32              direct index ( temp uint)
+0:32                'dti' ( in 3-component vector of uint)
+0:32                Constant:
+0:32                  0 (const int)
+0:32            Constant:
+0:32              3 (const int)
+0:32          Sequence
+0:32            Constant:
+0:32              0 (const int)
+0:32            Constant:
+0:32              1 (const int)
+0:32            Constant:
+0:32              2 (const int)
+0:32        subgroupQuadBroadcast ( temp 3-component vector of double)
+0:32          vector swizzle ( temp 3-component vector of double)
+0:32            d: direct index for structure ( temp 4-component vector of double)
+0:32              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:32                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:32                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:32                  Constant:
+0:32                    0 (const uint)
+0:32                direct index ( temp uint)
+0:32                  'dti' ( in 3-component vector of uint)
+0:32                  Constant:
+0:32                    0 (const int)
+0:32              Constant:
+0:32                3 (const int)
+0:32            Sequence
+0:32              Constant:
+0:32                0 (const int)
+0:32              Constant:
+0:32                1 (const int)
+0:32              Constant:
+0:32                2 (const int)
+0:32          Constant:
+0:32            0 (const uint)
+0:34      move second child to first child ( temp 4-component vector of uint)
+0:34        u: direct index for structure ( temp 4-component vector of uint)
+0:34          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:34            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:34              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:34              Constant:
+0:34                0 (const uint)
+0:34            direct index ( temp uint)
+0:34              'dti' ( in 3-component vector of uint)
+0:34              Constant:
+0:34                0 (const int)
+0:34          Constant:
+0:34            0 (const int)
+0:34        subgroupQuadBroadcast ( temp 4-component vector of uint)
+0:34          u: direct index for structure ( temp 4-component vector of uint)
+0:34            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:34              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:34                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:34                Constant:
+0:34                  0 (const uint)
+0:34              direct index ( temp uint)
+0:34                'dti' ( in 3-component vector of uint)
+0:34                Constant:
+0:34                  0 (const int)
+0:34            Constant:
+0:34              0 (const int)
+0:34          Constant:
+0:34            1 (const uint)
+0:35      move second child to first child ( temp uint)
+0:35        direct index ( temp uint)
+0:35          u: direct index for structure ( temp 4-component vector of uint)
+0:35            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:35              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:35                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:35                Constant:
+0:35                  0 (const uint)
+0:35              direct index ( temp uint)
+0:35                'dti' ( in 3-component vector of uint)
+0:35                Constant:
+0:35                  0 (const int)
+0:35            Constant:
+0:35              0 (const int)
+0:35          Constant:
+0:35            0 (const int)
+0:35        subgroupQuadBroadcast ( temp uint)
+0:35          direct index ( temp uint)
+0:35            u: direct index for structure ( temp 4-component vector of uint)
+0:35              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:35                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:35                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:35                  Constant:
+0:35                    0 (const uint)
+0:35                direct index ( temp uint)
+0:35                  'dti' ( in 3-component vector of uint)
+0:35                  Constant:
+0:35                    0 (const int)
+0:35              Constant:
+0:35                0 (const int)
+0:35            Constant:
+0:35              0 (const int)
+0:35          Constant:
+0:35            1 (const uint)
+0:36      move second child to first child ( temp 2-component vector of uint)
+0:36        vector swizzle ( temp 2-component vector of uint)
+0:36          u: direct index for structure ( temp 4-component vector of uint)
+0:36            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:36              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:36                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:36                Constant:
+0:36                  0 (const uint)
+0:36              direct index ( temp uint)
+0:36                'dti' ( in 3-component vector of uint)
+0:36                Constant:
+0:36                  0 (const int)
+0:36            Constant:
+0:36              0 (const int)
+0:36          Sequence
+0:36            Constant:
+0:36              0 (const int)
+0:36            Constant:
+0:36              1 (const int)
+0:36        subgroupQuadBroadcast ( temp 2-component vector of uint)
+0:36          vector swizzle ( temp 2-component vector of uint)
+0:36            u: direct index for structure ( temp 4-component vector of uint)
+0:36              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:36                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:36                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:36                  Constant:
+0:36                    0 (const uint)
+0:36                direct index ( temp uint)
+0:36                  'dti' ( in 3-component vector of uint)
+0:36                  Constant:
+0:36                    0 (const int)
+0:36              Constant:
+0:36                0 (const int)
+0:36            Sequence
+0:36              Constant:
+0:36                0 (const int)
+0:36              Constant:
+0:36                1 (const int)
+0:36          Constant:
+0:36            1 (const uint)
+0:37      move second child to first child ( temp 3-component vector of uint)
+0:37        vector swizzle ( temp 3-component vector of uint)
+0:37          u: direct index for structure ( temp 4-component vector of uint)
+0:37            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:37              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:37                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:37                Constant:
+0:37                  0 (const uint)
+0:37              direct index ( temp uint)
+0:37                'dti' ( in 3-component vector of uint)
+0:37                Constant:
+0:37                  0 (const int)
+0:37            Constant:
+0:37              0 (const int)
+0:37          Sequence
+0:37            Constant:
+0:37              0 (const int)
+0:37            Constant:
+0:37              1 (const int)
+0:37            Constant:
+0:37              2 (const int)
+0:37        subgroupQuadBroadcast ( temp 3-component vector of uint)
+0:37          vector swizzle ( temp 3-component vector of uint)
+0:37            u: direct index for structure ( temp 4-component vector of uint)
+0:37              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:37                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:37                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:37                  Constant:
+0:37                    0 (const uint)
+0:37                direct index ( temp uint)
+0:37                  'dti' ( in 3-component vector of uint)
+0:37                  Constant:
+0:37                    0 (const int)
+0:37              Constant:
+0:37                0 (const int)
+0:37            Sequence
+0:37              Constant:
+0:37                0 (const int)
+0:37              Constant:
+0:37                1 (const int)
+0:37              Constant:
+0:37                2 (const int)
+0:37          Constant:
+0:37            1 (const uint)
+0:39      move second child to first child ( temp 4-component vector of int)
+0:39        i: direct index for structure ( temp 4-component vector of int)
+0:39          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:39            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:39              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:39              Constant:
+0:39                0 (const uint)
+0:39            direct index ( temp uint)
+0:39              'dti' ( in 3-component vector of uint)
+0:39              Constant:
+0:39                0 (const int)
+0:39          Constant:
+0:39            1 (const int)
+0:39        subgroupQuadBroadcast ( temp 4-component vector of int)
+0:39          i: direct index for structure ( temp 4-component vector of int)
+0:39            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:39              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:39                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:39                Constant:
+0:39                  0 (const uint)
+0:39              direct index ( temp uint)
+0:39                'dti' ( in 3-component vector of uint)
+0:39                Constant:
+0:39                  0 (const int)
+0:39            Constant:
+0:39              1 (const int)
+0:39          Constant:
+0:39            1 (const uint)
+0:40      move second child to first child ( temp int)
+0:40        direct index ( temp int)
+0:40          i: direct index for structure ( temp 4-component vector of int)
+0:40            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:40              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:40                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:40                Constant:
+0:40                  0 (const uint)
+0:40              direct index ( temp uint)
+0:40                'dti' ( in 3-component vector of uint)
+0:40                Constant:
+0:40                  0 (const int)
+0:40            Constant:
+0:40              1 (const int)
+0:40          Constant:
+0:40            0 (const int)
+0:40        subgroupQuadBroadcast ( temp int)
+0:40          direct index ( temp int)
+0:40            i: direct index for structure ( temp 4-component vector of int)
+0:40              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:40                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:40                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:40                  Constant:
+0:40                    0 (const uint)
+0:40                direct index ( temp uint)
+0:40                  'dti' ( in 3-component vector of uint)
+0:40                  Constant:
+0:40                    0 (const int)
+0:40              Constant:
+0:40                1 (const int)
+0:40            Constant:
+0:40              0 (const int)
+0:40          Constant:
+0:40            1 (const uint)
+0:41      move second child to first child ( temp 2-component vector of int)
+0:41        vector swizzle ( temp 2-component vector of int)
+0:41          i: direct index for structure ( temp 4-component vector of int)
+0:41            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:41              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:41                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:41                Constant:
+0:41                  0 (const uint)
+0:41              direct index ( temp uint)
+0:41                'dti' ( in 3-component vector of uint)
+0:41                Constant:
+0:41                  0 (const int)
+0:41            Constant:
+0:41              1 (const int)
+0:41          Sequence
+0:41            Constant:
+0:41              0 (const int)
+0:41            Constant:
+0:41              1 (const int)
+0:41        subgroupQuadBroadcast ( temp 2-component vector of int)
+0:41          vector swizzle ( temp 2-component vector of int)
+0:41            i: direct index for structure ( temp 4-component vector of int)
+0:41              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:41                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:41                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:41                  Constant:
+0:41                    0 (const uint)
+0:41                direct index ( temp uint)
+0:41                  'dti' ( in 3-component vector of uint)
+0:41                  Constant:
+0:41                    0 (const int)
+0:41              Constant:
+0:41                1 (const int)
+0:41            Sequence
+0:41              Constant:
+0:41                0 (const int)
+0:41              Constant:
+0:41                1 (const int)
+0:41          Constant:
+0:41            1 (const uint)
+0:42      move second child to first child ( temp 3-component vector of int)
+0:42        vector swizzle ( temp 3-component vector of int)
+0:42          i: direct index for structure ( temp 4-component vector of int)
+0:42            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:42              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:42                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:42                Constant:
+0:42                  0 (const uint)
+0:42              direct index ( temp uint)
+0:42                'dti' ( in 3-component vector of uint)
+0:42                Constant:
+0:42                  0 (const int)
+0:42            Constant:
+0:42              1 (const int)
+0:42          Sequence
+0:42            Constant:
+0:42              0 (const int)
+0:42            Constant:
+0:42              1 (const int)
+0:42            Constant:
+0:42              2 (const int)
+0:42        subgroupQuadBroadcast ( temp 3-component vector of int)
+0:42          vector swizzle ( temp 3-component vector of int)
+0:42            i: direct index for structure ( temp 4-component vector of int)
+0:42              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:42                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:42                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:42                  Constant:
+0:42                    0 (const uint)
+0:42                direct index ( temp uint)
+0:42                  'dti' ( in 3-component vector of uint)
+0:42                  Constant:
+0:42                    0 (const int)
+0:42              Constant:
+0:42                1 (const int)
+0:42            Sequence
+0:42              Constant:
+0:42                0 (const int)
+0:42              Constant:
+0:42                1 (const int)
+0:42              Constant:
+0:42                2 (const int)
+0:42          Constant:
+0:42            1 (const uint)
+0:44      move second child to first child ( temp 4-component vector of float)
+0:44        f: direct index for structure ( temp 4-component vector of float)
+0:44          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:44            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:44              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:44              Constant:
+0:44                0 (const uint)
+0:44            direct index ( temp uint)
+0:44              'dti' ( in 3-component vector of uint)
+0:44              Constant:
+0:44                0 (const int)
+0:44          Constant:
+0:44            2 (const int)
+0:44        subgroupQuadBroadcast ( temp 4-component vector of float)
+0:44          f: direct index for structure ( temp 4-component vector of float)
+0:44            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:44              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:44                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:44                Constant:
+0:44                  0 (const uint)
+0:44              direct index ( temp uint)
+0:44                'dti' ( in 3-component vector of uint)
+0:44                Constant:
+0:44                  0 (const int)
+0:44            Constant:
+0:44              2 (const int)
+0:44          Constant:
+0:44            1 (const uint)
+0:45      move second child to first child ( temp float)
+0:45        direct index ( temp float)
+0:45          f: direct index for structure ( temp 4-component vector of float)
+0:45            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:45              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:45                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:45                Constant:
+0:45                  0 (const uint)
+0:45              direct index ( temp uint)
+0:45                'dti' ( in 3-component vector of uint)
+0:45                Constant:
+0:45                  0 (const int)
+0:45            Constant:
+0:45              2 (const int)
+0:45          Constant:
+0:45            0 (const int)
+0:45        subgroupQuadBroadcast ( temp float)
+0:45          direct index ( temp float)
+0:45            f: direct index for structure ( temp 4-component vector of float)
+0:45              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:45                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:45                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:45                  Constant:
+0:45                    0 (const uint)
+0:45                direct index ( temp uint)
+0:45                  'dti' ( in 3-component vector of uint)
+0:45                  Constant:
+0:45                    0 (const int)
+0:45              Constant:
+0:45                2 (const int)
+0:45            Constant:
+0:45              0 (const int)
+0:45          Constant:
+0:45            1 (const uint)
+0:46      move second child to first child ( temp 2-component vector of float)
+0:46        vector swizzle ( temp 2-component vector of float)
+0:46          f: direct index for structure ( temp 4-component vector of float)
+0:46            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:46              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:46                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:46                Constant:
+0:46                  0 (const uint)
+0:46              direct index ( temp uint)
+0:46                'dti' ( in 3-component vector of uint)
+0:46                Constant:
+0:46                  0 (const int)
+0:46            Constant:
+0:46              2 (const int)
+0:46          Sequence
+0:46            Constant:
+0:46              0 (const int)
+0:46            Constant:
+0:46              1 (const int)
+0:46        subgroupQuadBroadcast ( temp 2-component vector of float)
+0:46          vector swizzle ( temp 2-component vector of float)
+0:46            f: direct index for structure ( temp 4-component vector of float)
+0:46              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:46                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:46                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:46                  Constant:
+0:46                    0 (const uint)
+0:46                direct index ( temp uint)
+0:46                  'dti' ( in 3-component vector of uint)
+0:46                  Constant:
+0:46                    0 (const int)
+0:46              Constant:
+0:46                2 (const int)
+0:46            Sequence
+0:46              Constant:
+0:46                0 (const int)
+0:46              Constant:
+0:46                1 (const int)
+0:46          Constant:
+0:46            1 (const uint)
+0:47      move second child to first child ( temp 3-component vector of float)
+0:47        vector swizzle ( temp 3-component vector of float)
+0:47          f: direct index for structure ( temp 4-component vector of float)
+0:47            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:47              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:47                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:47                Constant:
+0:47                  0 (const uint)
+0:47              direct index ( temp uint)
+0:47                'dti' ( in 3-component vector of uint)
+0:47                Constant:
+0:47                  0 (const int)
+0:47            Constant:
+0:47              2 (const int)
+0:47          Sequence
+0:47            Constant:
+0:47              0 (const int)
+0:47            Constant:
+0:47              1 (const int)
+0:47            Constant:
+0:47              2 (const int)
+0:47        subgroupQuadBroadcast ( temp 3-component vector of float)
+0:47          vector swizzle ( temp 3-component vector of float)
+0:47            f: direct index for structure ( temp 4-component vector of float)
+0:47              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:47                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:47                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:47                  Constant:
+0:47                    0 (const uint)
+0:47                direct index ( temp uint)
+0:47                  'dti' ( in 3-component vector of uint)
+0:47                  Constant:
+0:47                    0 (const int)
+0:47              Constant:
+0:47                2 (const int)
+0:47            Sequence
+0:47              Constant:
+0:47                0 (const int)
+0:47              Constant:
+0:47                1 (const int)
+0:47              Constant:
+0:47                2 (const int)
+0:47          Constant:
+0:47            1 (const uint)
+0:49      move second child to first child ( temp 4-component vector of double)
+0:49        d: direct index for structure ( temp 4-component vector of double)
+0:49          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:49            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:49              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:49              Constant:
+0:49                0 (const uint)
+0:49            direct index ( temp uint)
+0:49              'dti' ( in 3-component vector of uint)
+0:49              Constant:
+0:49                0 (const int)
+0:49          Constant:
+0:49            3 (const int)
+0:49        subgroupQuadBroadcast ( temp 4-component vector of double)
+0:49          d: direct index for structure ( temp 4-component vector of double)
+0:49            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:49              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:49                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:49                Constant:
+0:49                  0 (const uint)
+0:49              direct index ( temp uint)
+0:49                'dti' ( in 3-component vector of uint)
+0:49                Constant:
+0:49                  0 (const int)
+0:49            Constant:
+0:49              3 (const int)
+0:49          Constant:
+0:49            1 (const uint)
+0:50      move second child to first child ( temp double)
+0:50        direct index ( temp double)
+0:50          d: direct index for structure ( temp 4-component vector of double)
+0:50            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:50              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:50                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:50                Constant:
+0:50                  0 (const uint)
+0:50              direct index ( temp uint)
+0:50                'dti' ( in 3-component vector of uint)
+0:50                Constant:
+0:50                  0 (const int)
+0:50            Constant:
+0:50              3 (const int)
+0:50          Constant:
+0:50            0 (const int)
+0:50        subgroupQuadBroadcast ( temp double)
+0:50          direct index ( temp double)
+0:50            d: direct index for structure ( temp 4-component vector of double)
+0:50              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:50                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:50                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:50                  Constant:
+0:50                    0 (const uint)
+0:50                direct index ( temp uint)
+0:50                  'dti' ( in 3-component vector of uint)
+0:50                  Constant:
+0:50                    0 (const int)
+0:50              Constant:
+0:50                3 (const int)
+0:50            Constant:
+0:50              0 (const int)
+0:50          Constant:
+0:50            1 (const uint)
+0:51      move second child to first child ( temp 2-component vector of double)
+0:51        vector swizzle ( temp 2-component vector of double)
+0:51          d: direct index for structure ( temp 4-component vector of double)
+0:51            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:51              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:51                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:51                Constant:
+0:51                  0 (const uint)
+0:51              direct index ( temp uint)
+0:51                'dti' ( in 3-component vector of uint)
+0:51                Constant:
+0:51                  0 (const int)
+0:51            Constant:
+0:51              3 (const int)
+0:51          Sequence
+0:51            Constant:
+0:51              0 (const int)
+0:51            Constant:
+0:51              1 (const int)
+0:51        subgroupQuadBroadcast ( temp 2-component vector of double)
+0:51          vector swizzle ( temp 2-component vector of double)
+0:51            d: direct index for structure ( temp 4-component vector of double)
+0:51              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:51                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:51                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:51                  Constant:
+0:51                    0 (const uint)
+0:51                direct index ( temp uint)
+0:51                  'dti' ( in 3-component vector of uint)
+0:51                  Constant:
+0:51                    0 (const int)
+0:51              Constant:
+0:51                3 (const int)
+0:51            Sequence
+0:51              Constant:
+0:51                0 (const int)
+0:51              Constant:
+0:51                1 (const int)
+0:51          Constant:
+0:51            1 (const uint)
+0:52      move second child to first child ( temp 3-component vector of double)
+0:52        vector swizzle ( temp 3-component vector of double)
+0:52          d: direct index for structure ( temp 4-component vector of double)
+0:52            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:52              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:52                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:52                Constant:
+0:52                  0 (const uint)
+0:52              direct index ( temp uint)
+0:52                'dti' ( in 3-component vector of uint)
+0:52                Constant:
+0:52                  0 (const int)
+0:52            Constant:
+0:52              3 (const int)
+0:52          Sequence
+0:52            Constant:
+0:52              0 (const int)
+0:52            Constant:
+0:52              1 (const int)
+0:52            Constant:
+0:52              2 (const int)
+0:52        subgroupQuadBroadcast ( temp 3-component vector of double)
+0:52          vector swizzle ( temp 3-component vector of double)
+0:52            d: direct index for structure ( temp 4-component vector of double)
+0:52              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:52                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:52                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:52                  Constant:
+0:52                    0 (const uint)
+0:52                direct index ( temp uint)
+0:52                  'dti' ( in 3-component vector of uint)
+0:52                  Constant:
+0:52                    0 (const int)
+0:52              Constant:
+0:52                3 (const int)
+0:52            Sequence
+0:52              Constant:
+0:52                0 (const int)
+0:52              Constant:
+0:52                1 (const int)
+0:52              Constant:
+0:52                2 (const int)
+0:52          Constant:
+0:52            1 (const uint)
+0:54      move second child to first child ( temp 4-component vector of uint)
+0:54        u: direct index for structure ( temp 4-component vector of uint)
+0:54          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:54            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:54              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:54              Constant:
+0:54                0 (const uint)
+0:54            direct index ( temp uint)
+0:54              'dti' ( in 3-component vector of uint)
+0:54              Constant:
+0:54                0 (const int)
+0:54          Constant:
+0:54            0 (const int)
+0:54        subgroupQuadBroadcast ( temp 4-component vector of uint)
+0:54          u: direct index for structure ( temp 4-component vector of uint)
+0:54            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:54              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:54                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:54                Constant:
+0:54                  0 (const uint)
+0:54              direct index ( temp uint)
+0:54                'dti' ( in 3-component vector of uint)
+0:54                Constant:
+0:54                  0 (const int)
+0:54            Constant:
+0:54              0 (const int)
+0:54          Constant:
+0:54            2 (const uint)
+0:55      move second child to first child ( temp uint)
+0:55        direct index ( temp uint)
+0:55          u: direct index for structure ( temp 4-component vector of uint)
+0:55            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:55              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:55                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:55                Constant:
+0:55                  0 (const uint)
+0:55              direct index ( temp uint)
+0:55                'dti' ( in 3-component vector of uint)
+0:55                Constant:
+0:55                  0 (const int)
+0:55            Constant:
+0:55              0 (const int)
+0:55          Constant:
+0:55            0 (const int)
+0:55        subgroupQuadBroadcast ( temp uint)
+0:55          direct index ( temp uint)
+0:55            u: direct index for structure ( temp 4-component vector of uint)
+0:55              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:55                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:55                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:55                  Constant:
+0:55                    0 (const uint)
+0:55                direct index ( temp uint)
+0:55                  'dti' ( in 3-component vector of uint)
+0:55                  Constant:
+0:55                    0 (const int)
+0:55              Constant:
+0:55                0 (const int)
+0:55            Constant:
+0:55              0 (const int)
+0:55          Constant:
+0:55            2 (const uint)
+0:56      move second child to first child ( temp 2-component vector of uint)
+0:56        vector swizzle ( temp 2-component vector of uint)
+0:56          u: direct index for structure ( temp 4-component vector of uint)
+0:56            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:56              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:56                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:56                Constant:
+0:56                  0 (const uint)
+0:56              direct index ( temp uint)
+0:56                'dti' ( in 3-component vector of uint)
+0:56                Constant:
+0:56                  0 (const int)
+0:56            Constant:
+0:56              0 (const int)
+0:56          Sequence
+0:56            Constant:
+0:56              0 (const int)
+0:56            Constant:
+0:56              1 (const int)
+0:56        subgroupQuadBroadcast ( temp 2-component vector of uint)
+0:56          vector swizzle ( temp 2-component vector of uint)
+0:56            u: direct index for structure ( temp 4-component vector of uint)
+0:56              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:56                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:56                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:56                  Constant:
+0:56                    0 (const uint)
+0:56                direct index ( temp uint)
+0:56                  'dti' ( in 3-component vector of uint)
+0:56                  Constant:
+0:56                    0 (const int)
+0:56              Constant:
+0:56                0 (const int)
+0:56            Sequence
+0:56              Constant:
+0:56                0 (const int)
+0:56              Constant:
+0:56                1 (const int)
+0:56          Constant:
+0:56            2 (const uint)
+0:57      move second child to first child ( temp 3-component vector of uint)
+0:57        vector swizzle ( temp 3-component vector of uint)
+0:57          u: direct index for structure ( temp 4-component vector of uint)
+0:57            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:57              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:57                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:57                Constant:
+0:57                  0 (const uint)
+0:57              direct index ( temp uint)
+0:57                'dti' ( in 3-component vector of uint)
+0:57                Constant:
+0:57                  0 (const int)
+0:57            Constant:
+0:57              0 (const int)
+0:57          Sequence
+0:57            Constant:
+0:57              0 (const int)
+0:57            Constant:
+0:57              1 (const int)
+0:57            Constant:
+0:57              2 (const int)
+0:57        subgroupQuadBroadcast ( temp 3-component vector of uint)
+0:57          vector swizzle ( temp 3-component vector of uint)
+0:57            u: direct index for structure ( temp 4-component vector of uint)
+0:57              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:57                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:57                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:57                  Constant:
+0:57                    0 (const uint)
+0:57                direct index ( temp uint)
+0:57                  'dti' ( in 3-component vector of uint)
+0:57                  Constant:
+0:57                    0 (const int)
+0:57              Constant:
+0:57                0 (const int)
+0:57            Sequence
+0:57              Constant:
+0:57                0 (const int)
+0:57              Constant:
+0:57                1 (const int)
+0:57              Constant:
+0:57                2 (const int)
+0:57          Constant:
+0:57            2 (const uint)
+0:59      move second child to first child ( temp 4-component vector of int)
+0:59        i: direct index for structure ( temp 4-component vector of int)
+0:59          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:59            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:59              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:59              Constant:
+0:59                0 (const uint)
+0:59            direct index ( temp uint)
+0:59              'dti' ( in 3-component vector of uint)
+0:59              Constant:
+0:59                0 (const int)
+0:59          Constant:
+0:59            1 (const int)
+0:59        subgroupQuadBroadcast ( temp 4-component vector of int)
+0:59          i: direct index for structure ( temp 4-component vector of int)
+0:59            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:59              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:59                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:59                Constant:
+0:59                  0 (const uint)
+0:59              direct index ( temp uint)
+0:59                'dti' ( in 3-component vector of uint)
+0:59                Constant:
+0:59                  0 (const int)
+0:59            Constant:
+0:59              1 (const int)
+0:59          Constant:
+0:59            2 (const uint)
+0:60      move second child to first child ( temp int)
+0:60        direct index ( temp int)
+0:60          i: direct index for structure ( temp 4-component vector of int)
+0:60            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:60              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:60                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:60                Constant:
+0:60                  0 (const uint)
+0:60              direct index ( temp uint)
+0:60                'dti' ( in 3-component vector of uint)
+0:60                Constant:
+0:60                  0 (const int)
+0:60            Constant:
+0:60              1 (const int)
+0:60          Constant:
+0:60            0 (const int)
+0:60        subgroupQuadBroadcast ( temp int)
+0:60          direct index ( temp int)
+0:60            i: direct index for structure ( temp 4-component vector of int)
+0:60              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:60                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:60                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:60                  Constant:
+0:60                    0 (const uint)
+0:60                direct index ( temp uint)
+0:60                  'dti' ( in 3-component vector of uint)
+0:60                  Constant:
+0:60                    0 (const int)
+0:60              Constant:
+0:60                1 (const int)
+0:60            Constant:
+0:60              0 (const int)
+0:60          Constant:
+0:60            2 (const uint)
+0:61      move second child to first child ( temp 2-component vector of int)
+0:61        vector swizzle ( temp 2-component vector of int)
+0:61          i: direct index for structure ( temp 4-component vector of int)
+0:61            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:61              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:61                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:61                Constant:
+0:61                  0 (const uint)
+0:61              direct index ( temp uint)
+0:61                'dti' ( in 3-component vector of uint)
+0:61                Constant:
+0:61                  0 (const int)
+0:61            Constant:
+0:61              1 (const int)
+0:61          Sequence
+0:61            Constant:
+0:61              0 (const int)
+0:61            Constant:
+0:61              1 (const int)
+0:61        subgroupQuadBroadcast ( temp 2-component vector of int)
+0:61          vector swizzle ( temp 2-component vector of int)
+0:61            i: direct index for structure ( temp 4-component vector of int)
+0:61              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:61                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:61                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:61                  Constant:
+0:61                    0 (const uint)
+0:61                direct index ( temp uint)
+0:61                  'dti' ( in 3-component vector of uint)
+0:61                  Constant:
+0:61                    0 (const int)
+0:61              Constant:
+0:61                1 (const int)
+0:61            Sequence
+0:61              Constant:
+0:61                0 (const int)
+0:61              Constant:
+0:61                1 (const int)
+0:61          Constant:
+0:61            2 (const uint)
+0:62      move second child to first child ( temp 3-component vector of int)
+0:62        vector swizzle ( temp 3-component vector of int)
+0:62          i: direct index for structure ( temp 4-component vector of int)
+0:62            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:62              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:62                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:62                Constant:
+0:62                  0 (const uint)
+0:62              direct index ( temp uint)
+0:62                'dti' ( in 3-component vector of uint)
+0:62                Constant:
+0:62                  0 (const int)
+0:62            Constant:
+0:62              1 (const int)
+0:62          Sequence
+0:62            Constant:
+0:62              0 (const int)
+0:62            Constant:
+0:62              1 (const int)
+0:62            Constant:
+0:62              2 (const int)
+0:62        subgroupQuadBroadcast ( temp 3-component vector of int)
+0:62          vector swizzle ( temp 3-component vector of int)
+0:62            i: direct index for structure ( temp 4-component vector of int)
+0:62              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:62                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:62                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:62                  Constant:
+0:62                    0 (const uint)
+0:62                direct index ( temp uint)
+0:62                  'dti' ( in 3-component vector of uint)
+0:62                  Constant:
+0:62                    0 (const int)
+0:62              Constant:
+0:62                1 (const int)
+0:62            Sequence
+0:62              Constant:
+0:62                0 (const int)
+0:62              Constant:
+0:62                1 (const int)
+0:62              Constant:
+0:62                2 (const int)
+0:62          Constant:
+0:62            2 (const uint)
+0:64      move second child to first child ( temp 4-component vector of float)
+0:64        f: direct index for structure ( temp 4-component vector of float)
+0:64          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:64            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:64              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:64              Constant:
+0:64                0 (const uint)
+0:64            direct index ( temp uint)
+0:64              'dti' ( in 3-component vector of uint)
+0:64              Constant:
+0:64                0 (const int)
+0:64          Constant:
+0:64            2 (const int)
+0:64        subgroupQuadBroadcast ( temp 4-component vector of float)
+0:64          f: direct index for structure ( temp 4-component vector of float)
+0:64            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:64              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:64                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:64                Constant:
+0:64                  0 (const uint)
+0:64              direct index ( temp uint)
+0:64                'dti' ( in 3-component vector of uint)
+0:64                Constant:
+0:64                  0 (const int)
+0:64            Constant:
+0:64              2 (const int)
+0:64          Constant:
+0:64            2 (const uint)
+0:65      move second child to first child ( temp float)
+0:65        direct index ( temp float)
+0:65          f: direct index for structure ( temp 4-component vector of float)
+0:65            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:65              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:65                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:65                Constant:
+0:65                  0 (const uint)
+0:65              direct index ( temp uint)
+0:65                'dti' ( in 3-component vector of uint)
+0:65                Constant:
+0:65                  0 (const int)
+0:65            Constant:
+0:65              2 (const int)
+0:65          Constant:
+0:65            0 (const int)
+0:65        subgroupQuadBroadcast ( temp float)
+0:65          direct index ( temp float)
+0:65            f: direct index for structure ( temp 4-component vector of float)
+0:65              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:65                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:65                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:65                  Constant:
+0:65                    0 (const uint)
+0:65                direct index ( temp uint)
+0:65                  'dti' ( in 3-component vector of uint)
+0:65                  Constant:
+0:65                    0 (const int)
+0:65              Constant:
+0:65                2 (const int)
+0:65            Constant:
+0:65              0 (const int)
+0:65          Constant:
+0:65            2 (const uint)
+0:66      move second child to first child ( temp 2-component vector of float)
+0:66        vector swizzle ( temp 2-component vector of float)
+0:66          f: direct index for structure ( temp 4-component vector of float)
+0:66            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:66              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:66                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:66                Constant:
+0:66                  0 (const uint)
+0:66              direct index ( temp uint)
+0:66                'dti' ( in 3-component vector of uint)
+0:66                Constant:
+0:66                  0 (const int)
+0:66            Constant:
+0:66              2 (const int)
+0:66          Sequence
+0:66            Constant:
+0:66              0 (const int)
+0:66            Constant:
+0:66              1 (const int)
+0:66        subgroupQuadBroadcast ( temp 2-component vector of float)
+0:66          vector swizzle ( temp 2-component vector of float)
+0:66            f: direct index for structure ( temp 4-component vector of float)
+0:66              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:66                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:66                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:66                  Constant:
+0:66                    0 (const uint)
+0:66                direct index ( temp uint)
+0:66                  'dti' ( in 3-component vector of uint)
+0:66                  Constant:
+0:66                    0 (const int)
+0:66              Constant:
+0:66                2 (const int)
+0:66            Sequence
+0:66              Constant:
+0:66                0 (const int)
+0:66              Constant:
+0:66                1 (const int)
+0:66          Constant:
+0:66            2 (const uint)
+0:67      move second child to first child ( temp 3-component vector of float)
+0:67        vector swizzle ( temp 3-component vector of float)
+0:67          f: direct index for structure ( temp 4-component vector of float)
+0:67            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:67              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:67                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:67                Constant:
+0:67                  0 (const uint)
+0:67              direct index ( temp uint)
+0:67                'dti' ( in 3-component vector of uint)
+0:67                Constant:
+0:67                  0 (const int)
+0:67            Constant:
+0:67              2 (const int)
+0:67          Sequence
+0:67            Constant:
+0:67              0 (const int)
+0:67            Constant:
+0:67              1 (const int)
+0:67            Constant:
+0:67              2 (const int)
+0:67        subgroupQuadBroadcast ( temp 3-component vector of float)
+0:67          vector swizzle ( temp 3-component vector of float)
+0:67            f: direct index for structure ( temp 4-component vector of float)
+0:67              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:67                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:67                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:67                  Constant:
+0:67                    0 (const uint)
+0:67                direct index ( temp uint)
+0:67                  'dti' ( in 3-component vector of uint)
+0:67                  Constant:
+0:67                    0 (const int)
+0:67              Constant:
+0:67                2 (const int)
+0:67            Sequence
+0:67              Constant:
+0:67                0 (const int)
+0:67              Constant:
+0:67                1 (const int)
+0:67              Constant:
+0:67                2 (const int)
+0:67          Constant:
+0:67            2 (const uint)
+0:69      move second child to first child ( temp 4-component vector of double)
+0:69        d: direct index for structure ( temp 4-component vector of double)
+0:69          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:69            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:69              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:69              Constant:
+0:69                0 (const uint)
+0:69            direct index ( temp uint)
+0:69              'dti' ( in 3-component vector of uint)
+0:69              Constant:
+0:69                0 (const int)
+0:69          Constant:
+0:69            3 (const int)
+0:69        subgroupQuadBroadcast ( temp 4-component vector of double)
+0:69          d: direct index for structure ( temp 4-component vector of double)
+0:69            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:69              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:69                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:69                Constant:
+0:69                  0 (const uint)
+0:69              direct index ( temp uint)
+0:69                'dti' ( in 3-component vector of uint)
+0:69                Constant:
+0:69                  0 (const int)
+0:69            Constant:
+0:69              3 (const int)
+0:69          Constant:
+0:69            2 (const uint)
+0:70      move second child to first child ( temp double)
+0:70        direct index ( temp double)
+0:70          d: direct index for structure ( temp 4-component vector of double)
+0:70            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:70              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:70                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:70                Constant:
+0:70                  0 (const uint)
+0:70              direct index ( temp uint)
+0:70                'dti' ( in 3-component vector of uint)
+0:70                Constant:
+0:70                  0 (const int)
+0:70            Constant:
+0:70              3 (const int)
+0:70          Constant:
+0:70            0 (const int)
+0:70        subgroupQuadBroadcast ( temp double)
+0:70          direct index ( temp double)
+0:70            d: direct index for structure ( temp 4-component vector of double)
+0:70              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:70                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:70                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:70                  Constant:
+0:70                    0 (const uint)
+0:70                direct index ( temp uint)
+0:70                  'dti' ( in 3-component vector of uint)
+0:70                  Constant:
+0:70                    0 (const int)
+0:70              Constant:
+0:70                3 (const int)
+0:70            Constant:
+0:70              0 (const int)
+0:70          Constant:
+0:70            2 (const uint)
+0:71      move second child to first child ( temp 2-component vector of double)
+0:71        vector swizzle ( temp 2-component vector of double)
+0:71          d: direct index for structure ( temp 4-component vector of double)
+0:71            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:71              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:71                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:71                Constant:
+0:71                  0 (const uint)
+0:71              direct index ( temp uint)
+0:71                'dti' ( in 3-component vector of uint)
+0:71                Constant:
+0:71                  0 (const int)
+0:71            Constant:
+0:71              3 (const int)
+0:71          Sequence
+0:71            Constant:
+0:71              0 (const int)
+0:71            Constant:
+0:71              1 (const int)
+0:71        subgroupQuadBroadcast ( temp 2-component vector of double)
+0:71          vector swizzle ( temp 2-component vector of double)
+0:71            d: direct index for structure ( temp 4-component vector of double)
+0:71              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:71                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:71                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:71                  Constant:
+0:71                    0 (const uint)
+0:71                direct index ( temp uint)
+0:71                  'dti' ( in 3-component vector of uint)
+0:71                  Constant:
+0:71                    0 (const int)
+0:71              Constant:
+0:71                3 (const int)
+0:71            Sequence
+0:71              Constant:
+0:71                0 (const int)
+0:71              Constant:
+0:71                1 (const int)
+0:71          Constant:
+0:71            2 (const uint)
+0:72      move second child to first child ( temp 3-component vector of double)
+0:72        vector swizzle ( temp 3-component vector of double)
+0:72          d: direct index for structure ( temp 4-component vector of double)
+0:72            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:72              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:72                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:72                Constant:
+0:72                  0 (const uint)
+0:72              direct index ( temp uint)
+0:72                'dti' ( in 3-component vector of uint)
+0:72                Constant:
+0:72                  0 (const int)
+0:72            Constant:
+0:72              3 (const int)
+0:72          Sequence
+0:72            Constant:
+0:72              0 (const int)
+0:72            Constant:
+0:72              1 (const int)
+0:72            Constant:
+0:72              2 (const int)
+0:72        subgroupQuadBroadcast ( temp 3-component vector of double)
+0:72          vector swizzle ( temp 3-component vector of double)
+0:72            d: direct index for structure ( temp 4-component vector of double)
+0:72              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:72                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:72                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:72                  Constant:
+0:72                    0 (const uint)
+0:72                direct index ( temp uint)
+0:72                  'dti' ( in 3-component vector of uint)
+0:72                  Constant:
+0:72                    0 (const int)
+0:72              Constant:
+0:72                3 (const int)
+0:72            Sequence
+0:72              Constant:
+0:72                0 (const int)
+0:72              Constant:
+0:72                1 (const int)
+0:72              Constant:
+0:72                2 (const int)
+0:72          Constant:
+0:72            2 (const uint)
+0:74      move second child to first child ( temp 4-component vector of uint)
+0:74        u: direct index for structure ( temp 4-component vector of uint)
+0:74          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:74            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:74              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:74              Constant:
+0:74                0 (const uint)
+0:74            direct index ( temp uint)
+0:74              'dti' ( in 3-component vector of uint)
+0:74              Constant:
+0:74                0 (const int)
+0:74          Constant:
+0:74            0 (const int)
+0:74        subgroupQuadBroadcast ( temp 4-component vector of uint)
+0:74          u: direct index for structure ( temp 4-component vector of uint)
+0:74            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:74              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:74                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:74                Constant:
+0:74                  0 (const uint)
+0:74              direct index ( temp uint)
+0:74                'dti' ( in 3-component vector of uint)
+0:74                Constant:
+0:74                  0 (const int)
+0:74            Constant:
+0:74              0 (const int)
+0:74          Constant:
+0:74            3 (const uint)
+0:75      move second child to first child ( temp uint)
+0:75        direct index ( temp uint)
+0:75          u: direct index for structure ( temp 4-component vector of uint)
+0:75            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:75              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:75                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:75                Constant:
+0:75                  0 (const uint)
+0:75              direct index ( temp uint)
+0:75                'dti' ( in 3-component vector of uint)
+0:75                Constant:
+0:75                  0 (const int)
+0:75            Constant:
+0:75              0 (const int)
+0:75          Constant:
+0:75            0 (const int)
+0:75        subgroupQuadBroadcast ( temp uint)
+0:75          direct index ( temp uint)
+0:75            u: direct index for structure ( temp 4-component vector of uint)
+0:75              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:75                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:75                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:75                  Constant:
+0:75                    0 (const uint)
+0:75                direct index ( temp uint)
+0:75                  'dti' ( in 3-component vector of uint)
+0:75                  Constant:
+0:75                    0 (const int)
+0:75              Constant:
+0:75                0 (const int)
+0:75            Constant:
+0:75              0 (const int)
+0:75          Constant:
+0:75            3 (const uint)
+0:76      move second child to first child ( temp 2-component vector of uint)
+0:76        vector swizzle ( temp 2-component vector of uint)
+0:76          u: direct index for structure ( temp 4-component vector of uint)
+0:76            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:76              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:76                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:76                Constant:
+0:76                  0 (const uint)
+0:76              direct index ( temp uint)
+0:76                'dti' ( in 3-component vector of uint)
+0:76                Constant:
+0:76                  0 (const int)
+0:76            Constant:
+0:76              0 (const int)
+0:76          Sequence
+0:76            Constant:
+0:76              0 (const int)
+0:76            Constant:
+0:76              1 (const int)
+0:76        subgroupQuadBroadcast ( temp 2-component vector of uint)
+0:76          vector swizzle ( temp 2-component vector of uint)
+0:76            u: direct index for structure ( temp 4-component vector of uint)
+0:76              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:76                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:76                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:76                  Constant:
+0:76                    0 (const uint)
+0:76                direct index ( temp uint)
+0:76                  'dti' ( in 3-component vector of uint)
+0:76                  Constant:
+0:76                    0 (const int)
+0:76              Constant:
+0:76                0 (const int)
+0:76            Sequence
+0:76              Constant:
+0:76                0 (const int)
+0:76              Constant:
+0:76                1 (const int)
+0:76          Constant:
+0:76            3 (const uint)
+0:77      move second child to first child ( temp 3-component vector of uint)
+0:77        vector swizzle ( temp 3-component vector of uint)
+0:77          u: direct index for structure ( temp 4-component vector of uint)
+0:77            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:77              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:77                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:77                Constant:
+0:77                  0 (const uint)
+0:77              direct index ( temp uint)
+0:77                'dti' ( in 3-component vector of uint)
+0:77                Constant:
+0:77                  0 (const int)
+0:77            Constant:
+0:77              0 (const int)
+0:77          Sequence
+0:77            Constant:
+0:77              0 (const int)
+0:77            Constant:
+0:77              1 (const int)
+0:77            Constant:
+0:77              2 (const int)
+0:77        subgroupQuadBroadcast ( temp 3-component vector of uint)
+0:77          vector swizzle ( temp 3-component vector of uint)
+0:77            u: direct index for structure ( temp 4-component vector of uint)
+0:77              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:77                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:77                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:77                  Constant:
+0:77                    0 (const uint)
+0:77                direct index ( temp uint)
+0:77                  'dti' ( in 3-component vector of uint)
+0:77                  Constant:
+0:77                    0 (const int)
+0:77              Constant:
+0:77                0 (const int)
+0:77            Sequence
+0:77              Constant:
+0:77                0 (const int)
+0:77              Constant:
+0:77                1 (const int)
+0:77              Constant:
+0:77                2 (const int)
+0:77          Constant:
+0:77            3 (const uint)
+0:79      move second child to first child ( temp 4-component vector of int)
+0:79        i: direct index for structure ( temp 4-component vector of int)
+0:79          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:79            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:79              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:79              Constant:
+0:79                0 (const uint)
+0:79            direct index ( temp uint)
+0:79              'dti' ( in 3-component vector of uint)
+0:79              Constant:
+0:79                0 (const int)
+0:79          Constant:
+0:79            1 (const int)
+0:79        subgroupQuadBroadcast ( temp 4-component vector of int)
+0:79          i: direct index for structure ( temp 4-component vector of int)
+0:79            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:79              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:79                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:79                Constant:
+0:79                  0 (const uint)
+0:79              direct index ( temp uint)
+0:79                'dti' ( in 3-component vector of uint)
+0:79                Constant:
+0:79                  0 (const int)
+0:79            Constant:
+0:79              1 (const int)
+0:79          Constant:
+0:79            3 (const uint)
+0:80      move second child to first child ( temp int)
+0:80        direct index ( temp int)
+0:80          i: direct index for structure ( temp 4-component vector of int)
+0:80            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:80              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:80                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:80                Constant:
+0:80                  0 (const uint)
+0:80              direct index ( temp uint)
+0:80                'dti' ( in 3-component vector of uint)
+0:80                Constant:
+0:80                  0 (const int)
+0:80            Constant:
+0:80              1 (const int)
+0:80          Constant:
+0:80            0 (const int)
+0:80        subgroupQuadBroadcast ( temp int)
+0:80          direct index ( temp int)
+0:80            i: direct index for structure ( temp 4-component vector of int)
+0:80              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:80                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:80                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:80                  Constant:
+0:80                    0 (const uint)
+0:80                direct index ( temp uint)
+0:80                  'dti' ( in 3-component vector of uint)
+0:80                  Constant:
+0:80                    0 (const int)
+0:80              Constant:
+0:80                1 (const int)
+0:80            Constant:
+0:80              0 (const int)
+0:80          Constant:
+0:80            3 (const uint)
+0:81      move second child to first child ( temp 2-component vector of int)
+0:81        vector swizzle ( temp 2-component vector of int)
+0:81          i: direct index for structure ( temp 4-component vector of int)
+0:81            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:81              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:81                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:81                Constant:
+0:81                  0 (const uint)
+0:81              direct index ( temp uint)
+0:81                'dti' ( in 3-component vector of uint)
+0:81                Constant:
+0:81                  0 (const int)
+0:81            Constant:
+0:81              1 (const int)
+0:81          Sequence
+0:81            Constant:
+0:81              0 (const int)
+0:81            Constant:
+0:81              1 (const int)
+0:81        subgroupQuadBroadcast ( temp 2-component vector of int)
+0:81          vector swizzle ( temp 2-component vector of int)
+0:81            i: direct index for structure ( temp 4-component vector of int)
+0:81              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:81                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:81                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:81                  Constant:
+0:81                    0 (const uint)
+0:81                direct index ( temp uint)
+0:81                  'dti' ( in 3-component vector of uint)
+0:81                  Constant:
+0:81                    0 (const int)
+0:81              Constant:
+0:81                1 (const int)
+0:81            Sequence
+0:81              Constant:
+0:81                0 (const int)
+0:81              Constant:
+0:81                1 (const int)
+0:81          Constant:
+0:81            3 (const uint)
+0:82      move second child to first child ( temp 3-component vector of int)
+0:82        vector swizzle ( temp 3-component vector of int)
+0:82          i: direct index for structure ( temp 4-component vector of int)
+0:82            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:82              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:82                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:82                Constant:
+0:82                  0 (const uint)
+0:82              direct index ( temp uint)
+0:82                'dti' ( in 3-component vector of uint)
+0:82                Constant:
+0:82                  0 (const int)
+0:82            Constant:
+0:82              1 (const int)
+0:82          Sequence
+0:82            Constant:
+0:82              0 (const int)
+0:82            Constant:
+0:82              1 (const int)
+0:82            Constant:
+0:82              2 (const int)
+0:82        subgroupQuadBroadcast ( temp 3-component vector of int)
+0:82          vector swizzle ( temp 3-component vector of int)
+0:82            i: direct index for structure ( temp 4-component vector of int)
+0:82              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:82                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:82                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:82                  Constant:
+0:82                    0 (const uint)
+0:82                direct index ( temp uint)
+0:82                  'dti' ( in 3-component vector of uint)
+0:82                  Constant:
+0:82                    0 (const int)
+0:82              Constant:
+0:82                1 (const int)
+0:82            Sequence
+0:82              Constant:
+0:82                0 (const int)
+0:82              Constant:
+0:82                1 (const int)
+0:82              Constant:
+0:82                2 (const int)
+0:82          Constant:
+0:82            3 (const uint)
+0:84      move second child to first child ( temp 4-component vector of float)
+0:84        f: direct index for structure ( temp 4-component vector of float)
+0:84          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:84            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:84              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:84              Constant:
+0:84                0 (const uint)
+0:84            direct index ( temp uint)
+0:84              'dti' ( in 3-component vector of uint)
+0:84              Constant:
+0:84                0 (const int)
+0:84          Constant:
+0:84            2 (const int)
+0:84        subgroupQuadBroadcast ( temp 4-component vector of float)
+0:84          f: direct index for structure ( temp 4-component vector of float)
+0:84            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:84              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:84                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:84                Constant:
+0:84                  0 (const uint)
+0:84              direct index ( temp uint)
+0:84                'dti' ( in 3-component vector of uint)
+0:84                Constant:
+0:84                  0 (const int)
+0:84            Constant:
+0:84              2 (const int)
+0:84          Constant:
+0:84            3 (const uint)
+0:85      move second child to first child ( temp float)
+0:85        direct index ( temp float)
+0:85          f: direct index for structure ( temp 4-component vector of float)
+0:85            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:85              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:85                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:85                Constant:
+0:85                  0 (const uint)
+0:85              direct index ( temp uint)
+0:85                'dti' ( in 3-component vector of uint)
+0:85                Constant:
+0:85                  0 (const int)
+0:85            Constant:
+0:85              2 (const int)
+0:85          Constant:
+0:85            0 (const int)
+0:85        subgroupQuadBroadcast ( temp float)
+0:85          direct index ( temp float)
+0:85            f: direct index for structure ( temp 4-component vector of float)
+0:85              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:85                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:85                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:85                  Constant:
+0:85                    0 (const uint)
+0:85                direct index ( temp uint)
+0:85                  'dti' ( in 3-component vector of uint)
+0:85                  Constant:
+0:85                    0 (const int)
+0:85              Constant:
+0:85                2 (const int)
+0:85            Constant:
+0:85              0 (const int)
+0:85          Constant:
+0:85            3 (const uint)
+0:86      move second child to first child ( temp 2-component vector of float)
+0:86        vector swizzle ( temp 2-component vector of float)
+0:86          f: direct index for structure ( temp 4-component vector of float)
+0:86            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:86              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:86                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:86                Constant:
+0:86                  0 (const uint)
+0:86              direct index ( temp uint)
+0:86                'dti' ( in 3-component vector of uint)
+0:86                Constant:
+0:86                  0 (const int)
+0:86            Constant:
+0:86              2 (const int)
+0:86          Sequence
+0:86            Constant:
+0:86              0 (const int)
+0:86            Constant:
+0:86              1 (const int)
+0:86        subgroupQuadBroadcast ( temp 2-component vector of float)
+0:86          vector swizzle ( temp 2-component vector of float)
+0:86            f: direct index for structure ( temp 4-component vector of float)
+0:86              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:86                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:86                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:86                  Constant:
+0:86                    0 (const uint)
+0:86                direct index ( temp uint)
+0:86                  'dti' ( in 3-component vector of uint)
+0:86                  Constant:
+0:86                    0 (const int)
+0:86              Constant:
+0:86                2 (const int)
+0:86            Sequence
+0:86              Constant:
+0:86                0 (const int)
+0:86              Constant:
+0:86                1 (const int)
+0:86          Constant:
+0:86            3 (const uint)
+0:87      move second child to first child ( temp 3-component vector of float)
+0:87        vector swizzle ( temp 3-component vector of float)
+0:87          f: direct index for structure ( temp 4-component vector of float)
+0:87            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:87              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:87                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:87                Constant:
+0:87                  0 (const uint)
+0:87              direct index ( temp uint)
+0:87                'dti' ( in 3-component vector of uint)
+0:87                Constant:
+0:87                  0 (const int)
+0:87            Constant:
+0:87              2 (const int)
+0:87          Sequence
+0:87            Constant:
+0:87              0 (const int)
+0:87            Constant:
+0:87              1 (const int)
+0:87            Constant:
+0:87              2 (const int)
+0:87        subgroupQuadBroadcast ( temp 3-component vector of float)
+0:87          vector swizzle ( temp 3-component vector of float)
+0:87            f: direct index for structure ( temp 4-component vector of float)
+0:87              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:87                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:87                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:87                  Constant:
+0:87                    0 (const uint)
+0:87                direct index ( temp uint)
+0:87                  'dti' ( in 3-component vector of uint)
+0:87                  Constant:
+0:87                    0 (const int)
+0:87              Constant:
+0:87                2 (const int)
+0:87            Sequence
+0:87              Constant:
+0:87                0 (const int)
+0:87              Constant:
+0:87                1 (const int)
+0:87              Constant:
+0:87                2 (const int)
+0:87          Constant:
+0:87            3 (const uint)
+0:89      move second child to first child ( temp 4-component vector of double)
+0:89        d: direct index for structure ( temp 4-component vector of double)
+0:89          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:89            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:89              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:89              Constant:
+0:89                0 (const uint)
+0:89            direct index ( temp uint)
+0:89              'dti' ( in 3-component vector of uint)
+0:89              Constant:
+0:89                0 (const int)
+0:89          Constant:
+0:89            3 (const int)
+0:89        subgroupQuadBroadcast ( temp 4-component vector of double)
+0:89          d: direct index for structure ( temp 4-component vector of double)
+0:89            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:89              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:89                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:89                Constant:
+0:89                  0 (const uint)
+0:89              direct index ( temp uint)
+0:89                'dti' ( in 3-component vector of uint)
+0:89                Constant:
+0:89                  0 (const int)
+0:89            Constant:
+0:89              3 (const int)
+0:89          Constant:
+0:89            3 (const uint)
+0:90      move second child to first child ( temp double)
+0:90        direct index ( temp double)
+0:90          d: direct index for structure ( temp 4-component vector of double)
+0:90            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:90              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:90                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:90                Constant:
+0:90                  0 (const uint)
+0:90              direct index ( temp uint)
+0:90                'dti' ( in 3-component vector of uint)
+0:90                Constant:
+0:90                  0 (const int)
+0:90            Constant:
+0:90              3 (const int)
+0:90          Constant:
+0:90            0 (const int)
+0:90        subgroupQuadBroadcast ( temp double)
+0:90          direct index ( temp double)
+0:90            d: direct index for structure ( temp 4-component vector of double)
+0:90              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:90                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:90                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:90                  Constant:
+0:90                    0 (const uint)
+0:90                direct index ( temp uint)
+0:90                  'dti' ( in 3-component vector of uint)
+0:90                  Constant:
+0:90                    0 (const int)
+0:90              Constant:
+0:90                3 (const int)
+0:90            Constant:
+0:90              0 (const int)
+0:90          Constant:
+0:90            3 (const uint)
+0:91      move second child to first child ( temp 2-component vector of double)
+0:91        vector swizzle ( temp 2-component vector of double)
+0:91          d: direct index for structure ( temp 4-component vector of double)
+0:91            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:91              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:91                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:91                Constant:
+0:91                  0 (const uint)
+0:91              direct index ( temp uint)
+0:91                'dti' ( in 3-component vector of uint)
+0:91                Constant:
+0:91                  0 (const int)
+0:91            Constant:
+0:91              3 (const int)
+0:91          Sequence
+0:91            Constant:
+0:91              0 (const int)
+0:91            Constant:
+0:91              1 (const int)
+0:91        subgroupQuadBroadcast ( temp 2-component vector of double)
+0:91          vector swizzle ( temp 2-component vector of double)
+0:91            d: direct index for structure ( temp 4-component vector of double)
+0:91              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:91                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:91                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:91                  Constant:
+0:91                    0 (const uint)
+0:91                direct index ( temp uint)
+0:91                  'dti' ( in 3-component vector of uint)
+0:91                  Constant:
+0:91                    0 (const int)
+0:91              Constant:
+0:91                3 (const int)
+0:91            Sequence
+0:91              Constant:
+0:91                0 (const int)
+0:91              Constant:
+0:91                1 (const int)
+0:91          Constant:
+0:91            3 (const uint)
+0:92      move second child to first child ( temp 3-component vector of double)
+0:92        vector swizzle ( temp 3-component vector of double)
+0:92          d: direct index for structure ( temp 4-component vector of double)
+0:92            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:92              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:92                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:92                Constant:
+0:92                  0 (const uint)
+0:92              direct index ( temp uint)
+0:92                'dti' ( in 3-component vector of uint)
+0:92                Constant:
+0:92                  0 (const int)
+0:92            Constant:
+0:92              3 (const int)
+0:92          Sequence
+0:92            Constant:
+0:92              0 (const int)
+0:92            Constant:
+0:92              1 (const int)
+0:92            Constant:
+0:92              2 (const int)
+0:92        subgroupQuadBroadcast ( temp 3-component vector of double)
+0:92          vector swizzle ( temp 3-component vector of double)
+0:92            d: direct index for structure ( temp 4-component vector of double)
+0:92              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:92                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:92                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:92                  Constant:
+0:92                    0 (const uint)
+0:92                direct index ( temp uint)
+0:92                  'dti' ( in 3-component vector of uint)
+0:92                  Constant:
+0:92                    0 (const int)
+0:92              Constant:
+0:92                3 (const int)
+0:92            Sequence
+0:92              Constant:
+0:92                0 (const int)
+0:92              Constant:
+0:92                1 (const int)
+0:92              Constant:
+0:92                2 (const int)
+0:92          Constant:
+0:92            3 (const uint)
+0:94      move second child to first child ( temp 4-component vector of uint)
+0:94        u: direct index for structure ( temp 4-component vector of uint)
+0:94          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:94            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:94              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:94              Constant:
+0:94                0 (const uint)
+0:94            direct index ( temp uint)
+0:94              'dti' ( in 3-component vector of uint)
+0:94              Constant:
+0:94                0 (const int)
+0:94          Constant:
+0:94            0 (const int)
+0:94        subgroupQuadSwapHorizontal ( temp 4-component vector of uint)
+0:94          u: direct index for structure ( temp 4-component vector of uint)
+0:94            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:94              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:94                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:94                Constant:
+0:94                  0 (const uint)
+0:94              direct index ( temp uint)
+0:94                'dti' ( in 3-component vector of uint)
+0:94                Constant:
+0:94                  0 (const int)
+0:94            Constant:
+0:94              0 (const int)
+0:95      move second child to first child ( temp uint)
+0:95        direct index ( temp uint)
+0:95          u: direct index for structure ( temp 4-component vector of uint)
+0:95            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:95              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:95                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:95                Constant:
+0:95                  0 (const uint)
+0:95              direct index ( temp uint)
+0:95                'dti' ( in 3-component vector of uint)
+0:95                Constant:
+0:95                  0 (const int)
+0:95            Constant:
+0:95              0 (const int)
+0:95          Constant:
+0:95            0 (const int)
+0:95        subgroupQuadSwapHorizontal ( temp uint)
+0:95          direct index ( temp uint)
+0:95            u: direct index for structure ( temp 4-component vector of uint)
+0:95              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:95                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:95                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:95                  Constant:
+0:95                    0 (const uint)
+0:95                direct index ( temp uint)
+0:95                  'dti' ( in 3-component vector of uint)
+0:95                  Constant:
+0:95                    0 (const int)
+0:95              Constant:
+0:95                0 (const int)
+0:95            Constant:
+0:95              0 (const int)
+0:96      move second child to first child ( temp 2-component vector of uint)
+0:96        vector swizzle ( temp 2-component vector of uint)
+0:96          u: direct index for structure ( temp 4-component vector of uint)
+0:96            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:96              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:96                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:96                Constant:
+0:96                  0 (const uint)
+0:96              direct index ( temp uint)
+0:96                'dti' ( in 3-component vector of uint)
+0:96                Constant:
+0:96                  0 (const int)
+0:96            Constant:
+0:96              0 (const int)
+0:96          Sequence
+0:96            Constant:
+0:96              0 (const int)
+0:96            Constant:
+0:96              1 (const int)
+0:96        subgroupQuadSwapHorizontal ( temp 2-component vector of uint)
+0:96          vector swizzle ( temp 2-component vector of uint)
+0:96            u: direct index for structure ( temp 4-component vector of uint)
+0:96              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:96                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:96                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:96                  Constant:
+0:96                    0 (const uint)
+0:96                direct index ( temp uint)
+0:96                  'dti' ( in 3-component vector of uint)
+0:96                  Constant:
+0:96                    0 (const int)
+0:96              Constant:
+0:96                0 (const int)
+0:96            Sequence
+0:96              Constant:
+0:96                0 (const int)
+0:96              Constant:
+0:96                1 (const int)
+0:97      move second child to first child ( temp 3-component vector of uint)
+0:97        vector swizzle ( temp 3-component vector of uint)
+0:97          u: direct index for structure ( temp 4-component vector of uint)
+0:97            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:97              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:97                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:97                Constant:
+0:97                  0 (const uint)
+0:97              direct index ( temp uint)
+0:97                'dti' ( in 3-component vector of uint)
+0:97                Constant:
+0:97                  0 (const int)
+0:97            Constant:
+0:97              0 (const int)
+0:97          Sequence
+0:97            Constant:
+0:97              0 (const int)
+0:97            Constant:
+0:97              1 (const int)
+0:97            Constant:
+0:97              2 (const int)
+0:97        subgroupQuadSwapHorizontal ( temp 3-component vector of uint)
+0:97          vector swizzle ( temp 3-component vector of uint)
+0:97            u: direct index for structure ( temp 4-component vector of uint)
+0:97              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:97                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:97                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:97                  Constant:
+0:97                    0 (const uint)
+0:97                direct index ( temp uint)
+0:97                  'dti' ( in 3-component vector of uint)
+0:97                  Constant:
+0:97                    0 (const int)
+0:97              Constant:
+0:97                0 (const int)
+0:97            Sequence
+0:97              Constant:
+0:97                0 (const int)
+0:97              Constant:
+0:97                1 (const int)
+0:97              Constant:
+0:97                2 (const int)
+0:99      move second child to first child ( temp 4-component vector of int)
+0:99        i: direct index for structure ( temp 4-component vector of int)
+0:99          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:99            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:99              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:99              Constant:
+0:99                0 (const uint)
+0:99            direct index ( temp uint)
+0:99              'dti' ( in 3-component vector of uint)
+0:99              Constant:
+0:99                0 (const int)
+0:99          Constant:
+0:99            1 (const int)
+0:99        subgroupQuadSwapHorizontal ( temp 4-component vector of int)
+0:99          i: direct index for structure ( temp 4-component vector of int)
+0:99            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:99              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:99                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:99                Constant:
+0:99                  0 (const uint)
+0:99              direct index ( temp uint)
+0:99                'dti' ( in 3-component vector of uint)
+0:99                Constant:
+0:99                  0 (const int)
+0:99            Constant:
+0:99              1 (const int)
+0:100      move second child to first child ( temp int)
+0:100        direct index ( temp int)
+0:100          i: direct index for structure ( temp 4-component vector of int)
+0:100            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:100              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:100                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:100                Constant:
+0:100                  0 (const uint)
+0:100              direct index ( temp uint)
+0:100                'dti' ( in 3-component vector of uint)
+0:100                Constant:
+0:100                  0 (const int)
+0:100            Constant:
+0:100              1 (const int)
+0:100          Constant:
+0:100            0 (const int)
+0:100        subgroupQuadSwapHorizontal ( temp int)
+0:100          direct index ( temp int)
+0:100            i: direct index for structure ( temp 4-component vector of int)
+0:100              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:100                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:100                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:100                  Constant:
+0:100                    0 (const uint)
+0:100                direct index ( temp uint)
+0:100                  'dti' ( in 3-component vector of uint)
+0:100                  Constant:
+0:100                    0 (const int)
+0:100              Constant:
+0:100                1 (const int)
+0:100            Constant:
+0:100              0 (const int)
+0:101      move second child to first child ( temp 2-component vector of int)
+0:101        vector swizzle ( temp 2-component vector of int)
+0:101          i: direct index for structure ( temp 4-component vector of int)
+0:101            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:101              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:101                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:101                Constant:
+0:101                  0 (const uint)
+0:101              direct index ( temp uint)
+0:101                'dti' ( in 3-component vector of uint)
+0:101                Constant:
+0:101                  0 (const int)
+0:101            Constant:
+0:101              1 (const int)
+0:101          Sequence
+0:101            Constant:
+0:101              0 (const int)
+0:101            Constant:
+0:101              1 (const int)
+0:101        subgroupQuadSwapHorizontal ( temp 2-component vector of int)
+0:101          vector swizzle ( temp 2-component vector of int)
+0:101            i: direct index for structure ( temp 4-component vector of int)
+0:101              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:101                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:101                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:101                  Constant:
+0:101                    0 (const uint)
+0:101                direct index ( temp uint)
+0:101                  'dti' ( in 3-component vector of uint)
+0:101                  Constant:
+0:101                    0 (const int)
+0:101              Constant:
+0:101                1 (const int)
+0:101            Sequence
+0:101              Constant:
+0:101                0 (const int)
+0:101              Constant:
+0:101                1 (const int)
+0:102      move second child to first child ( temp 3-component vector of int)
+0:102        vector swizzle ( temp 3-component vector of int)
+0:102          i: direct index for structure ( temp 4-component vector of int)
+0:102            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:102              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:102                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:102                Constant:
+0:102                  0 (const uint)
+0:102              direct index ( temp uint)
+0:102                'dti' ( in 3-component vector of uint)
+0:102                Constant:
+0:102                  0 (const int)
+0:102            Constant:
+0:102              1 (const int)
+0:102          Sequence
+0:102            Constant:
+0:102              0 (const int)
+0:102            Constant:
+0:102              1 (const int)
+0:102            Constant:
+0:102              2 (const int)
+0:102        subgroupQuadSwapHorizontal ( temp 3-component vector of int)
+0:102          vector swizzle ( temp 3-component vector of int)
+0:102            i: direct index for structure ( temp 4-component vector of int)
+0:102              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:102                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:102                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:102                  Constant:
+0:102                    0 (const uint)
+0:102                direct index ( temp uint)
+0:102                  'dti' ( in 3-component vector of uint)
+0:102                  Constant:
+0:102                    0 (const int)
+0:102              Constant:
+0:102                1 (const int)
+0:102            Sequence
+0:102              Constant:
+0:102                0 (const int)
+0:102              Constant:
+0:102                1 (const int)
+0:102              Constant:
+0:102                2 (const int)
+0:104      move second child to first child ( temp 4-component vector of float)
+0:104        f: direct index for structure ( temp 4-component vector of float)
+0:104          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:104            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:104              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:104              Constant:
+0:104                0 (const uint)
+0:104            direct index ( temp uint)
+0:104              'dti' ( in 3-component vector of uint)
+0:104              Constant:
+0:104                0 (const int)
+0:104          Constant:
+0:104            2 (const int)
+0:104        subgroupQuadSwapHorizontal ( temp 4-component vector of float)
+0:104          f: direct index for structure ( temp 4-component vector of float)
+0:104            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:104              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:104                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:104                Constant:
+0:104                  0 (const uint)
+0:104              direct index ( temp uint)
+0:104                'dti' ( in 3-component vector of uint)
+0:104                Constant:
+0:104                  0 (const int)
+0:104            Constant:
+0:104              2 (const int)
+0:105      move second child to first child ( temp float)
+0:105        direct index ( temp float)
+0:105          f: direct index for structure ( temp 4-component vector of float)
+0:105            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:105              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:105                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:105                Constant:
+0:105                  0 (const uint)
+0:105              direct index ( temp uint)
+0:105                'dti' ( in 3-component vector of uint)
+0:105                Constant:
+0:105                  0 (const int)
+0:105            Constant:
+0:105              2 (const int)
+0:105          Constant:
+0:105            0 (const int)
+0:105        subgroupQuadSwapHorizontal ( temp float)
+0:105          direct index ( temp float)
+0:105            f: direct index for structure ( temp 4-component vector of float)
+0:105              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:105                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:105                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:105                  Constant:
+0:105                    0 (const uint)
+0:105                direct index ( temp uint)
+0:105                  'dti' ( in 3-component vector of uint)
+0:105                  Constant:
+0:105                    0 (const int)
+0:105              Constant:
+0:105                2 (const int)
+0:105            Constant:
+0:105              0 (const int)
+0:106      move second child to first child ( temp 2-component vector of float)
+0:106        vector swizzle ( temp 2-component vector of float)
+0:106          f: direct index for structure ( temp 4-component vector of float)
+0:106            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:106              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:106                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:106                Constant:
+0:106                  0 (const uint)
+0:106              direct index ( temp uint)
+0:106                'dti' ( in 3-component vector of uint)
+0:106                Constant:
+0:106                  0 (const int)
+0:106            Constant:
+0:106              2 (const int)
+0:106          Sequence
+0:106            Constant:
+0:106              0 (const int)
+0:106            Constant:
+0:106              1 (const int)
+0:106        subgroupQuadSwapHorizontal ( temp 2-component vector of float)
+0:106          vector swizzle ( temp 2-component vector of float)
+0:106            f: direct index for structure ( temp 4-component vector of float)
+0:106              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:106                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:106                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:106                  Constant:
+0:106                    0 (const uint)
+0:106                direct index ( temp uint)
+0:106                  'dti' ( in 3-component vector of uint)
+0:106                  Constant:
+0:106                    0 (const int)
+0:106              Constant:
+0:106                2 (const int)
+0:106            Sequence
+0:106              Constant:
+0:106                0 (const int)
+0:106              Constant:
+0:106                1 (const int)
+0:107      move second child to first child ( temp 3-component vector of float)
+0:107        vector swizzle ( temp 3-component vector of float)
+0:107          f: direct index for structure ( temp 4-component vector of float)
+0:107            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:107              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:107                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:107                Constant:
+0:107                  0 (const uint)
+0:107              direct index ( temp uint)
+0:107                'dti' ( in 3-component vector of uint)
+0:107                Constant:
+0:107                  0 (const int)
+0:107            Constant:
+0:107              2 (const int)
+0:107          Sequence
+0:107            Constant:
+0:107              0 (const int)
+0:107            Constant:
+0:107              1 (const int)
+0:107            Constant:
+0:107              2 (const int)
+0:107        subgroupQuadSwapHorizontal ( temp 3-component vector of float)
+0:107          vector swizzle ( temp 3-component vector of float)
+0:107            f: direct index for structure ( temp 4-component vector of float)
+0:107              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:107                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:107                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:107                  Constant:
+0:107                    0 (const uint)
+0:107                direct index ( temp uint)
+0:107                  'dti' ( in 3-component vector of uint)
+0:107                  Constant:
+0:107                    0 (const int)
+0:107              Constant:
+0:107                2 (const int)
+0:107            Sequence
+0:107              Constant:
+0:107                0 (const int)
+0:107              Constant:
+0:107                1 (const int)
+0:107              Constant:
+0:107                2 (const int)
+0:109      move second child to first child ( temp 4-component vector of double)
+0:109        d: direct index for structure ( temp 4-component vector of double)
+0:109          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:109            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:109              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:109              Constant:
+0:109                0 (const uint)
+0:109            direct index ( temp uint)
+0:109              'dti' ( in 3-component vector of uint)
+0:109              Constant:
+0:109                0 (const int)
+0:109          Constant:
+0:109            3 (const int)
+0:109        subgroupQuadSwapHorizontal ( temp 4-component vector of double)
+0:109          d: direct index for structure ( temp 4-component vector of double)
+0:109            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:109              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:109                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:109                Constant:
+0:109                  0 (const uint)
+0:109              direct index ( temp uint)
+0:109                'dti' ( in 3-component vector of uint)
+0:109                Constant:
+0:109                  0 (const int)
+0:109            Constant:
+0:109              3 (const int)
+0:110      move second child to first child ( temp double)
+0:110        direct index ( temp double)
+0:110          d: direct index for structure ( temp 4-component vector of double)
+0:110            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:110              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:110                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:110                Constant:
+0:110                  0 (const uint)
+0:110              direct index ( temp uint)
+0:110                'dti' ( in 3-component vector of uint)
+0:110                Constant:
+0:110                  0 (const int)
+0:110            Constant:
+0:110              3 (const int)
+0:110          Constant:
+0:110            0 (const int)
+0:110        subgroupQuadSwapHorizontal ( temp double)
+0:110          direct index ( temp double)
+0:110            d: direct index for structure ( temp 4-component vector of double)
+0:110              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:110                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:110                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:110                  Constant:
+0:110                    0 (const uint)
+0:110                direct index ( temp uint)
+0:110                  'dti' ( in 3-component vector of uint)
+0:110                  Constant:
+0:110                    0 (const int)
+0:110              Constant:
+0:110                3 (const int)
+0:110            Constant:
+0:110              0 (const int)
+0:111      move second child to first child ( temp 2-component vector of double)
+0:111        vector swizzle ( temp 2-component vector of double)
+0:111          d: direct index for structure ( temp 4-component vector of double)
+0:111            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:111              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:111                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:111                Constant:
+0:111                  0 (const uint)
+0:111              direct index ( temp uint)
+0:111                'dti' ( in 3-component vector of uint)
+0:111                Constant:
+0:111                  0 (const int)
+0:111            Constant:
+0:111              3 (const int)
+0:111          Sequence
+0:111            Constant:
+0:111              0 (const int)
+0:111            Constant:
+0:111              1 (const int)
+0:111        subgroupQuadSwapHorizontal ( temp 2-component vector of double)
+0:111          vector swizzle ( temp 2-component vector of double)
+0:111            d: direct index for structure ( temp 4-component vector of double)
+0:111              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:111                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:111                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:111                  Constant:
+0:111                    0 (const uint)
+0:111                direct index ( temp uint)
+0:111                  'dti' ( in 3-component vector of uint)
+0:111                  Constant:
+0:111                    0 (const int)
+0:111              Constant:
+0:111                3 (const int)
+0:111            Sequence
+0:111              Constant:
+0:111                0 (const int)
+0:111              Constant:
+0:111                1 (const int)
+0:112      move second child to first child ( temp 3-component vector of double)
+0:112        vector swizzle ( temp 3-component vector of double)
+0:112          d: direct index for structure ( temp 4-component vector of double)
+0:112            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:112              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:112                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:112                Constant:
+0:112                  0 (const uint)
+0:112              direct index ( temp uint)
+0:112                'dti' ( in 3-component vector of uint)
+0:112                Constant:
+0:112                  0 (const int)
+0:112            Constant:
+0:112              3 (const int)
+0:112          Sequence
+0:112            Constant:
+0:112              0 (const int)
+0:112            Constant:
+0:112              1 (const int)
+0:112            Constant:
+0:112              2 (const int)
+0:112        subgroupQuadSwapHorizontal ( temp 3-component vector of double)
+0:112          vector swizzle ( temp 3-component vector of double)
+0:112            d: direct index for structure ( temp 4-component vector of double)
+0:112              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:112                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:112                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:112                  Constant:
+0:112                    0 (const uint)
+0:112                direct index ( temp uint)
+0:112                  'dti' ( in 3-component vector of uint)
+0:112                  Constant:
+0:112                    0 (const int)
+0:112              Constant:
+0:112                3 (const int)
+0:112            Sequence
+0:112              Constant:
+0:112                0 (const int)
+0:112              Constant:
+0:112                1 (const int)
+0:112              Constant:
+0:112                2 (const int)
+0:114      move second child to first child ( temp 4-component vector of uint)
+0:114        u: direct index for structure ( temp 4-component vector of uint)
+0:114          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:114            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:114              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:114              Constant:
+0:114                0 (const uint)
+0:114            direct index ( temp uint)
+0:114              'dti' ( in 3-component vector of uint)
+0:114              Constant:
+0:114                0 (const int)
+0:114          Constant:
+0:114            0 (const int)
+0:114        subgroupQuadSwapVertical ( temp 4-component vector of uint)
+0:114          u: direct index for structure ( temp 4-component vector of uint)
+0:114            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:114              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:114                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:114                Constant:
+0:114                  0 (const uint)
+0:114              direct index ( temp uint)
+0:114                'dti' ( in 3-component vector of uint)
+0:114                Constant:
+0:114                  0 (const int)
+0:114            Constant:
+0:114              0 (const int)
+0:115      move second child to first child ( temp uint)
+0:115        direct index ( temp uint)
+0:115          u: direct index for structure ( temp 4-component vector of uint)
+0:115            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:115              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:115                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:115                Constant:
+0:115                  0 (const uint)
+0:115              direct index ( temp uint)
+0:115                'dti' ( in 3-component vector of uint)
+0:115                Constant:
+0:115                  0 (const int)
+0:115            Constant:
+0:115              0 (const int)
+0:115          Constant:
+0:115            0 (const int)
+0:115        subgroupQuadSwapVertical ( temp uint)
+0:115          direct index ( temp uint)
+0:115            u: direct index for structure ( temp 4-component vector of uint)
+0:115              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:115                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:115                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:115                  Constant:
+0:115                    0 (const uint)
+0:115                direct index ( temp uint)
+0:115                  'dti' ( in 3-component vector of uint)
+0:115                  Constant:
+0:115                    0 (const int)
+0:115              Constant:
+0:115                0 (const int)
+0:115            Constant:
+0:115              0 (const int)
+0:116      move second child to first child ( temp 2-component vector of uint)
+0:116        vector swizzle ( temp 2-component vector of uint)
+0:116          u: direct index for structure ( temp 4-component vector of uint)
+0:116            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:116              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:116                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:116                Constant:
+0:116                  0 (const uint)
+0:116              direct index ( temp uint)
+0:116                'dti' ( in 3-component vector of uint)
+0:116                Constant:
+0:116                  0 (const int)
+0:116            Constant:
+0:116              0 (const int)
+0:116          Sequence
+0:116            Constant:
+0:116              0 (const int)
+0:116            Constant:
+0:116              1 (const int)
+0:116        subgroupQuadSwapVertical ( temp 2-component vector of uint)
+0:116          vector swizzle ( temp 2-component vector of uint)
+0:116            u: direct index for structure ( temp 4-component vector of uint)
+0:116              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:116                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:116                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:116                  Constant:
+0:116                    0 (const uint)
+0:116                direct index ( temp uint)
+0:116                  'dti' ( in 3-component vector of uint)
+0:116                  Constant:
+0:116                    0 (const int)
+0:116              Constant:
+0:116                0 (const int)
+0:116            Sequence
+0:116              Constant:
+0:116                0 (const int)
+0:116              Constant:
+0:116                1 (const int)
+0:117      move second child to first child ( temp 3-component vector of uint)
+0:117        vector swizzle ( temp 3-component vector of uint)
+0:117          u: direct index for structure ( temp 4-component vector of uint)
+0:117            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:117              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:117                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:117                Constant:
+0:117                  0 (const uint)
+0:117              direct index ( temp uint)
+0:117                'dti' ( in 3-component vector of uint)
+0:117                Constant:
+0:117                  0 (const int)
+0:117            Constant:
+0:117              0 (const int)
+0:117          Sequence
+0:117            Constant:
+0:117              0 (const int)
+0:117            Constant:
+0:117              1 (const int)
+0:117            Constant:
+0:117              2 (const int)
+0:117        subgroupQuadSwapVertical ( temp 3-component vector of uint)
+0:117          vector swizzle ( temp 3-component vector of uint)
+0:117            u: direct index for structure ( temp 4-component vector of uint)
+0:117              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:117                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:117                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:117                  Constant:
+0:117                    0 (const uint)
+0:117                direct index ( temp uint)
+0:117                  'dti' ( in 3-component vector of uint)
+0:117                  Constant:
+0:117                    0 (const int)
+0:117              Constant:
+0:117                0 (const int)
+0:117            Sequence
+0:117              Constant:
+0:117                0 (const int)
+0:117              Constant:
+0:117                1 (const int)
+0:117              Constant:
+0:117                2 (const int)
+0:119      move second child to first child ( temp 4-component vector of int)
+0:119        i: direct index for structure ( temp 4-component vector of int)
+0:119          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:119            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:119              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:119              Constant:
+0:119                0 (const uint)
+0:119            direct index ( temp uint)
+0:119              'dti' ( in 3-component vector of uint)
+0:119              Constant:
+0:119                0 (const int)
+0:119          Constant:
+0:119            1 (const int)
+0:119        subgroupQuadSwapVertical ( temp 4-component vector of int)
+0:119          i: direct index for structure ( temp 4-component vector of int)
+0:119            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:119              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:119                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:119                Constant:
+0:119                  0 (const uint)
+0:119              direct index ( temp uint)
+0:119                'dti' ( in 3-component vector of uint)
+0:119                Constant:
+0:119                  0 (const int)
+0:119            Constant:
+0:119              1 (const int)
+0:120      move second child to first child ( temp int)
+0:120        direct index ( temp int)
+0:120          i: direct index for structure ( temp 4-component vector of int)
+0:120            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:120              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:120                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:120                Constant:
+0:120                  0 (const uint)
+0:120              direct index ( temp uint)
+0:120                'dti' ( in 3-component vector of uint)
+0:120                Constant:
+0:120                  0 (const int)
+0:120            Constant:
+0:120              1 (const int)
+0:120          Constant:
+0:120            0 (const int)
+0:120        subgroupQuadSwapVertical ( temp int)
+0:120          direct index ( temp int)
+0:120            i: direct index for structure ( temp 4-component vector of int)
+0:120              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:120                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:120                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:120                  Constant:
+0:120                    0 (const uint)
+0:120                direct index ( temp uint)
+0:120                  'dti' ( in 3-component vector of uint)
+0:120                  Constant:
+0:120                    0 (const int)
+0:120              Constant:
+0:120                1 (const int)
+0:120            Constant:
+0:120              0 (const int)
+0:121      move second child to first child ( temp 2-component vector of int)
+0:121        vector swizzle ( temp 2-component vector of int)
+0:121          i: direct index for structure ( temp 4-component vector of int)
+0:121            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:121              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:121                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:121                Constant:
+0:121                  0 (const uint)
+0:121              direct index ( temp uint)
+0:121                'dti' ( in 3-component vector of uint)
+0:121                Constant:
+0:121                  0 (const int)
+0:121            Constant:
+0:121              1 (const int)
+0:121          Sequence
+0:121            Constant:
+0:121              0 (const int)
+0:121            Constant:
+0:121              1 (const int)
+0:121        subgroupQuadSwapVertical ( temp 2-component vector of int)
+0:121          vector swizzle ( temp 2-component vector of int)
+0:121            i: direct index for structure ( temp 4-component vector of int)
+0:121              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:121                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:121                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:121                  Constant:
+0:121                    0 (const uint)
+0:121                direct index ( temp uint)
+0:121                  'dti' ( in 3-component vector of uint)
+0:121                  Constant:
+0:121                    0 (const int)
+0:121              Constant:
+0:121                1 (const int)
+0:121            Sequence
+0:121              Constant:
+0:121                0 (const int)
+0:121              Constant:
+0:121                1 (const int)
+0:122      move second child to first child ( temp 3-component vector of int)
+0:122        vector swizzle ( temp 3-component vector of int)
+0:122          i: direct index for structure ( temp 4-component vector of int)
+0:122            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:122              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:122                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:122                Constant:
+0:122                  0 (const uint)
+0:122              direct index ( temp uint)
+0:122                'dti' ( in 3-component vector of uint)
+0:122                Constant:
+0:122                  0 (const int)
+0:122            Constant:
+0:122              1 (const int)
+0:122          Sequence
+0:122            Constant:
+0:122              0 (const int)
+0:122            Constant:
+0:122              1 (const int)
+0:122            Constant:
+0:122              2 (const int)
+0:122        subgroupQuadSwapVertical ( temp 3-component vector of int)
+0:122          vector swizzle ( temp 3-component vector of int)
+0:122            i: direct index for structure ( temp 4-component vector of int)
+0:122              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:122                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:122                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:122                  Constant:
+0:122                    0 (const uint)
+0:122                direct index ( temp uint)
+0:122                  'dti' ( in 3-component vector of uint)
+0:122                  Constant:
+0:122                    0 (const int)
+0:122              Constant:
+0:122                1 (const int)
+0:122            Sequence
+0:122              Constant:
+0:122                0 (const int)
+0:122              Constant:
+0:122                1 (const int)
+0:122              Constant:
+0:122                2 (const int)
+0:124      move second child to first child ( temp 4-component vector of float)
+0:124        f: direct index for structure ( temp 4-component vector of float)
+0:124          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:124            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:124              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:124              Constant:
+0:124                0 (const uint)
+0:124            direct index ( temp uint)
+0:124              'dti' ( in 3-component vector of uint)
+0:124              Constant:
+0:124                0 (const int)
+0:124          Constant:
+0:124            2 (const int)
+0:124        subgroupQuadSwapVertical ( temp 4-component vector of float)
+0:124          f: direct index for structure ( temp 4-component vector of float)
+0:124            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:124              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:124                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:124                Constant:
+0:124                  0 (const uint)
+0:124              direct index ( temp uint)
+0:124                'dti' ( in 3-component vector of uint)
+0:124                Constant:
+0:124                  0 (const int)
+0:124            Constant:
+0:124              2 (const int)
+0:125      move second child to first child ( temp float)
+0:125        direct index ( temp float)
+0:125          f: direct index for structure ( temp 4-component vector of float)
+0:125            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:125              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:125                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:125                Constant:
+0:125                  0 (const uint)
+0:125              direct index ( temp uint)
+0:125                'dti' ( in 3-component vector of uint)
+0:125                Constant:
+0:125                  0 (const int)
+0:125            Constant:
+0:125              2 (const int)
+0:125          Constant:
+0:125            0 (const int)
+0:125        subgroupQuadSwapVertical ( temp float)
+0:125          direct index ( temp float)
+0:125            f: direct index for structure ( temp 4-component vector of float)
+0:125              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:125                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:125                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:125                  Constant:
+0:125                    0 (const uint)
+0:125                direct index ( temp uint)
+0:125                  'dti' ( in 3-component vector of uint)
+0:125                  Constant:
+0:125                    0 (const int)
+0:125              Constant:
+0:125                2 (const int)
+0:125            Constant:
+0:125              0 (const int)
+0:126      move second child to first child ( temp 2-component vector of float)
+0:126        vector swizzle ( temp 2-component vector of float)
+0:126          f: direct index for structure ( temp 4-component vector of float)
+0:126            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:126              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:126                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:126                Constant:
+0:126                  0 (const uint)
+0:126              direct index ( temp uint)
+0:126                'dti' ( in 3-component vector of uint)
+0:126                Constant:
+0:126                  0 (const int)
+0:126            Constant:
+0:126              2 (const int)
+0:126          Sequence
+0:126            Constant:
+0:126              0 (const int)
+0:126            Constant:
+0:126              1 (const int)
+0:126        subgroupQuadSwapVertical ( temp 2-component vector of float)
+0:126          vector swizzle ( temp 2-component vector of float)
+0:126            f: direct index for structure ( temp 4-component vector of float)
+0:126              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:126                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:126                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:126                  Constant:
+0:126                    0 (const uint)
+0:126                direct index ( temp uint)
+0:126                  'dti' ( in 3-component vector of uint)
+0:126                  Constant:
+0:126                    0 (const int)
+0:126              Constant:
+0:126                2 (const int)
+0:126            Sequence
+0:126              Constant:
+0:126                0 (const int)
+0:126              Constant:
+0:126                1 (const int)
+0:127      move second child to first child ( temp 3-component vector of float)
+0:127        vector swizzle ( temp 3-component vector of float)
+0:127          f: direct index for structure ( temp 4-component vector of float)
+0:127            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:127              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:127                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:127                Constant:
+0:127                  0 (const uint)
+0:127              direct index ( temp uint)
+0:127                'dti' ( in 3-component vector of uint)
+0:127                Constant:
+0:127                  0 (const int)
+0:127            Constant:
+0:127              2 (const int)
+0:127          Sequence
+0:127            Constant:
+0:127              0 (const int)
+0:127            Constant:
+0:127              1 (const int)
+0:127            Constant:
+0:127              2 (const int)
+0:127        subgroupQuadSwapVertical ( temp 3-component vector of float)
+0:127          vector swizzle ( temp 3-component vector of float)
+0:127            f: direct index for structure ( temp 4-component vector of float)
+0:127              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:127                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:127                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:127                  Constant:
+0:127                    0 (const uint)
+0:127                direct index ( temp uint)
+0:127                  'dti' ( in 3-component vector of uint)
+0:127                  Constant:
+0:127                    0 (const int)
+0:127              Constant:
+0:127                2 (const int)
+0:127            Sequence
+0:127              Constant:
+0:127                0 (const int)
+0:127              Constant:
+0:127                1 (const int)
+0:127              Constant:
+0:127                2 (const int)
+0:129      move second child to first child ( temp 4-component vector of double)
+0:129        d: direct index for structure ( temp 4-component vector of double)
+0:129          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:129            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:129              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:129              Constant:
+0:129                0 (const uint)
+0:129            direct index ( temp uint)
+0:129              'dti' ( in 3-component vector of uint)
+0:129              Constant:
+0:129                0 (const int)
+0:129          Constant:
+0:129            3 (const int)
+0:129        subgroupQuadSwapVertical ( temp 4-component vector of double)
+0:129          d: direct index for structure ( temp 4-component vector of double)
+0:129            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:129              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:129                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:129                Constant:
+0:129                  0 (const uint)
+0:129              direct index ( temp uint)
+0:129                'dti' ( in 3-component vector of uint)
+0:129                Constant:
+0:129                  0 (const int)
+0:129            Constant:
+0:129              3 (const int)
+0:130      move second child to first child ( temp double)
+0:130        direct index ( temp double)
+0:130          d: direct index for structure ( temp 4-component vector of double)
+0:130            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:130              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:130                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:130                Constant:
+0:130                  0 (const uint)
+0:130              direct index ( temp uint)
+0:130                'dti' ( in 3-component vector of uint)
+0:130                Constant:
+0:130                  0 (const int)
+0:130            Constant:
+0:130              3 (const int)
+0:130          Constant:
+0:130            0 (const int)
+0:130        subgroupQuadSwapVertical ( temp double)
+0:130          direct index ( temp double)
+0:130            d: direct index for structure ( temp 4-component vector of double)
+0:130              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:130                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:130                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:130                  Constant:
+0:130                    0 (const uint)
+0:130                direct index ( temp uint)
+0:130                  'dti' ( in 3-component vector of uint)
+0:130                  Constant:
+0:130                    0 (const int)
+0:130              Constant:
+0:130                3 (const int)
+0:130            Constant:
+0:130              0 (const int)
+0:131      move second child to first child ( temp 2-component vector of double)
+0:131        vector swizzle ( temp 2-component vector of double)
+0:131          d: direct index for structure ( temp 4-component vector of double)
+0:131            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:131              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:131                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:131                Constant:
+0:131                  0 (const uint)
+0:131              direct index ( temp uint)
+0:131                'dti' ( in 3-component vector of uint)
+0:131                Constant:
+0:131                  0 (const int)
+0:131            Constant:
+0:131              3 (const int)
+0:131          Sequence
+0:131            Constant:
+0:131              0 (const int)
+0:131            Constant:
+0:131              1 (const int)
+0:131        subgroupQuadSwapVertical ( temp 2-component vector of double)
+0:131          vector swizzle ( temp 2-component vector of double)
+0:131            d: direct index for structure ( temp 4-component vector of double)
+0:131              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:131                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:131                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:131                  Constant:
+0:131                    0 (const uint)
+0:131                direct index ( temp uint)
+0:131                  'dti' ( in 3-component vector of uint)
+0:131                  Constant:
+0:131                    0 (const int)
+0:131              Constant:
+0:131                3 (const int)
+0:131            Sequence
+0:131              Constant:
+0:131                0 (const int)
+0:131              Constant:
+0:131                1 (const int)
+0:132      move second child to first child ( temp 3-component vector of double)
+0:132        vector swizzle ( temp 3-component vector of double)
+0:132          d: direct index for structure ( temp 4-component vector of double)
+0:132            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:132              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:132                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:132                Constant:
+0:132                  0 (const uint)
+0:132              direct index ( temp uint)
+0:132                'dti' ( in 3-component vector of uint)
+0:132                Constant:
+0:132                  0 (const int)
+0:132            Constant:
+0:132              3 (const int)
+0:132          Sequence
+0:132            Constant:
+0:132              0 (const int)
+0:132            Constant:
+0:132              1 (const int)
+0:132            Constant:
+0:132              2 (const int)
+0:132        subgroupQuadSwapVertical ( temp 3-component vector of double)
+0:132          vector swizzle ( temp 3-component vector of double)
+0:132            d: direct index for structure ( temp 4-component vector of double)
+0:132              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:132                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:132                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:132                  Constant:
+0:132                    0 (const uint)
+0:132                direct index ( temp uint)
+0:132                  'dti' ( in 3-component vector of uint)
+0:132                  Constant:
+0:132                    0 (const int)
+0:132              Constant:
+0:132                3 (const int)
+0:132            Sequence
+0:132              Constant:
+0:132                0 (const int)
+0:132              Constant:
+0:132                1 (const int)
+0:132              Constant:
+0:132                2 (const int)
+0:134      move second child to first child ( temp 4-component vector of uint)
+0:134        u: direct index for structure ( temp 4-component vector of uint)
+0:134          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:134            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:134              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:134              Constant:
+0:134                0 (const uint)
+0:134            direct index ( temp uint)
+0:134              'dti' ( in 3-component vector of uint)
+0:134              Constant:
+0:134                0 (const int)
+0:134          Constant:
+0:134            0 (const int)
+0:134        subgroupQuadSwapDiagonal ( temp 4-component vector of uint)
+0:134          u: direct index for structure ( temp 4-component vector of uint)
+0:134            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:134              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:134                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:134                Constant:
+0:134                  0 (const uint)
+0:134              direct index ( temp uint)
+0:134                'dti' ( in 3-component vector of uint)
+0:134                Constant:
+0:134                  0 (const int)
+0:134            Constant:
+0:134              0 (const int)
+0:135      move second child to first child ( temp uint)
+0:135        direct index ( temp uint)
+0:135          u: direct index for structure ( temp 4-component vector of uint)
+0:135            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:135              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:135                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:135                Constant:
+0:135                  0 (const uint)
+0:135              direct index ( temp uint)
+0:135                'dti' ( in 3-component vector of uint)
+0:135                Constant:
+0:135                  0 (const int)
+0:135            Constant:
+0:135              0 (const int)
+0:135          Constant:
+0:135            0 (const int)
+0:135        subgroupQuadSwapDiagonal ( temp uint)
+0:135          direct index ( temp uint)
+0:135            u: direct index for structure ( temp 4-component vector of uint)
+0:135              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:135                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:135                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:135                  Constant:
+0:135                    0 (const uint)
+0:135                direct index ( temp uint)
+0:135                  'dti' ( in 3-component vector of uint)
+0:135                  Constant:
+0:135                    0 (const int)
+0:135              Constant:
+0:135                0 (const int)
+0:135            Constant:
+0:135              0 (const int)
+0:136      move second child to first child ( temp 2-component vector of uint)
+0:136        vector swizzle ( temp 2-component vector of uint)
+0:136          u: direct index for structure ( temp 4-component vector of uint)
+0:136            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:136              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:136                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:136                Constant:
+0:136                  0 (const uint)
+0:136              direct index ( temp uint)
+0:136                'dti' ( in 3-component vector of uint)
+0:136                Constant:
+0:136                  0 (const int)
+0:136            Constant:
+0:136              0 (const int)
+0:136          Sequence
+0:136            Constant:
+0:136              0 (const int)
+0:136            Constant:
+0:136              1 (const int)
+0:136        subgroupQuadSwapDiagonal ( temp 2-component vector of uint)
+0:136          vector swizzle ( temp 2-component vector of uint)
+0:136            u: direct index for structure ( temp 4-component vector of uint)
+0:136              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:136                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:136                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:136                  Constant:
+0:136                    0 (const uint)
+0:136                direct index ( temp uint)
+0:136                  'dti' ( in 3-component vector of uint)
+0:136                  Constant:
+0:136                    0 (const int)
+0:136              Constant:
+0:136                0 (const int)
+0:136            Sequence
+0:136              Constant:
+0:136                0 (const int)
+0:136              Constant:
+0:136                1 (const int)
+0:137      move second child to first child ( temp 3-component vector of uint)
+0:137        vector swizzle ( temp 3-component vector of uint)
+0:137          u: direct index for structure ( temp 4-component vector of uint)
+0:137            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:137              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:137                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:137                Constant:
+0:137                  0 (const uint)
+0:137              direct index ( temp uint)
+0:137                'dti' ( in 3-component vector of uint)
+0:137                Constant:
+0:137                  0 (const int)
+0:137            Constant:
+0:137              0 (const int)
+0:137          Sequence
+0:137            Constant:
+0:137              0 (const int)
+0:137            Constant:
+0:137              1 (const int)
+0:137            Constant:
+0:137              2 (const int)
+0:137        subgroupQuadSwapDiagonal ( temp 3-component vector of uint)
+0:137          vector swizzle ( temp 3-component vector of uint)
+0:137            u: direct index for structure ( temp 4-component vector of uint)
+0:137              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:137                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:137                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:137                  Constant:
+0:137                    0 (const uint)
+0:137                direct index ( temp uint)
+0:137                  'dti' ( in 3-component vector of uint)
+0:137                  Constant:
+0:137                    0 (const int)
+0:137              Constant:
+0:137                0 (const int)
+0:137            Sequence
+0:137              Constant:
+0:137                0 (const int)
+0:137              Constant:
+0:137                1 (const int)
+0:137              Constant:
+0:137                2 (const int)
+0:139      move second child to first child ( temp 4-component vector of int)
+0:139        i: direct index for structure ( temp 4-component vector of int)
+0:139          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:139            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:139              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:139              Constant:
+0:139                0 (const uint)
+0:139            direct index ( temp uint)
+0:139              'dti' ( in 3-component vector of uint)
+0:139              Constant:
+0:139                0 (const int)
+0:139          Constant:
+0:139            1 (const int)
+0:139        subgroupQuadSwapDiagonal ( temp 4-component vector of int)
+0:139          i: direct index for structure ( temp 4-component vector of int)
+0:139            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:139              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:139                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:139                Constant:
+0:139                  0 (const uint)
+0:139              direct index ( temp uint)
+0:139                'dti' ( in 3-component vector of uint)
+0:139                Constant:
+0:139                  0 (const int)
+0:139            Constant:
+0:139              1 (const int)
+0:140      move second child to first child ( temp int)
+0:140        direct index ( temp int)
+0:140          i: direct index for structure ( temp 4-component vector of int)
+0:140            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:140              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:140                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:140                Constant:
+0:140                  0 (const uint)
+0:140              direct index ( temp uint)
+0:140                'dti' ( in 3-component vector of uint)
+0:140                Constant:
+0:140                  0 (const int)
+0:140            Constant:
+0:140              1 (const int)
+0:140          Constant:
+0:140            0 (const int)
+0:140        subgroupQuadSwapDiagonal ( temp int)
+0:140          direct index ( temp int)
+0:140            i: direct index for structure ( temp 4-component vector of int)
+0:140              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:140                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:140                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:140                  Constant:
+0:140                    0 (const uint)
+0:140                direct index ( temp uint)
+0:140                  'dti' ( in 3-component vector of uint)
+0:140                  Constant:
+0:140                    0 (const int)
+0:140              Constant:
+0:140                1 (const int)
+0:140            Constant:
+0:140              0 (const int)
+0:141      move second child to first child ( temp 2-component vector of int)
+0:141        vector swizzle ( temp 2-component vector of int)
+0:141          i: direct index for structure ( temp 4-component vector of int)
+0:141            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:141              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:141                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:141                Constant:
+0:141                  0 (const uint)
+0:141              direct index ( temp uint)
+0:141                'dti' ( in 3-component vector of uint)
+0:141                Constant:
+0:141                  0 (const int)
+0:141            Constant:
+0:141              1 (const int)
+0:141          Sequence
+0:141            Constant:
+0:141              0 (const int)
+0:141            Constant:
+0:141              1 (const int)
+0:141        subgroupQuadSwapDiagonal ( temp 2-component vector of int)
+0:141          vector swizzle ( temp 2-component vector of int)
+0:141            i: direct index for structure ( temp 4-component vector of int)
+0:141              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:141                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:141                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:141                  Constant:
+0:141                    0 (const uint)
+0:141                direct index ( temp uint)
+0:141                  'dti' ( in 3-component vector of uint)
+0:141                  Constant:
+0:141                    0 (const int)
+0:141              Constant:
+0:141                1 (const int)
+0:141            Sequence
+0:141              Constant:
+0:141                0 (const int)
+0:141              Constant:
+0:141                1 (const int)
+0:142      move second child to first child ( temp 3-component vector of int)
+0:142        vector swizzle ( temp 3-component vector of int)
+0:142          i: direct index for structure ( temp 4-component vector of int)
+0:142            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:142              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:142                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:142                Constant:
+0:142                  0 (const uint)
+0:142              direct index ( temp uint)
+0:142                'dti' ( in 3-component vector of uint)
+0:142                Constant:
+0:142                  0 (const int)
+0:142            Constant:
+0:142              1 (const int)
+0:142          Sequence
+0:142            Constant:
+0:142              0 (const int)
+0:142            Constant:
+0:142              1 (const int)
+0:142            Constant:
+0:142              2 (const int)
+0:142        subgroupQuadSwapDiagonal ( temp 3-component vector of int)
+0:142          vector swizzle ( temp 3-component vector of int)
+0:142            i: direct index for structure ( temp 4-component vector of int)
+0:142              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:142                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:142                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:142                  Constant:
+0:142                    0 (const uint)
+0:142                direct index ( temp uint)
+0:142                  'dti' ( in 3-component vector of uint)
+0:142                  Constant:
+0:142                    0 (const int)
+0:142              Constant:
+0:142                1 (const int)
+0:142            Sequence
+0:142              Constant:
+0:142                0 (const int)
+0:142              Constant:
+0:142                1 (const int)
+0:142              Constant:
+0:142                2 (const int)
+0:144      move second child to first child ( temp 4-component vector of float)
+0:144        f: direct index for structure ( temp 4-component vector of float)
+0:144          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:144            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:144              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:144              Constant:
+0:144                0 (const uint)
+0:144            direct index ( temp uint)
+0:144              'dti' ( in 3-component vector of uint)
+0:144              Constant:
+0:144                0 (const int)
+0:144          Constant:
+0:144            2 (const int)
+0:144        subgroupQuadSwapDiagonal ( temp 4-component vector of float)
+0:144          f: direct index for structure ( temp 4-component vector of float)
+0:144            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:144              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:144                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:144                Constant:
+0:144                  0 (const uint)
+0:144              direct index ( temp uint)
+0:144                'dti' ( in 3-component vector of uint)
+0:144                Constant:
+0:144                  0 (const int)
+0:144            Constant:
+0:144              2 (const int)
+0:145      move second child to first child ( temp float)
+0:145        direct index ( temp float)
+0:145          f: direct index for structure ( temp 4-component vector of float)
+0:145            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:145              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:145                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:145                Constant:
+0:145                  0 (const uint)
+0:145              direct index ( temp uint)
+0:145                'dti' ( in 3-component vector of uint)
+0:145                Constant:
+0:145                  0 (const int)
+0:145            Constant:
+0:145              2 (const int)
+0:145          Constant:
+0:145            0 (const int)
+0:145        subgroupQuadSwapDiagonal ( temp float)
+0:145          direct index ( temp float)
+0:145            f: direct index for structure ( temp 4-component vector of float)
+0:145              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:145                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:145                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:145                  Constant:
+0:145                    0 (const uint)
+0:145                direct index ( temp uint)
+0:145                  'dti' ( in 3-component vector of uint)
+0:145                  Constant:
+0:145                    0 (const int)
+0:145              Constant:
+0:145                2 (const int)
+0:145            Constant:
+0:145              0 (const int)
+0:146      move second child to first child ( temp 2-component vector of float)
+0:146        vector swizzle ( temp 2-component vector of float)
+0:146          f: direct index for structure ( temp 4-component vector of float)
+0:146            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:146              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:146                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:146                Constant:
+0:146                  0 (const uint)
+0:146              direct index ( temp uint)
+0:146                'dti' ( in 3-component vector of uint)
+0:146                Constant:
+0:146                  0 (const int)
+0:146            Constant:
+0:146              2 (const int)
+0:146          Sequence
+0:146            Constant:
+0:146              0 (const int)
+0:146            Constant:
+0:146              1 (const int)
+0:146        subgroupQuadSwapDiagonal ( temp 2-component vector of float)
+0:146          vector swizzle ( temp 2-component vector of float)
+0:146            f: direct index for structure ( temp 4-component vector of float)
+0:146              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:146                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:146                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:146                  Constant:
+0:146                    0 (const uint)
+0:146                direct index ( temp uint)
+0:146                  'dti' ( in 3-component vector of uint)
+0:146                  Constant:
+0:146                    0 (const int)
+0:146              Constant:
+0:146                2 (const int)
+0:146            Sequence
+0:146              Constant:
+0:146                0 (const int)
+0:146              Constant:
+0:146                1 (const int)
+0:147      move second child to first child ( temp 3-component vector of float)
+0:147        vector swizzle ( temp 3-component vector of float)
+0:147          f: direct index for structure ( temp 4-component vector of float)
+0:147            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:147              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:147                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:147                Constant:
+0:147                  0 (const uint)
+0:147              direct index ( temp uint)
+0:147                'dti' ( in 3-component vector of uint)
+0:147                Constant:
+0:147                  0 (const int)
+0:147            Constant:
+0:147              2 (const int)
+0:147          Sequence
+0:147            Constant:
+0:147              0 (const int)
+0:147            Constant:
+0:147              1 (const int)
+0:147            Constant:
+0:147              2 (const int)
+0:147        subgroupQuadSwapDiagonal ( temp 3-component vector of float)
+0:147          vector swizzle ( temp 3-component vector of float)
+0:147            f: direct index for structure ( temp 4-component vector of float)
+0:147              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:147                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:147                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:147                  Constant:
+0:147                    0 (const uint)
+0:147                direct index ( temp uint)
+0:147                  'dti' ( in 3-component vector of uint)
+0:147                  Constant:
+0:147                    0 (const int)
+0:147              Constant:
+0:147                2 (const int)
+0:147            Sequence
+0:147              Constant:
+0:147                0 (const int)
+0:147              Constant:
+0:147                1 (const int)
+0:147              Constant:
+0:147                2 (const int)
+0:149      move second child to first child ( temp 4-component vector of double)
+0:149        d: direct index for structure ( temp 4-component vector of double)
+0:149          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:149            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:149              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:149              Constant:
+0:149                0 (const uint)
+0:149            direct index ( temp uint)
+0:149              'dti' ( in 3-component vector of uint)
+0:149              Constant:
+0:149                0 (const int)
+0:149          Constant:
+0:149            3 (const int)
+0:149        subgroupQuadSwapDiagonal ( temp 4-component vector of double)
+0:149          d: direct index for structure ( temp 4-component vector of double)
+0:149            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:149              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:149                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:149                Constant:
+0:149                  0 (const uint)
+0:149              direct index ( temp uint)
+0:149                'dti' ( in 3-component vector of uint)
+0:149                Constant:
+0:149                  0 (const int)
+0:149            Constant:
+0:149              3 (const int)
+0:150      move second child to first child ( temp double)
+0:150        direct index ( temp double)
+0:150          d: direct index for structure ( temp 4-component vector of double)
+0:150            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:150              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:150                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:150                Constant:
+0:150                  0 (const uint)
+0:150              direct index ( temp uint)
+0:150                'dti' ( in 3-component vector of uint)
+0:150                Constant:
+0:150                  0 (const int)
+0:150            Constant:
+0:150              3 (const int)
+0:150          Constant:
+0:150            0 (const int)
+0:150        subgroupQuadSwapDiagonal ( temp double)
+0:150          direct index ( temp double)
+0:150            d: direct index for structure ( temp 4-component vector of double)
+0:150              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:150                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:150                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:150                  Constant:
+0:150                    0 (const uint)
+0:150                direct index ( temp uint)
+0:150                  'dti' ( in 3-component vector of uint)
+0:150                  Constant:
+0:150                    0 (const int)
+0:150              Constant:
+0:150                3 (const int)
+0:150            Constant:
+0:150              0 (const int)
+0:151      move second child to first child ( temp 2-component vector of double)
+0:151        vector swizzle ( temp 2-component vector of double)
+0:151          d: direct index for structure ( temp 4-component vector of double)
+0:151            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:151              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:151                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:151                Constant:
+0:151                  0 (const uint)
+0:151              direct index ( temp uint)
+0:151                'dti' ( in 3-component vector of uint)
+0:151                Constant:
+0:151                  0 (const int)
+0:151            Constant:
+0:151              3 (const int)
+0:151          Sequence
+0:151            Constant:
+0:151              0 (const int)
+0:151            Constant:
+0:151              1 (const int)
+0:151        subgroupQuadSwapDiagonal ( temp 2-component vector of double)
+0:151          vector swizzle ( temp 2-component vector of double)
+0:151            d: direct index for structure ( temp 4-component vector of double)
+0:151              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:151                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:151                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:151                  Constant:
+0:151                    0 (const uint)
+0:151                direct index ( temp uint)
+0:151                  'dti' ( in 3-component vector of uint)
+0:151                  Constant:
+0:151                    0 (const int)
+0:151              Constant:
+0:151                3 (const int)
+0:151            Sequence
+0:151              Constant:
+0:151                0 (const int)
+0:151              Constant:
+0:151                1 (const int)
+0:152      move second child to first child ( temp 3-component vector of double)
+0:152        vector swizzle ( temp 3-component vector of double)
+0:152          d: direct index for structure ( temp 4-component vector of double)
+0:152            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:152              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:152                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:152                Constant:
+0:152                  0 (const uint)
+0:152              direct index ( temp uint)
+0:152                'dti' ( in 3-component vector of uint)
+0:152                Constant:
+0:152                  0 (const int)
+0:152            Constant:
+0:152              3 (const int)
+0:152          Sequence
+0:152            Constant:
+0:152              0 (const int)
+0:152            Constant:
+0:152              1 (const int)
+0:152            Constant:
+0:152              2 (const int)
+0:152        subgroupQuadSwapDiagonal ( temp 3-component vector of double)
+0:152          vector swizzle ( temp 3-component vector of double)
+0:152            d: direct index for structure ( temp 4-component vector of double)
+0:152              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:152                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:152                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:152                  Constant:
+0:152                    0 (const uint)
+0:152                direct index ( temp uint)
+0:152                  'dti' ( in 3-component vector of uint)
+0:152                  Constant:
+0:152                    0 (const int)
+0:152              Constant:
+0:152                3 (const int)
+0:152            Sequence
+0:152              Constant:
+0:152                0 (const int)
+0:152              Constant:
+0:152                1 (const int)
+0:152              Constant:
+0:152                2 (const int)
+0:13  Function Definition: CSMain( ( temp void)
+0:13    Function Parameters: 
+0:?     Sequence
+0:13      move second child to first child ( temp 3-component vector of uint)
+0:?         'dti' ( temp 3-component vector of uint)
+0:?         'dti' ( in 3-component vector of uint GlobalInvocationID)
+0:13      Function Call: @CSMain(vu3; ( temp void)
+0:?         'dti' ( temp 3-component vector of uint)
+0:?   Linker Objects
+0:?     'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:?     'dti' ( in 3-component vector of uint GlobalInvocationID)
+
+
+Linked compute stage:
+
+
+Shader version: 500
+local_size = (32, 16, 1)
+0:? Sequence
+0:13  Function Definition: @CSMain(vu3; ( temp void)
+0:13    Function Parameters: 
+0:13      'dti' ( in 3-component vector of uint)
+0:?     Sequence
+0:14      move second child to first child ( temp 4-component vector of uint)
+0:14        u: direct index for structure ( temp 4-component vector of uint)
+0:14          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:14            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:14              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:14              Constant:
+0:14                0 (const uint)
+0:14            direct index ( temp uint)
+0:14              'dti' ( in 3-component vector of uint)
+0:14              Constant:
+0:14                0 (const int)
+0:14          Constant:
+0:14            0 (const int)
+0:14        subgroupQuadBroadcast ( temp 4-component vector of uint)
+0:14          u: direct index for structure ( temp 4-component vector of uint)
+0:14            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:14              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:14                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:14                Constant:
+0:14                  0 (const uint)
+0:14              direct index ( temp uint)
+0:14                'dti' ( in 3-component vector of uint)
+0:14                Constant:
+0:14                  0 (const int)
+0:14            Constant:
+0:14              0 (const int)
+0:14          Constant:
+0:14            0 (const uint)
+0:15      move second child to first child ( temp uint)
+0:15        direct index ( temp uint)
+0:15          u: direct index for structure ( temp 4-component vector of uint)
+0:15            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:15              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:15                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:15                Constant:
+0:15                  0 (const uint)
+0:15              direct index ( temp uint)
+0:15                'dti' ( in 3-component vector of uint)
+0:15                Constant:
+0:15                  0 (const int)
+0:15            Constant:
+0:15              0 (const int)
+0:15          Constant:
+0:15            0 (const int)
+0:15        subgroupQuadBroadcast ( temp uint)
+0:15          direct index ( temp uint)
+0:15            u: direct index for structure ( temp 4-component vector of uint)
+0:15              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:15                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:15                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:15                  Constant:
+0:15                    0 (const uint)
+0:15                direct index ( temp uint)
+0:15                  'dti' ( in 3-component vector of uint)
+0:15                  Constant:
+0:15                    0 (const int)
+0:15              Constant:
+0:15                0 (const int)
+0:15            Constant:
+0:15              0 (const int)
+0:15          Constant:
+0:15            0 (const uint)
+0:16      move second child to first child ( temp 2-component vector of uint)
+0:16        vector swizzle ( temp 2-component vector of uint)
+0:16          u: direct index for structure ( temp 4-component vector of uint)
+0:16            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:16              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:16                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:16                Constant:
+0:16                  0 (const uint)
+0:16              direct index ( temp uint)
+0:16                'dti' ( in 3-component vector of uint)
+0:16                Constant:
+0:16                  0 (const int)
+0:16            Constant:
+0:16              0 (const int)
+0:16          Sequence
+0:16            Constant:
+0:16              0 (const int)
+0:16            Constant:
+0:16              1 (const int)
+0:16        subgroupQuadBroadcast ( temp 2-component vector of uint)
+0:16          vector swizzle ( temp 2-component vector of uint)
+0:16            u: direct index for structure ( temp 4-component vector of uint)
+0:16              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:16                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:16                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:16                  Constant:
+0:16                    0 (const uint)
+0:16                direct index ( temp uint)
+0:16                  'dti' ( in 3-component vector of uint)
+0:16                  Constant:
+0:16                    0 (const int)
+0:16              Constant:
+0:16                0 (const int)
+0:16            Sequence
+0:16              Constant:
+0:16                0 (const int)
+0:16              Constant:
+0:16                1 (const int)
+0:16          Constant:
+0:16            0 (const uint)
+0:17      move second child to first child ( temp 3-component vector of uint)
+0:17        vector swizzle ( temp 3-component vector of uint)
+0:17          u: direct index for structure ( temp 4-component vector of uint)
+0:17            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:17              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:17                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:17                Constant:
+0:17                  0 (const uint)
+0:17              direct index ( temp uint)
+0:17                'dti' ( in 3-component vector of uint)
+0:17                Constant:
+0:17                  0 (const int)
+0:17            Constant:
+0:17              0 (const int)
+0:17          Sequence
+0:17            Constant:
+0:17              0 (const int)
+0:17            Constant:
+0:17              1 (const int)
+0:17            Constant:
+0:17              2 (const int)
+0:17        subgroupQuadBroadcast ( temp 3-component vector of uint)
+0:17          vector swizzle ( temp 3-component vector of uint)
+0:17            u: direct index for structure ( temp 4-component vector of uint)
+0:17              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:17                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:17                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:17                  Constant:
+0:17                    0 (const uint)
+0:17                direct index ( temp uint)
+0:17                  'dti' ( in 3-component vector of uint)
+0:17                  Constant:
+0:17                    0 (const int)
+0:17              Constant:
+0:17                0 (const int)
+0:17            Sequence
+0:17              Constant:
+0:17                0 (const int)
+0:17              Constant:
+0:17                1 (const int)
+0:17              Constant:
+0:17                2 (const int)
+0:17          Constant:
+0:17            0 (const uint)
+0:19      move second child to first child ( temp 4-component vector of int)
+0:19        i: direct index for structure ( temp 4-component vector of int)
+0:19          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:19            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:19              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:19              Constant:
+0:19                0 (const uint)
+0:19            direct index ( temp uint)
+0:19              'dti' ( in 3-component vector of uint)
+0:19              Constant:
+0:19                0 (const int)
+0:19          Constant:
+0:19            1 (const int)
+0:19        subgroupQuadBroadcast ( temp 4-component vector of int)
+0:19          i: direct index for structure ( temp 4-component vector of int)
+0:19            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:19              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:19                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:19                Constant:
+0:19                  0 (const uint)
+0:19              direct index ( temp uint)
+0:19                'dti' ( in 3-component vector of uint)
+0:19                Constant:
+0:19                  0 (const int)
+0:19            Constant:
+0:19              1 (const int)
+0:19          Constant:
+0:19            0 (const uint)
+0:20      move second child to first child ( temp int)
+0:20        direct index ( temp int)
+0:20          i: direct index for structure ( temp 4-component vector of int)
+0:20            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:20              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:20                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:20                Constant:
+0:20                  0 (const uint)
+0:20              direct index ( temp uint)
+0:20                'dti' ( in 3-component vector of uint)
+0:20                Constant:
+0:20                  0 (const int)
+0:20            Constant:
+0:20              1 (const int)
+0:20          Constant:
+0:20            0 (const int)
+0:20        subgroupQuadBroadcast ( temp int)
+0:20          direct index ( temp int)
+0:20            i: direct index for structure ( temp 4-component vector of int)
+0:20              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:20                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:20                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:20                  Constant:
+0:20                    0 (const uint)
+0:20                direct index ( temp uint)
+0:20                  'dti' ( in 3-component vector of uint)
+0:20                  Constant:
+0:20                    0 (const int)
+0:20              Constant:
+0:20                1 (const int)
+0:20            Constant:
+0:20              0 (const int)
+0:20          Constant:
+0:20            0 (const uint)
+0:21      move second child to first child ( temp 2-component vector of int)
+0:21        vector swizzle ( temp 2-component vector of int)
+0:21          i: direct index for structure ( temp 4-component vector of int)
+0:21            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:21              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:21                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:21                Constant:
+0:21                  0 (const uint)
+0:21              direct index ( temp uint)
+0:21                'dti' ( in 3-component vector of uint)
+0:21                Constant:
+0:21                  0 (const int)
+0:21            Constant:
+0:21              1 (const int)
+0:21          Sequence
+0:21            Constant:
+0:21              0 (const int)
+0:21            Constant:
+0:21              1 (const int)
+0:21        subgroupQuadBroadcast ( temp 2-component vector of int)
+0:21          vector swizzle ( temp 2-component vector of int)
+0:21            i: direct index for structure ( temp 4-component vector of int)
+0:21              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:21                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:21                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:21                  Constant:
+0:21                    0 (const uint)
+0:21                direct index ( temp uint)
+0:21                  'dti' ( in 3-component vector of uint)
+0:21                  Constant:
+0:21                    0 (const int)
+0:21              Constant:
+0:21                1 (const int)
+0:21            Sequence
+0:21              Constant:
+0:21                0 (const int)
+0:21              Constant:
+0:21                1 (const int)
+0:21          Constant:
+0:21            0 (const uint)
+0:22      move second child to first child ( temp 3-component vector of int)
+0:22        vector swizzle ( temp 3-component vector of int)
+0:22          i: direct index for structure ( temp 4-component vector of int)
+0:22            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:22              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:22                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:22                Constant:
+0:22                  0 (const uint)
+0:22              direct index ( temp uint)
+0:22                'dti' ( in 3-component vector of uint)
+0:22                Constant:
+0:22                  0 (const int)
+0:22            Constant:
+0:22              1 (const int)
+0:22          Sequence
+0:22            Constant:
+0:22              0 (const int)
+0:22            Constant:
+0:22              1 (const int)
+0:22            Constant:
+0:22              2 (const int)
+0:22        subgroupQuadBroadcast ( temp 3-component vector of int)
+0:22          vector swizzle ( temp 3-component vector of int)
+0:22            i: direct index for structure ( temp 4-component vector of int)
+0:22              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:22                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:22                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:22                  Constant:
+0:22                    0 (const uint)
+0:22                direct index ( temp uint)
+0:22                  'dti' ( in 3-component vector of uint)
+0:22                  Constant:
+0:22                    0 (const int)
+0:22              Constant:
+0:22                1 (const int)
+0:22            Sequence
+0:22              Constant:
+0:22                0 (const int)
+0:22              Constant:
+0:22                1 (const int)
+0:22              Constant:
+0:22                2 (const int)
+0:22          Constant:
+0:22            0 (const uint)
+0:24      move second child to first child ( temp 4-component vector of float)
+0:24        f: direct index for structure ( temp 4-component vector of float)
+0:24          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:24            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:24              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:24              Constant:
+0:24                0 (const uint)
+0:24            direct index ( temp uint)
+0:24              'dti' ( in 3-component vector of uint)
+0:24              Constant:
+0:24                0 (const int)
+0:24          Constant:
+0:24            2 (const int)
+0:24        subgroupQuadBroadcast ( temp 4-component vector of float)
+0:24          f: direct index for structure ( temp 4-component vector of float)
+0:24            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:24              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:24                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:24                Constant:
+0:24                  0 (const uint)
+0:24              direct index ( temp uint)
+0:24                'dti' ( in 3-component vector of uint)
+0:24                Constant:
+0:24                  0 (const int)
+0:24            Constant:
+0:24              2 (const int)
+0:24          Constant:
+0:24            0 (const uint)
+0:25      move second child to first child ( temp float)
+0:25        direct index ( temp float)
+0:25          f: direct index for structure ( temp 4-component vector of float)
+0:25            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:25              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:25                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:25                Constant:
+0:25                  0 (const uint)
+0:25              direct index ( temp uint)
+0:25                'dti' ( in 3-component vector of uint)
+0:25                Constant:
+0:25                  0 (const int)
+0:25            Constant:
+0:25              2 (const int)
+0:25          Constant:
+0:25            0 (const int)
+0:25        subgroupQuadBroadcast ( temp float)
+0:25          direct index ( temp float)
+0:25            f: direct index for structure ( temp 4-component vector of float)
+0:25              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:25                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:25                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:25                  Constant:
+0:25                    0 (const uint)
+0:25                direct index ( temp uint)
+0:25                  'dti' ( in 3-component vector of uint)
+0:25                  Constant:
+0:25                    0 (const int)
+0:25              Constant:
+0:25                2 (const int)
+0:25            Constant:
+0:25              0 (const int)
+0:25          Constant:
+0:25            0 (const uint)
+0:26      move second child to first child ( temp 2-component vector of float)
+0:26        vector swizzle ( temp 2-component vector of float)
+0:26          f: direct index for structure ( temp 4-component vector of float)
+0:26            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:26              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:26                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:26                Constant:
+0:26                  0 (const uint)
+0:26              direct index ( temp uint)
+0:26                'dti' ( in 3-component vector of uint)
+0:26                Constant:
+0:26                  0 (const int)
+0:26            Constant:
+0:26              2 (const int)
+0:26          Sequence
+0:26            Constant:
+0:26              0 (const int)
+0:26            Constant:
+0:26              1 (const int)
+0:26        subgroupQuadBroadcast ( temp 2-component vector of float)
+0:26          vector swizzle ( temp 2-component vector of float)
+0:26            f: direct index for structure ( temp 4-component vector of float)
+0:26              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:26                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:26                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:26                  Constant:
+0:26                    0 (const uint)
+0:26                direct index ( temp uint)
+0:26                  'dti' ( in 3-component vector of uint)
+0:26                  Constant:
+0:26                    0 (const int)
+0:26              Constant:
+0:26                2 (const int)
+0:26            Sequence
+0:26              Constant:
+0:26                0 (const int)
+0:26              Constant:
+0:26                1 (const int)
+0:26          Constant:
+0:26            0 (const uint)
+0:27      move second child to first child ( temp 3-component vector of float)
+0:27        vector swizzle ( temp 3-component vector of float)
+0:27          f: direct index for structure ( temp 4-component vector of float)
+0:27            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:27              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:27                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:27                Constant:
+0:27                  0 (const uint)
+0:27              direct index ( temp uint)
+0:27                'dti' ( in 3-component vector of uint)
+0:27                Constant:
+0:27                  0 (const int)
+0:27            Constant:
+0:27              2 (const int)
+0:27          Sequence
+0:27            Constant:
+0:27              0 (const int)
+0:27            Constant:
+0:27              1 (const int)
+0:27            Constant:
+0:27              2 (const int)
+0:27        subgroupQuadBroadcast ( temp 3-component vector of float)
+0:27          vector swizzle ( temp 3-component vector of float)
+0:27            f: direct index for structure ( temp 4-component vector of float)
+0:27              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:27                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:27                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:27                  Constant:
+0:27                    0 (const uint)
+0:27                direct index ( temp uint)
+0:27                  'dti' ( in 3-component vector of uint)
+0:27                  Constant:
+0:27                    0 (const int)
+0:27              Constant:
+0:27                2 (const int)
+0:27            Sequence
+0:27              Constant:
+0:27                0 (const int)
+0:27              Constant:
+0:27                1 (const int)
+0:27              Constant:
+0:27                2 (const int)
+0:27          Constant:
+0:27            0 (const uint)
+0:29      move second child to first child ( temp 4-component vector of double)
+0:29        d: direct index for structure ( temp 4-component vector of double)
+0:29          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:29            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:29              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:29              Constant:
+0:29                0 (const uint)
+0:29            direct index ( temp uint)
+0:29              'dti' ( in 3-component vector of uint)
+0:29              Constant:
+0:29                0 (const int)
+0:29          Constant:
+0:29            3 (const int)
+0:29        subgroupQuadBroadcast ( temp 4-component vector of double)
+0:29          d: direct index for structure ( temp 4-component vector of double)
+0:29            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:29              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:29                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:29                Constant:
+0:29                  0 (const uint)
+0:29              direct index ( temp uint)
+0:29                'dti' ( in 3-component vector of uint)
+0:29                Constant:
+0:29                  0 (const int)
+0:29            Constant:
+0:29              3 (const int)
+0:29          Constant:
+0:29            0 (const uint)
+0:30      move second child to first child ( temp double)
+0:30        direct index ( temp double)
+0:30          d: direct index for structure ( temp 4-component vector of double)
+0:30            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:30              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:30                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:30                Constant:
+0:30                  0 (const uint)
+0:30              direct index ( temp uint)
+0:30                'dti' ( in 3-component vector of uint)
+0:30                Constant:
+0:30                  0 (const int)
+0:30            Constant:
+0:30              3 (const int)
+0:30          Constant:
+0:30            0 (const int)
+0:30        subgroupQuadBroadcast ( temp double)
+0:30          direct index ( temp double)
+0:30            d: direct index for structure ( temp 4-component vector of double)
+0:30              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:30                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:30                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:30                  Constant:
+0:30                    0 (const uint)
+0:30                direct index ( temp uint)
+0:30                  'dti' ( in 3-component vector of uint)
+0:30                  Constant:
+0:30                    0 (const int)
+0:30              Constant:
+0:30                3 (const int)
+0:30            Constant:
+0:30              0 (const int)
+0:30          Constant:
+0:30            0 (const uint)
+0:31      move second child to first child ( temp 2-component vector of double)
+0:31        vector swizzle ( temp 2-component vector of double)
+0:31          d: direct index for structure ( temp 4-component vector of double)
+0:31            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:31              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:31                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:31                Constant:
+0:31                  0 (const uint)
+0:31              direct index ( temp uint)
+0:31                'dti' ( in 3-component vector of uint)
+0:31                Constant:
+0:31                  0 (const int)
+0:31            Constant:
+0:31              3 (const int)
+0:31          Sequence
+0:31            Constant:
+0:31              0 (const int)
+0:31            Constant:
+0:31              1 (const int)
+0:31        subgroupQuadBroadcast ( temp 2-component vector of double)
+0:31          vector swizzle ( temp 2-component vector of double)
+0:31            d: direct index for structure ( temp 4-component vector of double)
+0:31              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:31                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:31                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:31                  Constant:
+0:31                    0 (const uint)
+0:31                direct index ( temp uint)
+0:31                  'dti' ( in 3-component vector of uint)
+0:31                  Constant:
+0:31                    0 (const int)
+0:31              Constant:
+0:31                3 (const int)
+0:31            Sequence
+0:31              Constant:
+0:31                0 (const int)
+0:31              Constant:
+0:31                1 (const int)
+0:31          Constant:
+0:31            0 (const uint)
+0:32      move second child to first child ( temp 3-component vector of double)
+0:32        vector swizzle ( temp 3-component vector of double)
+0:32          d: direct index for structure ( temp 4-component vector of double)
+0:32            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:32              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:32                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:32                Constant:
+0:32                  0 (const uint)
+0:32              direct index ( temp uint)
+0:32                'dti' ( in 3-component vector of uint)
+0:32                Constant:
+0:32                  0 (const int)
+0:32            Constant:
+0:32              3 (const int)
+0:32          Sequence
+0:32            Constant:
+0:32              0 (const int)
+0:32            Constant:
+0:32              1 (const int)
+0:32            Constant:
+0:32              2 (const int)
+0:32        subgroupQuadBroadcast ( temp 3-component vector of double)
+0:32          vector swizzle ( temp 3-component vector of double)
+0:32            d: direct index for structure ( temp 4-component vector of double)
+0:32              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:32                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:32                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:32                  Constant:
+0:32                    0 (const uint)
+0:32                direct index ( temp uint)
+0:32                  'dti' ( in 3-component vector of uint)
+0:32                  Constant:
+0:32                    0 (const int)
+0:32              Constant:
+0:32                3 (const int)
+0:32            Sequence
+0:32              Constant:
+0:32                0 (const int)
+0:32              Constant:
+0:32                1 (const int)
+0:32              Constant:
+0:32                2 (const int)
+0:32          Constant:
+0:32            0 (const uint)
+0:34      move second child to first child ( temp 4-component vector of uint)
+0:34        u: direct index for structure ( temp 4-component vector of uint)
+0:34          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:34            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:34              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:34              Constant:
+0:34                0 (const uint)
+0:34            direct index ( temp uint)
+0:34              'dti' ( in 3-component vector of uint)
+0:34              Constant:
+0:34                0 (const int)
+0:34          Constant:
+0:34            0 (const int)
+0:34        subgroupQuadBroadcast ( temp 4-component vector of uint)
+0:34          u: direct index for structure ( temp 4-component vector of uint)
+0:34            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:34              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:34                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:34                Constant:
+0:34                  0 (const uint)
+0:34              direct index ( temp uint)
+0:34                'dti' ( in 3-component vector of uint)
+0:34                Constant:
+0:34                  0 (const int)
+0:34            Constant:
+0:34              0 (const int)
+0:34          Constant:
+0:34            1 (const uint)
+0:35      move second child to first child ( temp uint)
+0:35        direct index ( temp uint)
+0:35          u: direct index for structure ( temp 4-component vector of uint)
+0:35            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:35              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:35                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:35                Constant:
+0:35                  0 (const uint)
+0:35              direct index ( temp uint)
+0:35                'dti' ( in 3-component vector of uint)
+0:35                Constant:
+0:35                  0 (const int)
+0:35            Constant:
+0:35              0 (const int)
+0:35          Constant:
+0:35            0 (const int)
+0:35        subgroupQuadBroadcast ( temp uint)
+0:35          direct index ( temp uint)
+0:35            u: direct index for structure ( temp 4-component vector of uint)
+0:35              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:35                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:35                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:35                  Constant:
+0:35                    0 (const uint)
+0:35                direct index ( temp uint)
+0:35                  'dti' ( in 3-component vector of uint)
+0:35                  Constant:
+0:35                    0 (const int)
+0:35              Constant:
+0:35                0 (const int)
+0:35            Constant:
+0:35              0 (const int)
+0:35          Constant:
+0:35            1 (const uint)
+0:36      move second child to first child ( temp 2-component vector of uint)
+0:36        vector swizzle ( temp 2-component vector of uint)
+0:36          u: direct index for structure ( temp 4-component vector of uint)
+0:36            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:36              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:36                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:36                Constant:
+0:36                  0 (const uint)
+0:36              direct index ( temp uint)
+0:36                'dti' ( in 3-component vector of uint)
+0:36                Constant:
+0:36                  0 (const int)
+0:36            Constant:
+0:36              0 (const int)
+0:36          Sequence
+0:36            Constant:
+0:36              0 (const int)
+0:36            Constant:
+0:36              1 (const int)
+0:36        subgroupQuadBroadcast ( temp 2-component vector of uint)
+0:36          vector swizzle ( temp 2-component vector of uint)
+0:36            u: direct index for structure ( temp 4-component vector of uint)
+0:36              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:36                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:36                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:36                  Constant:
+0:36                    0 (const uint)
+0:36                direct index ( temp uint)
+0:36                  'dti' ( in 3-component vector of uint)
+0:36                  Constant:
+0:36                    0 (const int)
+0:36              Constant:
+0:36                0 (const int)
+0:36            Sequence
+0:36              Constant:
+0:36                0 (const int)
+0:36              Constant:
+0:36                1 (const int)
+0:36          Constant:
+0:36            1 (const uint)
+0:37      move second child to first child ( temp 3-component vector of uint)
+0:37        vector swizzle ( temp 3-component vector of uint)
+0:37          u: direct index for structure ( temp 4-component vector of uint)
+0:37            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:37              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:37                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:37                Constant:
+0:37                  0 (const uint)
+0:37              direct index ( temp uint)
+0:37                'dti' ( in 3-component vector of uint)
+0:37                Constant:
+0:37                  0 (const int)
+0:37            Constant:
+0:37              0 (const int)
+0:37          Sequence
+0:37            Constant:
+0:37              0 (const int)
+0:37            Constant:
+0:37              1 (const int)
+0:37            Constant:
+0:37              2 (const int)
+0:37        subgroupQuadBroadcast ( temp 3-component vector of uint)
+0:37          vector swizzle ( temp 3-component vector of uint)
+0:37            u: direct index for structure ( temp 4-component vector of uint)
+0:37              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:37                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:37                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:37                  Constant:
+0:37                    0 (const uint)
+0:37                direct index ( temp uint)
+0:37                  'dti' ( in 3-component vector of uint)
+0:37                  Constant:
+0:37                    0 (const int)
+0:37              Constant:
+0:37                0 (const int)
+0:37            Sequence
+0:37              Constant:
+0:37                0 (const int)
+0:37              Constant:
+0:37                1 (const int)
+0:37              Constant:
+0:37                2 (const int)
+0:37          Constant:
+0:37            1 (const uint)
+0:39      move second child to first child ( temp 4-component vector of int)
+0:39        i: direct index for structure ( temp 4-component vector of int)
+0:39          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:39            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:39              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:39              Constant:
+0:39                0 (const uint)
+0:39            direct index ( temp uint)
+0:39              'dti' ( in 3-component vector of uint)
+0:39              Constant:
+0:39                0 (const int)
+0:39          Constant:
+0:39            1 (const int)
+0:39        subgroupQuadBroadcast ( temp 4-component vector of int)
+0:39          i: direct index for structure ( temp 4-component vector of int)
+0:39            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:39              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:39                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:39                Constant:
+0:39                  0 (const uint)
+0:39              direct index ( temp uint)
+0:39                'dti' ( in 3-component vector of uint)
+0:39                Constant:
+0:39                  0 (const int)
+0:39            Constant:
+0:39              1 (const int)
+0:39          Constant:
+0:39            1 (const uint)
+0:40      move second child to first child ( temp int)
+0:40        direct index ( temp int)
+0:40          i: direct index for structure ( temp 4-component vector of int)
+0:40            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:40              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:40                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:40                Constant:
+0:40                  0 (const uint)
+0:40              direct index ( temp uint)
+0:40                'dti' ( in 3-component vector of uint)
+0:40                Constant:
+0:40                  0 (const int)
+0:40            Constant:
+0:40              1 (const int)
+0:40          Constant:
+0:40            0 (const int)
+0:40        subgroupQuadBroadcast ( temp int)
+0:40          direct index ( temp int)
+0:40            i: direct index for structure ( temp 4-component vector of int)
+0:40              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:40                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:40                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:40                  Constant:
+0:40                    0 (const uint)
+0:40                direct index ( temp uint)
+0:40                  'dti' ( in 3-component vector of uint)
+0:40                  Constant:
+0:40                    0 (const int)
+0:40              Constant:
+0:40                1 (const int)
+0:40            Constant:
+0:40              0 (const int)
+0:40          Constant:
+0:40            1 (const uint)
+0:41      move second child to first child ( temp 2-component vector of int)
+0:41        vector swizzle ( temp 2-component vector of int)
+0:41          i: direct index for structure ( temp 4-component vector of int)
+0:41            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:41              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:41                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:41                Constant:
+0:41                  0 (const uint)
+0:41              direct index ( temp uint)
+0:41                'dti' ( in 3-component vector of uint)
+0:41                Constant:
+0:41                  0 (const int)
+0:41            Constant:
+0:41              1 (const int)
+0:41          Sequence
+0:41            Constant:
+0:41              0 (const int)
+0:41            Constant:
+0:41              1 (const int)
+0:41        subgroupQuadBroadcast ( temp 2-component vector of int)
+0:41          vector swizzle ( temp 2-component vector of int)
+0:41            i: direct index for structure ( temp 4-component vector of int)
+0:41              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:41                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:41                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:41                  Constant:
+0:41                    0 (const uint)
+0:41                direct index ( temp uint)
+0:41                  'dti' ( in 3-component vector of uint)
+0:41                  Constant:
+0:41                    0 (const int)
+0:41              Constant:
+0:41                1 (const int)
+0:41            Sequence
+0:41              Constant:
+0:41                0 (const int)
+0:41              Constant:
+0:41                1 (const int)
+0:41          Constant:
+0:41            1 (const uint)
+0:42      move second child to first child ( temp 3-component vector of int)
+0:42        vector swizzle ( temp 3-component vector of int)
+0:42          i: direct index for structure ( temp 4-component vector of int)
+0:42            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:42              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:42                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:42                Constant:
+0:42                  0 (const uint)
+0:42              direct index ( temp uint)
+0:42                'dti' ( in 3-component vector of uint)
+0:42                Constant:
+0:42                  0 (const int)
+0:42            Constant:
+0:42              1 (const int)
+0:42          Sequence
+0:42            Constant:
+0:42              0 (const int)
+0:42            Constant:
+0:42              1 (const int)
+0:42            Constant:
+0:42              2 (const int)
+0:42        subgroupQuadBroadcast ( temp 3-component vector of int)
+0:42          vector swizzle ( temp 3-component vector of int)
+0:42            i: direct index for structure ( temp 4-component vector of int)
+0:42              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:42                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:42                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:42                  Constant:
+0:42                    0 (const uint)
+0:42                direct index ( temp uint)
+0:42                  'dti' ( in 3-component vector of uint)
+0:42                  Constant:
+0:42                    0 (const int)
+0:42              Constant:
+0:42                1 (const int)
+0:42            Sequence
+0:42              Constant:
+0:42                0 (const int)
+0:42              Constant:
+0:42                1 (const int)
+0:42              Constant:
+0:42                2 (const int)
+0:42          Constant:
+0:42            1 (const uint)
+0:44      move second child to first child ( temp 4-component vector of float)
+0:44        f: direct index for structure ( temp 4-component vector of float)
+0:44          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:44            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:44              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:44              Constant:
+0:44                0 (const uint)
+0:44            direct index ( temp uint)
+0:44              'dti' ( in 3-component vector of uint)
+0:44              Constant:
+0:44                0 (const int)
+0:44          Constant:
+0:44            2 (const int)
+0:44        subgroupQuadBroadcast ( temp 4-component vector of float)
+0:44          f: direct index for structure ( temp 4-component vector of float)
+0:44            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:44              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:44                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:44                Constant:
+0:44                  0 (const uint)
+0:44              direct index ( temp uint)
+0:44                'dti' ( in 3-component vector of uint)
+0:44                Constant:
+0:44                  0 (const int)
+0:44            Constant:
+0:44              2 (const int)
+0:44          Constant:
+0:44            1 (const uint)
+0:45      move second child to first child ( temp float)
+0:45        direct index ( temp float)
+0:45          f: direct index for structure ( temp 4-component vector of float)
+0:45            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:45              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:45                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:45                Constant:
+0:45                  0 (const uint)
+0:45              direct index ( temp uint)
+0:45                'dti' ( in 3-component vector of uint)
+0:45                Constant:
+0:45                  0 (const int)
+0:45            Constant:
+0:45              2 (const int)
+0:45          Constant:
+0:45            0 (const int)
+0:45        subgroupQuadBroadcast ( temp float)
+0:45          direct index ( temp float)
+0:45            f: direct index for structure ( temp 4-component vector of float)
+0:45              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:45                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:45                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:45                  Constant:
+0:45                    0 (const uint)
+0:45                direct index ( temp uint)
+0:45                  'dti' ( in 3-component vector of uint)
+0:45                  Constant:
+0:45                    0 (const int)
+0:45              Constant:
+0:45                2 (const int)
+0:45            Constant:
+0:45              0 (const int)
+0:45          Constant:
+0:45            1 (const uint)
+0:46      move second child to first child ( temp 2-component vector of float)
+0:46        vector swizzle ( temp 2-component vector of float)
+0:46          f: direct index for structure ( temp 4-component vector of float)
+0:46            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:46              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:46                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:46                Constant:
+0:46                  0 (const uint)
+0:46              direct index ( temp uint)
+0:46                'dti' ( in 3-component vector of uint)
+0:46                Constant:
+0:46                  0 (const int)
+0:46            Constant:
+0:46              2 (const int)
+0:46          Sequence
+0:46            Constant:
+0:46              0 (const int)
+0:46            Constant:
+0:46              1 (const int)
+0:46        subgroupQuadBroadcast ( temp 2-component vector of float)
+0:46          vector swizzle ( temp 2-component vector of float)
+0:46            f: direct index for structure ( temp 4-component vector of float)
+0:46              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:46                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:46                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:46                  Constant:
+0:46                    0 (const uint)
+0:46                direct index ( temp uint)
+0:46                  'dti' ( in 3-component vector of uint)
+0:46                  Constant:
+0:46                    0 (const int)
+0:46              Constant:
+0:46                2 (const int)
+0:46            Sequence
+0:46              Constant:
+0:46                0 (const int)
+0:46              Constant:
+0:46                1 (const int)
+0:46          Constant:
+0:46            1 (const uint)
+0:47      move second child to first child ( temp 3-component vector of float)
+0:47        vector swizzle ( temp 3-component vector of float)
+0:47          f: direct index for structure ( temp 4-component vector of float)
+0:47            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:47              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:47                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:47                Constant:
+0:47                  0 (const uint)
+0:47              direct index ( temp uint)
+0:47                'dti' ( in 3-component vector of uint)
+0:47                Constant:
+0:47                  0 (const int)
+0:47            Constant:
+0:47              2 (const int)
+0:47          Sequence
+0:47            Constant:
+0:47              0 (const int)
+0:47            Constant:
+0:47              1 (const int)
+0:47            Constant:
+0:47              2 (const int)
+0:47        subgroupQuadBroadcast ( temp 3-component vector of float)
+0:47          vector swizzle ( temp 3-component vector of float)
+0:47            f: direct index for structure ( temp 4-component vector of float)
+0:47              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:47                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:47                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:47                  Constant:
+0:47                    0 (const uint)
+0:47                direct index ( temp uint)
+0:47                  'dti' ( in 3-component vector of uint)
+0:47                  Constant:
+0:47                    0 (const int)
+0:47              Constant:
+0:47                2 (const int)
+0:47            Sequence
+0:47              Constant:
+0:47                0 (const int)
+0:47              Constant:
+0:47                1 (const int)
+0:47              Constant:
+0:47                2 (const int)
+0:47          Constant:
+0:47            1 (const uint)
+0:49      move second child to first child ( temp 4-component vector of double)
+0:49        d: direct index for structure ( temp 4-component vector of double)
+0:49          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:49            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:49              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:49              Constant:
+0:49                0 (const uint)
+0:49            direct index ( temp uint)
+0:49              'dti' ( in 3-component vector of uint)
+0:49              Constant:
+0:49                0 (const int)
+0:49          Constant:
+0:49            3 (const int)
+0:49        subgroupQuadBroadcast ( temp 4-component vector of double)
+0:49          d: direct index for structure ( temp 4-component vector of double)
+0:49            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:49              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:49                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:49                Constant:
+0:49                  0 (const uint)
+0:49              direct index ( temp uint)
+0:49                'dti' ( in 3-component vector of uint)
+0:49                Constant:
+0:49                  0 (const int)
+0:49            Constant:
+0:49              3 (const int)
+0:49          Constant:
+0:49            1 (const uint)
+0:50      move second child to first child ( temp double)
+0:50        direct index ( temp double)
+0:50          d: direct index for structure ( temp 4-component vector of double)
+0:50            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:50              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:50                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:50                Constant:
+0:50                  0 (const uint)
+0:50              direct index ( temp uint)
+0:50                'dti' ( in 3-component vector of uint)
+0:50                Constant:
+0:50                  0 (const int)
+0:50            Constant:
+0:50              3 (const int)
+0:50          Constant:
+0:50            0 (const int)
+0:50        subgroupQuadBroadcast ( temp double)
+0:50          direct index ( temp double)
+0:50            d: direct index for structure ( temp 4-component vector of double)
+0:50              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:50                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:50                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:50                  Constant:
+0:50                    0 (const uint)
+0:50                direct index ( temp uint)
+0:50                  'dti' ( in 3-component vector of uint)
+0:50                  Constant:
+0:50                    0 (const int)
+0:50              Constant:
+0:50                3 (const int)
+0:50            Constant:
+0:50              0 (const int)
+0:50          Constant:
+0:50            1 (const uint)
+0:51      move second child to first child ( temp 2-component vector of double)
+0:51        vector swizzle ( temp 2-component vector of double)
+0:51          d: direct index for structure ( temp 4-component vector of double)
+0:51            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:51              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:51                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:51                Constant:
+0:51                  0 (const uint)
+0:51              direct index ( temp uint)
+0:51                'dti' ( in 3-component vector of uint)
+0:51                Constant:
+0:51                  0 (const int)
+0:51            Constant:
+0:51              3 (const int)
+0:51          Sequence
+0:51            Constant:
+0:51              0 (const int)
+0:51            Constant:
+0:51              1 (const int)
+0:51        subgroupQuadBroadcast ( temp 2-component vector of double)
+0:51          vector swizzle ( temp 2-component vector of double)
+0:51            d: direct index for structure ( temp 4-component vector of double)
+0:51              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:51                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:51                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:51                  Constant:
+0:51                    0 (const uint)
+0:51                direct index ( temp uint)
+0:51                  'dti' ( in 3-component vector of uint)
+0:51                  Constant:
+0:51                    0 (const int)
+0:51              Constant:
+0:51                3 (const int)
+0:51            Sequence
+0:51              Constant:
+0:51                0 (const int)
+0:51              Constant:
+0:51                1 (const int)
+0:51          Constant:
+0:51            1 (const uint)
+0:52      move second child to first child ( temp 3-component vector of double)
+0:52        vector swizzle ( temp 3-component vector of double)
+0:52          d: direct index for structure ( temp 4-component vector of double)
+0:52            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:52              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:52                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:52                Constant:
+0:52                  0 (const uint)
+0:52              direct index ( temp uint)
+0:52                'dti' ( in 3-component vector of uint)
+0:52                Constant:
+0:52                  0 (const int)
+0:52            Constant:
+0:52              3 (const int)
+0:52          Sequence
+0:52            Constant:
+0:52              0 (const int)
+0:52            Constant:
+0:52              1 (const int)
+0:52            Constant:
+0:52              2 (const int)
+0:52        subgroupQuadBroadcast ( temp 3-component vector of double)
+0:52          vector swizzle ( temp 3-component vector of double)
+0:52            d: direct index for structure ( temp 4-component vector of double)
+0:52              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:52                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:52                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:52                  Constant:
+0:52                    0 (const uint)
+0:52                direct index ( temp uint)
+0:52                  'dti' ( in 3-component vector of uint)
+0:52                  Constant:
+0:52                    0 (const int)
+0:52              Constant:
+0:52                3 (const int)
+0:52            Sequence
+0:52              Constant:
+0:52                0 (const int)
+0:52              Constant:
+0:52                1 (const int)
+0:52              Constant:
+0:52                2 (const int)
+0:52          Constant:
+0:52            1 (const uint)
+0:54      move second child to first child ( temp 4-component vector of uint)
+0:54        u: direct index for structure ( temp 4-component vector of uint)
+0:54          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:54            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:54              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:54              Constant:
+0:54                0 (const uint)
+0:54            direct index ( temp uint)
+0:54              'dti' ( in 3-component vector of uint)
+0:54              Constant:
+0:54                0 (const int)
+0:54          Constant:
+0:54            0 (const int)
+0:54        subgroupQuadBroadcast ( temp 4-component vector of uint)
+0:54          u: direct index for structure ( temp 4-component vector of uint)
+0:54            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:54              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:54                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:54                Constant:
+0:54                  0 (const uint)
+0:54              direct index ( temp uint)
+0:54                'dti' ( in 3-component vector of uint)
+0:54                Constant:
+0:54                  0 (const int)
+0:54            Constant:
+0:54              0 (const int)
+0:54          Constant:
+0:54            2 (const uint)
+0:55      move second child to first child ( temp uint)
+0:55        direct index ( temp uint)
+0:55          u: direct index for structure ( temp 4-component vector of uint)
+0:55            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:55              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:55                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:55                Constant:
+0:55                  0 (const uint)
+0:55              direct index ( temp uint)
+0:55                'dti' ( in 3-component vector of uint)
+0:55                Constant:
+0:55                  0 (const int)
+0:55            Constant:
+0:55              0 (const int)
+0:55          Constant:
+0:55            0 (const int)
+0:55        subgroupQuadBroadcast ( temp uint)
+0:55          direct index ( temp uint)
+0:55            u: direct index for structure ( temp 4-component vector of uint)
+0:55              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:55                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:55                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:55                  Constant:
+0:55                    0 (const uint)
+0:55                direct index ( temp uint)
+0:55                  'dti' ( in 3-component vector of uint)
+0:55                  Constant:
+0:55                    0 (const int)
+0:55              Constant:
+0:55                0 (const int)
+0:55            Constant:
+0:55              0 (const int)
+0:55          Constant:
+0:55            2 (const uint)
+0:56      move second child to first child ( temp 2-component vector of uint)
+0:56        vector swizzle ( temp 2-component vector of uint)
+0:56          u: direct index for structure ( temp 4-component vector of uint)
+0:56            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:56              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:56                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:56                Constant:
+0:56                  0 (const uint)
+0:56              direct index ( temp uint)
+0:56                'dti' ( in 3-component vector of uint)
+0:56                Constant:
+0:56                  0 (const int)
+0:56            Constant:
+0:56              0 (const int)
+0:56          Sequence
+0:56            Constant:
+0:56              0 (const int)
+0:56            Constant:
+0:56              1 (const int)
+0:56        subgroupQuadBroadcast ( temp 2-component vector of uint)
+0:56          vector swizzle ( temp 2-component vector of uint)
+0:56            u: direct index for structure ( temp 4-component vector of uint)
+0:56              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:56                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:56                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:56                  Constant:
+0:56                    0 (const uint)
+0:56                direct index ( temp uint)
+0:56                  'dti' ( in 3-component vector of uint)
+0:56                  Constant:
+0:56                    0 (const int)
+0:56              Constant:
+0:56                0 (const int)
+0:56            Sequence
+0:56              Constant:
+0:56                0 (const int)
+0:56              Constant:
+0:56                1 (const int)
+0:56          Constant:
+0:56            2 (const uint)
+0:57      move second child to first child ( temp 3-component vector of uint)
+0:57        vector swizzle ( temp 3-component vector of uint)
+0:57          u: direct index for structure ( temp 4-component vector of uint)
+0:57            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:57              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:57                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:57                Constant:
+0:57                  0 (const uint)
+0:57              direct index ( temp uint)
+0:57                'dti' ( in 3-component vector of uint)
+0:57                Constant:
+0:57                  0 (const int)
+0:57            Constant:
+0:57              0 (const int)
+0:57          Sequence
+0:57            Constant:
+0:57              0 (const int)
+0:57            Constant:
+0:57              1 (const int)
+0:57            Constant:
+0:57              2 (const int)
+0:57        subgroupQuadBroadcast ( temp 3-component vector of uint)
+0:57          vector swizzle ( temp 3-component vector of uint)
+0:57            u: direct index for structure ( temp 4-component vector of uint)
+0:57              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:57                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:57                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:57                  Constant:
+0:57                    0 (const uint)
+0:57                direct index ( temp uint)
+0:57                  'dti' ( in 3-component vector of uint)
+0:57                  Constant:
+0:57                    0 (const int)
+0:57              Constant:
+0:57                0 (const int)
+0:57            Sequence
+0:57              Constant:
+0:57                0 (const int)
+0:57              Constant:
+0:57                1 (const int)
+0:57              Constant:
+0:57                2 (const int)
+0:57          Constant:
+0:57            2 (const uint)
+0:59      move second child to first child ( temp 4-component vector of int)
+0:59        i: direct index for structure ( temp 4-component vector of int)
+0:59          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:59            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:59              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:59              Constant:
+0:59                0 (const uint)
+0:59            direct index ( temp uint)
+0:59              'dti' ( in 3-component vector of uint)
+0:59              Constant:
+0:59                0 (const int)
+0:59          Constant:
+0:59            1 (const int)
+0:59        subgroupQuadBroadcast ( temp 4-component vector of int)
+0:59          i: direct index for structure ( temp 4-component vector of int)
+0:59            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:59              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:59                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:59                Constant:
+0:59                  0 (const uint)
+0:59              direct index ( temp uint)
+0:59                'dti' ( in 3-component vector of uint)
+0:59                Constant:
+0:59                  0 (const int)
+0:59            Constant:
+0:59              1 (const int)
+0:59          Constant:
+0:59            2 (const uint)
+0:60      move second child to first child ( temp int)
+0:60        direct index ( temp int)
+0:60          i: direct index for structure ( temp 4-component vector of int)
+0:60            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:60              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:60                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:60                Constant:
+0:60                  0 (const uint)
+0:60              direct index ( temp uint)
+0:60                'dti' ( in 3-component vector of uint)
+0:60                Constant:
+0:60                  0 (const int)
+0:60            Constant:
+0:60              1 (const int)
+0:60          Constant:
+0:60            0 (const int)
+0:60        subgroupQuadBroadcast ( temp int)
+0:60          direct index ( temp int)
+0:60            i: direct index for structure ( temp 4-component vector of int)
+0:60              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:60                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:60                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:60                  Constant:
+0:60                    0 (const uint)
+0:60                direct index ( temp uint)
+0:60                  'dti' ( in 3-component vector of uint)
+0:60                  Constant:
+0:60                    0 (const int)
+0:60              Constant:
+0:60                1 (const int)
+0:60            Constant:
+0:60              0 (const int)
+0:60          Constant:
+0:60            2 (const uint)
+0:61      move second child to first child ( temp 2-component vector of int)
+0:61        vector swizzle ( temp 2-component vector of int)
+0:61          i: direct index for structure ( temp 4-component vector of int)
+0:61            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:61              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:61                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:61                Constant:
+0:61                  0 (const uint)
+0:61              direct index ( temp uint)
+0:61                'dti' ( in 3-component vector of uint)
+0:61                Constant:
+0:61                  0 (const int)
+0:61            Constant:
+0:61              1 (const int)
+0:61          Sequence
+0:61            Constant:
+0:61              0 (const int)
+0:61            Constant:
+0:61              1 (const int)
+0:61        subgroupQuadBroadcast ( temp 2-component vector of int)
+0:61          vector swizzle ( temp 2-component vector of int)
+0:61            i: direct index for structure ( temp 4-component vector of int)
+0:61              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:61                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:61                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:61                  Constant:
+0:61                    0 (const uint)
+0:61                direct index ( temp uint)
+0:61                  'dti' ( in 3-component vector of uint)
+0:61                  Constant:
+0:61                    0 (const int)
+0:61              Constant:
+0:61                1 (const int)
+0:61            Sequence
+0:61              Constant:
+0:61                0 (const int)
+0:61              Constant:
+0:61                1 (const int)
+0:61          Constant:
+0:61            2 (const uint)
+0:62      move second child to first child ( temp 3-component vector of int)
+0:62        vector swizzle ( temp 3-component vector of int)
+0:62          i: direct index for structure ( temp 4-component vector of int)
+0:62            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:62              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:62                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:62                Constant:
+0:62                  0 (const uint)
+0:62              direct index ( temp uint)
+0:62                'dti' ( in 3-component vector of uint)
+0:62                Constant:
+0:62                  0 (const int)
+0:62            Constant:
+0:62              1 (const int)
+0:62          Sequence
+0:62            Constant:
+0:62              0 (const int)
+0:62            Constant:
+0:62              1 (const int)
+0:62            Constant:
+0:62              2 (const int)
+0:62        subgroupQuadBroadcast ( temp 3-component vector of int)
+0:62          vector swizzle ( temp 3-component vector of int)
+0:62            i: direct index for structure ( temp 4-component vector of int)
+0:62              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:62                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:62                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:62                  Constant:
+0:62                    0 (const uint)
+0:62                direct index ( temp uint)
+0:62                  'dti' ( in 3-component vector of uint)
+0:62                  Constant:
+0:62                    0 (const int)
+0:62              Constant:
+0:62                1 (const int)
+0:62            Sequence
+0:62              Constant:
+0:62                0 (const int)
+0:62              Constant:
+0:62                1 (const int)
+0:62              Constant:
+0:62                2 (const int)
+0:62          Constant:
+0:62            2 (const uint)
+0:64      move second child to first child ( temp 4-component vector of float)
+0:64        f: direct index for structure ( temp 4-component vector of float)
+0:64          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:64            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:64              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:64              Constant:
+0:64                0 (const uint)
+0:64            direct index ( temp uint)
+0:64              'dti' ( in 3-component vector of uint)
+0:64              Constant:
+0:64                0 (const int)
+0:64          Constant:
+0:64            2 (const int)
+0:64        subgroupQuadBroadcast ( temp 4-component vector of float)
+0:64          f: direct index for structure ( temp 4-component vector of float)
+0:64            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:64              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:64                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:64                Constant:
+0:64                  0 (const uint)
+0:64              direct index ( temp uint)
+0:64                'dti' ( in 3-component vector of uint)
+0:64                Constant:
+0:64                  0 (const int)
+0:64            Constant:
+0:64              2 (const int)
+0:64          Constant:
+0:64            2 (const uint)
+0:65      move second child to first child ( temp float)
+0:65        direct index ( temp float)
+0:65          f: direct index for structure ( temp 4-component vector of float)
+0:65            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:65              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:65                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:65                Constant:
+0:65                  0 (const uint)
+0:65              direct index ( temp uint)
+0:65                'dti' ( in 3-component vector of uint)
+0:65                Constant:
+0:65                  0 (const int)
+0:65            Constant:
+0:65              2 (const int)
+0:65          Constant:
+0:65            0 (const int)
+0:65        subgroupQuadBroadcast ( temp float)
+0:65          direct index ( temp float)
+0:65            f: direct index for structure ( temp 4-component vector of float)
+0:65              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:65                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:65                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:65                  Constant:
+0:65                    0 (const uint)
+0:65                direct index ( temp uint)
+0:65                  'dti' ( in 3-component vector of uint)
+0:65                  Constant:
+0:65                    0 (const int)
+0:65              Constant:
+0:65                2 (const int)
+0:65            Constant:
+0:65              0 (const int)
+0:65          Constant:
+0:65            2 (const uint)
+0:66      move second child to first child ( temp 2-component vector of float)
+0:66        vector swizzle ( temp 2-component vector of float)
+0:66          f: direct index for structure ( temp 4-component vector of float)
+0:66            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:66              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:66                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:66                Constant:
+0:66                  0 (const uint)
+0:66              direct index ( temp uint)
+0:66                'dti' ( in 3-component vector of uint)
+0:66                Constant:
+0:66                  0 (const int)
+0:66            Constant:
+0:66              2 (const int)
+0:66          Sequence
+0:66            Constant:
+0:66              0 (const int)
+0:66            Constant:
+0:66              1 (const int)
+0:66        subgroupQuadBroadcast ( temp 2-component vector of float)
+0:66          vector swizzle ( temp 2-component vector of float)
+0:66            f: direct index for structure ( temp 4-component vector of float)
+0:66              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:66                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:66                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:66                  Constant:
+0:66                    0 (const uint)
+0:66                direct index ( temp uint)
+0:66                  'dti' ( in 3-component vector of uint)
+0:66                  Constant:
+0:66                    0 (const int)
+0:66              Constant:
+0:66                2 (const int)
+0:66            Sequence
+0:66              Constant:
+0:66                0 (const int)
+0:66              Constant:
+0:66                1 (const int)
+0:66          Constant:
+0:66            2 (const uint)
+0:67      move second child to first child ( temp 3-component vector of float)
+0:67        vector swizzle ( temp 3-component vector of float)
+0:67          f: direct index for structure ( temp 4-component vector of float)
+0:67            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:67              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:67                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:67                Constant:
+0:67                  0 (const uint)
+0:67              direct index ( temp uint)
+0:67                'dti' ( in 3-component vector of uint)
+0:67                Constant:
+0:67                  0 (const int)
+0:67            Constant:
+0:67              2 (const int)
+0:67          Sequence
+0:67            Constant:
+0:67              0 (const int)
+0:67            Constant:
+0:67              1 (const int)
+0:67            Constant:
+0:67              2 (const int)
+0:67        subgroupQuadBroadcast ( temp 3-component vector of float)
+0:67          vector swizzle ( temp 3-component vector of float)
+0:67            f: direct index for structure ( temp 4-component vector of float)
+0:67              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:67                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:67                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:67                  Constant:
+0:67                    0 (const uint)
+0:67                direct index ( temp uint)
+0:67                  'dti' ( in 3-component vector of uint)
+0:67                  Constant:
+0:67                    0 (const int)
+0:67              Constant:
+0:67                2 (const int)
+0:67            Sequence
+0:67              Constant:
+0:67                0 (const int)
+0:67              Constant:
+0:67                1 (const int)
+0:67              Constant:
+0:67                2 (const int)
+0:67          Constant:
+0:67            2 (const uint)
+0:69      move second child to first child ( temp 4-component vector of double)
+0:69        d: direct index for structure ( temp 4-component vector of double)
+0:69          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:69            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:69              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:69              Constant:
+0:69                0 (const uint)
+0:69            direct index ( temp uint)
+0:69              'dti' ( in 3-component vector of uint)
+0:69              Constant:
+0:69                0 (const int)
+0:69          Constant:
+0:69            3 (const int)
+0:69        subgroupQuadBroadcast ( temp 4-component vector of double)
+0:69          d: direct index for structure ( temp 4-component vector of double)
+0:69            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:69              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:69                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:69                Constant:
+0:69                  0 (const uint)
+0:69              direct index ( temp uint)
+0:69                'dti' ( in 3-component vector of uint)
+0:69                Constant:
+0:69                  0 (const int)
+0:69            Constant:
+0:69              3 (const int)
+0:69          Constant:
+0:69            2 (const uint)
+0:70      move second child to first child ( temp double)
+0:70        direct index ( temp double)
+0:70          d: direct index for structure ( temp 4-component vector of double)
+0:70            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:70              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:70                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:70                Constant:
+0:70                  0 (const uint)
+0:70              direct index ( temp uint)
+0:70                'dti' ( in 3-component vector of uint)
+0:70                Constant:
+0:70                  0 (const int)
+0:70            Constant:
+0:70              3 (const int)
+0:70          Constant:
+0:70            0 (const int)
+0:70        subgroupQuadBroadcast ( temp double)
+0:70          direct index ( temp double)
+0:70            d: direct index for structure ( temp 4-component vector of double)
+0:70              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:70                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:70                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:70                  Constant:
+0:70                    0 (const uint)
+0:70                direct index ( temp uint)
+0:70                  'dti' ( in 3-component vector of uint)
+0:70                  Constant:
+0:70                    0 (const int)
+0:70              Constant:
+0:70                3 (const int)
+0:70            Constant:
+0:70              0 (const int)
+0:70          Constant:
+0:70            2 (const uint)
+0:71      move second child to first child ( temp 2-component vector of double)
+0:71        vector swizzle ( temp 2-component vector of double)
+0:71          d: direct index for structure ( temp 4-component vector of double)
+0:71            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:71              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:71                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:71                Constant:
+0:71                  0 (const uint)
+0:71              direct index ( temp uint)
+0:71                'dti' ( in 3-component vector of uint)
+0:71                Constant:
+0:71                  0 (const int)
+0:71            Constant:
+0:71              3 (const int)
+0:71          Sequence
+0:71            Constant:
+0:71              0 (const int)
+0:71            Constant:
+0:71              1 (const int)
+0:71        subgroupQuadBroadcast ( temp 2-component vector of double)
+0:71          vector swizzle ( temp 2-component vector of double)
+0:71            d: direct index for structure ( temp 4-component vector of double)
+0:71              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:71                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:71                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:71                  Constant:
+0:71                    0 (const uint)
+0:71                direct index ( temp uint)
+0:71                  'dti' ( in 3-component vector of uint)
+0:71                  Constant:
+0:71                    0 (const int)
+0:71              Constant:
+0:71                3 (const int)
+0:71            Sequence
+0:71              Constant:
+0:71                0 (const int)
+0:71              Constant:
+0:71                1 (const int)
+0:71          Constant:
+0:71            2 (const uint)
+0:72      move second child to first child ( temp 3-component vector of double)
+0:72        vector swizzle ( temp 3-component vector of double)
+0:72          d: direct index for structure ( temp 4-component vector of double)
+0:72            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:72              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:72                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:72                Constant:
+0:72                  0 (const uint)
+0:72              direct index ( temp uint)
+0:72                'dti' ( in 3-component vector of uint)
+0:72                Constant:
+0:72                  0 (const int)
+0:72            Constant:
+0:72              3 (const int)
+0:72          Sequence
+0:72            Constant:
+0:72              0 (const int)
+0:72            Constant:
+0:72              1 (const int)
+0:72            Constant:
+0:72              2 (const int)
+0:72        subgroupQuadBroadcast ( temp 3-component vector of double)
+0:72          vector swizzle ( temp 3-component vector of double)
+0:72            d: direct index for structure ( temp 4-component vector of double)
+0:72              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:72                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:72                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:72                  Constant:
+0:72                    0 (const uint)
+0:72                direct index ( temp uint)
+0:72                  'dti' ( in 3-component vector of uint)
+0:72                  Constant:
+0:72                    0 (const int)
+0:72              Constant:
+0:72                3 (const int)
+0:72            Sequence
+0:72              Constant:
+0:72                0 (const int)
+0:72              Constant:
+0:72                1 (const int)
+0:72              Constant:
+0:72                2 (const int)
+0:72          Constant:
+0:72            2 (const uint)
+0:74      move second child to first child ( temp 4-component vector of uint)
+0:74        u: direct index for structure ( temp 4-component vector of uint)
+0:74          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:74            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:74              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:74              Constant:
+0:74                0 (const uint)
+0:74            direct index ( temp uint)
+0:74              'dti' ( in 3-component vector of uint)
+0:74              Constant:
+0:74                0 (const int)
+0:74          Constant:
+0:74            0 (const int)
+0:74        subgroupQuadBroadcast ( temp 4-component vector of uint)
+0:74          u: direct index for structure ( temp 4-component vector of uint)
+0:74            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:74              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:74                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:74                Constant:
+0:74                  0 (const uint)
+0:74              direct index ( temp uint)
+0:74                'dti' ( in 3-component vector of uint)
+0:74                Constant:
+0:74                  0 (const int)
+0:74            Constant:
+0:74              0 (const int)
+0:74          Constant:
+0:74            3 (const uint)
+0:75      move second child to first child ( temp uint)
+0:75        direct index ( temp uint)
+0:75          u: direct index for structure ( temp 4-component vector of uint)
+0:75            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:75              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:75                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:75                Constant:
+0:75                  0 (const uint)
+0:75              direct index ( temp uint)
+0:75                'dti' ( in 3-component vector of uint)
+0:75                Constant:
+0:75                  0 (const int)
+0:75            Constant:
+0:75              0 (const int)
+0:75          Constant:
+0:75            0 (const int)
+0:75        subgroupQuadBroadcast ( temp uint)
+0:75          direct index ( temp uint)
+0:75            u: direct index for structure ( temp 4-component vector of uint)
+0:75              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:75                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:75                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:75                  Constant:
+0:75                    0 (const uint)
+0:75                direct index ( temp uint)
+0:75                  'dti' ( in 3-component vector of uint)
+0:75                  Constant:
+0:75                    0 (const int)
+0:75              Constant:
+0:75                0 (const int)
+0:75            Constant:
+0:75              0 (const int)
+0:75          Constant:
+0:75            3 (const uint)
+0:76      move second child to first child ( temp 2-component vector of uint)
+0:76        vector swizzle ( temp 2-component vector of uint)
+0:76          u: direct index for structure ( temp 4-component vector of uint)
+0:76            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:76              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:76                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:76                Constant:
+0:76                  0 (const uint)
+0:76              direct index ( temp uint)
+0:76                'dti' ( in 3-component vector of uint)
+0:76                Constant:
+0:76                  0 (const int)
+0:76            Constant:
+0:76              0 (const int)
+0:76          Sequence
+0:76            Constant:
+0:76              0 (const int)
+0:76            Constant:
+0:76              1 (const int)
+0:76        subgroupQuadBroadcast ( temp 2-component vector of uint)
+0:76          vector swizzle ( temp 2-component vector of uint)
+0:76            u: direct index for structure ( temp 4-component vector of uint)
+0:76              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:76                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:76                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:76                  Constant:
+0:76                    0 (const uint)
+0:76                direct index ( temp uint)
+0:76                  'dti' ( in 3-component vector of uint)
+0:76                  Constant:
+0:76                    0 (const int)
+0:76              Constant:
+0:76                0 (const int)
+0:76            Sequence
+0:76              Constant:
+0:76                0 (const int)
+0:76              Constant:
+0:76                1 (const int)
+0:76          Constant:
+0:76            3 (const uint)
+0:77      move second child to first child ( temp 3-component vector of uint)
+0:77        vector swizzle ( temp 3-component vector of uint)
+0:77          u: direct index for structure ( temp 4-component vector of uint)
+0:77            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:77              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:77                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:77                Constant:
+0:77                  0 (const uint)
+0:77              direct index ( temp uint)
+0:77                'dti' ( in 3-component vector of uint)
+0:77                Constant:
+0:77                  0 (const int)
+0:77            Constant:
+0:77              0 (const int)
+0:77          Sequence
+0:77            Constant:
+0:77              0 (const int)
+0:77            Constant:
+0:77              1 (const int)
+0:77            Constant:
+0:77              2 (const int)
+0:77        subgroupQuadBroadcast ( temp 3-component vector of uint)
+0:77          vector swizzle ( temp 3-component vector of uint)
+0:77            u: direct index for structure ( temp 4-component vector of uint)
+0:77              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:77                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:77                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:77                  Constant:
+0:77                    0 (const uint)
+0:77                direct index ( temp uint)
+0:77                  'dti' ( in 3-component vector of uint)
+0:77                  Constant:
+0:77                    0 (const int)
+0:77              Constant:
+0:77                0 (const int)
+0:77            Sequence
+0:77              Constant:
+0:77                0 (const int)
+0:77              Constant:
+0:77                1 (const int)
+0:77              Constant:
+0:77                2 (const int)
+0:77          Constant:
+0:77            3 (const uint)
+0:79      move second child to first child ( temp 4-component vector of int)
+0:79        i: direct index for structure ( temp 4-component vector of int)
+0:79          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:79            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:79              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:79              Constant:
+0:79                0 (const uint)
+0:79            direct index ( temp uint)
+0:79              'dti' ( in 3-component vector of uint)
+0:79              Constant:
+0:79                0 (const int)
+0:79          Constant:
+0:79            1 (const int)
+0:79        subgroupQuadBroadcast ( temp 4-component vector of int)
+0:79          i: direct index for structure ( temp 4-component vector of int)
+0:79            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:79              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:79                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:79                Constant:
+0:79                  0 (const uint)
+0:79              direct index ( temp uint)
+0:79                'dti' ( in 3-component vector of uint)
+0:79                Constant:
+0:79                  0 (const int)
+0:79            Constant:
+0:79              1 (const int)
+0:79          Constant:
+0:79            3 (const uint)
+0:80      move second child to first child ( temp int)
+0:80        direct index ( temp int)
+0:80          i: direct index for structure ( temp 4-component vector of int)
+0:80            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:80              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:80                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:80                Constant:
+0:80                  0 (const uint)
+0:80              direct index ( temp uint)
+0:80                'dti' ( in 3-component vector of uint)
+0:80                Constant:
+0:80                  0 (const int)
+0:80            Constant:
+0:80              1 (const int)
+0:80          Constant:
+0:80            0 (const int)
+0:80        subgroupQuadBroadcast ( temp int)
+0:80          direct index ( temp int)
+0:80            i: direct index for structure ( temp 4-component vector of int)
+0:80              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:80                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:80                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:80                  Constant:
+0:80                    0 (const uint)
+0:80                direct index ( temp uint)
+0:80                  'dti' ( in 3-component vector of uint)
+0:80                  Constant:
+0:80                    0 (const int)
+0:80              Constant:
+0:80                1 (const int)
+0:80            Constant:
+0:80              0 (const int)
+0:80          Constant:
+0:80            3 (const uint)
+0:81      move second child to first child ( temp 2-component vector of int)
+0:81        vector swizzle ( temp 2-component vector of int)
+0:81          i: direct index for structure ( temp 4-component vector of int)
+0:81            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:81              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:81                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:81                Constant:
+0:81                  0 (const uint)
+0:81              direct index ( temp uint)
+0:81                'dti' ( in 3-component vector of uint)
+0:81                Constant:
+0:81                  0 (const int)
+0:81            Constant:
+0:81              1 (const int)
+0:81          Sequence
+0:81            Constant:
+0:81              0 (const int)
+0:81            Constant:
+0:81              1 (const int)
+0:81        subgroupQuadBroadcast ( temp 2-component vector of int)
+0:81          vector swizzle ( temp 2-component vector of int)
+0:81            i: direct index for structure ( temp 4-component vector of int)
+0:81              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:81                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:81                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:81                  Constant:
+0:81                    0 (const uint)
+0:81                direct index ( temp uint)
+0:81                  'dti' ( in 3-component vector of uint)
+0:81                  Constant:
+0:81                    0 (const int)
+0:81              Constant:
+0:81                1 (const int)
+0:81            Sequence
+0:81              Constant:
+0:81                0 (const int)
+0:81              Constant:
+0:81                1 (const int)
+0:81          Constant:
+0:81            3 (const uint)
+0:82      move second child to first child ( temp 3-component vector of int)
+0:82        vector swizzle ( temp 3-component vector of int)
+0:82          i: direct index for structure ( temp 4-component vector of int)
+0:82            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:82              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:82                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:82                Constant:
+0:82                  0 (const uint)
+0:82              direct index ( temp uint)
+0:82                'dti' ( in 3-component vector of uint)
+0:82                Constant:
+0:82                  0 (const int)
+0:82            Constant:
+0:82              1 (const int)
+0:82          Sequence
+0:82            Constant:
+0:82              0 (const int)
+0:82            Constant:
+0:82              1 (const int)
+0:82            Constant:
+0:82              2 (const int)
+0:82        subgroupQuadBroadcast ( temp 3-component vector of int)
+0:82          vector swizzle ( temp 3-component vector of int)
+0:82            i: direct index for structure ( temp 4-component vector of int)
+0:82              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:82                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:82                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:82                  Constant:
+0:82                    0 (const uint)
+0:82                direct index ( temp uint)
+0:82                  'dti' ( in 3-component vector of uint)
+0:82                  Constant:
+0:82                    0 (const int)
+0:82              Constant:
+0:82                1 (const int)
+0:82            Sequence
+0:82              Constant:
+0:82                0 (const int)
+0:82              Constant:
+0:82                1 (const int)
+0:82              Constant:
+0:82                2 (const int)
+0:82          Constant:
+0:82            3 (const uint)
+0:84      move second child to first child ( temp 4-component vector of float)
+0:84        f: direct index for structure ( temp 4-component vector of float)
+0:84          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:84            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:84              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:84              Constant:
+0:84                0 (const uint)
+0:84            direct index ( temp uint)
+0:84              'dti' ( in 3-component vector of uint)
+0:84              Constant:
+0:84                0 (const int)
+0:84          Constant:
+0:84            2 (const int)
+0:84        subgroupQuadBroadcast ( temp 4-component vector of float)
+0:84          f: direct index for structure ( temp 4-component vector of float)
+0:84            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:84              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:84                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:84                Constant:
+0:84                  0 (const uint)
+0:84              direct index ( temp uint)
+0:84                'dti' ( in 3-component vector of uint)
+0:84                Constant:
+0:84                  0 (const int)
+0:84            Constant:
+0:84              2 (const int)
+0:84          Constant:
+0:84            3 (const uint)
+0:85      move second child to first child ( temp float)
+0:85        direct index ( temp float)
+0:85          f: direct index for structure ( temp 4-component vector of float)
+0:85            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:85              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:85                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:85                Constant:
+0:85                  0 (const uint)
+0:85              direct index ( temp uint)
+0:85                'dti' ( in 3-component vector of uint)
+0:85                Constant:
+0:85                  0 (const int)
+0:85            Constant:
+0:85              2 (const int)
+0:85          Constant:
+0:85            0 (const int)
+0:85        subgroupQuadBroadcast ( temp float)
+0:85          direct index ( temp float)
+0:85            f: direct index for structure ( temp 4-component vector of float)
+0:85              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:85                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:85                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:85                  Constant:
+0:85                    0 (const uint)
+0:85                direct index ( temp uint)
+0:85                  'dti' ( in 3-component vector of uint)
+0:85                  Constant:
+0:85                    0 (const int)
+0:85              Constant:
+0:85                2 (const int)
+0:85            Constant:
+0:85              0 (const int)
+0:85          Constant:
+0:85            3 (const uint)
+0:86      move second child to first child ( temp 2-component vector of float)
+0:86        vector swizzle ( temp 2-component vector of float)
+0:86          f: direct index for structure ( temp 4-component vector of float)
+0:86            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:86              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:86                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:86                Constant:
+0:86                  0 (const uint)
+0:86              direct index ( temp uint)
+0:86                'dti' ( in 3-component vector of uint)
+0:86                Constant:
+0:86                  0 (const int)
+0:86            Constant:
+0:86              2 (const int)
+0:86          Sequence
+0:86            Constant:
+0:86              0 (const int)
+0:86            Constant:
+0:86              1 (const int)
+0:86        subgroupQuadBroadcast ( temp 2-component vector of float)
+0:86          vector swizzle ( temp 2-component vector of float)
+0:86            f: direct index for structure ( temp 4-component vector of float)
+0:86              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:86                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:86                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:86                  Constant:
+0:86                    0 (const uint)
+0:86                direct index ( temp uint)
+0:86                  'dti' ( in 3-component vector of uint)
+0:86                  Constant:
+0:86                    0 (const int)
+0:86              Constant:
+0:86                2 (const int)
+0:86            Sequence
+0:86              Constant:
+0:86                0 (const int)
+0:86              Constant:
+0:86                1 (const int)
+0:86          Constant:
+0:86            3 (const uint)
+0:87      move second child to first child ( temp 3-component vector of float)
+0:87        vector swizzle ( temp 3-component vector of float)
+0:87          f: direct index for structure ( temp 4-component vector of float)
+0:87            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:87              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:87                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:87                Constant:
+0:87                  0 (const uint)
+0:87              direct index ( temp uint)
+0:87                'dti' ( in 3-component vector of uint)
+0:87                Constant:
+0:87                  0 (const int)
+0:87            Constant:
+0:87              2 (const int)
+0:87          Sequence
+0:87            Constant:
+0:87              0 (const int)
+0:87            Constant:
+0:87              1 (const int)
+0:87            Constant:
+0:87              2 (const int)
+0:87        subgroupQuadBroadcast ( temp 3-component vector of float)
+0:87          vector swizzle ( temp 3-component vector of float)
+0:87            f: direct index for structure ( temp 4-component vector of float)
+0:87              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:87                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:87                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:87                  Constant:
+0:87                    0 (const uint)
+0:87                direct index ( temp uint)
+0:87                  'dti' ( in 3-component vector of uint)
+0:87                  Constant:
+0:87                    0 (const int)
+0:87              Constant:
+0:87                2 (const int)
+0:87            Sequence
+0:87              Constant:
+0:87                0 (const int)
+0:87              Constant:
+0:87                1 (const int)
+0:87              Constant:
+0:87                2 (const int)
+0:87          Constant:
+0:87            3 (const uint)
+0:89      move second child to first child ( temp 4-component vector of double)
+0:89        d: direct index for structure ( temp 4-component vector of double)
+0:89          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:89            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:89              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:89              Constant:
+0:89                0 (const uint)
+0:89            direct index ( temp uint)
+0:89              'dti' ( in 3-component vector of uint)
+0:89              Constant:
+0:89                0 (const int)
+0:89          Constant:
+0:89            3 (const int)
+0:89        subgroupQuadBroadcast ( temp 4-component vector of double)
+0:89          d: direct index for structure ( temp 4-component vector of double)
+0:89            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:89              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:89                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:89                Constant:
+0:89                  0 (const uint)
+0:89              direct index ( temp uint)
+0:89                'dti' ( in 3-component vector of uint)
+0:89                Constant:
+0:89                  0 (const int)
+0:89            Constant:
+0:89              3 (const int)
+0:89          Constant:
+0:89            3 (const uint)
+0:90      move second child to first child ( temp double)
+0:90        direct index ( temp double)
+0:90          d: direct index for structure ( temp 4-component vector of double)
+0:90            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:90              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:90                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:90                Constant:
+0:90                  0 (const uint)
+0:90              direct index ( temp uint)
+0:90                'dti' ( in 3-component vector of uint)
+0:90                Constant:
+0:90                  0 (const int)
+0:90            Constant:
+0:90              3 (const int)
+0:90          Constant:
+0:90            0 (const int)
+0:90        subgroupQuadBroadcast ( temp double)
+0:90          direct index ( temp double)
+0:90            d: direct index for structure ( temp 4-component vector of double)
+0:90              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:90                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:90                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:90                  Constant:
+0:90                    0 (const uint)
+0:90                direct index ( temp uint)
+0:90                  'dti' ( in 3-component vector of uint)
+0:90                  Constant:
+0:90                    0 (const int)
+0:90              Constant:
+0:90                3 (const int)
+0:90            Constant:
+0:90              0 (const int)
+0:90          Constant:
+0:90            3 (const uint)
+0:91      move second child to first child ( temp 2-component vector of double)
+0:91        vector swizzle ( temp 2-component vector of double)
+0:91          d: direct index for structure ( temp 4-component vector of double)
+0:91            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:91              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:91                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:91                Constant:
+0:91                  0 (const uint)
+0:91              direct index ( temp uint)
+0:91                'dti' ( in 3-component vector of uint)
+0:91                Constant:
+0:91                  0 (const int)
+0:91            Constant:
+0:91              3 (const int)
+0:91          Sequence
+0:91            Constant:
+0:91              0 (const int)
+0:91            Constant:
+0:91              1 (const int)
+0:91        subgroupQuadBroadcast ( temp 2-component vector of double)
+0:91          vector swizzle ( temp 2-component vector of double)
+0:91            d: direct index for structure ( temp 4-component vector of double)
+0:91              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:91                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:91                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:91                  Constant:
+0:91                    0 (const uint)
+0:91                direct index ( temp uint)
+0:91                  'dti' ( in 3-component vector of uint)
+0:91                  Constant:
+0:91                    0 (const int)
+0:91              Constant:
+0:91                3 (const int)
+0:91            Sequence
+0:91              Constant:
+0:91                0 (const int)
+0:91              Constant:
+0:91                1 (const int)
+0:91          Constant:
+0:91            3 (const uint)
+0:92      move second child to first child ( temp 3-component vector of double)
+0:92        vector swizzle ( temp 3-component vector of double)
+0:92          d: direct index for structure ( temp 4-component vector of double)
+0:92            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:92              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:92                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:92                Constant:
+0:92                  0 (const uint)
+0:92              direct index ( temp uint)
+0:92                'dti' ( in 3-component vector of uint)
+0:92                Constant:
+0:92                  0 (const int)
+0:92            Constant:
+0:92              3 (const int)
+0:92          Sequence
+0:92            Constant:
+0:92              0 (const int)
+0:92            Constant:
+0:92              1 (const int)
+0:92            Constant:
+0:92              2 (const int)
+0:92        subgroupQuadBroadcast ( temp 3-component vector of double)
+0:92          vector swizzle ( temp 3-component vector of double)
+0:92            d: direct index for structure ( temp 4-component vector of double)
+0:92              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:92                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:92                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:92                  Constant:
+0:92                    0 (const uint)
+0:92                direct index ( temp uint)
+0:92                  'dti' ( in 3-component vector of uint)
+0:92                  Constant:
+0:92                    0 (const int)
+0:92              Constant:
+0:92                3 (const int)
+0:92            Sequence
+0:92              Constant:
+0:92                0 (const int)
+0:92              Constant:
+0:92                1 (const int)
+0:92              Constant:
+0:92                2 (const int)
+0:92          Constant:
+0:92            3 (const uint)
+0:94      move second child to first child ( temp 4-component vector of uint)
+0:94        u: direct index for structure ( temp 4-component vector of uint)
+0:94          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:94            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:94              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:94              Constant:
+0:94                0 (const uint)
+0:94            direct index ( temp uint)
+0:94              'dti' ( in 3-component vector of uint)
+0:94              Constant:
+0:94                0 (const int)
+0:94          Constant:
+0:94            0 (const int)
+0:94        subgroupQuadSwapHorizontal ( temp 4-component vector of uint)
+0:94          u: direct index for structure ( temp 4-component vector of uint)
+0:94            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:94              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:94                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:94                Constant:
+0:94                  0 (const uint)
+0:94              direct index ( temp uint)
+0:94                'dti' ( in 3-component vector of uint)
+0:94                Constant:
+0:94                  0 (const int)
+0:94            Constant:
+0:94              0 (const int)
+0:95      move second child to first child ( temp uint)
+0:95        direct index ( temp uint)
+0:95          u: direct index for structure ( temp 4-component vector of uint)
+0:95            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:95              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:95                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:95                Constant:
+0:95                  0 (const uint)
+0:95              direct index ( temp uint)
+0:95                'dti' ( in 3-component vector of uint)
+0:95                Constant:
+0:95                  0 (const int)
+0:95            Constant:
+0:95              0 (const int)
+0:95          Constant:
+0:95            0 (const int)
+0:95        subgroupQuadSwapHorizontal ( temp uint)
+0:95          direct index ( temp uint)
+0:95            u: direct index for structure ( temp 4-component vector of uint)
+0:95              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:95                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:95                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:95                  Constant:
+0:95                    0 (const uint)
+0:95                direct index ( temp uint)
+0:95                  'dti' ( in 3-component vector of uint)
+0:95                  Constant:
+0:95                    0 (const int)
+0:95              Constant:
+0:95                0 (const int)
+0:95            Constant:
+0:95              0 (const int)
+0:96      move second child to first child ( temp 2-component vector of uint)
+0:96        vector swizzle ( temp 2-component vector of uint)
+0:96          u: direct index for structure ( temp 4-component vector of uint)
+0:96            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:96              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:96                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:96                Constant:
+0:96                  0 (const uint)
+0:96              direct index ( temp uint)
+0:96                'dti' ( in 3-component vector of uint)
+0:96                Constant:
+0:96                  0 (const int)
+0:96            Constant:
+0:96              0 (const int)
+0:96          Sequence
+0:96            Constant:
+0:96              0 (const int)
+0:96            Constant:
+0:96              1 (const int)
+0:96        subgroupQuadSwapHorizontal ( temp 2-component vector of uint)
+0:96          vector swizzle ( temp 2-component vector of uint)
+0:96            u: direct index for structure ( temp 4-component vector of uint)
+0:96              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:96                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:96                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:96                  Constant:
+0:96                    0 (const uint)
+0:96                direct index ( temp uint)
+0:96                  'dti' ( in 3-component vector of uint)
+0:96                  Constant:
+0:96                    0 (const int)
+0:96              Constant:
+0:96                0 (const int)
+0:96            Sequence
+0:96              Constant:
+0:96                0 (const int)
+0:96              Constant:
+0:96                1 (const int)
+0:97      move second child to first child ( temp 3-component vector of uint)
+0:97        vector swizzle ( temp 3-component vector of uint)
+0:97          u: direct index for structure ( temp 4-component vector of uint)
+0:97            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:97              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:97                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:97                Constant:
+0:97                  0 (const uint)
+0:97              direct index ( temp uint)
+0:97                'dti' ( in 3-component vector of uint)
+0:97                Constant:
+0:97                  0 (const int)
+0:97            Constant:
+0:97              0 (const int)
+0:97          Sequence
+0:97            Constant:
+0:97              0 (const int)
+0:97            Constant:
+0:97              1 (const int)
+0:97            Constant:
+0:97              2 (const int)
+0:97        subgroupQuadSwapHorizontal ( temp 3-component vector of uint)
+0:97          vector swizzle ( temp 3-component vector of uint)
+0:97            u: direct index for structure ( temp 4-component vector of uint)
+0:97              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:97                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:97                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:97                  Constant:
+0:97                    0 (const uint)
+0:97                direct index ( temp uint)
+0:97                  'dti' ( in 3-component vector of uint)
+0:97                  Constant:
+0:97                    0 (const int)
+0:97              Constant:
+0:97                0 (const int)
+0:97            Sequence
+0:97              Constant:
+0:97                0 (const int)
+0:97              Constant:
+0:97                1 (const int)
+0:97              Constant:
+0:97                2 (const int)
+0:99      move second child to first child ( temp 4-component vector of int)
+0:99        i: direct index for structure ( temp 4-component vector of int)
+0:99          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:99            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:99              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:99              Constant:
+0:99                0 (const uint)
+0:99            direct index ( temp uint)
+0:99              'dti' ( in 3-component vector of uint)
+0:99              Constant:
+0:99                0 (const int)
+0:99          Constant:
+0:99            1 (const int)
+0:99        subgroupQuadSwapHorizontal ( temp 4-component vector of int)
+0:99          i: direct index for structure ( temp 4-component vector of int)
+0:99            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:99              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:99                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:99                Constant:
+0:99                  0 (const uint)
+0:99              direct index ( temp uint)
+0:99                'dti' ( in 3-component vector of uint)
+0:99                Constant:
+0:99                  0 (const int)
+0:99            Constant:
+0:99              1 (const int)
+0:100      move second child to first child ( temp int)
+0:100        direct index ( temp int)
+0:100          i: direct index for structure ( temp 4-component vector of int)
+0:100            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:100              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:100                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:100                Constant:
+0:100                  0 (const uint)
+0:100              direct index ( temp uint)
+0:100                'dti' ( in 3-component vector of uint)
+0:100                Constant:
+0:100                  0 (const int)
+0:100            Constant:
+0:100              1 (const int)
+0:100          Constant:
+0:100            0 (const int)
+0:100        subgroupQuadSwapHorizontal ( temp int)
+0:100          direct index ( temp int)
+0:100            i: direct index for structure ( temp 4-component vector of int)
+0:100              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:100                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:100                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:100                  Constant:
+0:100                    0 (const uint)
+0:100                direct index ( temp uint)
+0:100                  'dti' ( in 3-component vector of uint)
+0:100                  Constant:
+0:100                    0 (const int)
+0:100              Constant:
+0:100                1 (const int)
+0:100            Constant:
+0:100              0 (const int)
+0:101      move second child to first child ( temp 2-component vector of int)
+0:101        vector swizzle ( temp 2-component vector of int)
+0:101          i: direct index for structure ( temp 4-component vector of int)
+0:101            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:101              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:101                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:101                Constant:
+0:101                  0 (const uint)
+0:101              direct index ( temp uint)
+0:101                'dti' ( in 3-component vector of uint)
+0:101                Constant:
+0:101                  0 (const int)
+0:101            Constant:
+0:101              1 (const int)
+0:101          Sequence
+0:101            Constant:
+0:101              0 (const int)
+0:101            Constant:
+0:101              1 (const int)
+0:101        subgroupQuadSwapHorizontal ( temp 2-component vector of int)
+0:101          vector swizzle ( temp 2-component vector of int)
+0:101            i: direct index for structure ( temp 4-component vector of int)
+0:101              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:101                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:101                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:101                  Constant:
+0:101                    0 (const uint)
+0:101                direct index ( temp uint)
+0:101                  'dti' ( in 3-component vector of uint)
+0:101                  Constant:
+0:101                    0 (const int)
+0:101              Constant:
+0:101                1 (const int)
+0:101            Sequence
+0:101              Constant:
+0:101                0 (const int)
+0:101              Constant:
+0:101                1 (const int)
+0:102      move second child to first child ( temp 3-component vector of int)
+0:102        vector swizzle ( temp 3-component vector of int)
+0:102          i: direct index for structure ( temp 4-component vector of int)
+0:102            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:102              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:102                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:102                Constant:
+0:102                  0 (const uint)
+0:102              direct index ( temp uint)
+0:102                'dti' ( in 3-component vector of uint)
+0:102                Constant:
+0:102                  0 (const int)
+0:102            Constant:
+0:102              1 (const int)
+0:102          Sequence
+0:102            Constant:
+0:102              0 (const int)
+0:102            Constant:
+0:102              1 (const int)
+0:102            Constant:
+0:102              2 (const int)
+0:102        subgroupQuadSwapHorizontal ( temp 3-component vector of int)
+0:102          vector swizzle ( temp 3-component vector of int)
+0:102            i: direct index for structure ( temp 4-component vector of int)
+0:102              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:102                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:102                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:102                  Constant:
+0:102                    0 (const uint)
+0:102                direct index ( temp uint)
+0:102                  'dti' ( in 3-component vector of uint)
+0:102                  Constant:
+0:102                    0 (const int)
+0:102              Constant:
+0:102                1 (const int)
+0:102            Sequence
+0:102              Constant:
+0:102                0 (const int)
+0:102              Constant:
+0:102                1 (const int)
+0:102              Constant:
+0:102                2 (const int)
+0:104      move second child to first child ( temp 4-component vector of float)
+0:104        f: direct index for structure ( temp 4-component vector of float)
+0:104          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:104            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:104              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:104              Constant:
+0:104                0 (const uint)
+0:104            direct index ( temp uint)
+0:104              'dti' ( in 3-component vector of uint)
+0:104              Constant:
+0:104                0 (const int)
+0:104          Constant:
+0:104            2 (const int)
+0:104        subgroupQuadSwapHorizontal ( temp 4-component vector of float)
+0:104          f: direct index for structure ( temp 4-component vector of float)
+0:104            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:104              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:104                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:104                Constant:
+0:104                  0 (const uint)
+0:104              direct index ( temp uint)
+0:104                'dti' ( in 3-component vector of uint)
+0:104                Constant:
+0:104                  0 (const int)
+0:104            Constant:
+0:104              2 (const int)
+0:105      move second child to first child ( temp float)
+0:105        direct index ( temp float)
+0:105          f: direct index for structure ( temp 4-component vector of float)
+0:105            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:105              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:105                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:105                Constant:
+0:105                  0 (const uint)
+0:105              direct index ( temp uint)
+0:105                'dti' ( in 3-component vector of uint)
+0:105                Constant:
+0:105                  0 (const int)
+0:105            Constant:
+0:105              2 (const int)
+0:105          Constant:
+0:105            0 (const int)
+0:105        subgroupQuadSwapHorizontal ( temp float)
+0:105          direct index ( temp float)
+0:105            f: direct index for structure ( temp 4-component vector of float)
+0:105              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:105                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:105                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:105                  Constant:
+0:105                    0 (const uint)
+0:105                direct index ( temp uint)
+0:105                  'dti' ( in 3-component vector of uint)
+0:105                  Constant:
+0:105                    0 (const int)
+0:105              Constant:
+0:105                2 (const int)
+0:105            Constant:
+0:105              0 (const int)
+0:106      move second child to first child ( temp 2-component vector of float)
+0:106        vector swizzle ( temp 2-component vector of float)
+0:106          f: direct index for structure ( temp 4-component vector of float)
+0:106            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:106              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:106                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:106                Constant:
+0:106                  0 (const uint)
+0:106              direct index ( temp uint)
+0:106                'dti' ( in 3-component vector of uint)
+0:106                Constant:
+0:106                  0 (const int)
+0:106            Constant:
+0:106              2 (const int)
+0:106          Sequence
+0:106            Constant:
+0:106              0 (const int)
+0:106            Constant:
+0:106              1 (const int)
+0:106        subgroupQuadSwapHorizontal ( temp 2-component vector of float)
+0:106          vector swizzle ( temp 2-component vector of float)
+0:106            f: direct index for structure ( temp 4-component vector of float)
+0:106              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:106                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:106                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:106                  Constant:
+0:106                    0 (const uint)
+0:106                direct index ( temp uint)
+0:106                  'dti' ( in 3-component vector of uint)
+0:106                  Constant:
+0:106                    0 (const int)
+0:106              Constant:
+0:106                2 (const int)
+0:106            Sequence
+0:106              Constant:
+0:106                0 (const int)
+0:106              Constant:
+0:106                1 (const int)
+0:107      move second child to first child ( temp 3-component vector of float)
+0:107        vector swizzle ( temp 3-component vector of float)
+0:107          f: direct index for structure ( temp 4-component vector of float)
+0:107            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:107              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:107                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:107                Constant:
+0:107                  0 (const uint)
+0:107              direct index ( temp uint)
+0:107                'dti' ( in 3-component vector of uint)
+0:107                Constant:
+0:107                  0 (const int)
+0:107            Constant:
+0:107              2 (const int)
+0:107          Sequence
+0:107            Constant:
+0:107              0 (const int)
+0:107            Constant:
+0:107              1 (const int)
+0:107            Constant:
+0:107              2 (const int)
+0:107        subgroupQuadSwapHorizontal ( temp 3-component vector of float)
+0:107          vector swizzle ( temp 3-component vector of float)
+0:107            f: direct index for structure ( temp 4-component vector of float)
+0:107              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:107                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:107                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:107                  Constant:
+0:107                    0 (const uint)
+0:107                direct index ( temp uint)
+0:107                  'dti' ( in 3-component vector of uint)
+0:107                  Constant:
+0:107                    0 (const int)
+0:107              Constant:
+0:107                2 (const int)
+0:107            Sequence
+0:107              Constant:
+0:107                0 (const int)
+0:107              Constant:
+0:107                1 (const int)
+0:107              Constant:
+0:107                2 (const int)
+0:109      move second child to first child ( temp 4-component vector of double)
+0:109        d: direct index for structure ( temp 4-component vector of double)
+0:109          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:109            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:109              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:109              Constant:
+0:109                0 (const uint)
+0:109            direct index ( temp uint)
+0:109              'dti' ( in 3-component vector of uint)
+0:109              Constant:
+0:109                0 (const int)
+0:109          Constant:
+0:109            3 (const int)
+0:109        subgroupQuadSwapHorizontal ( temp 4-component vector of double)
+0:109          d: direct index for structure ( temp 4-component vector of double)
+0:109            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:109              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:109                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:109                Constant:
+0:109                  0 (const uint)
+0:109              direct index ( temp uint)
+0:109                'dti' ( in 3-component vector of uint)
+0:109                Constant:
+0:109                  0 (const int)
+0:109            Constant:
+0:109              3 (const int)
+0:110      move second child to first child ( temp double)
+0:110        direct index ( temp double)
+0:110          d: direct index for structure ( temp 4-component vector of double)
+0:110            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:110              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:110                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:110                Constant:
+0:110                  0 (const uint)
+0:110              direct index ( temp uint)
+0:110                'dti' ( in 3-component vector of uint)
+0:110                Constant:
+0:110                  0 (const int)
+0:110            Constant:
+0:110              3 (const int)
+0:110          Constant:
+0:110            0 (const int)
+0:110        subgroupQuadSwapHorizontal ( temp double)
+0:110          direct index ( temp double)
+0:110            d: direct index for structure ( temp 4-component vector of double)
+0:110              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:110                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:110                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:110                  Constant:
+0:110                    0 (const uint)
+0:110                direct index ( temp uint)
+0:110                  'dti' ( in 3-component vector of uint)
+0:110                  Constant:
+0:110                    0 (const int)
+0:110              Constant:
+0:110                3 (const int)
+0:110            Constant:
+0:110              0 (const int)
+0:111      move second child to first child ( temp 2-component vector of double)
+0:111        vector swizzle ( temp 2-component vector of double)
+0:111          d: direct index for structure ( temp 4-component vector of double)
+0:111            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:111              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:111                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:111                Constant:
+0:111                  0 (const uint)
+0:111              direct index ( temp uint)
+0:111                'dti' ( in 3-component vector of uint)
+0:111                Constant:
+0:111                  0 (const int)
+0:111            Constant:
+0:111              3 (const int)
+0:111          Sequence
+0:111            Constant:
+0:111              0 (const int)
+0:111            Constant:
+0:111              1 (const int)
+0:111        subgroupQuadSwapHorizontal ( temp 2-component vector of double)
+0:111          vector swizzle ( temp 2-component vector of double)
+0:111            d: direct index for structure ( temp 4-component vector of double)
+0:111              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:111                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:111                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:111                  Constant:
+0:111                    0 (const uint)
+0:111                direct index ( temp uint)
+0:111                  'dti' ( in 3-component vector of uint)
+0:111                  Constant:
+0:111                    0 (const int)
+0:111              Constant:
+0:111                3 (const int)
+0:111            Sequence
+0:111              Constant:
+0:111                0 (const int)
+0:111              Constant:
+0:111                1 (const int)
+0:112      move second child to first child ( temp 3-component vector of double)
+0:112        vector swizzle ( temp 3-component vector of double)
+0:112          d: direct index for structure ( temp 4-component vector of double)
+0:112            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:112              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:112                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:112                Constant:
+0:112                  0 (const uint)
+0:112              direct index ( temp uint)
+0:112                'dti' ( in 3-component vector of uint)
+0:112                Constant:
+0:112                  0 (const int)
+0:112            Constant:
+0:112              3 (const int)
+0:112          Sequence
+0:112            Constant:
+0:112              0 (const int)
+0:112            Constant:
+0:112              1 (const int)
+0:112            Constant:
+0:112              2 (const int)
+0:112        subgroupQuadSwapHorizontal ( temp 3-component vector of double)
+0:112          vector swizzle ( temp 3-component vector of double)
+0:112            d: direct index for structure ( temp 4-component vector of double)
+0:112              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:112                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:112                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:112                  Constant:
+0:112                    0 (const uint)
+0:112                direct index ( temp uint)
+0:112                  'dti' ( in 3-component vector of uint)
+0:112                  Constant:
+0:112                    0 (const int)
+0:112              Constant:
+0:112                3 (const int)
+0:112            Sequence
+0:112              Constant:
+0:112                0 (const int)
+0:112              Constant:
+0:112                1 (const int)
+0:112              Constant:
+0:112                2 (const int)
+0:114      move second child to first child ( temp 4-component vector of uint)
+0:114        u: direct index for structure ( temp 4-component vector of uint)
+0:114          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:114            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:114              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:114              Constant:
+0:114                0 (const uint)
+0:114            direct index ( temp uint)
+0:114              'dti' ( in 3-component vector of uint)
+0:114              Constant:
+0:114                0 (const int)
+0:114          Constant:
+0:114            0 (const int)
+0:114        subgroupQuadSwapVertical ( temp 4-component vector of uint)
+0:114          u: direct index for structure ( temp 4-component vector of uint)
+0:114            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:114              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:114                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:114                Constant:
+0:114                  0 (const uint)
+0:114              direct index ( temp uint)
+0:114                'dti' ( in 3-component vector of uint)
+0:114                Constant:
+0:114                  0 (const int)
+0:114            Constant:
+0:114              0 (const int)
+0:115      move second child to first child ( temp uint)
+0:115        direct index ( temp uint)
+0:115          u: direct index for structure ( temp 4-component vector of uint)
+0:115            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:115              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:115                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:115                Constant:
+0:115                  0 (const uint)
+0:115              direct index ( temp uint)
+0:115                'dti' ( in 3-component vector of uint)
+0:115                Constant:
+0:115                  0 (const int)
+0:115            Constant:
+0:115              0 (const int)
+0:115          Constant:
+0:115            0 (const int)
+0:115        subgroupQuadSwapVertical ( temp uint)
+0:115          direct index ( temp uint)
+0:115            u: direct index for structure ( temp 4-component vector of uint)
+0:115              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:115                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:115                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:115                  Constant:
+0:115                    0 (const uint)
+0:115                direct index ( temp uint)
+0:115                  'dti' ( in 3-component vector of uint)
+0:115                  Constant:
+0:115                    0 (const int)
+0:115              Constant:
+0:115                0 (const int)
+0:115            Constant:
+0:115              0 (const int)
+0:116      move second child to first child ( temp 2-component vector of uint)
+0:116        vector swizzle ( temp 2-component vector of uint)
+0:116          u: direct index for structure ( temp 4-component vector of uint)
+0:116            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:116              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:116                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:116                Constant:
+0:116                  0 (const uint)
+0:116              direct index ( temp uint)
+0:116                'dti' ( in 3-component vector of uint)
+0:116                Constant:
+0:116                  0 (const int)
+0:116            Constant:
+0:116              0 (const int)
+0:116          Sequence
+0:116            Constant:
+0:116              0 (const int)
+0:116            Constant:
+0:116              1 (const int)
+0:116        subgroupQuadSwapVertical ( temp 2-component vector of uint)
+0:116          vector swizzle ( temp 2-component vector of uint)
+0:116            u: direct index for structure ( temp 4-component vector of uint)
+0:116              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:116                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:116                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:116                  Constant:
+0:116                    0 (const uint)
+0:116                direct index ( temp uint)
+0:116                  'dti' ( in 3-component vector of uint)
+0:116                  Constant:
+0:116                    0 (const int)
+0:116              Constant:
+0:116                0 (const int)
+0:116            Sequence
+0:116              Constant:
+0:116                0 (const int)
+0:116              Constant:
+0:116                1 (const int)
+0:117      move second child to first child ( temp 3-component vector of uint)
+0:117        vector swizzle ( temp 3-component vector of uint)
+0:117          u: direct index for structure ( temp 4-component vector of uint)
+0:117            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:117              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:117                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:117                Constant:
+0:117                  0 (const uint)
+0:117              direct index ( temp uint)
+0:117                'dti' ( in 3-component vector of uint)
+0:117                Constant:
+0:117                  0 (const int)
+0:117            Constant:
+0:117              0 (const int)
+0:117          Sequence
+0:117            Constant:
+0:117              0 (const int)
+0:117            Constant:
+0:117              1 (const int)
+0:117            Constant:
+0:117              2 (const int)
+0:117        subgroupQuadSwapVertical ( temp 3-component vector of uint)
+0:117          vector swizzle ( temp 3-component vector of uint)
+0:117            u: direct index for structure ( temp 4-component vector of uint)
+0:117              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:117                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:117                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:117                  Constant:
+0:117                    0 (const uint)
+0:117                direct index ( temp uint)
+0:117                  'dti' ( in 3-component vector of uint)
+0:117                  Constant:
+0:117                    0 (const int)
+0:117              Constant:
+0:117                0 (const int)
+0:117            Sequence
+0:117              Constant:
+0:117                0 (const int)
+0:117              Constant:
+0:117                1 (const int)
+0:117              Constant:
+0:117                2 (const int)
+0:119      move second child to first child ( temp 4-component vector of int)
+0:119        i: direct index for structure ( temp 4-component vector of int)
+0:119          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:119            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:119              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:119              Constant:
+0:119                0 (const uint)
+0:119            direct index ( temp uint)
+0:119              'dti' ( in 3-component vector of uint)
+0:119              Constant:
+0:119                0 (const int)
+0:119          Constant:
+0:119            1 (const int)
+0:119        subgroupQuadSwapVertical ( temp 4-component vector of int)
+0:119          i: direct index for structure ( temp 4-component vector of int)
+0:119            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:119              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:119                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:119                Constant:
+0:119                  0 (const uint)
+0:119              direct index ( temp uint)
+0:119                'dti' ( in 3-component vector of uint)
+0:119                Constant:
+0:119                  0 (const int)
+0:119            Constant:
+0:119              1 (const int)
+0:120      move second child to first child ( temp int)
+0:120        direct index ( temp int)
+0:120          i: direct index for structure ( temp 4-component vector of int)
+0:120            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:120              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:120                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:120                Constant:
+0:120                  0 (const uint)
+0:120              direct index ( temp uint)
+0:120                'dti' ( in 3-component vector of uint)
+0:120                Constant:
+0:120                  0 (const int)
+0:120            Constant:
+0:120              1 (const int)
+0:120          Constant:
+0:120            0 (const int)
+0:120        subgroupQuadSwapVertical ( temp int)
+0:120          direct index ( temp int)
+0:120            i: direct index for structure ( temp 4-component vector of int)
+0:120              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:120                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:120                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:120                  Constant:
+0:120                    0 (const uint)
+0:120                direct index ( temp uint)
+0:120                  'dti' ( in 3-component vector of uint)
+0:120                  Constant:
+0:120                    0 (const int)
+0:120              Constant:
+0:120                1 (const int)
+0:120            Constant:
+0:120              0 (const int)
+0:121      move second child to first child ( temp 2-component vector of int)
+0:121        vector swizzle ( temp 2-component vector of int)
+0:121          i: direct index for structure ( temp 4-component vector of int)
+0:121            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:121              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:121                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:121                Constant:
+0:121                  0 (const uint)
+0:121              direct index ( temp uint)
+0:121                'dti' ( in 3-component vector of uint)
+0:121                Constant:
+0:121                  0 (const int)
+0:121            Constant:
+0:121              1 (const int)
+0:121          Sequence
+0:121            Constant:
+0:121              0 (const int)
+0:121            Constant:
+0:121              1 (const int)
+0:121        subgroupQuadSwapVertical ( temp 2-component vector of int)
+0:121          vector swizzle ( temp 2-component vector of int)
+0:121            i: direct index for structure ( temp 4-component vector of int)
+0:121              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:121                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:121                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:121                  Constant:
+0:121                    0 (const uint)
+0:121                direct index ( temp uint)
+0:121                  'dti' ( in 3-component vector of uint)
+0:121                  Constant:
+0:121                    0 (const int)
+0:121              Constant:
+0:121                1 (const int)
+0:121            Sequence
+0:121              Constant:
+0:121                0 (const int)
+0:121              Constant:
+0:121                1 (const int)
+0:122      move second child to first child ( temp 3-component vector of int)
+0:122        vector swizzle ( temp 3-component vector of int)
+0:122          i: direct index for structure ( temp 4-component vector of int)
+0:122            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:122              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:122                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:122                Constant:
+0:122                  0 (const uint)
+0:122              direct index ( temp uint)
+0:122                'dti' ( in 3-component vector of uint)
+0:122                Constant:
+0:122                  0 (const int)
+0:122            Constant:
+0:122              1 (const int)
+0:122          Sequence
+0:122            Constant:
+0:122              0 (const int)
+0:122            Constant:
+0:122              1 (const int)
+0:122            Constant:
+0:122              2 (const int)
+0:122        subgroupQuadSwapVertical ( temp 3-component vector of int)
+0:122          vector swizzle ( temp 3-component vector of int)
+0:122            i: direct index for structure ( temp 4-component vector of int)
+0:122              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:122                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:122                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:122                  Constant:
+0:122                    0 (const uint)
+0:122                direct index ( temp uint)
+0:122                  'dti' ( in 3-component vector of uint)
+0:122                  Constant:
+0:122                    0 (const int)
+0:122              Constant:
+0:122                1 (const int)
+0:122            Sequence
+0:122              Constant:
+0:122                0 (const int)
+0:122              Constant:
+0:122                1 (const int)
+0:122              Constant:
+0:122                2 (const int)
+0:124      move second child to first child ( temp 4-component vector of float)
+0:124        f: direct index for structure ( temp 4-component vector of float)
+0:124          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:124            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:124              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:124              Constant:
+0:124                0 (const uint)
+0:124            direct index ( temp uint)
+0:124              'dti' ( in 3-component vector of uint)
+0:124              Constant:
+0:124                0 (const int)
+0:124          Constant:
+0:124            2 (const int)
+0:124        subgroupQuadSwapVertical ( temp 4-component vector of float)
+0:124          f: direct index for structure ( temp 4-component vector of float)
+0:124            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:124              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:124                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:124                Constant:
+0:124                  0 (const uint)
+0:124              direct index ( temp uint)
+0:124                'dti' ( in 3-component vector of uint)
+0:124                Constant:
+0:124                  0 (const int)
+0:124            Constant:
+0:124              2 (const int)
+0:125      move second child to first child ( temp float)
+0:125        direct index ( temp float)
+0:125          f: direct index for structure ( temp 4-component vector of float)
+0:125            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:125              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:125                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:125                Constant:
+0:125                  0 (const uint)
+0:125              direct index ( temp uint)
+0:125                'dti' ( in 3-component vector of uint)
+0:125                Constant:
+0:125                  0 (const int)
+0:125            Constant:
+0:125              2 (const int)
+0:125          Constant:
+0:125            0 (const int)
+0:125        subgroupQuadSwapVertical ( temp float)
+0:125          direct index ( temp float)
+0:125            f: direct index for structure ( temp 4-component vector of float)
+0:125              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:125                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:125                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:125                  Constant:
+0:125                    0 (const uint)
+0:125                direct index ( temp uint)
+0:125                  'dti' ( in 3-component vector of uint)
+0:125                  Constant:
+0:125                    0 (const int)
+0:125              Constant:
+0:125                2 (const int)
+0:125            Constant:
+0:125              0 (const int)
+0:126      move second child to first child ( temp 2-component vector of float)
+0:126        vector swizzle ( temp 2-component vector of float)
+0:126          f: direct index for structure ( temp 4-component vector of float)
+0:126            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:126              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:126                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:126                Constant:
+0:126                  0 (const uint)
+0:126              direct index ( temp uint)
+0:126                'dti' ( in 3-component vector of uint)
+0:126                Constant:
+0:126                  0 (const int)
+0:126            Constant:
+0:126              2 (const int)
+0:126          Sequence
+0:126            Constant:
+0:126              0 (const int)
+0:126            Constant:
+0:126              1 (const int)
+0:126        subgroupQuadSwapVertical ( temp 2-component vector of float)
+0:126          vector swizzle ( temp 2-component vector of float)
+0:126            f: direct index for structure ( temp 4-component vector of float)
+0:126              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:126                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:126                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:126                  Constant:
+0:126                    0 (const uint)
+0:126                direct index ( temp uint)
+0:126                  'dti' ( in 3-component vector of uint)
+0:126                  Constant:
+0:126                    0 (const int)
+0:126              Constant:
+0:126                2 (const int)
+0:126            Sequence
+0:126              Constant:
+0:126                0 (const int)
+0:126              Constant:
+0:126                1 (const int)
+0:127      move second child to first child ( temp 3-component vector of float)
+0:127        vector swizzle ( temp 3-component vector of float)
+0:127          f: direct index for structure ( temp 4-component vector of float)
+0:127            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:127              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:127                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:127                Constant:
+0:127                  0 (const uint)
+0:127              direct index ( temp uint)
+0:127                'dti' ( in 3-component vector of uint)
+0:127                Constant:
+0:127                  0 (const int)
+0:127            Constant:
+0:127              2 (const int)
+0:127          Sequence
+0:127            Constant:
+0:127              0 (const int)
+0:127            Constant:
+0:127              1 (const int)
+0:127            Constant:
+0:127              2 (const int)
+0:127        subgroupQuadSwapVertical ( temp 3-component vector of float)
+0:127          vector swizzle ( temp 3-component vector of float)
+0:127            f: direct index for structure ( temp 4-component vector of float)
+0:127              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:127                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:127                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:127                  Constant:
+0:127                    0 (const uint)
+0:127                direct index ( temp uint)
+0:127                  'dti' ( in 3-component vector of uint)
+0:127                  Constant:
+0:127                    0 (const int)
+0:127              Constant:
+0:127                2 (const int)
+0:127            Sequence
+0:127              Constant:
+0:127                0 (const int)
+0:127              Constant:
+0:127                1 (const int)
+0:127              Constant:
+0:127                2 (const int)
+0:129      move second child to first child ( temp 4-component vector of double)
+0:129        d: direct index for structure ( temp 4-component vector of double)
+0:129          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:129            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:129              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:129              Constant:
+0:129                0 (const uint)
+0:129            direct index ( temp uint)
+0:129              'dti' ( in 3-component vector of uint)
+0:129              Constant:
+0:129                0 (const int)
+0:129          Constant:
+0:129            3 (const int)
+0:129        subgroupQuadSwapVertical ( temp 4-component vector of double)
+0:129          d: direct index for structure ( temp 4-component vector of double)
+0:129            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:129              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:129                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:129                Constant:
+0:129                  0 (const uint)
+0:129              direct index ( temp uint)
+0:129                'dti' ( in 3-component vector of uint)
+0:129                Constant:
+0:129                  0 (const int)
+0:129            Constant:
+0:129              3 (const int)
+0:130      move second child to first child ( temp double)
+0:130        direct index ( temp double)
+0:130          d: direct index for structure ( temp 4-component vector of double)
+0:130            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:130              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:130                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:130                Constant:
+0:130                  0 (const uint)
+0:130              direct index ( temp uint)
+0:130                'dti' ( in 3-component vector of uint)
+0:130                Constant:
+0:130                  0 (const int)
+0:130            Constant:
+0:130              3 (const int)
+0:130          Constant:
+0:130            0 (const int)
+0:130        subgroupQuadSwapVertical ( temp double)
+0:130          direct index ( temp double)
+0:130            d: direct index for structure ( temp 4-component vector of double)
+0:130              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:130                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:130                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:130                  Constant:
+0:130                    0 (const uint)
+0:130                direct index ( temp uint)
+0:130                  'dti' ( in 3-component vector of uint)
+0:130                  Constant:
+0:130                    0 (const int)
+0:130              Constant:
+0:130                3 (const int)
+0:130            Constant:
+0:130              0 (const int)
+0:131      move second child to first child ( temp 2-component vector of double)
+0:131        vector swizzle ( temp 2-component vector of double)
+0:131          d: direct index for structure ( temp 4-component vector of double)
+0:131            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:131              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:131                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:131                Constant:
+0:131                  0 (const uint)
+0:131              direct index ( temp uint)
+0:131                'dti' ( in 3-component vector of uint)
+0:131                Constant:
+0:131                  0 (const int)
+0:131            Constant:
+0:131              3 (const int)
+0:131          Sequence
+0:131            Constant:
+0:131              0 (const int)
+0:131            Constant:
+0:131              1 (const int)
+0:131        subgroupQuadSwapVertical ( temp 2-component vector of double)
+0:131          vector swizzle ( temp 2-component vector of double)
+0:131            d: direct index for structure ( temp 4-component vector of double)
+0:131              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:131                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:131                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:131                  Constant:
+0:131                    0 (const uint)
+0:131                direct index ( temp uint)
+0:131                  'dti' ( in 3-component vector of uint)
+0:131                  Constant:
+0:131                    0 (const int)
+0:131              Constant:
+0:131                3 (const int)
+0:131            Sequence
+0:131              Constant:
+0:131                0 (const int)
+0:131              Constant:
+0:131                1 (const int)
+0:132      move second child to first child ( temp 3-component vector of double)
+0:132        vector swizzle ( temp 3-component vector of double)
+0:132          d: direct index for structure ( temp 4-component vector of double)
+0:132            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:132              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:132                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:132                Constant:
+0:132                  0 (const uint)
+0:132              direct index ( temp uint)
+0:132                'dti' ( in 3-component vector of uint)
+0:132                Constant:
+0:132                  0 (const int)
+0:132            Constant:
+0:132              3 (const int)
+0:132          Sequence
+0:132            Constant:
+0:132              0 (const int)
+0:132            Constant:
+0:132              1 (const int)
+0:132            Constant:
+0:132              2 (const int)
+0:132        subgroupQuadSwapVertical ( temp 3-component vector of double)
+0:132          vector swizzle ( temp 3-component vector of double)
+0:132            d: direct index for structure ( temp 4-component vector of double)
+0:132              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:132                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:132                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:132                  Constant:
+0:132                    0 (const uint)
+0:132                direct index ( temp uint)
+0:132                  'dti' ( in 3-component vector of uint)
+0:132                  Constant:
+0:132                    0 (const int)
+0:132              Constant:
+0:132                3 (const int)
+0:132            Sequence
+0:132              Constant:
+0:132                0 (const int)
+0:132              Constant:
+0:132                1 (const int)
+0:132              Constant:
+0:132                2 (const int)
+0:134      move second child to first child ( temp 4-component vector of uint)
+0:134        u: direct index for structure ( temp 4-component vector of uint)
+0:134          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:134            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:134              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:134              Constant:
+0:134                0 (const uint)
+0:134            direct index ( temp uint)
+0:134              'dti' ( in 3-component vector of uint)
+0:134              Constant:
+0:134                0 (const int)
+0:134          Constant:
+0:134            0 (const int)
+0:134        subgroupQuadSwapDiagonal ( temp 4-component vector of uint)
+0:134          u: direct index for structure ( temp 4-component vector of uint)
+0:134            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:134              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:134                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:134                Constant:
+0:134                  0 (const uint)
+0:134              direct index ( temp uint)
+0:134                'dti' ( in 3-component vector of uint)
+0:134                Constant:
+0:134                  0 (const int)
+0:134            Constant:
+0:134              0 (const int)
+0:135      move second child to first child ( temp uint)
+0:135        direct index ( temp uint)
+0:135          u: direct index for structure ( temp 4-component vector of uint)
+0:135            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:135              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:135                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:135                Constant:
+0:135                  0 (const uint)
+0:135              direct index ( temp uint)
+0:135                'dti' ( in 3-component vector of uint)
+0:135                Constant:
+0:135                  0 (const int)
+0:135            Constant:
+0:135              0 (const int)
+0:135          Constant:
+0:135            0 (const int)
+0:135        subgroupQuadSwapDiagonal ( temp uint)
+0:135          direct index ( temp uint)
+0:135            u: direct index for structure ( temp 4-component vector of uint)
+0:135              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:135                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:135                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:135                  Constant:
+0:135                    0 (const uint)
+0:135                direct index ( temp uint)
+0:135                  'dti' ( in 3-component vector of uint)
+0:135                  Constant:
+0:135                    0 (const int)
+0:135              Constant:
+0:135                0 (const int)
+0:135            Constant:
+0:135              0 (const int)
+0:136      move second child to first child ( temp 2-component vector of uint)
+0:136        vector swizzle ( temp 2-component vector of uint)
+0:136          u: direct index for structure ( temp 4-component vector of uint)
+0:136            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:136              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:136                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:136                Constant:
+0:136                  0 (const uint)
+0:136              direct index ( temp uint)
+0:136                'dti' ( in 3-component vector of uint)
+0:136                Constant:
+0:136                  0 (const int)
+0:136            Constant:
+0:136              0 (const int)
+0:136          Sequence
+0:136            Constant:
+0:136              0 (const int)
+0:136            Constant:
+0:136              1 (const int)
+0:136        subgroupQuadSwapDiagonal ( temp 2-component vector of uint)
+0:136          vector swizzle ( temp 2-component vector of uint)
+0:136            u: direct index for structure ( temp 4-component vector of uint)
+0:136              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:136                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:136                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:136                  Constant:
+0:136                    0 (const uint)
+0:136                direct index ( temp uint)
+0:136                  'dti' ( in 3-component vector of uint)
+0:136                  Constant:
+0:136                    0 (const int)
+0:136              Constant:
+0:136                0 (const int)
+0:136            Sequence
+0:136              Constant:
+0:136                0 (const int)
+0:136              Constant:
+0:136                1 (const int)
+0:137      move second child to first child ( temp 3-component vector of uint)
+0:137        vector swizzle ( temp 3-component vector of uint)
+0:137          u: direct index for structure ( temp 4-component vector of uint)
+0:137            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:137              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:137                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:137                Constant:
+0:137                  0 (const uint)
+0:137              direct index ( temp uint)
+0:137                'dti' ( in 3-component vector of uint)
+0:137                Constant:
+0:137                  0 (const int)
+0:137            Constant:
+0:137              0 (const int)
+0:137          Sequence
+0:137            Constant:
+0:137              0 (const int)
+0:137            Constant:
+0:137              1 (const int)
+0:137            Constant:
+0:137              2 (const int)
+0:137        subgroupQuadSwapDiagonal ( temp 3-component vector of uint)
+0:137          vector swizzle ( temp 3-component vector of uint)
+0:137            u: direct index for structure ( temp 4-component vector of uint)
+0:137              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:137                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:137                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:137                  Constant:
+0:137                    0 (const uint)
+0:137                direct index ( temp uint)
+0:137                  'dti' ( in 3-component vector of uint)
+0:137                  Constant:
+0:137                    0 (const int)
+0:137              Constant:
+0:137                0 (const int)
+0:137            Sequence
+0:137              Constant:
+0:137                0 (const int)
+0:137              Constant:
+0:137                1 (const int)
+0:137              Constant:
+0:137                2 (const int)
+0:139      move second child to first child ( temp 4-component vector of int)
+0:139        i: direct index for structure ( temp 4-component vector of int)
+0:139          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:139            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:139              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:139              Constant:
+0:139                0 (const uint)
+0:139            direct index ( temp uint)
+0:139              'dti' ( in 3-component vector of uint)
+0:139              Constant:
+0:139                0 (const int)
+0:139          Constant:
+0:139            1 (const int)
+0:139        subgroupQuadSwapDiagonal ( temp 4-component vector of int)
+0:139          i: direct index for structure ( temp 4-component vector of int)
+0:139            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:139              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:139                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:139                Constant:
+0:139                  0 (const uint)
+0:139              direct index ( temp uint)
+0:139                'dti' ( in 3-component vector of uint)
+0:139                Constant:
+0:139                  0 (const int)
+0:139            Constant:
+0:139              1 (const int)
+0:140      move second child to first child ( temp int)
+0:140        direct index ( temp int)
+0:140          i: direct index for structure ( temp 4-component vector of int)
+0:140            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:140              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:140                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:140                Constant:
+0:140                  0 (const uint)
+0:140              direct index ( temp uint)
+0:140                'dti' ( in 3-component vector of uint)
+0:140                Constant:
+0:140                  0 (const int)
+0:140            Constant:
+0:140              1 (const int)
+0:140          Constant:
+0:140            0 (const int)
+0:140        subgroupQuadSwapDiagonal ( temp int)
+0:140          direct index ( temp int)
+0:140            i: direct index for structure ( temp 4-component vector of int)
+0:140              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:140                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:140                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:140                  Constant:
+0:140                    0 (const uint)
+0:140                direct index ( temp uint)
+0:140                  'dti' ( in 3-component vector of uint)
+0:140                  Constant:
+0:140                    0 (const int)
+0:140              Constant:
+0:140                1 (const int)
+0:140            Constant:
+0:140              0 (const int)
+0:141      move second child to first child ( temp 2-component vector of int)
+0:141        vector swizzle ( temp 2-component vector of int)
+0:141          i: direct index for structure ( temp 4-component vector of int)
+0:141            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:141              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:141                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:141                Constant:
+0:141                  0 (const uint)
+0:141              direct index ( temp uint)
+0:141                'dti' ( in 3-component vector of uint)
+0:141                Constant:
+0:141                  0 (const int)
+0:141            Constant:
+0:141              1 (const int)
+0:141          Sequence
+0:141            Constant:
+0:141              0 (const int)
+0:141            Constant:
+0:141              1 (const int)
+0:141        subgroupQuadSwapDiagonal ( temp 2-component vector of int)
+0:141          vector swizzle ( temp 2-component vector of int)
+0:141            i: direct index for structure ( temp 4-component vector of int)
+0:141              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:141                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:141                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:141                  Constant:
+0:141                    0 (const uint)
+0:141                direct index ( temp uint)
+0:141                  'dti' ( in 3-component vector of uint)
+0:141                  Constant:
+0:141                    0 (const int)
+0:141              Constant:
+0:141                1 (const int)
+0:141            Sequence
+0:141              Constant:
+0:141                0 (const int)
+0:141              Constant:
+0:141                1 (const int)
+0:142      move second child to first child ( temp 3-component vector of int)
+0:142        vector swizzle ( temp 3-component vector of int)
+0:142          i: direct index for structure ( temp 4-component vector of int)
+0:142            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:142              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:142                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:142                Constant:
+0:142                  0 (const uint)
+0:142              direct index ( temp uint)
+0:142                'dti' ( in 3-component vector of uint)
+0:142                Constant:
+0:142                  0 (const int)
+0:142            Constant:
+0:142              1 (const int)
+0:142          Sequence
+0:142            Constant:
+0:142              0 (const int)
+0:142            Constant:
+0:142              1 (const int)
+0:142            Constant:
+0:142              2 (const int)
+0:142        subgroupQuadSwapDiagonal ( temp 3-component vector of int)
+0:142          vector swizzle ( temp 3-component vector of int)
+0:142            i: direct index for structure ( temp 4-component vector of int)
+0:142              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:142                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:142                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:142                  Constant:
+0:142                    0 (const uint)
+0:142                direct index ( temp uint)
+0:142                  'dti' ( in 3-component vector of uint)
+0:142                  Constant:
+0:142                    0 (const int)
+0:142              Constant:
+0:142                1 (const int)
+0:142            Sequence
+0:142              Constant:
+0:142                0 (const int)
+0:142              Constant:
+0:142                1 (const int)
+0:142              Constant:
+0:142                2 (const int)
+0:144      move second child to first child ( temp 4-component vector of float)
+0:144        f: direct index for structure ( temp 4-component vector of float)
+0:144          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:144            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:144              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:144              Constant:
+0:144                0 (const uint)
+0:144            direct index ( temp uint)
+0:144              'dti' ( in 3-component vector of uint)
+0:144              Constant:
+0:144                0 (const int)
+0:144          Constant:
+0:144            2 (const int)
+0:144        subgroupQuadSwapDiagonal ( temp 4-component vector of float)
+0:144          f: direct index for structure ( temp 4-component vector of float)
+0:144            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:144              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:144                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:144                Constant:
+0:144                  0 (const uint)
+0:144              direct index ( temp uint)
+0:144                'dti' ( in 3-component vector of uint)
+0:144                Constant:
+0:144                  0 (const int)
+0:144            Constant:
+0:144              2 (const int)
+0:145      move second child to first child ( temp float)
+0:145        direct index ( temp float)
+0:145          f: direct index for structure ( temp 4-component vector of float)
+0:145            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:145              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:145                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:145                Constant:
+0:145                  0 (const uint)
+0:145              direct index ( temp uint)
+0:145                'dti' ( in 3-component vector of uint)
+0:145                Constant:
+0:145                  0 (const int)
+0:145            Constant:
+0:145              2 (const int)
+0:145          Constant:
+0:145            0 (const int)
+0:145        subgroupQuadSwapDiagonal ( temp float)
+0:145          direct index ( temp float)
+0:145            f: direct index for structure ( temp 4-component vector of float)
+0:145              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:145                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:145                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:145                  Constant:
+0:145                    0 (const uint)
+0:145                direct index ( temp uint)
+0:145                  'dti' ( in 3-component vector of uint)
+0:145                  Constant:
+0:145                    0 (const int)
+0:145              Constant:
+0:145                2 (const int)
+0:145            Constant:
+0:145              0 (const int)
+0:146      move second child to first child ( temp 2-component vector of float)
+0:146        vector swizzle ( temp 2-component vector of float)
+0:146          f: direct index for structure ( temp 4-component vector of float)
+0:146            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:146              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:146                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:146                Constant:
+0:146                  0 (const uint)
+0:146              direct index ( temp uint)
+0:146                'dti' ( in 3-component vector of uint)
+0:146                Constant:
+0:146                  0 (const int)
+0:146            Constant:
+0:146              2 (const int)
+0:146          Sequence
+0:146            Constant:
+0:146              0 (const int)
+0:146            Constant:
+0:146              1 (const int)
+0:146        subgroupQuadSwapDiagonal ( temp 2-component vector of float)
+0:146          vector swizzle ( temp 2-component vector of float)
+0:146            f: direct index for structure ( temp 4-component vector of float)
+0:146              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:146                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:146                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:146                  Constant:
+0:146                    0 (const uint)
+0:146                direct index ( temp uint)
+0:146                  'dti' ( in 3-component vector of uint)
+0:146                  Constant:
+0:146                    0 (const int)
+0:146              Constant:
+0:146                2 (const int)
+0:146            Sequence
+0:146              Constant:
+0:146                0 (const int)
+0:146              Constant:
+0:146                1 (const int)
+0:147      move second child to first child ( temp 3-component vector of float)
+0:147        vector swizzle ( temp 3-component vector of float)
+0:147          f: direct index for structure ( temp 4-component vector of float)
+0:147            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:147              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:147                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:147                Constant:
+0:147                  0 (const uint)
+0:147              direct index ( temp uint)
+0:147                'dti' ( in 3-component vector of uint)
+0:147                Constant:
+0:147                  0 (const int)
+0:147            Constant:
+0:147              2 (const int)
+0:147          Sequence
+0:147            Constant:
+0:147              0 (const int)
+0:147            Constant:
+0:147              1 (const int)
+0:147            Constant:
+0:147              2 (const int)
+0:147        subgroupQuadSwapDiagonal ( temp 3-component vector of float)
+0:147          vector swizzle ( temp 3-component vector of float)
+0:147            f: direct index for structure ( temp 4-component vector of float)
+0:147              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:147                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:147                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:147                  Constant:
+0:147                    0 (const uint)
+0:147                direct index ( temp uint)
+0:147                  'dti' ( in 3-component vector of uint)
+0:147                  Constant:
+0:147                    0 (const int)
+0:147              Constant:
+0:147                2 (const int)
+0:147            Sequence
+0:147              Constant:
+0:147                0 (const int)
+0:147              Constant:
+0:147                1 (const int)
+0:147              Constant:
+0:147                2 (const int)
+0:149      move second child to first child ( temp 4-component vector of double)
+0:149        d: direct index for structure ( temp 4-component vector of double)
+0:149          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:149            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:149              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:149              Constant:
+0:149                0 (const uint)
+0:149            direct index ( temp uint)
+0:149              'dti' ( in 3-component vector of uint)
+0:149              Constant:
+0:149                0 (const int)
+0:149          Constant:
+0:149            3 (const int)
+0:149        subgroupQuadSwapDiagonal ( temp 4-component vector of double)
+0:149          d: direct index for structure ( temp 4-component vector of double)
+0:149            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:149              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:149                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:149                Constant:
+0:149                  0 (const uint)
+0:149              direct index ( temp uint)
+0:149                'dti' ( in 3-component vector of uint)
+0:149                Constant:
+0:149                  0 (const int)
+0:149            Constant:
+0:149              3 (const int)
+0:150      move second child to first child ( temp double)
+0:150        direct index ( temp double)
+0:150          d: direct index for structure ( temp 4-component vector of double)
+0:150            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:150              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:150                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:150                Constant:
+0:150                  0 (const uint)
+0:150              direct index ( temp uint)
+0:150                'dti' ( in 3-component vector of uint)
+0:150                Constant:
+0:150                  0 (const int)
+0:150            Constant:
+0:150              3 (const int)
+0:150          Constant:
+0:150            0 (const int)
+0:150        subgroupQuadSwapDiagonal ( temp double)
+0:150          direct index ( temp double)
+0:150            d: direct index for structure ( temp 4-component vector of double)
+0:150              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:150                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:150                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:150                  Constant:
+0:150                    0 (const uint)
+0:150                direct index ( temp uint)
+0:150                  'dti' ( in 3-component vector of uint)
+0:150                  Constant:
+0:150                    0 (const int)
+0:150              Constant:
+0:150                3 (const int)
+0:150            Constant:
+0:150              0 (const int)
+0:151      move second child to first child ( temp 2-component vector of double)
+0:151        vector swizzle ( temp 2-component vector of double)
+0:151          d: direct index for structure ( temp 4-component vector of double)
+0:151            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:151              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:151                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:151                Constant:
+0:151                  0 (const uint)
+0:151              direct index ( temp uint)
+0:151                'dti' ( in 3-component vector of uint)
+0:151                Constant:
+0:151                  0 (const int)
+0:151            Constant:
+0:151              3 (const int)
+0:151          Sequence
+0:151            Constant:
+0:151              0 (const int)
+0:151            Constant:
+0:151              1 (const int)
+0:151        subgroupQuadSwapDiagonal ( temp 2-component vector of double)
+0:151          vector swizzle ( temp 2-component vector of double)
+0:151            d: direct index for structure ( temp 4-component vector of double)
+0:151              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:151                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:151                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:151                  Constant:
+0:151                    0 (const uint)
+0:151                direct index ( temp uint)
+0:151                  'dti' ( in 3-component vector of uint)
+0:151                  Constant:
+0:151                    0 (const int)
+0:151              Constant:
+0:151                3 (const int)
+0:151            Sequence
+0:151              Constant:
+0:151                0 (const int)
+0:151              Constant:
+0:151                1 (const int)
+0:152      move second child to first child ( temp 3-component vector of double)
+0:152        vector swizzle ( temp 3-component vector of double)
+0:152          d: direct index for structure ( temp 4-component vector of double)
+0:152            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:152              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:152                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:152                Constant:
+0:152                  0 (const uint)
+0:152              direct index ( temp uint)
+0:152                'dti' ( in 3-component vector of uint)
+0:152                Constant:
+0:152                  0 (const int)
+0:152            Constant:
+0:152              3 (const int)
+0:152          Sequence
+0:152            Constant:
+0:152              0 (const int)
+0:152            Constant:
+0:152              1 (const int)
+0:152            Constant:
+0:152              2 (const int)
+0:152        subgroupQuadSwapDiagonal ( temp 3-component vector of double)
+0:152          vector swizzle ( temp 3-component vector of double)
+0:152            d: direct index for structure ( temp 4-component vector of double)
+0:152              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:152                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:152                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:152                  Constant:
+0:152                    0 (const uint)
+0:152                direct index ( temp uint)
+0:152                  'dti' ( in 3-component vector of uint)
+0:152                  Constant:
+0:152                    0 (const int)
+0:152              Constant:
+0:152                3 (const int)
+0:152            Sequence
+0:152              Constant:
+0:152                0 (const int)
+0:152              Constant:
+0:152                1 (const int)
+0:152              Constant:
+0:152                2 (const int)
+0:13  Function Definition: CSMain( ( temp void)
+0:13    Function Parameters: 
+0:?     Sequence
+0:13      move second child to first child ( temp 3-component vector of uint)
+0:?         'dti' ( temp 3-component vector of uint)
+0:?         'dti' ( in 3-component vector of uint GlobalInvocationID)
+0:13      Function Call: @CSMain(vu3; ( temp void)
+0:?         'dti' ( temp 3-component vector of uint)
+0:?   Linker Objects
+0:?     'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:?     'dti' ( in 3-component vector of uint GlobalInvocationID)
+
+// Module Version 10300
+// Generated by (magic number): 80006
+// Id's are bound by 1120
+
+                              Capability Shader
+                              Capability Float64
+                              Capability GroupNonUniform
+                              Capability GroupNonUniformQuad
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "CSMain" 1115
+                              ExecutionMode 4 LocalSize 32 16 1
+                              Source HLSL 500
+                              Name 4  "CSMain"
+                              Name 11  "@CSMain(vu3;"
+                              Name 10  "dti"
+                              Name 20  "Types"
+                              MemberName 20(Types) 0  "u"
+                              MemberName 20(Types) 1  "i"
+                              MemberName 20(Types) 2  "f"
+                              MemberName 20(Types) 3  "d"
+                              Name 22  "data"
+                              MemberName 22(data) 0  "@data"
+                              Name 24  "data"
+                              Name 1113  "dti"
+                              Name 1115  "dti"
+                              Name 1117  "param"
+                              MemberDecorate 20(Types) 0 Offset 0
+                              MemberDecorate 20(Types) 1 Offset 16
+                              MemberDecorate 20(Types) 2 Offset 32
+                              MemberDecorate 20(Types) 3 Offset 64
+                              Decorate 21 ArrayStride 96
+                              MemberDecorate 22(data) 0 Offset 0
+                              Decorate 22(data) BufferBlock
+                              Decorate 24(data) DescriptorSet 0
+                              Decorate 1115(dti) BuiltIn GlobalInvocationId
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypeVector 6(int) 3
+               8:             TypePointer Function 7(ivec3)
+               9:             TypeFunction 2 8(ptr)
+              13:             TypeVector 6(int) 4
+              14:             TypeInt 32 1
+              15:             TypeVector 14(int) 4
+              16:             TypeFloat 32
+              17:             TypeVector 16(float) 4
+              18:             TypeFloat 64
+              19:             TypeVector 18(float) 4
+       20(Types):             TypeStruct 13(ivec4) 15(ivec4) 17(fvec4) 19(fvec4)
+              21:             TypeRuntimeArray 20(Types)
+        22(data):             TypeStruct 21
+              23:             TypePointer Uniform 22(data)
+        24(data):     23(ptr) Variable Uniform
+              25:     14(int) Constant 0
+              26:      6(int) Constant 0
+              27:             TypePointer Function 6(int)
+              32:             TypePointer Uniform 13(ivec4)
+              35:      6(int) Constant 3
+              42:             TypePointer Uniform 6(int)
+              51:             TypeVector 6(int) 2
+              72:     14(int) Constant 1
+              75:             TypePointer Uniform 15(ivec4)
+              84:             TypePointer Uniform 14(int)
+              93:             TypeVector 14(int) 2
+             105:             TypeVector 14(int) 3
+             115:     14(int) Constant 2
+             118:             TypePointer Uniform 17(fvec4)
+             127:             TypePointer Uniform 16(float)
+             136:             TypeVector 16(float) 2
+             148:             TypeVector 16(float) 3
+             158:     14(int) Constant 3
+             161:             TypePointer Uniform 19(fvec4)
+             170:             TypePointer Uniform 18(float)
+             179:             TypeVector 18(float) 2
+             191:             TypeVector 18(float) 3
+             205:      6(int) Constant 1
+             358:      6(int) Constant 2
+            1114:             TypePointer Input 7(ivec3)
+       1115(dti):   1114(ptr) Variable Input
+       4(CSMain):           2 Function None 3
+               5:             Label
+       1113(dti):      8(ptr) Variable Function
+     1117(param):      8(ptr) Variable Function
+            1116:    7(ivec3) Load 1115(dti)
+                              Store 1113(dti) 1116
+            1118:    7(ivec3) Load 1113(dti)
+                              Store 1117(param) 1118
+            1119:           2 FunctionCall 11(@CSMain(vu3;) 1117(param)
+                              Return
+                              FunctionEnd
+11(@CSMain(vu3;):           2 Function None 9
+         10(dti):      8(ptr) FunctionParameter
+              12:             Label
+              28:     27(ptr) AccessChain 10(dti) 26
+              29:      6(int) Load 28
+              30:     27(ptr) AccessChain 10(dti) 26
+              31:      6(int) Load 30
+              33:     32(ptr) AccessChain 24(data) 25 31 25
+              34:   13(ivec4) Load 33
+              36:   13(ivec4) GroupNonUniformQuadBroadcast 35 34 26
+              37:     32(ptr) AccessChain 24(data) 25 29 25
+                              Store 37 36
+              38:     27(ptr) AccessChain 10(dti) 26
+              39:      6(int) Load 38
+              40:     27(ptr) AccessChain 10(dti) 26
+              41:      6(int) Load 40
+              43:     42(ptr) AccessChain 24(data) 25 41 25 26
+              44:      6(int) Load 43
+              45:      6(int) GroupNonUniformQuadBroadcast 35 44 26
+              46:     42(ptr) AccessChain 24(data) 25 39 25 26
+                              Store 46 45
+              47:     27(ptr) AccessChain 10(dti) 26
+              48:      6(int) Load 47
+              49:     27(ptr) AccessChain 10(dti) 26
+              50:      6(int) Load 49
+              52:     32(ptr) AccessChain 24(data) 25 50 25
+              53:   13(ivec4) Load 52
+              54:   51(ivec2) VectorShuffle 53 53 0 1
+              55:   51(ivec2) GroupNonUniformQuadBroadcast 35 54 26
+              56:     32(ptr) AccessChain 24(data) 25 48 25
+              57:   13(ivec4) Load 56
+              58:   13(ivec4) VectorShuffle 57 55 4 5 2 3
+                              Store 56 58
+              59:     27(ptr) AccessChain 10(dti) 26
+              60:      6(int) Load 59
+              61:     27(ptr) AccessChain 10(dti) 26
+              62:      6(int) Load 61
+              63:     32(ptr) AccessChain 24(data) 25 62 25
+              64:   13(ivec4) Load 63
+              65:    7(ivec3) VectorShuffle 64 64 0 1 2
+              66:    7(ivec3) GroupNonUniformQuadBroadcast 35 65 26
+              67:     32(ptr) AccessChain 24(data) 25 60 25
+              68:   13(ivec4) Load 67
+              69:   13(ivec4) VectorShuffle 68 66 4 5 6 3
+                              Store 67 69
+              70:     27(ptr) AccessChain 10(dti) 26
+              71:      6(int) Load 70
+              73:     27(ptr) AccessChain 10(dti) 26
+              74:      6(int) Load 73
+              76:     75(ptr) AccessChain 24(data) 25 74 72
+              77:   15(ivec4) Load 76
+              78:   15(ivec4) GroupNonUniformQuadBroadcast 35 77 26
+              79:     75(ptr) AccessChain 24(data) 25 71 72
+                              Store 79 78
+              80:     27(ptr) AccessChain 10(dti) 26
+              81:      6(int) Load 80
+              82:     27(ptr) AccessChain 10(dti) 26
+              83:      6(int) Load 82
+              85:     84(ptr) AccessChain 24(data) 25 83 72 26
+              86:     14(int) Load 85
+              87:     14(int) GroupNonUniformQuadBroadcast 35 86 26
+              88:     84(ptr) AccessChain 24(data) 25 81 72 26
+                              Store 88 87
+              89:     27(ptr) AccessChain 10(dti) 26
+              90:      6(int) Load 89
+              91:     27(ptr) AccessChain 10(dti) 26
+              92:      6(int) Load 91
+              94:     75(ptr) AccessChain 24(data) 25 92 72
+              95:   15(ivec4) Load 94
+              96:   93(ivec2) VectorShuffle 95 95 0 1
+              97:   93(ivec2) GroupNonUniformQuadBroadcast 35 96 26
+              98:     75(ptr) AccessChain 24(data) 25 90 72
+              99:   15(ivec4) Load 98
+             100:   15(ivec4) VectorShuffle 99 97 4 5 2 3
+                              Store 98 100
+             101:     27(ptr) AccessChain 10(dti) 26
+             102:      6(int) Load 101
+             103:     27(ptr) AccessChain 10(dti) 26
+             104:      6(int) Load 103
+             106:     75(ptr) AccessChain 24(data) 25 104 72
+             107:   15(ivec4) Load 106
+             108:  105(ivec3) VectorShuffle 107 107 0 1 2
+             109:  105(ivec3) GroupNonUniformQuadBroadcast 35 108 26
+             110:     75(ptr) AccessChain 24(data) 25 102 72
+             111:   15(ivec4) Load 110
+             112:   15(ivec4) VectorShuffle 111 109 4 5 6 3
+                              Store 110 112
+             113:     27(ptr) AccessChain 10(dti) 26
+             114:      6(int) Load 113
+             116:     27(ptr) AccessChain 10(dti) 26
+             117:      6(int) Load 116
+             119:    118(ptr) AccessChain 24(data) 25 117 115
+             120:   17(fvec4) Load 119
+             121:   17(fvec4) GroupNonUniformQuadBroadcast 35 120 26
+             122:    118(ptr) AccessChain 24(data) 25 114 115
+                              Store 122 121
+             123:     27(ptr) AccessChain 10(dti) 26
+             124:      6(int) Load 123
+             125:     27(ptr) AccessChain 10(dti) 26
+             126:      6(int) Load 125
+             128:    127(ptr) AccessChain 24(data) 25 126 115 26
+             129:   16(float) Load 128
+             130:   16(float) GroupNonUniformQuadBroadcast 35 129 26
+             131:    127(ptr) AccessChain 24(data) 25 124 115 26
+                              Store 131 130
+             132:     27(ptr) AccessChain 10(dti) 26
+             133:      6(int) Load 132
+             134:     27(ptr) AccessChain 10(dti) 26
+             135:      6(int) Load 134
+             137:    118(ptr) AccessChain 24(data) 25 135 115
+             138:   17(fvec4) Load 137
+             139:  136(fvec2) VectorShuffle 138 138 0 1
+             140:  136(fvec2) GroupNonUniformQuadBroadcast 35 139 26
+             141:    118(ptr) AccessChain 24(data) 25 133 115
+             142:   17(fvec4) Load 141
+             143:   17(fvec4) VectorShuffle 142 140 4 5 2 3
+                              Store 141 143
+             144:     27(ptr) AccessChain 10(dti) 26
+             145:      6(int) Load 144
+             146:     27(ptr) AccessChain 10(dti) 26
+             147:      6(int) Load 146
+             149:    118(ptr) AccessChain 24(data) 25 147 115
+             150:   17(fvec4) Load 149
+             151:  148(fvec3) VectorShuffle 150 150 0 1 2
+             152:  148(fvec3) GroupNonUniformQuadBroadcast 35 151 26
+             153:    118(ptr) AccessChain 24(data) 25 145 115
+             154:   17(fvec4) Load 153
+             155:   17(fvec4) VectorShuffle 154 152 4 5 6 3
+                              Store 153 155
+             156:     27(ptr) AccessChain 10(dti) 26
+             157:      6(int) Load 156
+             159:     27(ptr) AccessChain 10(dti) 26
+             160:      6(int) Load 159
+             162:    161(ptr) AccessChain 24(data) 25 160 158
+             163:   19(fvec4) Load 162
+             164:   19(fvec4) GroupNonUniformQuadBroadcast 35 163 26
+             165:    161(ptr) AccessChain 24(data) 25 157 158
+                              Store 165 164
+             166:     27(ptr) AccessChain 10(dti) 26
+             167:      6(int) Load 166
+             168:     27(ptr) AccessChain 10(dti) 26
+             169:      6(int) Load 168
+             171:    170(ptr) AccessChain 24(data) 25 169 158 26
+             172:   18(float) Load 171
+             173:   18(float) GroupNonUniformQuadBroadcast 35 172 26
+             174:    170(ptr) AccessChain 24(data) 25 167 158 26
+                              Store 174 173
+             175:     27(ptr) AccessChain 10(dti) 26
+             176:      6(int) Load 175
+             177:     27(ptr) AccessChain 10(dti) 26
+             178:      6(int) Load 177
+             180:    161(ptr) AccessChain 24(data) 25 178 158
+             181:   19(fvec4) Load 180
+             182:  179(fvec2) VectorShuffle 181 181 0 1
+             183:  179(fvec2) GroupNonUniformQuadBroadcast 35 182 26
+             184:    161(ptr) AccessChain 24(data) 25 176 158
+             185:   19(fvec4) Load 184
+             186:   19(fvec4) VectorShuffle 185 183 4 5 2 3
+                              Store 184 186
+             187:     27(ptr) AccessChain 10(dti) 26
+             188:      6(int) Load 187
+             189:     27(ptr) AccessChain 10(dti) 26
+             190:      6(int) Load 189
+             192:    161(ptr) AccessChain 24(data) 25 190 158
+             193:   19(fvec4) Load 192
+             194:  191(fvec3) VectorShuffle 193 193 0 1 2
+             195:  191(fvec3) GroupNonUniformQuadBroadcast 35 194 26
+             196:    161(ptr) AccessChain 24(data) 25 188 158
+             197:   19(fvec4) Load 196
+             198:   19(fvec4) VectorShuffle 197 195 4 5 6 3
+                              Store 196 198
+             199:     27(ptr) AccessChain 10(dti) 26
+             200:      6(int) Load 199
+             201:     27(ptr) AccessChain 10(dti) 26
+             202:      6(int) Load 201
+             203:     32(ptr) AccessChain 24(data) 25 202 25
+             204:   13(ivec4) Load 203
+             206:   13(ivec4) GroupNonUniformQuadBroadcast 35 204 205
+             207:     32(ptr) AccessChain 24(data) 25 200 25
+                              Store 207 206
+             208:     27(ptr) AccessChain 10(dti) 26
+             209:      6(int) Load 208
+             210:     27(ptr) AccessChain 10(dti) 26
+             211:      6(int) Load 210
+             212:     42(ptr) AccessChain 24(data) 25 211 25 26
+             213:      6(int) Load 212
+             214:      6(int) GroupNonUniformQuadBroadcast 35 213 205
+             215:     42(ptr) AccessChain 24(data) 25 209 25 26
+                              Store 215 214
+             216:     27(ptr) AccessChain 10(dti) 26
+             217:      6(int) Load 216
+             218:     27(ptr) AccessChain 10(dti) 26
+             219:      6(int) Load 218
+             220:     32(ptr) AccessChain 24(data) 25 219 25
+             221:   13(ivec4) Load 220
+             222:   51(ivec2) VectorShuffle 221 221 0 1
+             223:   51(ivec2) GroupNonUniformQuadBroadcast 35 222 205
+             224:     32(ptr) AccessChain 24(data) 25 217 25
+             225:   13(ivec4) Load 224
+             226:   13(ivec4) VectorShuffle 225 223 4 5 2 3
+                              Store 224 226
+             227:     27(ptr) AccessChain 10(dti) 26
+             228:      6(int) Load 227
+             229:     27(ptr) AccessChain 10(dti) 26
+             230:      6(int) Load 229
+             231:     32(ptr) AccessChain 24(data) 25 230 25
+             232:   13(ivec4) Load 231
+             233:    7(ivec3) VectorShuffle 232 232 0 1 2
+             234:    7(ivec3) GroupNonUniformQuadBroadcast 35 233 205
+             235:     32(ptr) AccessChain 24(data) 25 228 25
+             236:   13(ivec4) Load 235
+             237:   13(ivec4) VectorShuffle 236 234 4 5 6 3
+                              Store 235 237
+             238:     27(ptr) AccessChain 10(dti) 26
+             239:      6(int) Load 238
+             240:     27(ptr) AccessChain 10(dti) 26
+             241:      6(int) Load 240
+             242:     75(ptr) AccessChain 24(data) 25 241 72
+             243:   15(ivec4) Load 242
+             244:   15(ivec4) GroupNonUniformQuadBroadcast 35 243 205
+             245:     75(ptr) AccessChain 24(data) 25 239 72
+                              Store 245 244
+             246:     27(ptr) AccessChain 10(dti) 26
+             247:      6(int) Load 246
+             248:     27(ptr) AccessChain 10(dti) 26
+             249:      6(int) Load 248
+             250:     84(ptr) AccessChain 24(data) 25 249 72 26
+             251:     14(int) Load 250
+             252:     14(int) GroupNonUniformQuadBroadcast 35 251 205
+             253:     84(ptr) AccessChain 24(data) 25 247 72 26
+                              Store 253 252
+             254:     27(ptr) AccessChain 10(dti) 26
+             255:      6(int) Load 254
+             256:     27(ptr) AccessChain 10(dti) 26
+             257:      6(int) Load 256
+             258:     75(ptr) AccessChain 24(data) 25 257 72
+             259:   15(ivec4) Load 258
+             260:   93(ivec2) VectorShuffle 259 259 0 1
+             261:   93(ivec2) GroupNonUniformQuadBroadcast 35 260 205
+             262:     75(ptr) AccessChain 24(data) 25 255 72
+             263:   15(ivec4) Load 262
+             264:   15(ivec4) VectorShuffle 263 261 4 5 2 3
+                              Store 262 264
+             265:     27(ptr) AccessChain 10(dti) 26
+             266:      6(int) Load 265
+             267:     27(ptr) AccessChain 10(dti) 26
+             268:      6(int) Load 267
+             269:     75(ptr) AccessChain 24(data) 25 268 72
+             270:   15(ivec4) Load 269
+             271:  105(ivec3) VectorShuffle 270 270 0 1 2
+             272:  105(ivec3) GroupNonUniformQuadBroadcast 35 271 205
+             273:     75(ptr) AccessChain 24(data) 25 266 72
+             274:   15(ivec4) Load 273
+             275:   15(ivec4) VectorShuffle 274 272 4 5 6 3
+                              Store 273 275
+             276:     27(ptr) AccessChain 10(dti) 26
+             277:      6(int) Load 276
+             278:     27(ptr) AccessChain 10(dti) 26
+             279:      6(int) Load 278
+             280:    118(ptr) AccessChain 24(data) 25 279 115
+             281:   17(fvec4) Load 280
+             282:   17(fvec4) GroupNonUniformQuadBroadcast 35 281 205
+             283:    118(ptr) AccessChain 24(data) 25 277 115
+                              Store 283 282
+             284:     27(ptr) AccessChain 10(dti) 26
+             285:      6(int) Load 284
+             286:     27(ptr) AccessChain 10(dti) 26
+             287:      6(int) Load 286
+             288:    127(ptr) AccessChain 24(data) 25 287 115 26
+             289:   16(float) Load 288
+             290:   16(float) GroupNonUniformQuadBroadcast 35 289 205
+             291:    127(ptr) AccessChain 24(data) 25 285 115 26
+                              Store 291 290
+             292:     27(ptr) AccessChain 10(dti) 26
+             293:      6(int) Load 292
+             294:     27(ptr) AccessChain 10(dti) 26
+             295:      6(int) Load 294
+             296:    118(ptr) AccessChain 24(data) 25 295 115
+             297:   17(fvec4) Load 296
+             298:  136(fvec2) VectorShuffle 297 297 0 1
+             299:  136(fvec2) GroupNonUniformQuadBroadcast 35 298 205
+             300:    118(ptr) AccessChain 24(data) 25 293 115
+             301:   17(fvec4) Load 300
+             302:   17(fvec4) VectorShuffle 301 299 4 5 2 3
+                              Store 300 302
+             303:     27(ptr) AccessChain 10(dti) 26
+             304:      6(int) Load 303
+             305:     27(ptr) AccessChain 10(dti) 26
+             306:      6(int) Load 305
+             307:    118(ptr) AccessChain 24(data) 25 306 115
+             308:   17(fvec4) Load 307
+             309:  148(fvec3) VectorShuffle 308 308 0 1 2
+             310:  148(fvec3) GroupNonUniformQuadBroadcast 35 309 205
+             311:    118(ptr) AccessChain 24(data) 25 304 115
+             312:   17(fvec4) Load 311
+             313:   17(fvec4) VectorShuffle 312 310 4 5 6 3
+                              Store 311 313
+             314:     27(ptr) AccessChain 10(dti) 26
+             315:      6(int) Load 314
+             316:     27(ptr) AccessChain 10(dti) 26
+             317:      6(int) Load 316
+             318:    161(ptr) AccessChain 24(data) 25 317 158
+             319:   19(fvec4) Load 318
+             320:   19(fvec4) GroupNonUniformQuadBroadcast 35 319 205
+             321:    161(ptr) AccessChain 24(data) 25 315 158
+                              Store 321 320
+             322:     27(ptr) AccessChain 10(dti) 26
+             323:      6(int) Load 322
+             324:     27(ptr) AccessChain 10(dti) 26
+             325:      6(int) Load 324
+             326:    170(ptr) AccessChain 24(data) 25 325 158 26
+             327:   18(float) Load 326
+             328:   18(float) GroupNonUniformQuadBroadcast 35 327 205
+             329:    170(ptr) AccessChain 24(data) 25 323 158 26
+                              Store 329 328
+             330:     27(ptr) AccessChain 10(dti) 26
+             331:      6(int) Load 330
+             332:     27(ptr) AccessChain 10(dti) 26
+             333:      6(int) Load 332
+             334:    161(ptr) AccessChain 24(data) 25 333 158
+             335:   19(fvec4) Load 334
+             336:  179(fvec2) VectorShuffle 335 335 0 1
+             337:  179(fvec2) GroupNonUniformQuadBroadcast 35 336 205
+             338:    161(ptr) AccessChain 24(data) 25 331 158
+             339:   19(fvec4) Load 338
+             340:   19(fvec4) VectorShuffle 339 337 4 5 2 3
+                              Store 338 340
+             341:     27(ptr) AccessChain 10(dti) 26
+             342:      6(int) Load 341
+             343:     27(ptr) AccessChain 10(dti) 26
+             344:      6(int) Load 343
+             345:    161(ptr) AccessChain 24(data) 25 344 158
+             346:   19(fvec4) Load 345
+             347:  191(fvec3) VectorShuffle 346 346 0 1 2
+             348:  191(fvec3) GroupNonUniformQuadBroadcast 35 347 205
+             349:    161(ptr) AccessChain 24(data) 25 342 158
+             350:   19(fvec4) Load 349
+             351:   19(fvec4) VectorShuffle 350 348 4 5 6 3
+                              Store 349 351
+             352:     27(ptr) AccessChain 10(dti) 26
+             353:      6(int) Load 352
+             354:     27(ptr) AccessChain 10(dti) 26
+             355:      6(int) Load 354
+             356:     32(ptr) AccessChain 24(data) 25 355 25
+             357:   13(ivec4) Load 356
+             359:   13(ivec4) GroupNonUniformQuadBroadcast 35 357 358
+             360:     32(ptr) AccessChain 24(data) 25 353 25
+                              Store 360 359
+             361:     27(ptr) AccessChain 10(dti) 26
+             362:      6(int) Load 361
+             363:     27(ptr) AccessChain 10(dti) 26
+             364:      6(int) Load 363
+             365:     42(ptr) AccessChain 24(data) 25 364 25 26
+             366:      6(int) Load 365
+             367:      6(int) GroupNonUniformQuadBroadcast 35 366 358
+             368:     42(ptr) AccessChain 24(data) 25 362 25 26
+                              Store 368 367
+             369:     27(ptr) AccessChain 10(dti) 26
+             370:      6(int) Load 369
+             371:     27(ptr) AccessChain 10(dti) 26
+             372:      6(int) Load 371
+             373:     32(ptr) AccessChain 24(data) 25 372 25
+             374:   13(ivec4) Load 373
+             375:   51(ivec2) VectorShuffle 374 374 0 1
+             376:   51(ivec2) GroupNonUniformQuadBroadcast 35 375 358
+             377:     32(ptr) AccessChain 24(data) 25 370 25
+             378:   13(ivec4) Load 377
+             379:   13(ivec4) VectorShuffle 378 376 4 5 2 3
+                              Store 377 379
+             380:     27(ptr) AccessChain 10(dti) 26
+             381:      6(int) Load 380
+             382:     27(ptr) AccessChain 10(dti) 26
+             383:      6(int) Load 382
+             384:     32(ptr) AccessChain 24(data) 25 383 25
+             385:   13(ivec4) Load 384
+             386:    7(ivec3) VectorShuffle 385 385 0 1 2
+             387:    7(ivec3) GroupNonUniformQuadBroadcast 35 386 358
+             388:     32(ptr) AccessChain 24(data) 25 381 25
+             389:   13(ivec4) Load 388
+             390:   13(ivec4) VectorShuffle 389 387 4 5 6 3
+                              Store 388 390
+             391:     27(ptr) AccessChain 10(dti) 26
+             392:      6(int) Load 391
+             393:     27(ptr) AccessChain 10(dti) 26
+             394:      6(int) Load 393
+             395:     75(ptr) AccessChain 24(data) 25 394 72
+             396:   15(ivec4) Load 395
+             397:   15(ivec4) GroupNonUniformQuadBroadcast 35 396 358
+             398:     75(ptr) AccessChain 24(data) 25 392 72
+                              Store 398 397
+             399:     27(ptr) AccessChain 10(dti) 26
+             400:      6(int) Load 399
+             401:     27(ptr) AccessChain 10(dti) 26
+             402:      6(int) Load 401
+             403:     84(ptr) AccessChain 24(data) 25 402 72 26
+             404:     14(int) Load 403
+             405:     14(int) GroupNonUniformQuadBroadcast 35 404 358
+             406:     84(ptr) AccessChain 24(data) 25 400 72 26
+                              Store 406 405
+             407:     27(ptr) AccessChain 10(dti) 26
+             408:      6(int) Load 407
+             409:     27(ptr) AccessChain 10(dti) 26
+             410:      6(int) Load 409
+             411:     75(ptr) AccessChain 24(data) 25 410 72
+             412:   15(ivec4) Load 411
+             413:   93(ivec2) VectorShuffle 412 412 0 1
+             414:   93(ivec2) GroupNonUniformQuadBroadcast 35 413 358
+             415:     75(ptr) AccessChain 24(data) 25 408 72
+             416:   15(ivec4) Load 415
+             417:   15(ivec4) VectorShuffle 416 414 4 5 2 3
+                              Store 415 417
+             418:     27(ptr) AccessChain 10(dti) 26
+             419:      6(int) Load 418
+             420:     27(ptr) AccessChain 10(dti) 26
+             421:      6(int) Load 420
+             422:     75(ptr) AccessChain 24(data) 25 421 72
+             423:   15(ivec4) Load 422
+             424:  105(ivec3) VectorShuffle 423 423 0 1 2
+             425:  105(ivec3) GroupNonUniformQuadBroadcast 35 424 358
+             426:     75(ptr) AccessChain 24(data) 25 419 72
+             427:   15(ivec4) Load 426
+             428:   15(ivec4) VectorShuffle 427 425 4 5 6 3
+                              Store 426 428
+             429:     27(ptr) AccessChain 10(dti) 26
+             430:      6(int) Load 429
+             431:     27(ptr) AccessChain 10(dti) 26
+             432:      6(int) Load 431
+             433:    118(ptr) AccessChain 24(data) 25 432 115
+             434:   17(fvec4) Load 433
+             435:   17(fvec4) GroupNonUniformQuadBroadcast 35 434 358
+             436:    118(ptr) AccessChain 24(data) 25 430 115
+                              Store 436 435
+             437:     27(ptr) AccessChain 10(dti) 26
+             438:      6(int) Load 437
+             439:     27(ptr) AccessChain 10(dti) 26
+             440:      6(int) Load 439
+             441:    127(ptr) AccessChain 24(data) 25 440 115 26
+             442:   16(float) Load 441
+             443:   16(float) GroupNonUniformQuadBroadcast 35 442 358
+             444:    127(ptr) AccessChain 24(data) 25 438 115 26
+                              Store 444 443
+             445:     27(ptr) AccessChain 10(dti) 26
+             446:      6(int) Load 445
+             447:     27(ptr) AccessChain 10(dti) 26
+             448:      6(int) Load 447
+             449:    118(ptr) AccessChain 24(data) 25 448 115
+             450:   17(fvec4) Load 449
+             451:  136(fvec2) VectorShuffle 450 450 0 1
+             452:  136(fvec2) GroupNonUniformQuadBroadcast 35 451 358
+             453:    118(ptr) AccessChain 24(data) 25 446 115
+             454:   17(fvec4) Load 453
+             455:   17(fvec4) VectorShuffle 454 452 4 5 2 3
+                              Store 453 455
+             456:     27(ptr) AccessChain 10(dti) 26
+             457:      6(int) Load 456
+             458:     27(ptr) AccessChain 10(dti) 26
+             459:      6(int) Load 458
+             460:    118(ptr) AccessChain 24(data) 25 459 115
+             461:   17(fvec4) Load 460
+             462:  148(fvec3) VectorShuffle 461 461 0 1 2
+             463:  148(fvec3) GroupNonUniformQuadBroadcast 35 462 358
+             464:    118(ptr) AccessChain 24(data) 25 457 115
+             465:   17(fvec4) Load 464
+             466:   17(fvec4) VectorShuffle 465 463 4 5 6 3
+                              Store 464 466
+             467:     27(ptr) AccessChain 10(dti) 26
+             468:      6(int) Load 467
+             469:     27(ptr) AccessChain 10(dti) 26
+             470:      6(int) Load 469
+             471:    161(ptr) AccessChain 24(data) 25 470 158
+             472:   19(fvec4) Load 471
+             473:   19(fvec4) GroupNonUniformQuadBroadcast 35 472 358
+             474:    161(ptr) AccessChain 24(data) 25 468 158
+                              Store 474 473
+             475:     27(ptr) AccessChain 10(dti) 26
+             476:      6(int) Load 475
+             477:     27(ptr) AccessChain 10(dti) 26
+             478:      6(int) Load 477
+             479:    170(ptr) AccessChain 24(data) 25 478 158 26
+             480:   18(float) Load 479
+             481:   18(float) GroupNonUniformQuadBroadcast 35 480 358
+             482:    170(ptr) AccessChain 24(data) 25 476 158 26
+                              Store 482 481
+             483:     27(ptr) AccessChain 10(dti) 26
+             484:      6(int) Load 483
+             485:     27(ptr) AccessChain 10(dti) 26
+             486:      6(int) Load 485
+             487:    161(ptr) AccessChain 24(data) 25 486 158
+             488:   19(fvec4) Load 487
+             489:  179(fvec2) VectorShuffle 488 488 0 1
+             490:  179(fvec2) GroupNonUniformQuadBroadcast 35 489 358
+             491:    161(ptr) AccessChain 24(data) 25 484 158
+             492:   19(fvec4) Load 491
+             493:   19(fvec4) VectorShuffle 492 490 4 5 2 3
+                              Store 491 493
+             494:     27(ptr) AccessChain 10(dti) 26
+             495:      6(int) Load 494
+             496:     27(ptr) AccessChain 10(dti) 26
+             497:      6(int) Load 496
+             498:    161(ptr) AccessChain 24(data) 25 497 158
+             499:   19(fvec4) Load 498
+             500:  191(fvec3) VectorShuffle 499 499 0 1 2
+             501:  191(fvec3) GroupNonUniformQuadBroadcast 35 500 358
+             502:    161(ptr) AccessChain 24(data) 25 495 158
+             503:   19(fvec4) Load 502
+             504:   19(fvec4) VectorShuffle 503 501 4 5 6 3
+                              Store 502 504
+             505:     27(ptr) AccessChain 10(dti) 26
+             506:      6(int) Load 505
+             507:     27(ptr) AccessChain 10(dti) 26
+             508:      6(int) Load 507
+             509:     32(ptr) AccessChain 24(data) 25 508 25
+             510:   13(ivec4) Load 509
+             511:   13(ivec4) GroupNonUniformQuadBroadcast 35 510 35
+             512:     32(ptr) AccessChain 24(data) 25 506 25
+                              Store 512 511
+             513:     27(ptr) AccessChain 10(dti) 26
+             514:      6(int) Load 513
+             515:     27(ptr) AccessChain 10(dti) 26
+             516:      6(int) Load 515
+             517:     42(ptr) AccessChain 24(data) 25 516 25 26
+             518:      6(int) Load 517
+             519:      6(int) GroupNonUniformQuadBroadcast 35 518 35
+             520:     42(ptr) AccessChain 24(data) 25 514 25 26
+                              Store 520 519
+             521:     27(ptr) AccessChain 10(dti) 26
+             522:      6(int) Load 521
+             523:     27(ptr) AccessChain 10(dti) 26
+             524:      6(int) Load 523
+             525:     32(ptr) AccessChain 24(data) 25 524 25
+             526:   13(ivec4) Load 525
+             527:   51(ivec2) VectorShuffle 526 526 0 1
+             528:   51(ivec2) GroupNonUniformQuadBroadcast 35 527 35
+             529:     32(ptr) AccessChain 24(data) 25 522 25
+             530:   13(ivec4) Load 529
+             531:   13(ivec4) VectorShuffle 530 528 4 5 2 3
+                              Store 529 531
+             532:     27(ptr) AccessChain 10(dti) 26
+             533:      6(int) Load 532
+             534:     27(ptr) AccessChain 10(dti) 26
+             535:      6(int) Load 534
+             536:     32(ptr) AccessChain 24(data) 25 535 25
+             537:   13(ivec4) Load 536
+             538:    7(ivec3) VectorShuffle 537 537 0 1 2
+             539:    7(ivec3) GroupNonUniformQuadBroadcast 35 538 35
+             540:     32(ptr) AccessChain 24(data) 25 533 25
+             541:   13(ivec4) Load 540
+             542:   13(ivec4) VectorShuffle 541 539 4 5 6 3
+                              Store 540 542
+             543:     27(ptr) AccessChain 10(dti) 26
+             544:      6(int) Load 543
+             545:     27(ptr) AccessChain 10(dti) 26
+             546:      6(int) Load 545
+             547:     75(ptr) AccessChain 24(data) 25 546 72
+             548:   15(ivec4) Load 547
+             549:   15(ivec4) GroupNonUniformQuadBroadcast 35 548 35
+             550:     75(ptr) AccessChain 24(data) 25 544 72
+                              Store 550 549
+             551:     27(ptr) AccessChain 10(dti) 26
+             552:      6(int) Load 551
+             553:     27(ptr) AccessChain 10(dti) 26
+             554:      6(int) Load 553
+             555:     84(ptr) AccessChain 24(data) 25 554 72 26
+             556:     14(int) Load 555
+             557:     14(int) GroupNonUniformQuadBroadcast 35 556 35
+             558:     84(ptr) AccessChain 24(data) 25 552 72 26
+                              Store 558 557
+             559:     27(ptr) AccessChain 10(dti) 26
+             560:      6(int) Load 559
+             561:     27(ptr) AccessChain 10(dti) 26
+             562:      6(int) Load 561
+             563:     75(ptr) AccessChain 24(data) 25 562 72
+             564:   15(ivec4) Load 563
+             565:   93(ivec2) VectorShuffle 564 564 0 1
+             566:   93(ivec2) GroupNonUniformQuadBroadcast 35 565 35
+             567:     75(ptr) AccessChain 24(data) 25 560 72
+             568:   15(ivec4) Load 567
+             569:   15(ivec4) VectorShuffle 568 566 4 5 2 3
+                              Store 567 569
+             570:     27(ptr) AccessChain 10(dti) 26
+             571:      6(int) Load 570
+             572:     27(ptr) AccessChain 10(dti) 26
+             573:      6(int) Load 572
+             574:     75(ptr) AccessChain 24(data) 25 573 72
+             575:   15(ivec4) Load 574
+             576:  105(ivec3) VectorShuffle 575 575 0 1 2
+             577:  105(ivec3) GroupNonUniformQuadBroadcast 35 576 35
+             578:     75(ptr) AccessChain 24(data) 25 571 72
+             579:   15(ivec4) Load 578
+             580:   15(ivec4) VectorShuffle 579 577 4 5 6 3
+                              Store 578 580
+             581:     27(ptr) AccessChain 10(dti) 26
+             582:      6(int) Load 581
+             583:     27(ptr) AccessChain 10(dti) 26
+             584:      6(int) Load 583
+             585:    118(ptr) AccessChain 24(data) 25 584 115
+             586:   17(fvec4) Load 585
+             587:   17(fvec4) GroupNonUniformQuadBroadcast 35 586 35
+             588:    118(ptr) AccessChain 24(data) 25 582 115
+                              Store 588 587
+             589:     27(ptr) AccessChain 10(dti) 26
+             590:      6(int) Load 589
+             591:     27(ptr) AccessChain 10(dti) 26
+             592:      6(int) Load 591
+             593:    127(ptr) AccessChain 24(data) 25 592 115 26
+             594:   16(float) Load 593
+             595:   16(float) GroupNonUniformQuadBroadcast 35 594 35
+             596:    127(ptr) AccessChain 24(data) 25 590 115 26
+                              Store 596 595
+             597:     27(ptr) AccessChain 10(dti) 26
+             598:      6(int) Load 597
+             599:     27(ptr) AccessChain 10(dti) 26
+             600:      6(int) Load 599
+             601:    118(ptr) AccessChain 24(data) 25 600 115
+             602:   17(fvec4) Load 601
+             603:  136(fvec2) VectorShuffle 602 602 0 1
+             604:  136(fvec2) GroupNonUniformQuadBroadcast 35 603 35
+             605:    118(ptr) AccessChain 24(data) 25 598 115
+             606:   17(fvec4) Load 605
+             607:   17(fvec4) VectorShuffle 606 604 4 5 2 3
+                              Store 605 607
+             608:     27(ptr) AccessChain 10(dti) 26
+             609:      6(int) Load 608
+             610:     27(ptr) AccessChain 10(dti) 26
+             611:      6(int) Load 610
+             612:    118(ptr) AccessChain 24(data) 25 611 115
+             613:   17(fvec4) Load 612
+             614:  148(fvec3) VectorShuffle 613 613 0 1 2
+             615:  148(fvec3) GroupNonUniformQuadBroadcast 35 614 35
+             616:    118(ptr) AccessChain 24(data) 25 609 115
+             617:   17(fvec4) Load 616
+             618:   17(fvec4) VectorShuffle 617 615 4 5 6 3
+                              Store 616 618
+             619:     27(ptr) AccessChain 10(dti) 26
+             620:      6(int) Load 619
+             621:     27(ptr) AccessChain 10(dti) 26
+             622:      6(int) Load 621
+             623:    161(ptr) AccessChain 24(data) 25 622 158
+             624:   19(fvec4) Load 623
+             625:   19(fvec4) GroupNonUniformQuadBroadcast 35 624 35
+             626:    161(ptr) AccessChain 24(data) 25 620 158
+                              Store 626 625
+             627:     27(ptr) AccessChain 10(dti) 26
+             628:      6(int) Load 627
+             629:     27(ptr) AccessChain 10(dti) 26
+             630:      6(int) Load 629
+             631:    170(ptr) AccessChain 24(data) 25 630 158 26
+             632:   18(float) Load 631
+             633:   18(float) GroupNonUniformQuadBroadcast 35 632 35
+             634:    170(ptr) AccessChain 24(data) 25 628 158 26
+                              Store 634 633
+             635:     27(ptr) AccessChain 10(dti) 26
+             636:      6(int) Load 635
+             637:     27(ptr) AccessChain 10(dti) 26
+             638:      6(int) Load 637
+             639:    161(ptr) AccessChain 24(data) 25 638 158
+             640:   19(fvec4) Load 639
+             641:  179(fvec2) VectorShuffle 640 640 0 1
+             642:  179(fvec2) GroupNonUniformQuadBroadcast 35 641 35
+             643:    161(ptr) AccessChain 24(data) 25 636 158
+             644:   19(fvec4) Load 643
+             645:   19(fvec4) VectorShuffle 644 642 4 5 2 3
+                              Store 643 645
+             646:     27(ptr) AccessChain 10(dti) 26
+             647:      6(int) Load 646
+             648:     27(ptr) AccessChain 10(dti) 26
+             649:      6(int) Load 648
+             650:    161(ptr) AccessChain 24(data) 25 649 158
+             651:   19(fvec4) Load 650
+             652:  191(fvec3) VectorShuffle 651 651 0 1 2
+             653:  191(fvec3) GroupNonUniformQuadBroadcast 35 652 35
+             654:    161(ptr) AccessChain 24(data) 25 647 158
+             655:   19(fvec4) Load 654
+             656:   19(fvec4) VectorShuffle 655 653 4 5 6 3
+                              Store 654 656
+             657:     27(ptr) AccessChain 10(dti) 26
+             658:      6(int) Load 657
+             659:     27(ptr) AccessChain 10(dti) 26
+             660:      6(int) Load 659
+             661:     32(ptr) AccessChain 24(data) 25 660 25
+             662:   13(ivec4) Load 661
+             663:   13(ivec4) GroupNonUniformQuadSwap 35 662 26
+             664:     32(ptr) AccessChain 24(data) 25 658 25
+                              Store 664 663
+             665:     27(ptr) AccessChain 10(dti) 26
+             666:      6(int) Load 665
+             667:     27(ptr) AccessChain 10(dti) 26
+             668:      6(int) Load 667
+             669:     42(ptr) AccessChain 24(data) 25 668 25 26
+             670:      6(int) Load 669
+             671:      6(int) GroupNonUniformQuadSwap 35 670 26
+             672:     42(ptr) AccessChain 24(data) 25 666 25 26
+                              Store 672 671
+             673:     27(ptr) AccessChain 10(dti) 26
+             674:      6(int) Load 673
+             675:     27(ptr) AccessChain 10(dti) 26
+             676:      6(int) Load 675
+             677:     32(ptr) AccessChain 24(data) 25 676 25
+             678:   13(ivec4) Load 677
+             679:   51(ivec2) VectorShuffle 678 678 0 1
+             680:   51(ivec2) GroupNonUniformQuadSwap 35 679 26
+             681:     32(ptr) AccessChain 24(data) 25 674 25
+             682:   13(ivec4) Load 681
+             683:   13(ivec4) VectorShuffle 682 680 4 5 2 3
+                              Store 681 683
+             684:     27(ptr) AccessChain 10(dti) 26
+             685:      6(int) Load 684
+             686:     27(ptr) AccessChain 10(dti) 26
+             687:      6(int) Load 686
+             688:     32(ptr) AccessChain 24(data) 25 687 25
+             689:   13(ivec4) Load 688
+             690:    7(ivec3) VectorShuffle 689 689 0 1 2
+             691:    7(ivec3) GroupNonUniformQuadSwap 35 690 26
+             692:     32(ptr) AccessChain 24(data) 25 685 25
+             693:   13(ivec4) Load 692
+             694:   13(ivec4) VectorShuffle 693 691 4 5 6 3
+                              Store 692 694
+             695:     27(ptr) AccessChain 10(dti) 26
+             696:      6(int) Load 695
+             697:     27(ptr) AccessChain 10(dti) 26
+             698:      6(int) Load 697
+             699:     75(ptr) AccessChain 24(data) 25 698 72
+             700:   15(ivec4) Load 699
+             701:   15(ivec4) GroupNonUniformQuadSwap 35 700 26
+             702:     75(ptr) AccessChain 24(data) 25 696 72
+                              Store 702 701
+             703:     27(ptr) AccessChain 10(dti) 26
+             704:      6(int) Load 703
+             705:     27(ptr) AccessChain 10(dti) 26
+             706:      6(int) Load 705
+             707:     84(ptr) AccessChain 24(data) 25 706 72 26
+             708:     14(int) Load 707
+             709:     14(int) GroupNonUniformQuadSwap 35 708 26
+             710:     84(ptr) AccessChain 24(data) 25 704 72 26
+                              Store 710 709
+             711:     27(ptr) AccessChain 10(dti) 26
+             712:      6(int) Load 711
+             713:     27(ptr) AccessChain 10(dti) 26
+             714:      6(int) Load 713
+             715:     75(ptr) AccessChain 24(data) 25 714 72
+             716:   15(ivec4) Load 715
+             717:   93(ivec2) VectorShuffle 716 716 0 1
+             718:   93(ivec2) GroupNonUniformQuadSwap 35 717 26
+             719:     75(ptr) AccessChain 24(data) 25 712 72
+             720:   15(ivec4) Load 719
+             721:   15(ivec4) VectorShuffle 720 718 4 5 2 3
+                              Store 719 721
+             722:     27(ptr) AccessChain 10(dti) 26
+             723:      6(int) Load 722
+             724:     27(ptr) AccessChain 10(dti) 26
+             725:      6(int) Load 724
+             726:     75(ptr) AccessChain 24(data) 25 725 72
+             727:   15(ivec4) Load 726
+             728:  105(ivec3) VectorShuffle 727 727 0 1 2
+             729:  105(ivec3) GroupNonUniformQuadSwap 35 728 26
+             730:     75(ptr) AccessChain 24(data) 25 723 72
+             731:   15(ivec4) Load 730
+             732:   15(ivec4) VectorShuffle 731 729 4 5 6 3
+                              Store 730 732
+             733:     27(ptr) AccessChain 10(dti) 26
+             734:      6(int) Load 733
+             735:     27(ptr) AccessChain 10(dti) 26
+             736:      6(int) Load 735
+             737:    118(ptr) AccessChain 24(data) 25 736 115
+             738:   17(fvec4) Load 737
+             739:   17(fvec4) GroupNonUniformQuadSwap 35 738 26
+             740:    118(ptr) AccessChain 24(data) 25 734 115
+                              Store 740 739
+             741:     27(ptr) AccessChain 10(dti) 26
+             742:      6(int) Load 741
+             743:     27(ptr) AccessChain 10(dti) 26
+             744:      6(int) Load 743
+             745:    127(ptr) AccessChain 24(data) 25 744 115 26
+             746:   16(float) Load 745
+             747:   16(float) GroupNonUniformQuadSwap 35 746 26
+             748:    127(ptr) AccessChain 24(data) 25 742 115 26
+                              Store 748 747
+             749:     27(ptr) AccessChain 10(dti) 26
+             750:      6(int) Load 749
+             751:     27(ptr) AccessChain 10(dti) 26
+             752:      6(int) Load 751
+             753:    118(ptr) AccessChain 24(data) 25 752 115
+             754:   17(fvec4) Load 753
+             755:  136(fvec2) VectorShuffle 754 754 0 1
+             756:  136(fvec2) GroupNonUniformQuadSwap 35 755 26
+             757:    118(ptr) AccessChain 24(data) 25 750 115
+             758:   17(fvec4) Load 757
+             759:   17(fvec4) VectorShuffle 758 756 4 5 2 3
+                              Store 757 759
+             760:     27(ptr) AccessChain 10(dti) 26
+             761:      6(int) Load 760
+             762:     27(ptr) AccessChain 10(dti) 26
+             763:      6(int) Load 762
+             764:    118(ptr) AccessChain 24(data) 25 763 115
+             765:   17(fvec4) Load 764
+             766:  148(fvec3) VectorShuffle 765 765 0 1 2
+             767:  148(fvec3) GroupNonUniformQuadSwap 35 766 26
+             768:    118(ptr) AccessChain 24(data) 25 761 115
+             769:   17(fvec4) Load 768
+             770:   17(fvec4) VectorShuffle 769 767 4 5 6 3
+                              Store 768 770
+             771:     27(ptr) AccessChain 10(dti) 26
+             772:      6(int) Load 771
+             773:     27(ptr) AccessChain 10(dti) 26
+             774:      6(int) Load 773
+             775:    161(ptr) AccessChain 24(data) 25 774 158
+             776:   19(fvec4) Load 775
+             777:   19(fvec4) GroupNonUniformQuadSwap 35 776 26
+             778:    161(ptr) AccessChain 24(data) 25 772 158
+                              Store 778 777
+             779:     27(ptr) AccessChain 10(dti) 26
+             780:      6(int) Load 779
+             781:     27(ptr) AccessChain 10(dti) 26
+             782:      6(int) Load 781
+             783:    170(ptr) AccessChain 24(data) 25 782 158 26
+             784:   18(float) Load 783
+             785:   18(float) GroupNonUniformQuadSwap 35 784 26
+             786:    170(ptr) AccessChain 24(data) 25 780 158 26
+                              Store 786 785
+             787:     27(ptr) AccessChain 10(dti) 26
+             788:      6(int) Load 787
+             789:     27(ptr) AccessChain 10(dti) 26
+             790:      6(int) Load 789
+             791:    161(ptr) AccessChain 24(data) 25 790 158
+             792:   19(fvec4) Load 791
+             793:  179(fvec2) VectorShuffle 792 792 0 1
+             794:  179(fvec2) GroupNonUniformQuadSwap 35 793 26
+             795:    161(ptr) AccessChain 24(data) 25 788 158
+             796:   19(fvec4) Load 795
+             797:   19(fvec4) VectorShuffle 796 794 4 5 2 3
+                              Store 795 797
+             798:     27(ptr) AccessChain 10(dti) 26
+             799:      6(int) Load 798
+             800:     27(ptr) AccessChain 10(dti) 26
+             801:      6(int) Load 800
+             802:    161(ptr) AccessChain 24(data) 25 801 158
+             803:   19(fvec4) Load 802
+             804:  191(fvec3) VectorShuffle 803 803 0 1 2
+             805:  191(fvec3) GroupNonUniformQuadSwap 35 804 26
+             806:    161(ptr) AccessChain 24(data) 25 799 158
+             807:   19(fvec4) Load 806
+             808:   19(fvec4) VectorShuffle 807 805 4 5 6 3
+                              Store 806 808
+             809:     27(ptr) AccessChain 10(dti) 26
+             810:      6(int) Load 809
+             811:     27(ptr) AccessChain 10(dti) 26
+             812:      6(int) Load 811
+             813:     32(ptr) AccessChain 24(data) 25 812 25
+             814:   13(ivec4) Load 813
+             815:   13(ivec4) GroupNonUniformQuadSwap 35 814 205
+             816:     32(ptr) AccessChain 24(data) 25 810 25
+                              Store 816 815
+             817:     27(ptr) AccessChain 10(dti) 26
+             818:      6(int) Load 817
+             819:     27(ptr) AccessChain 10(dti) 26
+             820:      6(int) Load 819
+             821:     42(ptr) AccessChain 24(data) 25 820 25 26
+             822:      6(int) Load 821
+             823:      6(int) GroupNonUniformQuadSwap 35 822 205
+             824:     42(ptr) AccessChain 24(data) 25 818 25 26
+                              Store 824 823
+             825:     27(ptr) AccessChain 10(dti) 26
+             826:      6(int) Load 825
+             827:     27(ptr) AccessChain 10(dti) 26
+             828:      6(int) Load 827
+             829:     32(ptr) AccessChain 24(data) 25 828 25
+             830:   13(ivec4) Load 829
+             831:   51(ivec2) VectorShuffle 830 830 0 1
+             832:   51(ivec2) GroupNonUniformQuadSwap 35 831 205
+             833:     32(ptr) AccessChain 24(data) 25 826 25
+             834:   13(ivec4) Load 833
+             835:   13(ivec4) VectorShuffle 834 832 4 5 2 3
+                              Store 833 835
+             836:     27(ptr) AccessChain 10(dti) 26
+             837:      6(int) Load 836
+             838:     27(ptr) AccessChain 10(dti) 26
+             839:      6(int) Load 838
+             840:     32(ptr) AccessChain 24(data) 25 839 25
+             841:   13(ivec4) Load 840
+             842:    7(ivec3) VectorShuffle 841 841 0 1 2
+             843:    7(ivec3) GroupNonUniformQuadSwap 35 842 205
+             844:     32(ptr) AccessChain 24(data) 25 837 25
+             845:   13(ivec4) Load 844
+             846:   13(ivec4) VectorShuffle 845 843 4 5 6 3
+                              Store 844 846
+             847:     27(ptr) AccessChain 10(dti) 26
+             848:      6(int) Load 847
+             849:     27(ptr) AccessChain 10(dti) 26
+             850:      6(int) Load 849
+             851:     75(ptr) AccessChain 24(data) 25 850 72
+             852:   15(ivec4) Load 851
+             853:   15(ivec4) GroupNonUniformQuadSwap 35 852 205
+             854:     75(ptr) AccessChain 24(data) 25 848 72
+                              Store 854 853
+             855:     27(ptr) AccessChain 10(dti) 26
+             856:      6(int) Load 855
+             857:     27(ptr) AccessChain 10(dti) 26
+             858:      6(int) Load 857
+             859:     84(ptr) AccessChain 24(data) 25 858 72 26
+             860:     14(int) Load 859
+             861:     14(int) GroupNonUniformQuadSwap 35 860 205
+             862:     84(ptr) AccessChain 24(data) 25 856 72 26
+                              Store 862 861
+             863:     27(ptr) AccessChain 10(dti) 26
+             864:      6(int) Load 863
+             865:     27(ptr) AccessChain 10(dti) 26
+             866:      6(int) Load 865
+             867:     75(ptr) AccessChain 24(data) 25 866 72
+             868:   15(ivec4) Load 867
+             869:   93(ivec2) VectorShuffle 868 868 0 1
+             870:   93(ivec2) GroupNonUniformQuadSwap 35 869 205
+             871:     75(ptr) AccessChain 24(data) 25 864 72
+             872:   15(ivec4) Load 871
+             873:   15(ivec4) VectorShuffle 872 870 4 5 2 3
+                              Store 871 873
+             874:     27(ptr) AccessChain 10(dti) 26
+             875:      6(int) Load 874
+             876:     27(ptr) AccessChain 10(dti) 26
+             877:      6(int) Load 876
+             878:     75(ptr) AccessChain 24(data) 25 877 72
+             879:   15(ivec4) Load 878
+             880:  105(ivec3) VectorShuffle 879 879 0 1 2
+             881:  105(ivec3) GroupNonUniformQuadSwap 35 880 205
+             882:     75(ptr) AccessChain 24(data) 25 875 72
+             883:   15(ivec4) Load 882
+             884:   15(ivec4) VectorShuffle 883 881 4 5 6 3
+                              Store 882 884
+             885:     27(ptr) AccessChain 10(dti) 26
+             886:      6(int) Load 885
+             887:     27(ptr) AccessChain 10(dti) 26
+             888:      6(int) Load 887
+             889:    118(ptr) AccessChain 24(data) 25 888 115
+             890:   17(fvec4) Load 889
+             891:   17(fvec4) GroupNonUniformQuadSwap 35 890 205
+             892:    118(ptr) AccessChain 24(data) 25 886 115
+                              Store 892 891
+             893:     27(ptr) AccessChain 10(dti) 26
+             894:      6(int) Load 893
+             895:     27(ptr) AccessChain 10(dti) 26
+             896:      6(int) Load 895
+             897:    127(ptr) AccessChain 24(data) 25 896 115 26
+             898:   16(float) Load 897
+             899:   16(float) GroupNonUniformQuadSwap 35 898 205
+             900:    127(ptr) AccessChain 24(data) 25 894 115 26
+                              Store 900 899
+             901:     27(ptr) AccessChain 10(dti) 26
+             902:      6(int) Load 901
+             903:     27(ptr) AccessChain 10(dti) 26
+             904:      6(int) Load 903
+             905:    118(ptr) AccessChain 24(data) 25 904 115
+             906:   17(fvec4) Load 905
+             907:  136(fvec2) VectorShuffle 906 906 0 1
+             908:  136(fvec2) GroupNonUniformQuadSwap 35 907 205
+             909:    118(ptr) AccessChain 24(data) 25 902 115
+             910:   17(fvec4) Load 909
+             911:   17(fvec4) VectorShuffle 910 908 4 5 2 3
+                              Store 909 911
+             912:     27(ptr) AccessChain 10(dti) 26
+             913:      6(int) Load 912
+             914:     27(ptr) AccessChain 10(dti) 26
+             915:      6(int) Load 914
+             916:    118(ptr) AccessChain 24(data) 25 915 115
+             917:   17(fvec4) Load 916
+             918:  148(fvec3) VectorShuffle 917 917 0 1 2
+             919:  148(fvec3) GroupNonUniformQuadSwap 35 918 205
+             920:    118(ptr) AccessChain 24(data) 25 913 115
+             921:   17(fvec4) Load 920
+             922:   17(fvec4) VectorShuffle 921 919 4 5 6 3
+                              Store 920 922
+             923:     27(ptr) AccessChain 10(dti) 26
+             924:      6(int) Load 923
+             925:     27(ptr) AccessChain 10(dti) 26
+             926:      6(int) Load 925
+             927:    161(ptr) AccessChain 24(data) 25 926 158
+             928:   19(fvec4) Load 927
+             929:   19(fvec4) GroupNonUniformQuadSwap 35 928 205
+             930:    161(ptr) AccessChain 24(data) 25 924 158
+                              Store 930 929
+             931:     27(ptr) AccessChain 10(dti) 26
+             932:      6(int) Load 931
+             933:     27(ptr) AccessChain 10(dti) 26
+             934:      6(int) Load 933
+             935:    170(ptr) AccessChain 24(data) 25 934 158 26
+             936:   18(float) Load 935
+             937:   18(float) GroupNonUniformQuadSwap 35 936 205
+             938:    170(ptr) AccessChain 24(data) 25 932 158 26
+                              Store 938 937
+             939:     27(ptr) AccessChain 10(dti) 26
+             940:      6(int) Load 939
+             941:     27(ptr) AccessChain 10(dti) 26
+             942:      6(int) Load 941
+             943:    161(ptr) AccessChain 24(data) 25 942 158
+             944:   19(fvec4) Load 943
+             945:  179(fvec2) VectorShuffle 944 944 0 1
+             946:  179(fvec2) GroupNonUniformQuadSwap 35 945 205
+             947:    161(ptr) AccessChain 24(data) 25 940 158
+             948:   19(fvec4) Load 947
+             949:   19(fvec4) VectorShuffle 948 946 4 5 2 3
+                              Store 947 949
+             950:     27(ptr) AccessChain 10(dti) 26
+             951:      6(int) Load 950
+             952:     27(ptr) AccessChain 10(dti) 26
+             953:      6(int) Load 952
+             954:    161(ptr) AccessChain 24(data) 25 953 158
+             955:   19(fvec4) Load 954
+             956:  191(fvec3) VectorShuffle 955 955 0 1 2
+             957:  191(fvec3) GroupNonUniformQuadSwap 35 956 205
+             958:    161(ptr) AccessChain 24(data) 25 951 158
+             959:   19(fvec4) Load 958
+             960:   19(fvec4) VectorShuffle 959 957 4 5 6 3
+                              Store 958 960
+             961:     27(ptr) AccessChain 10(dti) 26
+             962:      6(int) Load 961
+             963:     27(ptr) AccessChain 10(dti) 26
+             964:      6(int) Load 963
+             965:     32(ptr) AccessChain 24(data) 25 964 25
+             966:   13(ivec4) Load 965
+             967:   13(ivec4) GroupNonUniformQuadSwap 35 966 358
+             968:     32(ptr) AccessChain 24(data) 25 962 25
+                              Store 968 967
+             969:     27(ptr) AccessChain 10(dti) 26
+             970:      6(int) Load 969
+             971:     27(ptr) AccessChain 10(dti) 26
+             972:      6(int) Load 971
+             973:     42(ptr) AccessChain 24(data) 25 972 25 26
+             974:      6(int) Load 973
+             975:      6(int) GroupNonUniformQuadSwap 35 974 358
+             976:     42(ptr) AccessChain 24(data) 25 970 25 26
+                              Store 976 975
+             977:     27(ptr) AccessChain 10(dti) 26
+             978:      6(int) Load 977
+             979:     27(ptr) AccessChain 10(dti) 26
+             980:      6(int) Load 979
+             981:     32(ptr) AccessChain 24(data) 25 980 25
+             982:   13(ivec4) Load 981
+             983:   51(ivec2) VectorShuffle 982 982 0 1
+             984:   51(ivec2) GroupNonUniformQuadSwap 35 983 358
+             985:     32(ptr) AccessChain 24(data) 25 978 25
+             986:   13(ivec4) Load 985
+             987:   13(ivec4) VectorShuffle 986 984 4 5 2 3
+                              Store 985 987
+             988:     27(ptr) AccessChain 10(dti) 26
+             989:      6(int) Load 988
+             990:     27(ptr) AccessChain 10(dti) 26
+             991:      6(int) Load 990
+             992:     32(ptr) AccessChain 24(data) 25 991 25
+             993:   13(ivec4) Load 992
+             994:    7(ivec3) VectorShuffle 993 993 0 1 2
+             995:    7(ivec3) GroupNonUniformQuadSwap 35 994 358
+             996:     32(ptr) AccessChain 24(data) 25 989 25
+             997:   13(ivec4) Load 996
+             998:   13(ivec4) VectorShuffle 997 995 4 5 6 3
+                              Store 996 998
+             999:     27(ptr) AccessChain 10(dti) 26
+            1000:      6(int) Load 999
+            1001:     27(ptr) AccessChain 10(dti) 26
+            1002:      6(int) Load 1001
+            1003:     75(ptr) AccessChain 24(data) 25 1002 72
+            1004:   15(ivec4) Load 1003
+            1005:   15(ivec4) GroupNonUniformQuadSwap 35 1004 358
+            1006:     75(ptr) AccessChain 24(data) 25 1000 72
+                              Store 1006 1005
+            1007:     27(ptr) AccessChain 10(dti) 26
+            1008:      6(int) Load 1007
+            1009:     27(ptr) AccessChain 10(dti) 26
+            1010:      6(int) Load 1009
+            1011:     84(ptr) AccessChain 24(data) 25 1010 72 26
+            1012:     14(int) Load 1011
+            1013:     14(int) GroupNonUniformQuadSwap 35 1012 358
+            1014:     84(ptr) AccessChain 24(data) 25 1008 72 26
+                              Store 1014 1013
+            1015:     27(ptr) AccessChain 10(dti) 26
+            1016:      6(int) Load 1015
+            1017:     27(ptr) AccessChain 10(dti) 26
+            1018:      6(int) Load 1017
+            1019:     75(ptr) AccessChain 24(data) 25 1018 72
+            1020:   15(ivec4) Load 1019
+            1021:   93(ivec2) VectorShuffle 1020 1020 0 1
+            1022:   93(ivec2) GroupNonUniformQuadSwap 35 1021 358
+            1023:     75(ptr) AccessChain 24(data) 25 1016 72
+            1024:   15(ivec4) Load 1023
+            1025:   15(ivec4) VectorShuffle 1024 1022 4 5 2 3
+                              Store 1023 1025
+            1026:     27(ptr) AccessChain 10(dti) 26
+            1027:      6(int) Load 1026
+            1028:     27(ptr) AccessChain 10(dti) 26
+            1029:      6(int) Load 1028
+            1030:     75(ptr) AccessChain 24(data) 25 1029 72
+            1031:   15(ivec4) Load 1030
+            1032:  105(ivec3) VectorShuffle 1031 1031 0 1 2
+            1033:  105(ivec3) GroupNonUniformQuadSwap 35 1032 358
+            1034:     75(ptr) AccessChain 24(data) 25 1027 72
+            1035:   15(ivec4) Load 1034
+            1036:   15(ivec4) VectorShuffle 1035 1033 4 5 6 3
+                              Store 1034 1036
+            1037:     27(ptr) AccessChain 10(dti) 26
+            1038:      6(int) Load 1037
+            1039:     27(ptr) AccessChain 10(dti) 26
+            1040:      6(int) Load 1039
+            1041:    118(ptr) AccessChain 24(data) 25 1040 115
+            1042:   17(fvec4) Load 1041
+            1043:   17(fvec4) GroupNonUniformQuadSwap 35 1042 358
+            1044:    118(ptr) AccessChain 24(data) 25 1038 115
+                              Store 1044 1043
+            1045:     27(ptr) AccessChain 10(dti) 26
+            1046:      6(int) Load 1045
+            1047:     27(ptr) AccessChain 10(dti) 26
+            1048:      6(int) Load 1047
+            1049:    127(ptr) AccessChain 24(data) 25 1048 115 26
+            1050:   16(float) Load 1049
+            1051:   16(float) GroupNonUniformQuadSwap 35 1050 358
+            1052:    127(ptr) AccessChain 24(data) 25 1046 115 26
+                              Store 1052 1051
+            1053:     27(ptr) AccessChain 10(dti) 26
+            1054:      6(int) Load 1053
+            1055:     27(ptr) AccessChain 10(dti) 26
+            1056:      6(int) Load 1055
+            1057:    118(ptr) AccessChain 24(data) 25 1056 115
+            1058:   17(fvec4) Load 1057
+            1059:  136(fvec2) VectorShuffle 1058 1058 0 1
+            1060:  136(fvec2) GroupNonUniformQuadSwap 35 1059 358
+            1061:    118(ptr) AccessChain 24(data) 25 1054 115
+            1062:   17(fvec4) Load 1061
+            1063:   17(fvec4) VectorShuffle 1062 1060 4 5 2 3
+                              Store 1061 1063
+            1064:     27(ptr) AccessChain 10(dti) 26
+            1065:      6(int) Load 1064
+            1066:     27(ptr) AccessChain 10(dti) 26
+            1067:      6(int) Load 1066
+            1068:    118(ptr) AccessChain 24(data) 25 1067 115
+            1069:   17(fvec4) Load 1068
+            1070:  148(fvec3) VectorShuffle 1069 1069 0 1 2
+            1071:  148(fvec3) GroupNonUniformQuadSwap 35 1070 358
+            1072:    118(ptr) AccessChain 24(data) 25 1065 115
+            1073:   17(fvec4) Load 1072
+            1074:   17(fvec4) VectorShuffle 1073 1071 4 5 6 3
+                              Store 1072 1074
+            1075:     27(ptr) AccessChain 10(dti) 26
+            1076:      6(int) Load 1075
+            1077:     27(ptr) AccessChain 10(dti) 26
+            1078:      6(int) Load 1077
+            1079:    161(ptr) AccessChain 24(data) 25 1078 158
+            1080:   19(fvec4) Load 1079
+            1081:   19(fvec4) GroupNonUniformQuadSwap 35 1080 358
+            1082:    161(ptr) AccessChain 24(data) 25 1076 158
+                              Store 1082 1081
+            1083:     27(ptr) AccessChain 10(dti) 26
+            1084:      6(int) Load 1083
+            1085:     27(ptr) AccessChain 10(dti) 26
+            1086:      6(int) Load 1085
+            1087:    170(ptr) AccessChain 24(data) 25 1086 158 26
+            1088:   18(float) Load 1087
+            1089:   18(float) GroupNonUniformQuadSwap 35 1088 358
+            1090:    170(ptr) AccessChain 24(data) 25 1084 158 26
+                              Store 1090 1089
+            1091:     27(ptr) AccessChain 10(dti) 26
+            1092:      6(int) Load 1091
+            1093:     27(ptr) AccessChain 10(dti) 26
+            1094:      6(int) Load 1093
+            1095:    161(ptr) AccessChain 24(data) 25 1094 158
+            1096:   19(fvec4) Load 1095
+            1097:  179(fvec2) VectorShuffle 1096 1096 0 1
+            1098:  179(fvec2) GroupNonUniformQuadSwap 35 1097 358
+            1099:    161(ptr) AccessChain 24(data) 25 1092 158
+            1100:   19(fvec4) Load 1099
+            1101:   19(fvec4) VectorShuffle 1100 1098 4 5 2 3
+                              Store 1099 1101
+            1102:     27(ptr) AccessChain 10(dti) 26
+            1103:      6(int) Load 1102
+            1104:     27(ptr) AccessChain 10(dti) 26
+            1105:      6(int) Load 1104
+            1106:    161(ptr) AccessChain 24(data) 25 1105 158
+            1107:   19(fvec4) Load 1106
+            1108:  191(fvec3) VectorShuffle 1107 1107 0 1 2
+            1109:  191(fvec3) GroupNonUniformQuadSwap 35 1108 358
+            1110:    161(ptr) AccessChain 24(data) 25 1103 158
+            1111:   19(fvec4) Load 1110
+            1112:   19(fvec4) VectorShuffle 1111 1109 4 5 6 3
+                              Store 1110 1112
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.wavequery.comp.out b/Test/baseResults/hlsl.wavequery.comp.out
new file mode 100644
index 0000000..8bade0a
--- /dev/null
+++ b/Test/baseResults/hlsl.wavequery.comp.out
@@ -0,0 +1,116 @@
+hlsl.wavequery.comp
+Shader version: 500
+local_size = (32, 16, 1)
+0:? Sequence
+0:5  Function Definition: @CSMain( ( temp void)
+0:5    Function Parameters: 
+0:?     Sequence
+0:6      move second child to first child ( temp uint)
+0:6        indirect index (layout( row_major std430) buffer uint)
+0:6          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:6            'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
+0:6            Constant:
+0:6              0 (const uint)
+0:6          '@gl_SubgroupInvocationID' ( in uint unknown built-in variable)
+0:6        Test condition and select ( temp uint): no shortcircuit
+0:6          Condition
+0:6          subgroupElect ( temp bool)
+0:6          true case
+0:6          '@gl_SubgroupSize' ( in uint unknown built-in variable)
+0:6          false case
+0:6          Constant:
+0:6            0 (const uint)
+0:5  Function Definition: CSMain( ( temp void)
+0:5    Function Parameters: 
+0:?     Sequence
+0:5      Function Call: @CSMain( ( temp void)
+0:?   Linker Objects
+0:?     'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
+
+
+Linked compute stage:
+
+
+Shader version: 500
+local_size = (32, 16, 1)
+0:? Sequence
+0:5  Function Definition: @CSMain( ( temp void)
+0:5    Function Parameters: 
+0:?     Sequence
+0:6      move second child to first child ( temp uint)
+0:6        indirect index (layout( row_major std430) buffer uint)
+0:6          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:6            'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
+0:6            Constant:
+0:6              0 (const uint)
+0:6          '@gl_SubgroupInvocationID' ( in uint unknown built-in variable)
+0:6        Test condition and select ( temp uint): no shortcircuit
+0:6          Condition
+0:6          subgroupElect ( temp bool)
+0:6          true case
+0:6          '@gl_SubgroupSize' ( in uint unknown built-in variable)
+0:6          false case
+0:6          Constant:
+0:6            0 (const uint)
+0:5  Function Definition: CSMain( ( temp void)
+0:5    Function Parameters: 
+0:?     Sequence
+0:5      Function Call: @CSMain( ( temp void)
+0:?   Linker Objects
+0:?     'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
+
+// Module Version 10300
+// Generated by (magic number): 80006
+// Id's are bound by 28
+
+                              Capability Shader
+                              Capability GroupNonUniform
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "CSMain" 16 21
+                              ExecutionMode 4 LocalSize 32 16 1
+                              Source HLSL 500
+                              Name 4  "CSMain"
+                              Name 6  "@CSMain("
+                              Name 10  "data"
+                              MemberName 10(data) 0  "@data"
+                              Name 12  "data"
+                              Name 16  "@gl_SubgroupInvocationID"
+                              Name 21  "@gl_SubgroupSize"
+                              Decorate 9 ArrayStride 4
+                              MemberDecorate 10(data) 0 Offset 0
+                              Decorate 10(data) BufferBlock
+                              Decorate 12(data) DescriptorSet 0
+                              Decorate 16(@gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId
+                              Decorate 21(@gl_SubgroupSize) BuiltIn SubgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               8:             TypeInt 32 0
+               9:             TypeRuntimeArray 8(int)
+        10(data):             TypeStruct 9
+              11:             TypePointer Uniform 10(data)
+        12(data):     11(ptr) Variable Uniform
+              13:             TypeInt 32 1
+              14:     13(int) Constant 0
+              15:             TypePointer Input 8(int)
+16(@gl_SubgroupInvocationID):     15(ptr) Variable Input
+              18:             TypeBool
+              19:      8(int) Constant 3
+21(@gl_SubgroupSize):     15(ptr) Variable Input
+              23:      8(int) Constant 0
+              25:             TypePointer Uniform 8(int)
+       4(CSMain):           2 Function None 3
+               5:             Label
+              27:           2 FunctionCall 6(@CSMain()
+                              Return
+                              FunctionEnd
+     6(@CSMain():           2 Function None 3
+               7:             Label
+              17:      8(int) Load 16(@gl_SubgroupInvocationID)
+              20:    18(bool) GroupNonUniformElect 19
+              22:      8(int) Load 21(@gl_SubgroupSize)
+              24:      8(int) Select 20 22 23
+              26:     25(ptr) AccessChain 12(data) 14 17
+                              Store 26 24
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.wavequery.frag.out b/Test/baseResults/hlsl.wavequery.frag.out
new file mode 100644
index 0000000..5b426d8
--- /dev/null
+++ b/Test/baseResults/hlsl.wavequery.frag.out
@@ -0,0 +1,123 @@
+hlsl.wavequery.frag
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:2  Function Definition: @PixelShaderFunction( ( temp 4-component vector of float)
+0:2    Function Parameters: 
+0:?     Sequence
+0:3      Test condition and select ( temp void)
+0:3        Condition
+0:3        subgroupElect ( temp bool)
+0:3        true case
+0:?         Sequence
+0:5          Branch: Return with expression
+0:?             Constant:
+0:?               1.000000
+0:?               2.000000
+0:?               3.000000
+0:?               4.000000
+0:3        false case
+0:?         Sequence
+0:9          Branch: Return with expression
+0:?             Constant:
+0:?               4.000000
+0:?               3.000000
+0:?               2.000000
+0:?               1.000000
+0:2  Function Definition: PixelShaderFunction( ( temp void)
+0:2    Function Parameters: 
+0:?     Sequence
+0:2      move second child to first child ( temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:2        Function Call: @PixelShaderFunction( ( temp 4-component vector of float)
+0:?   Linker Objects
+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:2  Function Definition: @PixelShaderFunction( ( temp 4-component vector of float)
+0:2    Function Parameters: 
+0:?     Sequence
+0:3      Test condition and select ( temp void)
+0:3        Condition
+0:3        subgroupElect ( temp bool)
+0:3        true case
+0:?         Sequence
+0:5          Branch: Return with expression
+0:?             Constant:
+0:?               1.000000
+0:?               2.000000
+0:?               3.000000
+0:?               4.000000
+0:3        false case
+0:?         Sequence
+0:9          Branch: Return with expression
+0:?             Constant:
+0:?               4.000000
+0:?               3.000000
+0:?               2.000000
+0:?               1.000000
+0:2  Function Definition: PixelShaderFunction( ( temp void)
+0:2    Function Parameters: 
+0:?     Sequence
+0:2      move second child to first child ( temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:2        Function Call: @PixelShaderFunction( ( temp 4-component vector of float)
+0:?   Linker Objects
+0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+// Module Version 10300
+// Generated by (magic number): 80006
+// Id's are bound by 30
+
+                              Capability Shader
+                              Capability GroupNonUniform
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "PixelShaderFunction" 28
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 500
+                              Name 4  "PixelShaderFunction"
+                              Name 9  "@PixelShaderFunction("
+                              Name 28  "@entryPointOutput"
+                              Decorate 28(@entryPointOutput) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypeFunction 7(fvec4)
+              11:             TypeBool
+              12:             TypeInt 32 0
+              13:     12(int) Constant 3
+              17:    6(float) Constant 1065353216
+              18:    6(float) Constant 1073741824
+              19:    6(float) Constant 1077936128
+              20:    6(float) Constant 1082130432
+              21:    7(fvec4) ConstantComposite 17 18 19 20
+              24:    7(fvec4) ConstantComposite 20 19 18 17
+              27:             TypePointer Output 7(fvec4)
+28(@entryPointOutput):     27(ptr) Variable Output
+4(PixelShaderFunction):           2 Function None 3
+               5:             Label
+              29:    7(fvec4) FunctionCall 9(@PixelShaderFunction()
+                              Store 28(@entryPointOutput) 29
+                              Return
+                              FunctionEnd
+9(@PixelShaderFunction():    7(fvec4) Function None 8
+              10:             Label
+              14:    11(bool) GroupNonUniformElect 13
+                              SelectionMerge 16 None
+                              BranchConditional 14 15 23
+              15:               Label
+                                ReturnValue 21
+              23:               Label
+                                ReturnValue 24
+              16:             Label
+              26:    7(fvec4) Undef
+                              ReturnValue 26
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.wavereduction.comp.out b/Test/baseResults/hlsl.wavereduction.comp.out
new file mode 100644
index 0000000..e8e840e
--- /dev/null
+++ b/Test/baseResults/hlsl.wavereduction.comp.out
@@ -0,0 +1,7218 @@
+hlsl.wavereduction.comp
+Shader version: 500
+local_size = (32, 16, 1)
+0:? Sequence
+0:13  Function Definition: @CSMain(vu3; ( temp void)
+0:13    Function Parameters: 
+0:13      'dti' ( in 3-component vector of uint)
+0:?     Sequence
+0:14      move second child to first child ( temp 4-component vector of uint)
+0:14        u: direct index for structure ( temp 4-component vector of uint)
+0:14          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:14            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:14              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:14              Constant:
+0:14                0 (const uint)
+0:14            direct index ( temp uint)
+0:14              'dti' ( in 3-component vector of uint)
+0:14              Constant:
+0:14                0 (const int)
+0:14          Constant:
+0:14            0 (const int)
+0:14        subgroupAdd ( temp 4-component vector of uint)
+0:14          u: direct index for structure ( temp 4-component vector of uint)
+0:14            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:14              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:14                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:14                Constant:
+0:14                  0 (const uint)
+0:14              direct index ( temp uint)
+0:14                'dti' ( in 3-component vector of uint)
+0:14                Constant:
+0:14                  0 (const int)
+0:14            Constant:
+0:14              0 (const int)
+0:15      move second child to first child ( temp uint)
+0:15        direct index ( temp uint)
+0:15          u: direct index for structure ( temp 4-component vector of uint)
+0:15            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:15              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:15                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:15                Constant:
+0:15                  0 (const uint)
+0:15              direct index ( temp uint)
+0:15                'dti' ( in 3-component vector of uint)
+0:15                Constant:
+0:15                  0 (const int)
+0:15            Constant:
+0:15              0 (const int)
+0:15          Constant:
+0:15            0 (const int)
+0:15        subgroupAdd ( temp uint)
+0:15          direct index ( temp uint)
+0:15            u: direct index for structure ( temp 4-component vector of uint)
+0:15              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:15                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:15                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:15                  Constant:
+0:15                    0 (const uint)
+0:15                direct index ( temp uint)
+0:15                  'dti' ( in 3-component vector of uint)
+0:15                  Constant:
+0:15                    0 (const int)
+0:15              Constant:
+0:15                0 (const int)
+0:15            Constant:
+0:15              0 (const int)
+0:16      move second child to first child ( temp 2-component vector of uint)
+0:16        vector swizzle ( temp 2-component vector of uint)
+0:16          u: direct index for structure ( temp 4-component vector of uint)
+0:16            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:16              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:16                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:16                Constant:
+0:16                  0 (const uint)
+0:16              direct index ( temp uint)
+0:16                'dti' ( in 3-component vector of uint)
+0:16                Constant:
+0:16                  0 (const int)
+0:16            Constant:
+0:16              0 (const int)
+0:16          Sequence
+0:16            Constant:
+0:16              0 (const int)
+0:16            Constant:
+0:16              1 (const int)
+0:16        subgroupAdd ( temp 2-component vector of uint)
+0:16          vector swizzle ( temp 2-component vector of uint)
+0:16            u: direct index for structure ( temp 4-component vector of uint)
+0:16              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:16                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:16                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:16                  Constant:
+0:16                    0 (const uint)
+0:16                direct index ( temp uint)
+0:16                  'dti' ( in 3-component vector of uint)
+0:16                  Constant:
+0:16                    0 (const int)
+0:16              Constant:
+0:16                0 (const int)
+0:16            Sequence
+0:16              Constant:
+0:16                0 (const int)
+0:16              Constant:
+0:16                1 (const int)
+0:17      move second child to first child ( temp 3-component vector of uint)
+0:17        vector swizzle ( temp 3-component vector of uint)
+0:17          u: direct index for structure ( temp 4-component vector of uint)
+0:17            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:17              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:17                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:17                Constant:
+0:17                  0 (const uint)
+0:17              direct index ( temp uint)
+0:17                'dti' ( in 3-component vector of uint)
+0:17                Constant:
+0:17                  0 (const int)
+0:17            Constant:
+0:17              0 (const int)
+0:17          Sequence
+0:17            Constant:
+0:17              0 (const int)
+0:17            Constant:
+0:17              1 (const int)
+0:17            Constant:
+0:17              2 (const int)
+0:17        subgroupAdd ( temp 3-component vector of uint)
+0:17          vector swizzle ( temp 3-component vector of uint)
+0:17            u: direct index for structure ( temp 4-component vector of uint)
+0:17              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:17                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:17                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:17                  Constant:
+0:17                    0 (const uint)
+0:17                direct index ( temp uint)
+0:17                  'dti' ( in 3-component vector of uint)
+0:17                  Constant:
+0:17                    0 (const int)
+0:17              Constant:
+0:17                0 (const int)
+0:17            Sequence
+0:17              Constant:
+0:17                0 (const int)
+0:17              Constant:
+0:17                1 (const int)
+0:17              Constant:
+0:17                2 (const int)
+0:19      move second child to first child ( temp 4-component vector of int)
+0:19        i: direct index for structure ( temp 4-component vector of int)
+0:19          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:19            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:19              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:19              Constant:
+0:19                0 (const uint)
+0:19            direct index ( temp uint)
+0:19              'dti' ( in 3-component vector of uint)
+0:19              Constant:
+0:19                0 (const int)
+0:19          Constant:
+0:19            1 (const int)
+0:19        subgroupAdd ( temp 4-component vector of int)
+0:19          i: direct index for structure ( temp 4-component vector of int)
+0:19            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:19              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:19                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:19                Constant:
+0:19                  0 (const uint)
+0:19              direct index ( temp uint)
+0:19                'dti' ( in 3-component vector of uint)
+0:19                Constant:
+0:19                  0 (const int)
+0:19            Constant:
+0:19              1 (const int)
+0:20      move second child to first child ( temp int)
+0:20        direct index ( temp int)
+0:20          i: direct index for structure ( temp 4-component vector of int)
+0:20            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:20              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:20                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:20                Constant:
+0:20                  0 (const uint)
+0:20              direct index ( temp uint)
+0:20                'dti' ( in 3-component vector of uint)
+0:20                Constant:
+0:20                  0 (const int)
+0:20            Constant:
+0:20              1 (const int)
+0:20          Constant:
+0:20            0 (const int)
+0:20        subgroupAdd ( temp int)
+0:20          direct index ( temp int)
+0:20            i: direct index for structure ( temp 4-component vector of int)
+0:20              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:20                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:20                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:20                  Constant:
+0:20                    0 (const uint)
+0:20                direct index ( temp uint)
+0:20                  'dti' ( in 3-component vector of uint)
+0:20                  Constant:
+0:20                    0 (const int)
+0:20              Constant:
+0:20                1 (const int)
+0:20            Constant:
+0:20              0 (const int)
+0:21      move second child to first child ( temp 2-component vector of int)
+0:21        vector swizzle ( temp 2-component vector of int)
+0:21          i: direct index for structure ( temp 4-component vector of int)
+0:21            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:21              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:21                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:21                Constant:
+0:21                  0 (const uint)
+0:21              direct index ( temp uint)
+0:21                'dti' ( in 3-component vector of uint)
+0:21                Constant:
+0:21                  0 (const int)
+0:21            Constant:
+0:21              1 (const int)
+0:21          Sequence
+0:21            Constant:
+0:21              0 (const int)
+0:21            Constant:
+0:21              1 (const int)
+0:21        subgroupAdd ( temp 2-component vector of int)
+0:21          vector swizzle ( temp 2-component vector of int)
+0:21            i: direct index for structure ( temp 4-component vector of int)
+0:21              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:21                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:21                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:21                  Constant:
+0:21                    0 (const uint)
+0:21                direct index ( temp uint)
+0:21                  'dti' ( in 3-component vector of uint)
+0:21                  Constant:
+0:21                    0 (const int)
+0:21              Constant:
+0:21                1 (const int)
+0:21            Sequence
+0:21              Constant:
+0:21                0 (const int)
+0:21              Constant:
+0:21                1 (const int)
+0:22      move second child to first child ( temp 3-component vector of int)
+0:22        vector swizzle ( temp 3-component vector of int)
+0:22          i: direct index for structure ( temp 4-component vector of int)
+0:22            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:22              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:22                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:22                Constant:
+0:22                  0 (const uint)
+0:22              direct index ( temp uint)
+0:22                'dti' ( in 3-component vector of uint)
+0:22                Constant:
+0:22                  0 (const int)
+0:22            Constant:
+0:22              1 (const int)
+0:22          Sequence
+0:22            Constant:
+0:22              0 (const int)
+0:22            Constant:
+0:22              1 (const int)
+0:22            Constant:
+0:22              2 (const int)
+0:22        subgroupAdd ( temp 3-component vector of int)
+0:22          vector swizzle ( temp 3-component vector of int)
+0:22            i: direct index for structure ( temp 4-component vector of int)
+0:22              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:22                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:22                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:22                  Constant:
+0:22                    0 (const uint)
+0:22                direct index ( temp uint)
+0:22                  'dti' ( in 3-component vector of uint)
+0:22                  Constant:
+0:22                    0 (const int)
+0:22              Constant:
+0:22                1 (const int)
+0:22            Sequence
+0:22              Constant:
+0:22                0 (const int)
+0:22              Constant:
+0:22                1 (const int)
+0:22              Constant:
+0:22                2 (const int)
+0:24      move second child to first child ( temp 4-component vector of float)
+0:24        f: direct index for structure ( temp 4-component vector of float)
+0:24          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:24            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:24              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:24              Constant:
+0:24                0 (const uint)
+0:24            direct index ( temp uint)
+0:24              'dti' ( in 3-component vector of uint)
+0:24              Constant:
+0:24                0 (const int)
+0:24          Constant:
+0:24            2 (const int)
+0:24        subgroupAdd ( temp 4-component vector of float)
+0:24          f: direct index for structure ( temp 4-component vector of float)
+0:24            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:24              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:24                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:24                Constant:
+0:24                  0 (const uint)
+0:24              direct index ( temp uint)
+0:24                'dti' ( in 3-component vector of uint)
+0:24                Constant:
+0:24                  0 (const int)
+0:24            Constant:
+0:24              2 (const int)
+0:25      move second child to first child ( temp float)
+0:25        direct index ( temp float)
+0:25          f: direct index for structure ( temp 4-component vector of float)
+0:25            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:25              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:25                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:25                Constant:
+0:25                  0 (const uint)
+0:25              direct index ( temp uint)
+0:25                'dti' ( in 3-component vector of uint)
+0:25                Constant:
+0:25                  0 (const int)
+0:25            Constant:
+0:25              2 (const int)
+0:25          Constant:
+0:25            0 (const int)
+0:25        subgroupAdd ( temp float)
+0:25          direct index ( temp float)
+0:25            f: direct index for structure ( temp 4-component vector of float)
+0:25              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:25                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:25                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:25                  Constant:
+0:25                    0 (const uint)
+0:25                direct index ( temp uint)
+0:25                  'dti' ( in 3-component vector of uint)
+0:25                  Constant:
+0:25                    0 (const int)
+0:25              Constant:
+0:25                2 (const int)
+0:25            Constant:
+0:25              0 (const int)
+0:26      move second child to first child ( temp 2-component vector of float)
+0:26        vector swizzle ( temp 2-component vector of float)
+0:26          f: direct index for structure ( temp 4-component vector of float)
+0:26            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:26              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:26                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:26                Constant:
+0:26                  0 (const uint)
+0:26              direct index ( temp uint)
+0:26                'dti' ( in 3-component vector of uint)
+0:26                Constant:
+0:26                  0 (const int)
+0:26            Constant:
+0:26              2 (const int)
+0:26          Sequence
+0:26            Constant:
+0:26              0 (const int)
+0:26            Constant:
+0:26              1 (const int)
+0:26        subgroupAdd ( temp 2-component vector of float)
+0:26          vector swizzle ( temp 2-component vector of float)
+0:26            f: direct index for structure ( temp 4-component vector of float)
+0:26              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:26                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:26                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:26                  Constant:
+0:26                    0 (const uint)
+0:26                direct index ( temp uint)
+0:26                  'dti' ( in 3-component vector of uint)
+0:26                  Constant:
+0:26                    0 (const int)
+0:26              Constant:
+0:26                2 (const int)
+0:26            Sequence
+0:26              Constant:
+0:26                0 (const int)
+0:26              Constant:
+0:26                1 (const int)
+0:27      move second child to first child ( temp 3-component vector of float)
+0:27        vector swizzle ( temp 3-component vector of float)
+0:27          f: direct index for structure ( temp 4-component vector of float)
+0:27            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:27              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:27                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:27                Constant:
+0:27                  0 (const uint)
+0:27              direct index ( temp uint)
+0:27                'dti' ( in 3-component vector of uint)
+0:27                Constant:
+0:27                  0 (const int)
+0:27            Constant:
+0:27              2 (const int)
+0:27          Sequence
+0:27            Constant:
+0:27              0 (const int)
+0:27            Constant:
+0:27              1 (const int)
+0:27            Constant:
+0:27              2 (const int)
+0:27        subgroupAdd ( temp 3-component vector of float)
+0:27          vector swizzle ( temp 3-component vector of float)
+0:27            f: direct index for structure ( temp 4-component vector of float)
+0:27              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:27                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:27                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:27                  Constant:
+0:27                    0 (const uint)
+0:27                direct index ( temp uint)
+0:27                  'dti' ( in 3-component vector of uint)
+0:27                  Constant:
+0:27                    0 (const int)
+0:27              Constant:
+0:27                2 (const int)
+0:27            Sequence
+0:27              Constant:
+0:27                0 (const int)
+0:27              Constant:
+0:27                1 (const int)
+0:27              Constant:
+0:27                2 (const int)
+0:29      move second child to first child ( temp 4-component vector of double)
+0:29        d: direct index for structure ( temp 4-component vector of double)
+0:29          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:29            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:29              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:29              Constant:
+0:29                0 (const uint)
+0:29            direct index ( temp uint)
+0:29              'dti' ( in 3-component vector of uint)
+0:29              Constant:
+0:29                0 (const int)
+0:29          Constant:
+0:29            3 (const int)
+0:29        subgroupAdd ( temp 4-component vector of double)
+0:29          d: direct index for structure ( temp 4-component vector of double)
+0:29            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:29              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:29                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:29                Constant:
+0:29                  0 (const uint)
+0:29              direct index ( temp uint)
+0:29                'dti' ( in 3-component vector of uint)
+0:29                Constant:
+0:29                  0 (const int)
+0:29            Constant:
+0:29              3 (const int)
+0:30      move second child to first child ( temp double)
+0:30        direct index ( temp double)
+0:30          d: direct index for structure ( temp 4-component vector of double)
+0:30            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:30              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:30                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:30                Constant:
+0:30                  0 (const uint)
+0:30              direct index ( temp uint)
+0:30                'dti' ( in 3-component vector of uint)
+0:30                Constant:
+0:30                  0 (const int)
+0:30            Constant:
+0:30              3 (const int)
+0:30          Constant:
+0:30            0 (const int)
+0:30        subgroupAdd ( temp double)
+0:30          direct index ( temp double)
+0:30            d: direct index for structure ( temp 4-component vector of double)
+0:30              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:30                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:30                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:30                  Constant:
+0:30                    0 (const uint)
+0:30                direct index ( temp uint)
+0:30                  'dti' ( in 3-component vector of uint)
+0:30                  Constant:
+0:30                    0 (const int)
+0:30              Constant:
+0:30                3 (const int)
+0:30            Constant:
+0:30              0 (const int)
+0:31      move second child to first child ( temp 2-component vector of double)
+0:31        vector swizzle ( temp 2-component vector of double)
+0:31          d: direct index for structure ( temp 4-component vector of double)
+0:31            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:31              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:31                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:31                Constant:
+0:31                  0 (const uint)
+0:31              direct index ( temp uint)
+0:31                'dti' ( in 3-component vector of uint)
+0:31                Constant:
+0:31                  0 (const int)
+0:31            Constant:
+0:31              3 (const int)
+0:31          Sequence
+0:31            Constant:
+0:31              0 (const int)
+0:31            Constant:
+0:31              1 (const int)
+0:31        subgroupAdd ( temp 2-component vector of double)
+0:31          vector swizzle ( temp 2-component vector of double)
+0:31            d: direct index for structure ( temp 4-component vector of double)
+0:31              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:31                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:31                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:31                  Constant:
+0:31                    0 (const uint)
+0:31                direct index ( temp uint)
+0:31                  'dti' ( in 3-component vector of uint)
+0:31                  Constant:
+0:31                    0 (const int)
+0:31              Constant:
+0:31                3 (const int)
+0:31            Sequence
+0:31              Constant:
+0:31                0 (const int)
+0:31              Constant:
+0:31                1 (const int)
+0:32      move second child to first child ( temp 3-component vector of double)
+0:32        vector swizzle ( temp 3-component vector of double)
+0:32          d: direct index for structure ( temp 4-component vector of double)
+0:32            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:32              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:32                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:32                Constant:
+0:32                  0 (const uint)
+0:32              direct index ( temp uint)
+0:32                'dti' ( in 3-component vector of uint)
+0:32                Constant:
+0:32                  0 (const int)
+0:32            Constant:
+0:32              3 (const int)
+0:32          Sequence
+0:32            Constant:
+0:32              0 (const int)
+0:32            Constant:
+0:32              1 (const int)
+0:32            Constant:
+0:32              2 (const int)
+0:32        subgroupAdd ( temp 3-component vector of double)
+0:32          vector swizzle ( temp 3-component vector of double)
+0:32            d: direct index for structure ( temp 4-component vector of double)
+0:32              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:32                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:32                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:32                  Constant:
+0:32                    0 (const uint)
+0:32                direct index ( temp uint)
+0:32                  'dti' ( in 3-component vector of uint)
+0:32                  Constant:
+0:32                    0 (const int)
+0:32              Constant:
+0:32                3 (const int)
+0:32            Sequence
+0:32              Constant:
+0:32                0 (const int)
+0:32              Constant:
+0:32                1 (const int)
+0:32              Constant:
+0:32                2 (const int)
+0:34      move second child to first child ( temp 4-component vector of uint)
+0:34        u: direct index for structure ( temp 4-component vector of uint)
+0:34          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:34            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:34              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:34              Constant:
+0:34                0 (const uint)
+0:34            direct index ( temp uint)
+0:34              'dti' ( in 3-component vector of uint)
+0:34              Constant:
+0:34                0 (const int)
+0:34          Constant:
+0:34            0 (const int)
+0:34        subgroupMul ( temp 4-component vector of uint)
+0:34          u: direct index for structure ( temp 4-component vector of uint)
+0:34            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:34              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:34                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:34                Constant:
+0:34                  0 (const uint)
+0:34              direct index ( temp uint)
+0:34                'dti' ( in 3-component vector of uint)
+0:34                Constant:
+0:34                  0 (const int)
+0:34            Constant:
+0:34              0 (const int)
+0:35      move second child to first child ( temp uint)
+0:35        direct index ( temp uint)
+0:35          u: direct index for structure ( temp 4-component vector of uint)
+0:35            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:35              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:35                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:35                Constant:
+0:35                  0 (const uint)
+0:35              direct index ( temp uint)
+0:35                'dti' ( in 3-component vector of uint)
+0:35                Constant:
+0:35                  0 (const int)
+0:35            Constant:
+0:35              0 (const int)
+0:35          Constant:
+0:35            0 (const int)
+0:35        subgroupMul ( temp uint)
+0:35          direct index ( temp uint)
+0:35            u: direct index for structure ( temp 4-component vector of uint)
+0:35              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:35                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:35                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:35                  Constant:
+0:35                    0 (const uint)
+0:35                direct index ( temp uint)
+0:35                  'dti' ( in 3-component vector of uint)
+0:35                  Constant:
+0:35                    0 (const int)
+0:35              Constant:
+0:35                0 (const int)
+0:35            Constant:
+0:35              0 (const int)
+0:36      move second child to first child ( temp 2-component vector of uint)
+0:36        vector swizzle ( temp 2-component vector of uint)
+0:36          u: direct index for structure ( temp 4-component vector of uint)
+0:36            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:36              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:36                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:36                Constant:
+0:36                  0 (const uint)
+0:36              direct index ( temp uint)
+0:36                'dti' ( in 3-component vector of uint)
+0:36                Constant:
+0:36                  0 (const int)
+0:36            Constant:
+0:36              0 (const int)
+0:36          Sequence
+0:36            Constant:
+0:36              0 (const int)
+0:36            Constant:
+0:36              1 (const int)
+0:36        subgroupMul ( temp 2-component vector of uint)
+0:36          vector swizzle ( temp 2-component vector of uint)
+0:36            u: direct index for structure ( temp 4-component vector of uint)
+0:36              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:36                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:36                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:36                  Constant:
+0:36                    0 (const uint)
+0:36                direct index ( temp uint)
+0:36                  'dti' ( in 3-component vector of uint)
+0:36                  Constant:
+0:36                    0 (const int)
+0:36              Constant:
+0:36                0 (const int)
+0:36            Sequence
+0:36              Constant:
+0:36                0 (const int)
+0:36              Constant:
+0:36                1 (const int)
+0:37      move second child to first child ( temp 3-component vector of uint)
+0:37        vector swizzle ( temp 3-component vector of uint)
+0:37          u: direct index for structure ( temp 4-component vector of uint)
+0:37            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:37              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:37                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:37                Constant:
+0:37                  0 (const uint)
+0:37              direct index ( temp uint)
+0:37                'dti' ( in 3-component vector of uint)
+0:37                Constant:
+0:37                  0 (const int)
+0:37            Constant:
+0:37              0 (const int)
+0:37          Sequence
+0:37            Constant:
+0:37              0 (const int)
+0:37            Constant:
+0:37              1 (const int)
+0:37            Constant:
+0:37              2 (const int)
+0:37        subgroupMul ( temp 3-component vector of uint)
+0:37          vector swizzle ( temp 3-component vector of uint)
+0:37            u: direct index for structure ( temp 4-component vector of uint)
+0:37              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:37                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:37                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:37                  Constant:
+0:37                    0 (const uint)
+0:37                direct index ( temp uint)
+0:37                  'dti' ( in 3-component vector of uint)
+0:37                  Constant:
+0:37                    0 (const int)
+0:37              Constant:
+0:37                0 (const int)
+0:37            Sequence
+0:37              Constant:
+0:37                0 (const int)
+0:37              Constant:
+0:37                1 (const int)
+0:37              Constant:
+0:37                2 (const int)
+0:39      move second child to first child ( temp 4-component vector of int)
+0:39        i: direct index for structure ( temp 4-component vector of int)
+0:39          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:39            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:39              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:39              Constant:
+0:39                0 (const uint)
+0:39            direct index ( temp uint)
+0:39              'dti' ( in 3-component vector of uint)
+0:39              Constant:
+0:39                0 (const int)
+0:39          Constant:
+0:39            1 (const int)
+0:39        subgroupMul ( temp 4-component vector of int)
+0:39          i: direct index for structure ( temp 4-component vector of int)
+0:39            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:39              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:39                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:39                Constant:
+0:39                  0 (const uint)
+0:39              direct index ( temp uint)
+0:39                'dti' ( in 3-component vector of uint)
+0:39                Constant:
+0:39                  0 (const int)
+0:39            Constant:
+0:39              1 (const int)
+0:40      move second child to first child ( temp int)
+0:40        direct index ( temp int)
+0:40          i: direct index for structure ( temp 4-component vector of int)
+0:40            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:40              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:40                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:40                Constant:
+0:40                  0 (const uint)
+0:40              direct index ( temp uint)
+0:40                'dti' ( in 3-component vector of uint)
+0:40                Constant:
+0:40                  0 (const int)
+0:40            Constant:
+0:40              1 (const int)
+0:40          Constant:
+0:40            0 (const int)
+0:40        subgroupMul ( temp int)
+0:40          direct index ( temp int)
+0:40            i: direct index for structure ( temp 4-component vector of int)
+0:40              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:40                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:40                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:40                  Constant:
+0:40                    0 (const uint)
+0:40                direct index ( temp uint)
+0:40                  'dti' ( in 3-component vector of uint)
+0:40                  Constant:
+0:40                    0 (const int)
+0:40              Constant:
+0:40                1 (const int)
+0:40            Constant:
+0:40              0 (const int)
+0:41      move second child to first child ( temp 2-component vector of int)
+0:41        vector swizzle ( temp 2-component vector of int)
+0:41          i: direct index for structure ( temp 4-component vector of int)
+0:41            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:41              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:41                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:41                Constant:
+0:41                  0 (const uint)
+0:41              direct index ( temp uint)
+0:41                'dti' ( in 3-component vector of uint)
+0:41                Constant:
+0:41                  0 (const int)
+0:41            Constant:
+0:41              1 (const int)
+0:41          Sequence
+0:41            Constant:
+0:41              0 (const int)
+0:41            Constant:
+0:41              1 (const int)
+0:41        subgroupMul ( temp 2-component vector of int)
+0:41          vector swizzle ( temp 2-component vector of int)
+0:41            i: direct index for structure ( temp 4-component vector of int)
+0:41              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:41                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:41                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:41                  Constant:
+0:41                    0 (const uint)
+0:41                direct index ( temp uint)
+0:41                  'dti' ( in 3-component vector of uint)
+0:41                  Constant:
+0:41                    0 (const int)
+0:41              Constant:
+0:41                1 (const int)
+0:41            Sequence
+0:41              Constant:
+0:41                0 (const int)
+0:41              Constant:
+0:41                1 (const int)
+0:42      move second child to first child ( temp 3-component vector of int)
+0:42        vector swizzle ( temp 3-component vector of int)
+0:42          i: direct index for structure ( temp 4-component vector of int)
+0:42            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:42              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:42                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:42                Constant:
+0:42                  0 (const uint)
+0:42              direct index ( temp uint)
+0:42                'dti' ( in 3-component vector of uint)
+0:42                Constant:
+0:42                  0 (const int)
+0:42            Constant:
+0:42              1 (const int)
+0:42          Sequence
+0:42            Constant:
+0:42              0 (const int)
+0:42            Constant:
+0:42              1 (const int)
+0:42            Constant:
+0:42              2 (const int)
+0:42        subgroupMul ( temp 3-component vector of int)
+0:42          vector swizzle ( temp 3-component vector of int)
+0:42            i: direct index for structure ( temp 4-component vector of int)
+0:42              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:42                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:42                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:42                  Constant:
+0:42                    0 (const uint)
+0:42                direct index ( temp uint)
+0:42                  'dti' ( in 3-component vector of uint)
+0:42                  Constant:
+0:42                    0 (const int)
+0:42              Constant:
+0:42                1 (const int)
+0:42            Sequence
+0:42              Constant:
+0:42                0 (const int)
+0:42              Constant:
+0:42                1 (const int)
+0:42              Constant:
+0:42                2 (const int)
+0:44      move second child to first child ( temp 4-component vector of float)
+0:44        f: direct index for structure ( temp 4-component vector of float)
+0:44          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:44            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:44              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:44              Constant:
+0:44                0 (const uint)
+0:44            direct index ( temp uint)
+0:44              'dti' ( in 3-component vector of uint)
+0:44              Constant:
+0:44                0 (const int)
+0:44          Constant:
+0:44            2 (const int)
+0:44        subgroupMul ( temp 4-component vector of float)
+0:44          f: direct index for structure ( temp 4-component vector of float)
+0:44            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:44              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:44                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:44                Constant:
+0:44                  0 (const uint)
+0:44              direct index ( temp uint)
+0:44                'dti' ( in 3-component vector of uint)
+0:44                Constant:
+0:44                  0 (const int)
+0:44            Constant:
+0:44              2 (const int)
+0:45      move second child to first child ( temp float)
+0:45        direct index ( temp float)
+0:45          f: direct index for structure ( temp 4-component vector of float)
+0:45            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:45              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:45                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:45                Constant:
+0:45                  0 (const uint)
+0:45              direct index ( temp uint)
+0:45                'dti' ( in 3-component vector of uint)
+0:45                Constant:
+0:45                  0 (const int)
+0:45            Constant:
+0:45              2 (const int)
+0:45          Constant:
+0:45            0 (const int)
+0:45        subgroupMul ( temp float)
+0:45          direct index ( temp float)
+0:45            f: direct index for structure ( temp 4-component vector of float)
+0:45              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:45                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:45                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:45                  Constant:
+0:45                    0 (const uint)
+0:45                direct index ( temp uint)
+0:45                  'dti' ( in 3-component vector of uint)
+0:45                  Constant:
+0:45                    0 (const int)
+0:45              Constant:
+0:45                2 (const int)
+0:45            Constant:
+0:45              0 (const int)
+0:46      move second child to first child ( temp 2-component vector of float)
+0:46        vector swizzle ( temp 2-component vector of float)
+0:46          f: direct index for structure ( temp 4-component vector of float)
+0:46            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:46              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:46                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:46                Constant:
+0:46                  0 (const uint)
+0:46              direct index ( temp uint)
+0:46                'dti' ( in 3-component vector of uint)
+0:46                Constant:
+0:46                  0 (const int)
+0:46            Constant:
+0:46              2 (const int)
+0:46          Sequence
+0:46            Constant:
+0:46              0 (const int)
+0:46            Constant:
+0:46              1 (const int)
+0:46        subgroupMul ( temp 2-component vector of float)
+0:46          vector swizzle ( temp 2-component vector of float)
+0:46            f: direct index for structure ( temp 4-component vector of float)
+0:46              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:46                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:46                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:46                  Constant:
+0:46                    0 (const uint)
+0:46                direct index ( temp uint)
+0:46                  'dti' ( in 3-component vector of uint)
+0:46                  Constant:
+0:46                    0 (const int)
+0:46              Constant:
+0:46                2 (const int)
+0:46            Sequence
+0:46              Constant:
+0:46                0 (const int)
+0:46              Constant:
+0:46                1 (const int)
+0:47      move second child to first child ( temp 3-component vector of float)
+0:47        vector swizzle ( temp 3-component vector of float)
+0:47          f: direct index for structure ( temp 4-component vector of float)
+0:47            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:47              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:47                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:47                Constant:
+0:47                  0 (const uint)
+0:47              direct index ( temp uint)
+0:47                'dti' ( in 3-component vector of uint)
+0:47                Constant:
+0:47                  0 (const int)
+0:47            Constant:
+0:47              2 (const int)
+0:47          Sequence
+0:47            Constant:
+0:47              0 (const int)
+0:47            Constant:
+0:47              1 (const int)
+0:47            Constant:
+0:47              2 (const int)
+0:47        subgroupMul ( temp 3-component vector of float)
+0:47          vector swizzle ( temp 3-component vector of float)
+0:47            f: direct index for structure ( temp 4-component vector of float)
+0:47              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:47                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:47                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:47                  Constant:
+0:47                    0 (const uint)
+0:47                direct index ( temp uint)
+0:47                  'dti' ( in 3-component vector of uint)
+0:47                  Constant:
+0:47                    0 (const int)
+0:47              Constant:
+0:47                2 (const int)
+0:47            Sequence
+0:47              Constant:
+0:47                0 (const int)
+0:47              Constant:
+0:47                1 (const int)
+0:47              Constant:
+0:47                2 (const int)
+0:49      move second child to first child ( temp 4-component vector of double)
+0:49        d: direct index for structure ( temp 4-component vector of double)
+0:49          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:49            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:49              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:49              Constant:
+0:49                0 (const uint)
+0:49            direct index ( temp uint)
+0:49              'dti' ( in 3-component vector of uint)
+0:49              Constant:
+0:49                0 (const int)
+0:49          Constant:
+0:49            3 (const int)
+0:49        subgroupMul ( temp 4-component vector of double)
+0:49          d: direct index for structure ( temp 4-component vector of double)
+0:49            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:49              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:49                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:49                Constant:
+0:49                  0 (const uint)
+0:49              direct index ( temp uint)
+0:49                'dti' ( in 3-component vector of uint)
+0:49                Constant:
+0:49                  0 (const int)
+0:49            Constant:
+0:49              3 (const int)
+0:50      move second child to first child ( temp double)
+0:50        direct index ( temp double)
+0:50          d: direct index for structure ( temp 4-component vector of double)
+0:50            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:50              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:50                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:50                Constant:
+0:50                  0 (const uint)
+0:50              direct index ( temp uint)
+0:50                'dti' ( in 3-component vector of uint)
+0:50                Constant:
+0:50                  0 (const int)
+0:50            Constant:
+0:50              3 (const int)
+0:50          Constant:
+0:50            0 (const int)
+0:50        subgroupMul ( temp double)
+0:50          direct index ( temp double)
+0:50            d: direct index for structure ( temp 4-component vector of double)
+0:50              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:50                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:50                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:50                  Constant:
+0:50                    0 (const uint)
+0:50                direct index ( temp uint)
+0:50                  'dti' ( in 3-component vector of uint)
+0:50                  Constant:
+0:50                    0 (const int)
+0:50              Constant:
+0:50                3 (const int)
+0:50            Constant:
+0:50              0 (const int)
+0:51      move second child to first child ( temp 2-component vector of double)
+0:51        vector swizzle ( temp 2-component vector of double)
+0:51          d: direct index for structure ( temp 4-component vector of double)
+0:51            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:51              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:51                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:51                Constant:
+0:51                  0 (const uint)
+0:51              direct index ( temp uint)
+0:51                'dti' ( in 3-component vector of uint)
+0:51                Constant:
+0:51                  0 (const int)
+0:51            Constant:
+0:51              3 (const int)
+0:51          Sequence
+0:51            Constant:
+0:51              0 (const int)
+0:51            Constant:
+0:51              1 (const int)
+0:51        subgroupMul ( temp 2-component vector of double)
+0:51          vector swizzle ( temp 2-component vector of double)
+0:51            d: direct index for structure ( temp 4-component vector of double)
+0:51              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:51                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:51                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:51                  Constant:
+0:51                    0 (const uint)
+0:51                direct index ( temp uint)
+0:51                  'dti' ( in 3-component vector of uint)
+0:51                  Constant:
+0:51                    0 (const int)
+0:51              Constant:
+0:51                3 (const int)
+0:51            Sequence
+0:51              Constant:
+0:51                0 (const int)
+0:51              Constant:
+0:51                1 (const int)
+0:52      move second child to first child ( temp 3-component vector of double)
+0:52        vector swizzle ( temp 3-component vector of double)
+0:52          d: direct index for structure ( temp 4-component vector of double)
+0:52            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:52              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:52                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:52                Constant:
+0:52                  0 (const uint)
+0:52              direct index ( temp uint)
+0:52                'dti' ( in 3-component vector of uint)
+0:52                Constant:
+0:52                  0 (const int)
+0:52            Constant:
+0:52              3 (const int)
+0:52          Sequence
+0:52            Constant:
+0:52              0 (const int)
+0:52            Constant:
+0:52              1 (const int)
+0:52            Constant:
+0:52              2 (const int)
+0:52        subgroupMul ( temp 3-component vector of double)
+0:52          vector swizzle ( temp 3-component vector of double)
+0:52            d: direct index for structure ( temp 4-component vector of double)
+0:52              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:52                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:52                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:52                  Constant:
+0:52                    0 (const uint)
+0:52                direct index ( temp uint)
+0:52                  'dti' ( in 3-component vector of uint)
+0:52                  Constant:
+0:52                    0 (const int)
+0:52              Constant:
+0:52                3 (const int)
+0:52            Sequence
+0:52              Constant:
+0:52                0 (const int)
+0:52              Constant:
+0:52                1 (const int)
+0:52              Constant:
+0:52                2 (const int)
+0:54      move second child to first child ( temp 4-component vector of uint)
+0:54        u: direct index for structure ( temp 4-component vector of uint)
+0:54          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:54            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:54              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:54              Constant:
+0:54                0 (const uint)
+0:54            direct index ( temp uint)
+0:54              'dti' ( in 3-component vector of uint)
+0:54              Constant:
+0:54                0 (const int)
+0:54          Constant:
+0:54            0 (const int)
+0:54        subgroupMin ( temp 4-component vector of uint)
+0:54          u: direct index for structure ( temp 4-component vector of uint)
+0:54            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:54              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:54                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:54                Constant:
+0:54                  0 (const uint)
+0:54              direct index ( temp uint)
+0:54                'dti' ( in 3-component vector of uint)
+0:54                Constant:
+0:54                  0 (const int)
+0:54            Constant:
+0:54              0 (const int)
+0:55      move second child to first child ( temp uint)
+0:55        direct index ( temp uint)
+0:55          u: direct index for structure ( temp 4-component vector of uint)
+0:55            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:55              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:55                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:55                Constant:
+0:55                  0 (const uint)
+0:55              direct index ( temp uint)
+0:55                'dti' ( in 3-component vector of uint)
+0:55                Constant:
+0:55                  0 (const int)
+0:55            Constant:
+0:55              0 (const int)
+0:55          Constant:
+0:55            0 (const int)
+0:55        subgroupMin ( temp uint)
+0:55          direct index ( temp uint)
+0:55            u: direct index for structure ( temp 4-component vector of uint)
+0:55              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:55                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:55                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:55                  Constant:
+0:55                    0 (const uint)
+0:55                direct index ( temp uint)
+0:55                  'dti' ( in 3-component vector of uint)
+0:55                  Constant:
+0:55                    0 (const int)
+0:55              Constant:
+0:55                0 (const int)
+0:55            Constant:
+0:55              0 (const int)
+0:56      move second child to first child ( temp 2-component vector of uint)
+0:56        vector swizzle ( temp 2-component vector of uint)
+0:56          u: direct index for structure ( temp 4-component vector of uint)
+0:56            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:56              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:56                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:56                Constant:
+0:56                  0 (const uint)
+0:56              direct index ( temp uint)
+0:56                'dti' ( in 3-component vector of uint)
+0:56                Constant:
+0:56                  0 (const int)
+0:56            Constant:
+0:56              0 (const int)
+0:56          Sequence
+0:56            Constant:
+0:56              0 (const int)
+0:56            Constant:
+0:56              1 (const int)
+0:56        subgroupMin ( temp 2-component vector of uint)
+0:56          vector swizzle ( temp 2-component vector of uint)
+0:56            u: direct index for structure ( temp 4-component vector of uint)
+0:56              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:56                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:56                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:56                  Constant:
+0:56                    0 (const uint)
+0:56                direct index ( temp uint)
+0:56                  'dti' ( in 3-component vector of uint)
+0:56                  Constant:
+0:56                    0 (const int)
+0:56              Constant:
+0:56                0 (const int)
+0:56            Sequence
+0:56              Constant:
+0:56                0 (const int)
+0:56              Constant:
+0:56                1 (const int)
+0:57      move second child to first child ( temp 3-component vector of uint)
+0:57        vector swizzle ( temp 3-component vector of uint)
+0:57          u: direct index for structure ( temp 4-component vector of uint)
+0:57            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:57              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:57                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:57                Constant:
+0:57                  0 (const uint)
+0:57              direct index ( temp uint)
+0:57                'dti' ( in 3-component vector of uint)
+0:57                Constant:
+0:57                  0 (const int)
+0:57            Constant:
+0:57              0 (const int)
+0:57          Sequence
+0:57            Constant:
+0:57              0 (const int)
+0:57            Constant:
+0:57              1 (const int)
+0:57            Constant:
+0:57              2 (const int)
+0:57        subgroupMin ( temp 3-component vector of uint)
+0:57          vector swizzle ( temp 3-component vector of uint)
+0:57            u: direct index for structure ( temp 4-component vector of uint)
+0:57              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:57                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:57                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:57                  Constant:
+0:57                    0 (const uint)
+0:57                direct index ( temp uint)
+0:57                  'dti' ( in 3-component vector of uint)
+0:57                  Constant:
+0:57                    0 (const int)
+0:57              Constant:
+0:57                0 (const int)
+0:57            Sequence
+0:57              Constant:
+0:57                0 (const int)
+0:57              Constant:
+0:57                1 (const int)
+0:57              Constant:
+0:57                2 (const int)
+0:59      move second child to first child ( temp 4-component vector of int)
+0:59        i: direct index for structure ( temp 4-component vector of int)
+0:59          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:59            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:59              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:59              Constant:
+0:59                0 (const uint)
+0:59            direct index ( temp uint)
+0:59              'dti' ( in 3-component vector of uint)
+0:59              Constant:
+0:59                0 (const int)
+0:59          Constant:
+0:59            1 (const int)
+0:59        subgroupMin ( temp 4-component vector of int)
+0:59          i: direct index for structure ( temp 4-component vector of int)
+0:59            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:59              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:59                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:59                Constant:
+0:59                  0 (const uint)
+0:59              direct index ( temp uint)
+0:59                'dti' ( in 3-component vector of uint)
+0:59                Constant:
+0:59                  0 (const int)
+0:59            Constant:
+0:59              1 (const int)
+0:60      move second child to first child ( temp int)
+0:60        direct index ( temp int)
+0:60          i: direct index for structure ( temp 4-component vector of int)
+0:60            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:60              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:60                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:60                Constant:
+0:60                  0 (const uint)
+0:60              direct index ( temp uint)
+0:60                'dti' ( in 3-component vector of uint)
+0:60                Constant:
+0:60                  0 (const int)
+0:60            Constant:
+0:60              1 (const int)
+0:60          Constant:
+0:60            0 (const int)
+0:60        subgroupMin ( temp int)
+0:60          direct index ( temp int)
+0:60            i: direct index for structure ( temp 4-component vector of int)
+0:60              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:60                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:60                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:60                  Constant:
+0:60                    0 (const uint)
+0:60                direct index ( temp uint)
+0:60                  'dti' ( in 3-component vector of uint)
+0:60                  Constant:
+0:60                    0 (const int)
+0:60              Constant:
+0:60                1 (const int)
+0:60            Constant:
+0:60              0 (const int)
+0:61      move second child to first child ( temp 2-component vector of int)
+0:61        vector swizzle ( temp 2-component vector of int)
+0:61          i: direct index for structure ( temp 4-component vector of int)
+0:61            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:61              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:61                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:61                Constant:
+0:61                  0 (const uint)
+0:61              direct index ( temp uint)
+0:61                'dti' ( in 3-component vector of uint)
+0:61                Constant:
+0:61                  0 (const int)
+0:61            Constant:
+0:61              1 (const int)
+0:61          Sequence
+0:61            Constant:
+0:61              0 (const int)
+0:61            Constant:
+0:61              1 (const int)
+0:61        subgroupMin ( temp 2-component vector of int)
+0:61          vector swizzle ( temp 2-component vector of int)
+0:61            i: direct index for structure ( temp 4-component vector of int)
+0:61              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:61                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:61                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:61                  Constant:
+0:61                    0 (const uint)
+0:61                direct index ( temp uint)
+0:61                  'dti' ( in 3-component vector of uint)
+0:61                  Constant:
+0:61                    0 (const int)
+0:61              Constant:
+0:61                1 (const int)
+0:61            Sequence
+0:61              Constant:
+0:61                0 (const int)
+0:61              Constant:
+0:61                1 (const int)
+0:62      move second child to first child ( temp 3-component vector of int)
+0:62        vector swizzle ( temp 3-component vector of int)
+0:62          i: direct index for structure ( temp 4-component vector of int)
+0:62            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:62              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:62                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:62                Constant:
+0:62                  0 (const uint)
+0:62              direct index ( temp uint)
+0:62                'dti' ( in 3-component vector of uint)
+0:62                Constant:
+0:62                  0 (const int)
+0:62            Constant:
+0:62              1 (const int)
+0:62          Sequence
+0:62            Constant:
+0:62              0 (const int)
+0:62            Constant:
+0:62              1 (const int)
+0:62            Constant:
+0:62              2 (const int)
+0:62        subgroupMin ( temp 3-component vector of int)
+0:62          vector swizzle ( temp 3-component vector of int)
+0:62            i: direct index for structure ( temp 4-component vector of int)
+0:62              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:62                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:62                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:62                  Constant:
+0:62                    0 (const uint)
+0:62                direct index ( temp uint)
+0:62                  'dti' ( in 3-component vector of uint)
+0:62                  Constant:
+0:62                    0 (const int)
+0:62              Constant:
+0:62                1 (const int)
+0:62            Sequence
+0:62              Constant:
+0:62                0 (const int)
+0:62              Constant:
+0:62                1 (const int)
+0:62              Constant:
+0:62                2 (const int)
+0:64      move second child to first child ( temp 4-component vector of float)
+0:64        f: direct index for structure ( temp 4-component vector of float)
+0:64          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:64            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:64              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:64              Constant:
+0:64                0 (const uint)
+0:64            direct index ( temp uint)
+0:64              'dti' ( in 3-component vector of uint)
+0:64              Constant:
+0:64                0 (const int)
+0:64          Constant:
+0:64            2 (const int)
+0:64        subgroupMin ( temp 4-component vector of float)
+0:64          f: direct index for structure ( temp 4-component vector of float)
+0:64            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:64              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:64                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:64                Constant:
+0:64                  0 (const uint)
+0:64              direct index ( temp uint)
+0:64                'dti' ( in 3-component vector of uint)
+0:64                Constant:
+0:64                  0 (const int)
+0:64            Constant:
+0:64              2 (const int)
+0:65      move second child to first child ( temp float)
+0:65        direct index ( temp float)
+0:65          f: direct index for structure ( temp 4-component vector of float)
+0:65            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:65              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:65                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:65                Constant:
+0:65                  0 (const uint)
+0:65              direct index ( temp uint)
+0:65                'dti' ( in 3-component vector of uint)
+0:65                Constant:
+0:65                  0 (const int)
+0:65            Constant:
+0:65              2 (const int)
+0:65          Constant:
+0:65            0 (const int)
+0:65        subgroupMin ( temp float)
+0:65          direct index ( temp float)
+0:65            f: direct index for structure ( temp 4-component vector of float)
+0:65              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:65                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:65                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:65                  Constant:
+0:65                    0 (const uint)
+0:65                direct index ( temp uint)
+0:65                  'dti' ( in 3-component vector of uint)
+0:65                  Constant:
+0:65                    0 (const int)
+0:65              Constant:
+0:65                2 (const int)
+0:65            Constant:
+0:65              0 (const int)
+0:66      move second child to first child ( temp 2-component vector of float)
+0:66        vector swizzle ( temp 2-component vector of float)
+0:66          f: direct index for structure ( temp 4-component vector of float)
+0:66            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:66              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:66                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:66                Constant:
+0:66                  0 (const uint)
+0:66              direct index ( temp uint)
+0:66                'dti' ( in 3-component vector of uint)
+0:66                Constant:
+0:66                  0 (const int)
+0:66            Constant:
+0:66              2 (const int)
+0:66          Sequence
+0:66            Constant:
+0:66              0 (const int)
+0:66            Constant:
+0:66              1 (const int)
+0:66        subgroupMin ( temp 2-component vector of float)
+0:66          vector swizzle ( temp 2-component vector of float)
+0:66            f: direct index for structure ( temp 4-component vector of float)
+0:66              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:66                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:66                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:66                  Constant:
+0:66                    0 (const uint)
+0:66                direct index ( temp uint)
+0:66                  'dti' ( in 3-component vector of uint)
+0:66                  Constant:
+0:66                    0 (const int)
+0:66              Constant:
+0:66                2 (const int)
+0:66            Sequence
+0:66              Constant:
+0:66                0 (const int)
+0:66              Constant:
+0:66                1 (const int)
+0:67      move second child to first child ( temp 3-component vector of float)
+0:67        vector swizzle ( temp 3-component vector of float)
+0:67          f: direct index for structure ( temp 4-component vector of float)
+0:67            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:67              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:67                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:67                Constant:
+0:67                  0 (const uint)
+0:67              direct index ( temp uint)
+0:67                'dti' ( in 3-component vector of uint)
+0:67                Constant:
+0:67                  0 (const int)
+0:67            Constant:
+0:67              2 (const int)
+0:67          Sequence
+0:67            Constant:
+0:67              0 (const int)
+0:67            Constant:
+0:67              1 (const int)
+0:67            Constant:
+0:67              2 (const int)
+0:67        subgroupMin ( temp 3-component vector of float)
+0:67          vector swizzle ( temp 3-component vector of float)
+0:67            f: direct index for structure ( temp 4-component vector of float)
+0:67              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:67                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:67                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:67                  Constant:
+0:67                    0 (const uint)
+0:67                direct index ( temp uint)
+0:67                  'dti' ( in 3-component vector of uint)
+0:67                  Constant:
+0:67                    0 (const int)
+0:67              Constant:
+0:67                2 (const int)
+0:67            Sequence
+0:67              Constant:
+0:67                0 (const int)
+0:67              Constant:
+0:67                1 (const int)
+0:67              Constant:
+0:67                2 (const int)
+0:69      move second child to first child ( temp 4-component vector of double)
+0:69        d: direct index for structure ( temp 4-component vector of double)
+0:69          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:69            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:69              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:69              Constant:
+0:69                0 (const uint)
+0:69            direct index ( temp uint)
+0:69              'dti' ( in 3-component vector of uint)
+0:69              Constant:
+0:69                0 (const int)
+0:69          Constant:
+0:69            3 (const int)
+0:69        subgroupMin ( temp 4-component vector of double)
+0:69          d: direct index for structure ( temp 4-component vector of double)
+0:69            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:69              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:69                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:69                Constant:
+0:69                  0 (const uint)
+0:69              direct index ( temp uint)
+0:69                'dti' ( in 3-component vector of uint)
+0:69                Constant:
+0:69                  0 (const int)
+0:69            Constant:
+0:69              3 (const int)
+0:70      move second child to first child ( temp double)
+0:70        direct index ( temp double)
+0:70          d: direct index for structure ( temp 4-component vector of double)
+0:70            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:70              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:70                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:70                Constant:
+0:70                  0 (const uint)
+0:70              direct index ( temp uint)
+0:70                'dti' ( in 3-component vector of uint)
+0:70                Constant:
+0:70                  0 (const int)
+0:70            Constant:
+0:70              3 (const int)
+0:70          Constant:
+0:70            0 (const int)
+0:70        subgroupMin ( temp double)
+0:70          direct index ( temp double)
+0:70            d: direct index for structure ( temp 4-component vector of double)
+0:70              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:70                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:70                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:70                  Constant:
+0:70                    0 (const uint)
+0:70                direct index ( temp uint)
+0:70                  'dti' ( in 3-component vector of uint)
+0:70                  Constant:
+0:70                    0 (const int)
+0:70              Constant:
+0:70                3 (const int)
+0:70            Constant:
+0:70              0 (const int)
+0:71      move second child to first child ( temp 2-component vector of double)
+0:71        vector swizzle ( temp 2-component vector of double)
+0:71          d: direct index for structure ( temp 4-component vector of double)
+0:71            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:71              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:71                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:71                Constant:
+0:71                  0 (const uint)
+0:71              direct index ( temp uint)
+0:71                'dti' ( in 3-component vector of uint)
+0:71                Constant:
+0:71                  0 (const int)
+0:71            Constant:
+0:71              3 (const int)
+0:71          Sequence
+0:71            Constant:
+0:71              0 (const int)
+0:71            Constant:
+0:71              1 (const int)
+0:71        subgroupMin ( temp 2-component vector of double)
+0:71          vector swizzle ( temp 2-component vector of double)
+0:71            d: direct index for structure ( temp 4-component vector of double)
+0:71              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:71                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:71                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:71                  Constant:
+0:71                    0 (const uint)
+0:71                direct index ( temp uint)
+0:71                  'dti' ( in 3-component vector of uint)
+0:71                  Constant:
+0:71                    0 (const int)
+0:71              Constant:
+0:71                3 (const int)
+0:71            Sequence
+0:71              Constant:
+0:71                0 (const int)
+0:71              Constant:
+0:71                1 (const int)
+0:72      move second child to first child ( temp 3-component vector of double)
+0:72        vector swizzle ( temp 3-component vector of double)
+0:72          d: direct index for structure ( temp 4-component vector of double)
+0:72            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:72              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:72                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:72                Constant:
+0:72                  0 (const uint)
+0:72              direct index ( temp uint)
+0:72                'dti' ( in 3-component vector of uint)
+0:72                Constant:
+0:72                  0 (const int)
+0:72            Constant:
+0:72              3 (const int)
+0:72          Sequence
+0:72            Constant:
+0:72              0 (const int)
+0:72            Constant:
+0:72              1 (const int)
+0:72            Constant:
+0:72              2 (const int)
+0:72        subgroupMin ( temp 3-component vector of double)
+0:72          vector swizzle ( temp 3-component vector of double)
+0:72            d: direct index for structure ( temp 4-component vector of double)
+0:72              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:72                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:72                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:72                  Constant:
+0:72                    0 (const uint)
+0:72                direct index ( temp uint)
+0:72                  'dti' ( in 3-component vector of uint)
+0:72                  Constant:
+0:72                    0 (const int)
+0:72              Constant:
+0:72                3 (const int)
+0:72            Sequence
+0:72              Constant:
+0:72                0 (const int)
+0:72              Constant:
+0:72                1 (const int)
+0:72              Constant:
+0:72                2 (const int)
+0:74      move second child to first child ( temp 4-component vector of uint)
+0:74        u: direct index for structure ( temp 4-component vector of uint)
+0:74          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:74            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:74              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:74              Constant:
+0:74                0 (const uint)
+0:74            direct index ( temp uint)
+0:74              'dti' ( in 3-component vector of uint)
+0:74              Constant:
+0:74                0 (const int)
+0:74          Constant:
+0:74            0 (const int)
+0:74        subgroupMax ( temp 4-component vector of uint)
+0:74          u: direct index for structure ( temp 4-component vector of uint)
+0:74            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:74              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:74                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:74                Constant:
+0:74                  0 (const uint)
+0:74              direct index ( temp uint)
+0:74                'dti' ( in 3-component vector of uint)
+0:74                Constant:
+0:74                  0 (const int)
+0:74            Constant:
+0:74              0 (const int)
+0:75      move second child to first child ( temp uint)
+0:75        direct index ( temp uint)
+0:75          u: direct index for structure ( temp 4-component vector of uint)
+0:75            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:75              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:75                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:75                Constant:
+0:75                  0 (const uint)
+0:75              direct index ( temp uint)
+0:75                'dti' ( in 3-component vector of uint)
+0:75                Constant:
+0:75                  0 (const int)
+0:75            Constant:
+0:75              0 (const int)
+0:75          Constant:
+0:75            0 (const int)
+0:75        subgroupMax ( temp uint)
+0:75          direct index ( temp uint)
+0:75            u: direct index for structure ( temp 4-component vector of uint)
+0:75              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:75                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:75                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:75                  Constant:
+0:75                    0 (const uint)
+0:75                direct index ( temp uint)
+0:75                  'dti' ( in 3-component vector of uint)
+0:75                  Constant:
+0:75                    0 (const int)
+0:75              Constant:
+0:75                0 (const int)
+0:75            Constant:
+0:75              0 (const int)
+0:76      move second child to first child ( temp 2-component vector of uint)
+0:76        vector swizzle ( temp 2-component vector of uint)
+0:76          u: direct index for structure ( temp 4-component vector of uint)
+0:76            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:76              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:76                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:76                Constant:
+0:76                  0 (const uint)
+0:76              direct index ( temp uint)
+0:76                'dti' ( in 3-component vector of uint)
+0:76                Constant:
+0:76                  0 (const int)
+0:76            Constant:
+0:76              0 (const int)
+0:76          Sequence
+0:76            Constant:
+0:76              0 (const int)
+0:76            Constant:
+0:76              1 (const int)
+0:76        subgroupMax ( temp 2-component vector of uint)
+0:76          vector swizzle ( temp 2-component vector of uint)
+0:76            u: direct index for structure ( temp 4-component vector of uint)
+0:76              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:76                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:76                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:76                  Constant:
+0:76                    0 (const uint)
+0:76                direct index ( temp uint)
+0:76                  'dti' ( in 3-component vector of uint)
+0:76                  Constant:
+0:76                    0 (const int)
+0:76              Constant:
+0:76                0 (const int)
+0:76            Sequence
+0:76              Constant:
+0:76                0 (const int)
+0:76              Constant:
+0:76                1 (const int)
+0:77      move second child to first child ( temp 3-component vector of uint)
+0:77        vector swizzle ( temp 3-component vector of uint)
+0:77          u: direct index for structure ( temp 4-component vector of uint)
+0:77            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:77              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:77                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:77                Constant:
+0:77                  0 (const uint)
+0:77              direct index ( temp uint)
+0:77                'dti' ( in 3-component vector of uint)
+0:77                Constant:
+0:77                  0 (const int)
+0:77            Constant:
+0:77              0 (const int)
+0:77          Sequence
+0:77            Constant:
+0:77              0 (const int)
+0:77            Constant:
+0:77              1 (const int)
+0:77            Constant:
+0:77              2 (const int)
+0:77        subgroupMax ( temp 3-component vector of uint)
+0:77          vector swizzle ( temp 3-component vector of uint)
+0:77            u: direct index for structure ( temp 4-component vector of uint)
+0:77              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:77                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:77                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:77                  Constant:
+0:77                    0 (const uint)
+0:77                direct index ( temp uint)
+0:77                  'dti' ( in 3-component vector of uint)
+0:77                  Constant:
+0:77                    0 (const int)
+0:77              Constant:
+0:77                0 (const int)
+0:77            Sequence
+0:77              Constant:
+0:77                0 (const int)
+0:77              Constant:
+0:77                1 (const int)
+0:77              Constant:
+0:77                2 (const int)
+0:79      move second child to first child ( temp 4-component vector of int)
+0:79        i: direct index for structure ( temp 4-component vector of int)
+0:79          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:79            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:79              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:79              Constant:
+0:79                0 (const uint)
+0:79            direct index ( temp uint)
+0:79              'dti' ( in 3-component vector of uint)
+0:79              Constant:
+0:79                0 (const int)
+0:79          Constant:
+0:79            1 (const int)
+0:79        subgroupMax ( temp 4-component vector of int)
+0:79          i: direct index for structure ( temp 4-component vector of int)
+0:79            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:79              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:79                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:79                Constant:
+0:79                  0 (const uint)
+0:79              direct index ( temp uint)
+0:79                'dti' ( in 3-component vector of uint)
+0:79                Constant:
+0:79                  0 (const int)
+0:79            Constant:
+0:79              1 (const int)
+0:80      move second child to first child ( temp int)
+0:80        direct index ( temp int)
+0:80          i: direct index for structure ( temp 4-component vector of int)
+0:80            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:80              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:80                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:80                Constant:
+0:80                  0 (const uint)
+0:80              direct index ( temp uint)
+0:80                'dti' ( in 3-component vector of uint)
+0:80                Constant:
+0:80                  0 (const int)
+0:80            Constant:
+0:80              1 (const int)
+0:80          Constant:
+0:80            0 (const int)
+0:80        subgroupMax ( temp int)
+0:80          direct index ( temp int)
+0:80            i: direct index for structure ( temp 4-component vector of int)
+0:80              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:80                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:80                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:80                  Constant:
+0:80                    0 (const uint)
+0:80                direct index ( temp uint)
+0:80                  'dti' ( in 3-component vector of uint)
+0:80                  Constant:
+0:80                    0 (const int)
+0:80              Constant:
+0:80                1 (const int)
+0:80            Constant:
+0:80              0 (const int)
+0:81      move second child to first child ( temp 2-component vector of int)
+0:81        vector swizzle ( temp 2-component vector of int)
+0:81          i: direct index for structure ( temp 4-component vector of int)
+0:81            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:81              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:81                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:81                Constant:
+0:81                  0 (const uint)
+0:81              direct index ( temp uint)
+0:81                'dti' ( in 3-component vector of uint)
+0:81                Constant:
+0:81                  0 (const int)
+0:81            Constant:
+0:81              1 (const int)
+0:81          Sequence
+0:81            Constant:
+0:81              0 (const int)
+0:81            Constant:
+0:81              1 (const int)
+0:81        subgroupMax ( temp 2-component vector of int)
+0:81          vector swizzle ( temp 2-component vector of int)
+0:81            i: direct index for structure ( temp 4-component vector of int)
+0:81              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:81                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:81                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:81                  Constant:
+0:81                    0 (const uint)
+0:81                direct index ( temp uint)
+0:81                  'dti' ( in 3-component vector of uint)
+0:81                  Constant:
+0:81                    0 (const int)
+0:81              Constant:
+0:81                1 (const int)
+0:81            Sequence
+0:81              Constant:
+0:81                0 (const int)
+0:81              Constant:
+0:81                1 (const int)
+0:82      move second child to first child ( temp 3-component vector of int)
+0:82        vector swizzle ( temp 3-component vector of int)
+0:82          i: direct index for structure ( temp 4-component vector of int)
+0:82            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:82              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:82                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:82                Constant:
+0:82                  0 (const uint)
+0:82              direct index ( temp uint)
+0:82                'dti' ( in 3-component vector of uint)
+0:82                Constant:
+0:82                  0 (const int)
+0:82            Constant:
+0:82              1 (const int)
+0:82          Sequence
+0:82            Constant:
+0:82              0 (const int)
+0:82            Constant:
+0:82              1 (const int)
+0:82            Constant:
+0:82              2 (const int)
+0:82        subgroupMax ( temp 3-component vector of int)
+0:82          vector swizzle ( temp 3-component vector of int)
+0:82            i: direct index for structure ( temp 4-component vector of int)
+0:82              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:82                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:82                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:82                  Constant:
+0:82                    0 (const uint)
+0:82                direct index ( temp uint)
+0:82                  'dti' ( in 3-component vector of uint)
+0:82                  Constant:
+0:82                    0 (const int)
+0:82              Constant:
+0:82                1 (const int)
+0:82            Sequence
+0:82              Constant:
+0:82                0 (const int)
+0:82              Constant:
+0:82                1 (const int)
+0:82              Constant:
+0:82                2 (const int)
+0:84      move second child to first child ( temp 4-component vector of float)
+0:84        f: direct index for structure ( temp 4-component vector of float)
+0:84          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:84            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:84              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:84              Constant:
+0:84                0 (const uint)
+0:84            direct index ( temp uint)
+0:84              'dti' ( in 3-component vector of uint)
+0:84              Constant:
+0:84                0 (const int)
+0:84          Constant:
+0:84            2 (const int)
+0:84        subgroupMax ( temp 4-component vector of float)
+0:84          f: direct index for structure ( temp 4-component vector of float)
+0:84            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:84              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:84                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:84                Constant:
+0:84                  0 (const uint)
+0:84              direct index ( temp uint)
+0:84                'dti' ( in 3-component vector of uint)
+0:84                Constant:
+0:84                  0 (const int)
+0:84            Constant:
+0:84              2 (const int)
+0:85      move second child to first child ( temp float)
+0:85        direct index ( temp float)
+0:85          f: direct index for structure ( temp 4-component vector of float)
+0:85            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:85              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:85                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:85                Constant:
+0:85                  0 (const uint)
+0:85              direct index ( temp uint)
+0:85                'dti' ( in 3-component vector of uint)
+0:85                Constant:
+0:85                  0 (const int)
+0:85            Constant:
+0:85              2 (const int)
+0:85          Constant:
+0:85            0 (const int)
+0:85        subgroupMax ( temp float)
+0:85          direct index ( temp float)
+0:85            f: direct index for structure ( temp 4-component vector of float)
+0:85              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:85                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:85                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:85                  Constant:
+0:85                    0 (const uint)
+0:85                direct index ( temp uint)
+0:85                  'dti' ( in 3-component vector of uint)
+0:85                  Constant:
+0:85                    0 (const int)
+0:85              Constant:
+0:85                2 (const int)
+0:85            Constant:
+0:85              0 (const int)
+0:86      move second child to first child ( temp 2-component vector of float)
+0:86        vector swizzle ( temp 2-component vector of float)
+0:86          f: direct index for structure ( temp 4-component vector of float)
+0:86            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:86              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:86                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:86                Constant:
+0:86                  0 (const uint)
+0:86              direct index ( temp uint)
+0:86                'dti' ( in 3-component vector of uint)
+0:86                Constant:
+0:86                  0 (const int)
+0:86            Constant:
+0:86              2 (const int)
+0:86          Sequence
+0:86            Constant:
+0:86              0 (const int)
+0:86            Constant:
+0:86              1 (const int)
+0:86        subgroupMax ( temp 2-component vector of float)
+0:86          vector swizzle ( temp 2-component vector of float)
+0:86            f: direct index for structure ( temp 4-component vector of float)
+0:86              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:86                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:86                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:86                  Constant:
+0:86                    0 (const uint)
+0:86                direct index ( temp uint)
+0:86                  'dti' ( in 3-component vector of uint)
+0:86                  Constant:
+0:86                    0 (const int)
+0:86              Constant:
+0:86                2 (const int)
+0:86            Sequence
+0:86              Constant:
+0:86                0 (const int)
+0:86              Constant:
+0:86                1 (const int)
+0:87      move second child to first child ( temp 3-component vector of float)
+0:87        vector swizzle ( temp 3-component vector of float)
+0:87          f: direct index for structure ( temp 4-component vector of float)
+0:87            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:87              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:87                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:87                Constant:
+0:87                  0 (const uint)
+0:87              direct index ( temp uint)
+0:87                'dti' ( in 3-component vector of uint)
+0:87                Constant:
+0:87                  0 (const int)
+0:87            Constant:
+0:87              2 (const int)
+0:87          Sequence
+0:87            Constant:
+0:87              0 (const int)
+0:87            Constant:
+0:87              1 (const int)
+0:87            Constant:
+0:87              2 (const int)
+0:87        subgroupMax ( temp 3-component vector of float)
+0:87          vector swizzle ( temp 3-component vector of float)
+0:87            f: direct index for structure ( temp 4-component vector of float)
+0:87              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:87                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:87                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:87                  Constant:
+0:87                    0 (const uint)
+0:87                direct index ( temp uint)
+0:87                  'dti' ( in 3-component vector of uint)
+0:87                  Constant:
+0:87                    0 (const int)
+0:87              Constant:
+0:87                2 (const int)
+0:87            Sequence
+0:87              Constant:
+0:87                0 (const int)
+0:87              Constant:
+0:87                1 (const int)
+0:87              Constant:
+0:87                2 (const int)
+0:89      move second child to first child ( temp 4-component vector of double)
+0:89        d: direct index for structure ( temp 4-component vector of double)
+0:89          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:89            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:89              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:89              Constant:
+0:89                0 (const uint)
+0:89            direct index ( temp uint)
+0:89              'dti' ( in 3-component vector of uint)
+0:89              Constant:
+0:89                0 (const int)
+0:89          Constant:
+0:89            3 (const int)
+0:89        subgroupMax ( temp 4-component vector of double)
+0:89          d: direct index for structure ( temp 4-component vector of double)
+0:89            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:89              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:89                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:89                Constant:
+0:89                  0 (const uint)
+0:89              direct index ( temp uint)
+0:89                'dti' ( in 3-component vector of uint)
+0:89                Constant:
+0:89                  0 (const int)
+0:89            Constant:
+0:89              3 (const int)
+0:90      move second child to first child ( temp double)
+0:90        direct index ( temp double)
+0:90          d: direct index for structure ( temp 4-component vector of double)
+0:90            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:90              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:90                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:90                Constant:
+0:90                  0 (const uint)
+0:90              direct index ( temp uint)
+0:90                'dti' ( in 3-component vector of uint)
+0:90                Constant:
+0:90                  0 (const int)
+0:90            Constant:
+0:90              3 (const int)
+0:90          Constant:
+0:90            0 (const int)
+0:90        subgroupMax ( temp double)
+0:90          direct index ( temp double)
+0:90            d: direct index for structure ( temp 4-component vector of double)
+0:90              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:90                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:90                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:90                  Constant:
+0:90                    0 (const uint)
+0:90                direct index ( temp uint)
+0:90                  'dti' ( in 3-component vector of uint)
+0:90                  Constant:
+0:90                    0 (const int)
+0:90              Constant:
+0:90                3 (const int)
+0:90            Constant:
+0:90              0 (const int)
+0:91      move second child to first child ( temp 2-component vector of double)
+0:91        vector swizzle ( temp 2-component vector of double)
+0:91          d: direct index for structure ( temp 4-component vector of double)
+0:91            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:91              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:91                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:91                Constant:
+0:91                  0 (const uint)
+0:91              direct index ( temp uint)
+0:91                'dti' ( in 3-component vector of uint)
+0:91                Constant:
+0:91                  0 (const int)
+0:91            Constant:
+0:91              3 (const int)
+0:91          Sequence
+0:91            Constant:
+0:91              0 (const int)
+0:91            Constant:
+0:91              1 (const int)
+0:91        subgroupMax ( temp 2-component vector of double)
+0:91          vector swizzle ( temp 2-component vector of double)
+0:91            d: direct index for structure ( temp 4-component vector of double)
+0:91              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:91                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:91                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:91                  Constant:
+0:91                    0 (const uint)
+0:91                direct index ( temp uint)
+0:91                  'dti' ( in 3-component vector of uint)
+0:91                  Constant:
+0:91                    0 (const int)
+0:91              Constant:
+0:91                3 (const int)
+0:91            Sequence
+0:91              Constant:
+0:91                0 (const int)
+0:91              Constant:
+0:91                1 (const int)
+0:92      move second child to first child ( temp 3-component vector of double)
+0:92        vector swizzle ( temp 3-component vector of double)
+0:92          d: direct index for structure ( temp 4-component vector of double)
+0:92            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:92              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:92                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:92                Constant:
+0:92                  0 (const uint)
+0:92              direct index ( temp uint)
+0:92                'dti' ( in 3-component vector of uint)
+0:92                Constant:
+0:92                  0 (const int)
+0:92            Constant:
+0:92              3 (const int)
+0:92          Sequence
+0:92            Constant:
+0:92              0 (const int)
+0:92            Constant:
+0:92              1 (const int)
+0:92            Constant:
+0:92              2 (const int)
+0:92        subgroupMax ( temp 3-component vector of double)
+0:92          vector swizzle ( temp 3-component vector of double)
+0:92            d: direct index for structure ( temp 4-component vector of double)
+0:92              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:92                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:92                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:92                  Constant:
+0:92                    0 (const uint)
+0:92                direct index ( temp uint)
+0:92                  'dti' ( in 3-component vector of uint)
+0:92                  Constant:
+0:92                    0 (const int)
+0:92              Constant:
+0:92                3 (const int)
+0:92            Sequence
+0:92              Constant:
+0:92                0 (const int)
+0:92              Constant:
+0:92                1 (const int)
+0:92              Constant:
+0:92                2 (const int)
+0:94      move second child to first child ( temp 4-component vector of uint)
+0:94        u: direct index for structure ( temp 4-component vector of uint)
+0:94          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:94            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:94              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:94              Constant:
+0:94                0 (const uint)
+0:94            direct index ( temp uint)
+0:94              'dti' ( in 3-component vector of uint)
+0:94              Constant:
+0:94                0 (const int)
+0:94          Constant:
+0:94            0 (const int)
+0:94        subgroupAnd ( temp 4-component vector of uint)
+0:94          u: direct index for structure ( temp 4-component vector of uint)
+0:94            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:94              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:94                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:94                Constant:
+0:94                  0 (const uint)
+0:94              direct index ( temp uint)
+0:94                'dti' ( in 3-component vector of uint)
+0:94                Constant:
+0:94                  0 (const int)
+0:94            Constant:
+0:94              0 (const int)
+0:95      move second child to first child ( temp uint)
+0:95        direct index ( temp uint)
+0:95          u: direct index for structure ( temp 4-component vector of uint)
+0:95            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:95              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:95                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:95                Constant:
+0:95                  0 (const uint)
+0:95              direct index ( temp uint)
+0:95                'dti' ( in 3-component vector of uint)
+0:95                Constant:
+0:95                  0 (const int)
+0:95            Constant:
+0:95              0 (const int)
+0:95          Constant:
+0:95            0 (const int)
+0:95        subgroupAnd ( temp uint)
+0:95          direct index ( temp uint)
+0:95            u: direct index for structure ( temp 4-component vector of uint)
+0:95              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:95                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:95                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:95                  Constant:
+0:95                    0 (const uint)
+0:95                direct index ( temp uint)
+0:95                  'dti' ( in 3-component vector of uint)
+0:95                  Constant:
+0:95                    0 (const int)
+0:95              Constant:
+0:95                0 (const int)
+0:95            Constant:
+0:95              0 (const int)
+0:96      move second child to first child ( temp 2-component vector of uint)
+0:96        vector swizzle ( temp 2-component vector of uint)
+0:96          u: direct index for structure ( temp 4-component vector of uint)
+0:96            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:96              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:96                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:96                Constant:
+0:96                  0 (const uint)
+0:96              direct index ( temp uint)
+0:96                'dti' ( in 3-component vector of uint)
+0:96                Constant:
+0:96                  0 (const int)
+0:96            Constant:
+0:96              0 (const int)
+0:96          Sequence
+0:96            Constant:
+0:96              0 (const int)
+0:96            Constant:
+0:96              1 (const int)
+0:96        subgroupAnd ( temp 2-component vector of uint)
+0:96          vector swizzle ( temp 2-component vector of uint)
+0:96            u: direct index for structure ( temp 4-component vector of uint)
+0:96              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:96                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:96                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:96                  Constant:
+0:96                    0 (const uint)
+0:96                direct index ( temp uint)
+0:96                  'dti' ( in 3-component vector of uint)
+0:96                  Constant:
+0:96                    0 (const int)
+0:96              Constant:
+0:96                0 (const int)
+0:96            Sequence
+0:96              Constant:
+0:96                0 (const int)
+0:96              Constant:
+0:96                1 (const int)
+0:97      move second child to first child ( temp 3-component vector of uint)
+0:97        vector swizzle ( temp 3-component vector of uint)
+0:97          u: direct index for structure ( temp 4-component vector of uint)
+0:97            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:97              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:97                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:97                Constant:
+0:97                  0 (const uint)
+0:97              direct index ( temp uint)
+0:97                'dti' ( in 3-component vector of uint)
+0:97                Constant:
+0:97                  0 (const int)
+0:97            Constant:
+0:97              0 (const int)
+0:97          Sequence
+0:97            Constant:
+0:97              0 (const int)
+0:97            Constant:
+0:97              1 (const int)
+0:97            Constant:
+0:97              2 (const int)
+0:97        subgroupAnd ( temp 3-component vector of uint)
+0:97          vector swizzle ( temp 3-component vector of uint)
+0:97            u: direct index for structure ( temp 4-component vector of uint)
+0:97              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:97                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:97                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:97                  Constant:
+0:97                    0 (const uint)
+0:97                direct index ( temp uint)
+0:97                  'dti' ( in 3-component vector of uint)
+0:97                  Constant:
+0:97                    0 (const int)
+0:97              Constant:
+0:97                0 (const int)
+0:97            Sequence
+0:97              Constant:
+0:97                0 (const int)
+0:97              Constant:
+0:97                1 (const int)
+0:97              Constant:
+0:97                2 (const int)
+0:99      move second child to first child ( temp 4-component vector of int)
+0:99        i: direct index for structure ( temp 4-component vector of int)
+0:99          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:99            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:99              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:99              Constant:
+0:99                0 (const uint)
+0:99            direct index ( temp uint)
+0:99              'dti' ( in 3-component vector of uint)
+0:99              Constant:
+0:99                0 (const int)
+0:99          Constant:
+0:99            1 (const int)
+0:99        subgroupAnd ( temp 4-component vector of int)
+0:99          i: direct index for structure ( temp 4-component vector of int)
+0:99            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:99              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:99                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:99                Constant:
+0:99                  0 (const uint)
+0:99              direct index ( temp uint)
+0:99                'dti' ( in 3-component vector of uint)
+0:99                Constant:
+0:99                  0 (const int)
+0:99            Constant:
+0:99              1 (const int)
+0:100      move second child to first child ( temp int)
+0:100        direct index ( temp int)
+0:100          i: direct index for structure ( temp 4-component vector of int)
+0:100            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:100              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:100                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:100                Constant:
+0:100                  0 (const uint)
+0:100              direct index ( temp uint)
+0:100                'dti' ( in 3-component vector of uint)
+0:100                Constant:
+0:100                  0 (const int)
+0:100            Constant:
+0:100              1 (const int)
+0:100          Constant:
+0:100            0 (const int)
+0:100        subgroupAnd ( temp int)
+0:100          direct index ( temp int)
+0:100            i: direct index for structure ( temp 4-component vector of int)
+0:100              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:100                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:100                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:100                  Constant:
+0:100                    0 (const uint)
+0:100                direct index ( temp uint)
+0:100                  'dti' ( in 3-component vector of uint)
+0:100                  Constant:
+0:100                    0 (const int)
+0:100              Constant:
+0:100                1 (const int)
+0:100            Constant:
+0:100              0 (const int)
+0:101      move second child to first child ( temp 2-component vector of int)
+0:101        vector swizzle ( temp 2-component vector of int)
+0:101          i: direct index for structure ( temp 4-component vector of int)
+0:101            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:101              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:101                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:101                Constant:
+0:101                  0 (const uint)
+0:101              direct index ( temp uint)
+0:101                'dti' ( in 3-component vector of uint)
+0:101                Constant:
+0:101                  0 (const int)
+0:101            Constant:
+0:101              1 (const int)
+0:101          Sequence
+0:101            Constant:
+0:101              0 (const int)
+0:101            Constant:
+0:101              1 (const int)
+0:101        subgroupAnd ( temp 2-component vector of int)
+0:101          vector swizzle ( temp 2-component vector of int)
+0:101            i: direct index for structure ( temp 4-component vector of int)
+0:101              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:101                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:101                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:101                  Constant:
+0:101                    0 (const uint)
+0:101                direct index ( temp uint)
+0:101                  'dti' ( in 3-component vector of uint)
+0:101                  Constant:
+0:101                    0 (const int)
+0:101              Constant:
+0:101                1 (const int)
+0:101            Sequence
+0:101              Constant:
+0:101                0 (const int)
+0:101              Constant:
+0:101                1 (const int)
+0:102      move second child to first child ( temp 3-component vector of int)
+0:102        vector swizzle ( temp 3-component vector of int)
+0:102          i: direct index for structure ( temp 4-component vector of int)
+0:102            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:102              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:102                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:102                Constant:
+0:102                  0 (const uint)
+0:102              direct index ( temp uint)
+0:102                'dti' ( in 3-component vector of uint)
+0:102                Constant:
+0:102                  0 (const int)
+0:102            Constant:
+0:102              1 (const int)
+0:102          Sequence
+0:102            Constant:
+0:102              0 (const int)
+0:102            Constant:
+0:102              1 (const int)
+0:102            Constant:
+0:102              2 (const int)
+0:102        subgroupAnd ( temp 3-component vector of int)
+0:102          vector swizzle ( temp 3-component vector of int)
+0:102            i: direct index for structure ( temp 4-component vector of int)
+0:102              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:102                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:102                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:102                  Constant:
+0:102                    0 (const uint)
+0:102                direct index ( temp uint)
+0:102                  'dti' ( in 3-component vector of uint)
+0:102                  Constant:
+0:102                    0 (const int)
+0:102              Constant:
+0:102                1 (const int)
+0:102            Sequence
+0:102              Constant:
+0:102                0 (const int)
+0:102              Constant:
+0:102                1 (const int)
+0:102              Constant:
+0:102                2 (const int)
+0:104      move second child to first child ( temp 4-component vector of uint)
+0:104        u: direct index for structure ( temp 4-component vector of uint)
+0:104          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:104            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:104              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:104              Constant:
+0:104                0 (const uint)
+0:104            direct index ( temp uint)
+0:104              'dti' ( in 3-component vector of uint)
+0:104              Constant:
+0:104                0 (const int)
+0:104          Constant:
+0:104            0 (const int)
+0:104        subgroupOr ( temp 4-component vector of uint)
+0:104          u: direct index for structure ( temp 4-component vector of uint)
+0:104            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:104              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:104                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:104                Constant:
+0:104                  0 (const uint)
+0:104              direct index ( temp uint)
+0:104                'dti' ( in 3-component vector of uint)
+0:104                Constant:
+0:104                  0 (const int)
+0:104            Constant:
+0:104              0 (const int)
+0:105      move second child to first child ( temp uint)
+0:105        direct index ( temp uint)
+0:105          u: direct index for structure ( temp 4-component vector of uint)
+0:105            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:105              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:105                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:105                Constant:
+0:105                  0 (const uint)
+0:105              direct index ( temp uint)
+0:105                'dti' ( in 3-component vector of uint)
+0:105                Constant:
+0:105                  0 (const int)
+0:105            Constant:
+0:105              0 (const int)
+0:105          Constant:
+0:105            0 (const int)
+0:105        subgroupOr ( temp uint)
+0:105          direct index ( temp uint)
+0:105            u: direct index for structure ( temp 4-component vector of uint)
+0:105              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:105                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:105                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:105                  Constant:
+0:105                    0 (const uint)
+0:105                direct index ( temp uint)
+0:105                  'dti' ( in 3-component vector of uint)
+0:105                  Constant:
+0:105                    0 (const int)
+0:105              Constant:
+0:105                0 (const int)
+0:105            Constant:
+0:105              0 (const int)
+0:106      move second child to first child ( temp 2-component vector of uint)
+0:106        vector swizzle ( temp 2-component vector of uint)
+0:106          u: direct index for structure ( temp 4-component vector of uint)
+0:106            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:106              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:106                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:106                Constant:
+0:106                  0 (const uint)
+0:106              direct index ( temp uint)
+0:106                'dti' ( in 3-component vector of uint)
+0:106                Constant:
+0:106                  0 (const int)
+0:106            Constant:
+0:106              0 (const int)
+0:106          Sequence
+0:106            Constant:
+0:106              0 (const int)
+0:106            Constant:
+0:106              1 (const int)
+0:106        subgroupOr ( temp 2-component vector of uint)
+0:106          vector swizzle ( temp 2-component vector of uint)
+0:106            u: direct index for structure ( temp 4-component vector of uint)
+0:106              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:106                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:106                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:106                  Constant:
+0:106                    0 (const uint)
+0:106                direct index ( temp uint)
+0:106                  'dti' ( in 3-component vector of uint)
+0:106                  Constant:
+0:106                    0 (const int)
+0:106              Constant:
+0:106                0 (const int)
+0:106            Sequence
+0:106              Constant:
+0:106                0 (const int)
+0:106              Constant:
+0:106                1 (const int)
+0:107      move second child to first child ( temp 3-component vector of uint)
+0:107        vector swizzle ( temp 3-component vector of uint)
+0:107          u: direct index for structure ( temp 4-component vector of uint)
+0:107            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:107              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:107                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:107                Constant:
+0:107                  0 (const uint)
+0:107              direct index ( temp uint)
+0:107                'dti' ( in 3-component vector of uint)
+0:107                Constant:
+0:107                  0 (const int)
+0:107            Constant:
+0:107              0 (const int)
+0:107          Sequence
+0:107            Constant:
+0:107              0 (const int)
+0:107            Constant:
+0:107              1 (const int)
+0:107            Constant:
+0:107              2 (const int)
+0:107        subgroupOr ( temp 3-component vector of uint)
+0:107          vector swizzle ( temp 3-component vector of uint)
+0:107            u: direct index for structure ( temp 4-component vector of uint)
+0:107              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:107                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:107                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:107                  Constant:
+0:107                    0 (const uint)
+0:107                direct index ( temp uint)
+0:107                  'dti' ( in 3-component vector of uint)
+0:107                  Constant:
+0:107                    0 (const int)
+0:107              Constant:
+0:107                0 (const int)
+0:107            Sequence
+0:107              Constant:
+0:107                0 (const int)
+0:107              Constant:
+0:107                1 (const int)
+0:107              Constant:
+0:107                2 (const int)
+0:109      move second child to first child ( temp 4-component vector of int)
+0:109        i: direct index for structure ( temp 4-component vector of int)
+0:109          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:109            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:109              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:109              Constant:
+0:109                0 (const uint)
+0:109            direct index ( temp uint)
+0:109              'dti' ( in 3-component vector of uint)
+0:109              Constant:
+0:109                0 (const int)
+0:109          Constant:
+0:109            1 (const int)
+0:109        subgroupOr ( temp 4-component vector of int)
+0:109          i: direct index for structure ( temp 4-component vector of int)
+0:109            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:109              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:109                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:109                Constant:
+0:109                  0 (const uint)
+0:109              direct index ( temp uint)
+0:109                'dti' ( in 3-component vector of uint)
+0:109                Constant:
+0:109                  0 (const int)
+0:109            Constant:
+0:109              1 (const int)
+0:110      move second child to first child ( temp int)
+0:110        direct index ( temp int)
+0:110          i: direct index for structure ( temp 4-component vector of int)
+0:110            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:110              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:110                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:110                Constant:
+0:110                  0 (const uint)
+0:110              direct index ( temp uint)
+0:110                'dti' ( in 3-component vector of uint)
+0:110                Constant:
+0:110                  0 (const int)
+0:110            Constant:
+0:110              1 (const int)
+0:110          Constant:
+0:110            0 (const int)
+0:110        subgroupOr ( temp int)
+0:110          direct index ( temp int)
+0:110            i: direct index for structure ( temp 4-component vector of int)
+0:110              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:110                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:110                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:110                  Constant:
+0:110                    0 (const uint)
+0:110                direct index ( temp uint)
+0:110                  'dti' ( in 3-component vector of uint)
+0:110                  Constant:
+0:110                    0 (const int)
+0:110              Constant:
+0:110                1 (const int)
+0:110            Constant:
+0:110              0 (const int)
+0:111      move second child to first child ( temp 2-component vector of int)
+0:111        vector swizzle ( temp 2-component vector of int)
+0:111          i: direct index for structure ( temp 4-component vector of int)
+0:111            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:111              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:111                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:111                Constant:
+0:111                  0 (const uint)
+0:111              direct index ( temp uint)
+0:111                'dti' ( in 3-component vector of uint)
+0:111                Constant:
+0:111                  0 (const int)
+0:111            Constant:
+0:111              1 (const int)
+0:111          Sequence
+0:111            Constant:
+0:111              0 (const int)
+0:111            Constant:
+0:111              1 (const int)
+0:111        subgroupOr ( temp 2-component vector of int)
+0:111          vector swizzle ( temp 2-component vector of int)
+0:111            i: direct index for structure ( temp 4-component vector of int)
+0:111              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:111                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:111                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:111                  Constant:
+0:111                    0 (const uint)
+0:111                direct index ( temp uint)
+0:111                  'dti' ( in 3-component vector of uint)
+0:111                  Constant:
+0:111                    0 (const int)
+0:111              Constant:
+0:111                1 (const int)
+0:111            Sequence
+0:111              Constant:
+0:111                0 (const int)
+0:111              Constant:
+0:111                1 (const int)
+0:112      move second child to first child ( temp 3-component vector of int)
+0:112        vector swizzle ( temp 3-component vector of int)
+0:112          i: direct index for structure ( temp 4-component vector of int)
+0:112            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:112              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:112                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:112                Constant:
+0:112                  0 (const uint)
+0:112              direct index ( temp uint)
+0:112                'dti' ( in 3-component vector of uint)
+0:112                Constant:
+0:112                  0 (const int)
+0:112            Constant:
+0:112              1 (const int)
+0:112          Sequence
+0:112            Constant:
+0:112              0 (const int)
+0:112            Constant:
+0:112              1 (const int)
+0:112            Constant:
+0:112              2 (const int)
+0:112        subgroupOr ( temp 3-component vector of int)
+0:112          vector swizzle ( temp 3-component vector of int)
+0:112            i: direct index for structure ( temp 4-component vector of int)
+0:112              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:112                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:112                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:112                  Constant:
+0:112                    0 (const uint)
+0:112                direct index ( temp uint)
+0:112                  'dti' ( in 3-component vector of uint)
+0:112                  Constant:
+0:112                    0 (const int)
+0:112              Constant:
+0:112                1 (const int)
+0:112            Sequence
+0:112              Constant:
+0:112                0 (const int)
+0:112              Constant:
+0:112                1 (const int)
+0:112              Constant:
+0:112                2 (const int)
+0:114      move second child to first child ( temp 4-component vector of uint)
+0:114        u: direct index for structure ( temp 4-component vector of uint)
+0:114          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:114            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:114              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:114              Constant:
+0:114                0 (const uint)
+0:114            direct index ( temp uint)
+0:114              'dti' ( in 3-component vector of uint)
+0:114              Constant:
+0:114                0 (const int)
+0:114          Constant:
+0:114            0 (const int)
+0:114        subgroupXor ( temp 4-component vector of uint)
+0:114          u: direct index for structure ( temp 4-component vector of uint)
+0:114            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:114              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:114                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:114                Constant:
+0:114                  0 (const uint)
+0:114              direct index ( temp uint)
+0:114                'dti' ( in 3-component vector of uint)
+0:114                Constant:
+0:114                  0 (const int)
+0:114            Constant:
+0:114              0 (const int)
+0:115      move second child to first child ( temp uint)
+0:115        direct index ( temp uint)
+0:115          u: direct index for structure ( temp 4-component vector of uint)
+0:115            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:115              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:115                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:115                Constant:
+0:115                  0 (const uint)
+0:115              direct index ( temp uint)
+0:115                'dti' ( in 3-component vector of uint)
+0:115                Constant:
+0:115                  0 (const int)
+0:115            Constant:
+0:115              0 (const int)
+0:115          Constant:
+0:115            0 (const int)
+0:115        subgroupXor ( temp uint)
+0:115          direct index ( temp uint)
+0:115            u: direct index for structure ( temp 4-component vector of uint)
+0:115              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:115                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:115                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:115                  Constant:
+0:115                    0 (const uint)
+0:115                direct index ( temp uint)
+0:115                  'dti' ( in 3-component vector of uint)
+0:115                  Constant:
+0:115                    0 (const int)
+0:115              Constant:
+0:115                0 (const int)
+0:115            Constant:
+0:115              0 (const int)
+0:116      move second child to first child ( temp 2-component vector of uint)
+0:116        vector swizzle ( temp 2-component vector of uint)
+0:116          u: direct index for structure ( temp 4-component vector of uint)
+0:116            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:116              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:116                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:116                Constant:
+0:116                  0 (const uint)
+0:116              direct index ( temp uint)
+0:116                'dti' ( in 3-component vector of uint)
+0:116                Constant:
+0:116                  0 (const int)
+0:116            Constant:
+0:116              0 (const int)
+0:116          Sequence
+0:116            Constant:
+0:116              0 (const int)
+0:116            Constant:
+0:116              1 (const int)
+0:116        subgroupXor ( temp 2-component vector of uint)
+0:116          vector swizzle ( temp 2-component vector of uint)
+0:116            u: direct index for structure ( temp 4-component vector of uint)
+0:116              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:116                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:116                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:116                  Constant:
+0:116                    0 (const uint)
+0:116                direct index ( temp uint)
+0:116                  'dti' ( in 3-component vector of uint)
+0:116                  Constant:
+0:116                    0 (const int)
+0:116              Constant:
+0:116                0 (const int)
+0:116            Sequence
+0:116              Constant:
+0:116                0 (const int)
+0:116              Constant:
+0:116                1 (const int)
+0:117      move second child to first child ( temp 3-component vector of uint)
+0:117        vector swizzle ( temp 3-component vector of uint)
+0:117          u: direct index for structure ( temp 4-component vector of uint)
+0:117            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:117              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:117                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:117                Constant:
+0:117                  0 (const uint)
+0:117              direct index ( temp uint)
+0:117                'dti' ( in 3-component vector of uint)
+0:117                Constant:
+0:117                  0 (const int)
+0:117            Constant:
+0:117              0 (const int)
+0:117          Sequence
+0:117            Constant:
+0:117              0 (const int)
+0:117            Constant:
+0:117              1 (const int)
+0:117            Constant:
+0:117              2 (const int)
+0:117        subgroupXor ( temp 3-component vector of uint)
+0:117          vector swizzle ( temp 3-component vector of uint)
+0:117            u: direct index for structure ( temp 4-component vector of uint)
+0:117              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:117                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:117                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:117                  Constant:
+0:117                    0 (const uint)
+0:117                direct index ( temp uint)
+0:117                  'dti' ( in 3-component vector of uint)
+0:117                  Constant:
+0:117                    0 (const int)
+0:117              Constant:
+0:117                0 (const int)
+0:117            Sequence
+0:117              Constant:
+0:117                0 (const int)
+0:117              Constant:
+0:117                1 (const int)
+0:117              Constant:
+0:117                2 (const int)
+0:119      move second child to first child ( temp 4-component vector of int)
+0:119        i: direct index for structure ( temp 4-component vector of int)
+0:119          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:119            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:119              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:119              Constant:
+0:119                0 (const uint)
+0:119            direct index ( temp uint)
+0:119              'dti' ( in 3-component vector of uint)
+0:119              Constant:
+0:119                0 (const int)
+0:119          Constant:
+0:119            1 (const int)
+0:119        subgroupXor ( temp 4-component vector of int)
+0:119          i: direct index for structure ( temp 4-component vector of int)
+0:119            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:119              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:119                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:119                Constant:
+0:119                  0 (const uint)
+0:119              direct index ( temp uint)
+0:119                'dti' ( in 3-component vector of uint)
+0:119                Constant:
+0:119                  0 (const int)
+0:119            Constant:
+0:119              1 (const int)
+0:120      move second child to first child ( temp int)
+0:120        direct index ( temp int)
+0:120          i: direct index for structure ( temp 4-component vector of int)
+0:120            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:120              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:120                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:120                Constant:
+0:120                  0 (const uint)
+0:120              direct index ( temp uint)
+0:120                'dti' ( in 3-component vector of uint)
+0:120                Constant:
+0:120                  0 (const int)
+0:120            Constant:
+0:120              1 (const int)
+0:120          Constant:
+0:120            0 (const int)
+0:120        subgroupXor ( temp int)
+0:120          direct index ( temp int)
+0:120            i: direct index for structure ( temp 4-component vector of int)
+0:120              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:120                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:120                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:120                  Constant:
+0:120                    0 (const uint)
+0:120                direct index ( temp uint)
+0:120                  'dti' ( in 3-component vector of uint)
+0:120                  Constant:
+0:120                    0 (const int)
+0:120              Constant:
+0:120                1 (const int)
+0:120            Constant:
+0:120              0 (const int)
+0:121      move second child to first child ( temp 2-component vector of int)
+0:121        vector swizzle ( temp 2-component vector of int)
+0:121          i: direct index for structure ( temp 4-component vector of int)
+0:121            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:121              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:121                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:121                Constant:
+0:121                  0 (const uint)
+0:121              direct index ( temp uint)
+0:121                'dti' ( in 3-component vector of uint)
+0:121                Constant:
+0:121                  0 (const int)
+0:121            Constant:
+0:121              1 (const int)
+0:121          Sequence
+0:121            Constant:
+0:121              0 (const int)
+0:121            Constant:
+0:121              1 (const int)
+0:121        subgroupXor ( temp 2-component vector of int)
+0:121          vector swizzle ( temp 2-component vector of int)
+0:121            i: direct index for structure ( temp 4-component vector of int)
+0:121              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:121                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:121                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:121                  Constant:
+0:121                    0 (const uint)
+0:121                direct index ( temp uint)
+0:121                  'dti' ( in 3-component vector of uint)
+0:121                  Constant:
+0:121                    0 (const int)
+0:121              Constant:
+0:121                1 (const int)
+0:121            Sequence
+0:121              Constant:
+0:121                0 (const int)
+0:121              Constant:
+0:121                1 (const int)
+0:122      move second child to first child ( temp 3-component vector of int)
+0:122        vector swizzle ( temp 3-component vector of int)
+0:122          i: direct index for structure ( temp 4-component vector of int)
+0:122            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:122              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:122                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:122                Constant:
+0:122                  0 (const uint)
+0:122              direct index ( temp uint)
+0:122                'dti' ( in 3-component vector of uint)
+0:122                Constant:
+0:122                  0 (const int)
+0:122            Constant:
+0:122              1 (const int)
+0:122          Sequence
+0:122            Constant:
+0:122              0 (const int)
+0:122            Constant:
+0:122              1 (const int)
+0:122            Constant:
+0:122              2 (const int)
+0:122        subgroupXor ( temp 3-component vector of int)
+0:122          vector swizzle ( temp 3-component vector of int)
+0:122            i: direct index for structure ( temp 4-component vector of int)
+0:122              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:122                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:122                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:122                  Constant:
+0:122                    0 (const uint)
+0:122                direct index ( temp uint)
+0:122                  'dti' ( in 3-component vector of uint)
+0:122                  Constant:
+0:122                    0 (const int)
+0:122              Constant:
+0:122                1 (const int)
+0:122            Sequence
+0:122              Constant:
+0:122                0 (const int)
+0:122              Constant:
+0:122                1 (const int)
+0:122              Constant:
+0:122                2 (const int)
+0:124      move second child to first child ( temp uint)
+0:124        direct index ( temp uint)
+0:124          u: direct index for structure ( temp 4-component vector of uint)
+0:124            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:124              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:124                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:124                Constant:
+0:124                  0 (const uint)
+0:124              direct index ( temp uint)
+0:124                'dti' ( in 3-component vector of uint)
+0:124                Constant:
+0:124                  0 (const int)
+0:124            Constant:
+0:124              0 (const int)
+0:124          Constant:
+0:124            0 (const int)
+0:124        subgroupBallotBitCount ( temp uint)
+0:124          subgroupBallot ( temp 4-component vector of uint)
+0:124            Compare Equal ( temp bool)
+0:124              direct index ( temp uint)
+0:124                u: direct index for structure ( temp 4-component vector of uint)
+0:124                  indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:124                    @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:124                      'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:124                      Constant:
+0:124                        0 (const uint)
+0:124                    direct index ( temp uint)
+0:124                      'dti' ( in 3-component vector of uint)
+0:124                      Constant:
+0:124                        0 (const int)
+0:124                  Constant:
+0:124                    0 (const int)
+0:124                Constant:
+0:124                  0 (const int)
+0:124              Constant:
+0:124                0 (const uint)
+0:13  Function Definition: CSMain( ( temp void)
+0:13    Function Parameters: 
+0:?     Sequence
+0:13      move second child to first child ( temp 3-component vector of uint)
+0:?         'dti' ( temp 3-component vector of uint)
+0:?         'dti' ( in 3-component vector of uint GlobalInvocationID)
+0:13      Function Call: @CSMain(vu3; ( temp void)
+0:?         'dti' ( temp 3-component vector of uint)
+0:?   Linker Objects
+0:?     'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:?     'dti' ( in 3-component vector of uint GlobalInvocationID)
+
+
+Linked compute stage:
+
+
+Shader version: 500
+local_size = (32, 16, 1)
+0:? Sequence
+0:13  Function Definition: @CSMain(vu3; ( temp void)
+0:13    Function Parameters: 
+0:13      'dti' ( in 3-component vector of uint)
+0:?     Sequence
+0:14      move second child to first child ( temp 4-component vector of uint)
+0:14        u: direct index for structure ( temp 4-component vector of uint)
+0:14          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:14            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:14              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:14              Constant:
+0:14                0 (const uint)
+0:14            direct index ( temp uint)
+0:14              'dti' ( in 3-component vector of uint)
+0:14              Constant:
+0:14                0 (const int)
+0:14          Constant:
+0:14            0 (const int)
+0:14        subgroupAdd ( temp 4-component vector of uint)
+0:14          u: direct index for structure ( temp 4-component vector of uint)
+0:14            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:14              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:14                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:14                Constant:
+0:14                  0 (const uint)
+0:14              direct index ( temp uint)
+0:14                'dti' ( in 3-component vector of uint)
+0:14                Constant:
+0:14                  0 (const int)
+0:14            Constant:
+0:14              0 (const int)
+0:15      move second child to first child ( temp uint)
+0:15        direct index ( temp uint)
+0:15          u: direct index for structure ( temp 4-component vector of uint)
+0:15            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:15              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:15                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:15                Constant:
+0:15                  0 (const uint)
+0:15              direct index ( temp uint)
+0:15                'dti' ( in 3-component vector of uint)
+0:15                Constant:
+0:15                  0 (const int)
+0:15            Constant:
+0:15              0 (const int)
+0:15          Constant:
+0:15            0 (const int)
+0:15        subgroupAdd ( temp uint)
+0:15          direct index ( temp uint)
+0:15            u: direct index for structure ( temp 4-component vector of uint)
+0:15              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:15                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:15                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:15                  Constant:
+0:15                    0 (const uint)
+0:15                direct index ( temp uint)
+0:15                  'dti' ( in 3-component vector of uint)
+0:15                  Constant:
+0:15                    0 (const int)
+0:15              Constant:
+0:15                0 (const int)
+0:15            Constant:
+0:15              0 (const int)
+0:16      move second child to first child ( temp 2-component vector of uint)
+0:16        vector swizzle ( temp 2-component vector of uint)
+0:16          u: direct index for structure ( temp 4-component vector of uint)
+0:16            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:16              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:16                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:16                Constant:
+0:16                  0 (const uint)
+0:16              direct index ( temp uint)
+0:16                'dti' ( in 3-component vector of uint)
+0:16                Constant:
+0:16                  0 (const int)
+0:16            Constant:
+0:16              0 (const int)
+0:16          Sequence
+0:16            Constant:
+0:16              0 (const int)
+0:16            Constant:
+0:16              1 (const int)
+0:16        subgroupAdd ( temp 2-component vector of uint)
+0:16          vector swizzle ( temp 2-component vector of uint)
+0:16            u: direct index for structure ( temp 4-component vector of uint)
+0:16              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:16                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:16                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:16                  Constant:
+0:16                    0 (const uint)
+0:16                direct index ( temp uint)
+0:16                  'dti' ( in 3-component vector of uint)
+0:16                  Constant:
+0:16                    0 (const int)
+0:16              Constant:
+0:16                0 (const int)
+0:16            Sequence
+0:16              Constant:
+0:16                0 (const int)
+0:16              Constant:
+0:16                1 (const int)
+0:17      move second child to first child ( temp 3-component vector of uint)
+0:17        vector swizzle ( temp 3-component vector of uint)
+0:17          u: direct index for structure ( temp 4-component vector of uint)
+0:17            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:17              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:17                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:17                Constant:
+0:17                  0 (const uint)
+0:17              direct index ( temp uint)
+0:17                'dti' ( in 3-component vector of uint)
+0:17                Constant:
+0:17                  0 (const int)
+0:17            Constant:
+0:17              0 (const int)
+0:17          Sequence
+0:17            Constant:
+0:17              0 (const int)
+0:17            Constant:
+0:17              1 (const int)
+0:17            Constant:
+0:17              2 (const int)
+0:17        subgroupAdd ( temp 3-component vector of uint)
+0:17          vector swizzle ( temp 3-component vector of uint)
+0:17            u: direct index for structure ( temp 4-component vector of uint)
+0:17              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:17                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:17                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:17                  Constant:
+0:17                    0 (const uint)
+0:17                direct index ( temp uint)
+0:17                  'dti' ( in 3-component vector of uint)
+0:17                  Constant:
+0:17                    0 (const int)
+0:17              Constant:
+0:17                0 (const int)
+0:17            Sequence
+0:17              Constant:
+0:17                0 (const int)
+0:17              Constant:
+0:17                1 (const int)
+0:17              Constant:
+0:17                2 (const int)
+0:19      move second child to first child ( temp 4-component vector of int)
+0:19        i: direct index for structure ( temp 4-component vector of int)
+0:19          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:19            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:19              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:19              Constant:
+0:19                0 (const uint)
+0:19            direct index ( temp uint)
+0:19              'dti' ( in 3-component vector of uint)
+0:19              Constant:
+0:19                0 (const int)
+0:19          Constant:
+0:19            1 (const int)
+0:19        subgroupAdd ( temp 4-component vector of int)
+0:19          i: direct index for structure ( temp 4-component vector of int)
+0:19            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:19              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:19                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:19                Constant:
+0:19                  0 (const uint)
+0:19              direct index ( temp uint)
+0:19                'dti' ( in 3-component vector of uint)
+0:19                Constant:
+0:19                  0 (const int)
+0:19            Constant:
+0:19              1 (const int)
+0:20      move second child to first child ( temp int)
+0:20        direct index ( temp int)
+0:20          i: direct index for structure ( temp 4-component vector of int)
+0:20            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:20              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:20                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:20                Constant:
+0:20                  0 (const uint)
+0:20              direct index ( temp uint)
+0:20                'dti' ( in 3-component vector of uint)
+0:20                Constant:
+0:20                  0 (const int)
+0:20            Constant:
+0:20              1 (const int)
+0:20          Constant:
+0:20            0 (const int)
+0:20        subgroupAdd ( temp int)
+0:20          direct index ( temp int)
+0:20            i: direct index for structure ( temp 4-component vector of int)
+0:20              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:20                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:20                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:20                  Constant:
+0:20                    0 (const uint)
+0:20                direct index ( temp uint)
+0:20                  'dti' ( in 3-component vector of uint)
+0:20                  Constant:
+0:20                    0 (const int)
+0:20              Constant:
+0:20                1 (const int)
+0:20            Constant:
+0:20              0 (const int)
+0:21      move second child to first child ( temp 2-component vector of int)
+0:21        vector swizzle ( temp 2-component vector of int)
+0:21          i: direct index for structure ( temp 4-component vector of int)
+0:21            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:21              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:21                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:21                Constant:
+0:21                  0 (const uint)
+0:21              direct index ( temp uint)
+0:21                'dti' ( in 3-component vector of uint)
+0:21                Constant:
+0:21                  0 (const int)
+0:21            Constant:
+0:21              1 (const int)
+0:21          Sequence
+0:21            Constant:
+0:21              0 (const int)
+0:21            Constant:
+0:21              1 (const int)
+0:21        subgroupAdd ( temp 2-component vector of int)
+0:21          vector swizzle ( temp 2-component vector of int)
+0:21            i: direct index for structure ( temp 4-component vector of int)
+0:21              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:21                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:21                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:21                  Constant:
+0:21                    0 (const uint)
+0:21                direct index ( temp uint)
+0:21                  'dti' ( in 3-component vector of uint)
+0:21                  Constant:
+0:21                    0 (const int)
+0:21              Constant:
+0:21                1 (const int)
+0:21            Sequence
+0:21              Constant:
+0:21                0 (const int)
+0:21              Constant:
+0:21                1 (const int)
+0:22      move second child to first child ( temp 3-component vector of int)
+0:22        vector swizzle ( temp 3-component vector of int)
+0:22          i: direct index for structure ( temp 4-component vector of int)
+0:22            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:22              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:22                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:22                Constant:
+0:22                  0 (const uint)
+0:22              direct index ( temp uint)
+0:22                'dti' ( in 3-component vector of uint)
+0:22                Constant:
+0:22                  0 (const int)
+0:22            Constant:
+0:22              1 (const int)
+0:22          Sequence
+0:22            Constant:
+0:22              0 (const int)
+0:22            Constant:
+0:22              1 (const int)
+0:22            Constant:
+0:22              2 (const int)
+0:22        subgroupAdd ( temp 3-component vector of int)
+0:22          vector swizzle ( temp 3-component vector of int)
+0:22            i: direct index for structure ( temp 4-component vector of int)
+0:22              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:22                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:22                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:22                  Constant:
+0:22                    0 (const uint)
+0:22                direct index ( temp uint)
+0:22                  'dti' ( in 3-component vector of uint)
+0:22                  Constant:
+0:22                    0 (const int)
+0:22              Constant:
+0:22                1 (const int)
+0:22            Sequence
+0:22              Constant:
+0:22                0 (const int)
+0:22              Constant:
+0:22                1 (const int)
+0:22              Constant:
+0:22                2 (const int)
+0:24      move second child to first child ( temp 4-component vector of float)
+0:24        f: direct index for structure ( temp 4-component vector of float)
+0:24          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:24            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:24              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:24              Constant:
+0:24                0 (const uint)
+0:24            direct index ( temp uint)
+0:24              'dti' ( in 3-component vector of uint)
+0:24              Constant:
+0:24                0 (const int)
+0:24          Constant:
+0:24            2 (const int)
+0:24        subgroupAdd ( temp 4-component vector of float)
+0:24          f: direct index for structure ( temp 4-component vector of float)
+0:24            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:24              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:24                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:24                Constant:
+0:24                  0 (const uint)
+0:24              direct index ( temp uint)
+0:24                'dti' ( in 3-component vector of uint)
+0:24                Constant:
+0:24                  0 (const int)
+0:24            Constant:
+0:24              2 (const int)
+0:25      move second child to first child ( temp float)
+0:25        direct index ( temp float)
+0:25          f: direct index for structure ( temp 4-component vector of float)
+0:25            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:25              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:25                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:25                Constant:
+0:25                  0 (const uint)
+0:25              direct index ( temp uint)
+0:25                'dti' ( in 3-component vector of uint)
+0:25                Constant:
+0:25                  0 (const int)
+0:25            Constant:
+0:25              2 (const int)
+0:25          Constant:
+0:25            0 (const int)
+0:25        subgroupAdd ( temp float)
+0:25          direct index ( temp float)
+0:25            f: direct index for structure ( temp 4-component vector of float)
+0:25              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:25                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:25                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:25                  Constant:
+0:25                    0 (const uint)
+0:25                direct index ( temp uint)
+0:25                  'dti' ( in 3-component vector of uint)
+0:25                  Constant:
+0:25                    0 (const int)
+0:25              Constant:
+0:25                2 (const int)
+0:25            Constant:
+0:25              0 (const int)
+0:26      move second child to first child ( temp 2-component vector of float)
+0:26        vector swizzle ( temp 2-component vector of float)
+0:26          f: direct index for structure ( temp 4-component vector of float)
+0:26            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:26              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:26                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:26                Constant:
+0:26                  0 (const uint)
+0:26              direct index ( temp uint)
+0:26                'dti' ( in 3-component vector of uint)
+0:26                Constant:
+0:26                  0 (const int)
+0:26            Constant:
+0:26              2 (const int)
+0:26          Sequence
+0:26            Constant:
+0:26              0 (const int)
+0:26            Constant:
+0:26              1 (const int)
+0:26        subgroupAdd ( temp 2-component vector of float)
+0:26          vector swizzle ( temp 2-component vector of float)
+0:26            f: direct index for structure ( temp 4-component vector of float)
+0:26              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:26                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:26                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:26                  Constant:
+0:26                    0 (const uint)
+0:26                direct index ( temp uint)
+0:26                  'dti' ( in 3-component vector of uint)
+0:26                  Constant:
+0:26                    0 (const int)
+0:26              Constant:
+0:26                2 (const int)
+0:26            Sequence
+0:26              Constant:
+0:26                0 (const int)
+0:26              Constant:
+0:26                1 (const int)
+0:27      move second child to first child ( temp 3-component vector of float)
+0:27        vector swizzle ( temp 3-component vector of float)
+0:27          f: direct index for structure ( temp 4-component vector of float)
+0:27            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:27              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:27                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:27                Constant:
+0:27                  0 (const uint)
+0:27              direct index ( temp uint)
+0:27                'dti' ( in 3-component vector of uint)
+0:27                Constant:
+0:27                  0 (const int)
+0:27            Constant:
+0:27              2 (const int)
+0:27          Sequence
+0:27            Constant:
+0:27              0 (const int)
+0:27            Constant:
+0:27              1 (const int)
+0:27            Constant:
+0:27              2 (const int)
+0:27        subgroupAdd ( temp 3-component vector of float)
+0:27          vector swizzle ( temp 3-component vector of float)
+0:27            f: direct index for structure ( temp 4-component vector of float)
+0:27              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:27                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:27                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:27                  Constant:
+0:27                    0 (const uint)
+0:27                direct index ( temp uint)
+0:27                  'dti' ( in 3-component vector of uint)
+0:27                  Constant:
+0:27                    0 (const int)
+0:27              Constant:
+0:27                2 (const int)
+0:27            Sequence
+0:27              Constant:
+0:27                0 (const int)
+0:27              Constant:
+0:27                1 (const int)
+0:27              Constant:
+0:27                2 (const int)
+0:29      move second child to first child ( temp 4-component vector of double)
+0:29        d: direct index for structure ( temp 4-component vector of double)
+0:29          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:29            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:29              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:29              Constant:
+0:29                0 (const uint)
+0:29            direct index ( temp uint)
+0:29              'dti' ( in 3-component vector of uint)
+0:29              Constant:
+0:29                0 (const int)
+0:29          Constant:
+0:29            3 (const int)
+0:29        subgroupAdd ( temp 4-component vector of double)
+0:29          d: direct index for structure ( temp 4-component vector of double)
+0:29            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:29              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:29                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:29                Constant:
+0:29                  0 (const uint)
+0:29              direct index ( temp uint)
+0:29                'dti' ( in 3-component vector of uint)
+0:29                Constant:
+0:29                  0 (const int)
+0:29            Constant:
+0:29              3 (const int)
+0:30      move second child to first child ( temp double)
+0:30        direct index ( temp double)
+0:30          d: direct index for structure ( temp 4-component vector of double)
+0:30            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:30              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:30                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:30                Constant:
+0:30                  0 (const uint)
+0:30              direct index ( temp uint)
+0:30                'dti' ( in 3-component vector of uint)
+0:30                Constant:
+0:30                  0 (const int)
+0:30            Constant:
+0:30              3 (const int)
+0:30          Constant:
+0:30            0 (const int)
+0:30        subgroupAdd ( temp double)
+0:30          direct index ( temp double)
+0:30            d: direct index for structure ( temp 4-component vector of double)
+0:30              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:30                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:30                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:30                  Constant:
+0:30                    0 (const uint)
+0:30                direct index ( temp uint)
+0:30                  'dti' ( in 3-component vector of uint)
+0:30                  Constant:
+0:30                    0 (const int)
+0:30              Constant:
+0:30                3 (const int)
+0:30            Constant:
+0:30              0 (const int)
+0:31      move second child to first child ( temp 2-component vector of double)
+0:31        vector swizzle ( temp 2-component vector of double)
+0:31          d: direct index for structure ( temp 4-component vector of double)
+0:31            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:31              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:31                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:31                Constant:
+0:31                  0 (const uint)
+0:31              direct index ( temp uint)
+0:31                'dti' ( in 3-component vector of uint)
+0:31                Constant:
+0:31                  0 (const int)
+0:31            Constant:
+0:31              3 (const int)
+0:31          Sequence
+0:31            Constant:
+0:31              0 (const int)
+0:31            Constant:
+0:31              1 (const int)
+0:31        subgroupAdd ( temp 2-component vector of double)
+0:31          vector swizzle ( temp 2-component vector of double)
+0:31            d: direct index for structure ( temp 4-component vector of double)
+0:31              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:31                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:31                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:31                  Constant:
+0:31                    0 (const uint)
+0:31                direct index ( temp uint)
+0:31                  'dti' ( in 3-component vector of uint)
+0:31                  Constant:
+0:31                    0 (const int)
+0:31              Constant:
+0:31                3 (const int)
+0:31            Sequence
+0:31              Constant:
+0:31                0 (const int)
+0:31              Constant:
+0:31                1 (const int)
+0:32      move second child to first child ( temp 3-component vector of double)
+0:32        vector swizzle ( temp 3-component vector of double)
+0:32          d: direct index for structure ( temp 4-component vector of double)
+0:32            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:32              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:32                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:32                Constant:
+0:32                  0 (const uint)
+0:32              direct index ( temp uint)
+0:32                'dti' ( in 3-component vector of uint)
+0:32                Constant:
+0:32                  0 (const int)
+0:32            Constant:
+0:32              3 (const int)
+0:32          Sequence
+0:32            Constant:
+0:32              0 (const int)
+0:32            Constant:
+0:32              1 (const int)
+0:32            Constant:
+0:32              2 (const int)
+0:32        subgroupAdd ( temp 3-component vector of double)
+0:32          vector swizzle ( temp 3-component vector of double)
+0:32            d: direct index for structure ( temp 4-component vector of double)
+0:32              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:32                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:32                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:32                  Constant:
+0:32                    0 (const uint)
+0:32                direct index ( temp uint)
+0:32                  'dti' ( in 3-component vector of uint)
+0:32                  Constant:
+0:32                    0 (const int)
+0:32              Constant:
+0:32                3 (const int)
+0:32            Sequence
+0:32              Constant:
+0:32                0 (const int)
+0:32              Constant:
+0:32                1 (const int)
+0:32              Constant:
+0:32                2 (const int)
+0:34      move second child to first child ( temp 4-component vector of uint)
+0:34        u: direct index for structure ( temp 4-component vector of uint)
+0:34          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:34            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:34              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:34              Constant:
+0:34                0 (const uint)
+0:34            direct index ( temp uint)
+0:34              'dti' ( in 3-component vector of uint)
+0:34              Constant:
+0:34                0 (const int)
+0:34          Constant:
+0:34            0 (const int)
+0:34        subgroupMul ( temp 4-component vector of uint)
+0:34          u: direct index for structure ( temp 4-component vector of uint)
+0:34            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:34              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:34                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:34                Constant:
+0:34                  0 (const uint)
+0:34              direct index ( temp uint)
+0:34                'dti' ( in 3-component vector of uint)
+0:34                Constant:
+0:34                  0 (const int)
+0:34            Constant:
+0:34              0 (const int)
+0:35      move second child to first child ( temp uint)
+0:35        direct index ( temp uint)
+0:35          u: direct index for structure ( temp 4-component vector of uint)
+0:35            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:35              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:35                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:35                Constant:
+0:35                  0 (const uint)
+0:35              direct index ( temp uint)
+0:35                'dti' ( in 3-component vector of uint)
+0:35                Constant:
+0:35                  0 (const int)
+0:35            Constant:
+0:35              0 (const int)
+0:35          Constant:
+0:35            0 (const int)
+0:35        subgroupMul ( temp uint)
+0:35          direct index ( temp uint)
+0:35            u: direct index for structure ( temp 4-component vector of uint)
+0:35              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:35                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:35                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:35                  Constant:
+0:35                    0 (const uint)
+0:35                direct index ( temp uint)
+0:35                  'dti' ( in 3-component vector of uint)
+0:35                  Constant:
+0:35                    0 (const int)
+0:35              Constant:
+0:35                0 (const int)
+0:35            Constant:
+0:35              0 (const int)
+0:36      move second child to first child ( temp 2-component vector of uint)
+0:36        vector swizzle ( temp 2-component vector of uint)
+0:36          u: direct index for structure ( temp 4-component vector of uint)
+0:36            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:36              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:36                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:36                Constant:
+0:36                  0 (const uint)
+0:36              direct index ( temp uint)
+0:36                'dti' ( in 3-component vector of uint)
+0:36                Constant:
+0:36                  0 (const int)
+0:36            Constant:
+0:36              0 (const int)
+0:36          Sequence
+0:36            Constant:
+0:36              0 (const int)
+0:36            Constant:
+0:36              1 (const int)
+0:36        subgroupMul ( temp 2-component vector of uint)
+0:36          vector swizzle ( temp 2-component vector of uint)
+0:36            u: direct index for structure ( temp 4-component vector of uint)
+0:36              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:36                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:36                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:36                  Constant:
+0:36                    0 (const uint)
+0:36                direct index ( temp uint)
+0:36                  'dti' ( in 3-component vector of uint)
+0:36                  Constant:
+0:36                    0 (const int)
+0:36              Constant:
+0:36                0 (const int)
+0:36            Sequence
+0:36              Constant:
+0:36                0 (const int)
+0:36              Constant:
+0:36                1 (const int)
+0:37      move second child to first child ( temp 3-component vector of uint)
+0:37        vector swizzle ( temp 3-component vector of uint)
+0:37          u: direct index for structure ( temp 4-component vector of uint)
+0:37            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:37              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:37                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:37                Constant:
+0:37                  0 (const uint)
+0:37              direct index ( temp uint)
+0:37                'dti' ( in 3-component vector of uint)
+0:37                Constant:
+0:37                  0 (const int)
+0:37            Constant:
+0:37              0 (const int)
+0:37          Sequence
+0:37            Constant:
+0:37              0 (const int)
+0:37            Constant:
+0:37              1 (const int)
+0:37            Constant:
+0:37              2 (const int)
+0:37        subgroupMul ( temp 3-component vector of uint)
+0:37          vector swizzle ( temp 3-component vector of uint)
+0:37            u: direct index for structure ( temp 4-component vector of uint)
+0:37              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:37                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:37                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:37                  Constant:
+0:37                    0 (const uint)
+0:37                direct index ( temp uint)
+0:37                  'dti' ( in 3-component vector of uint)
+0:37                  Constant:
+0:37                    0 (const int)
+0:37              Constant:
+0:37                0 (const int)
+0:37            Sequence
+0:37              Constant:
+0:37                0 (const int)
+0:37              Constant:
+0:37                1 (const int)
+0:37              Constant:
+0:37                2 (const int)
+0:39      move second child to first child ( temp 4-component vector of int)
+0:39        i: direct index for structure ( temp 4-component vector of int)
+0:39          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:39            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:39              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:39              Constant:
+0:39                0 (const uint)
+0:39            direct index ( temp uint)
+0:39              'dti' ( in 3-component vector of uint)
+0:39              Constant:
+0:39                0 (const int)
+0:39          Constant:
+0:39            1 (const int)
+0:39        subgroupMul ( temp 4-component vector of int)
+0:39          i: direct index for structure ( temp 4-component vector of int)
+0:39            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:39              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:39                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:39                Constant:
+0:39                  0 (const uint)
+0:39              direct index ( temp uint)
+0:39                'dti' ( in 3-component vector of uint)
+0:39                Constant:
+0:39                  0 (const int)
+0:39            Constant:
+0:39              1 (const int)
+0:40      move second child to first child ( temp int)
+0:40        direct index ( temp int)
+0:40          i: direct index for structure ( temp 4-component vector of int)
+0:40            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:40              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:40                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:40                Constant:
+0:40                  0 (const uint)
+0:40              direct index ( temp uint)
+0:40                'dti' ( in 3-component vector of uint)
+0:40                Constant:
+0:40                  0 (const int)
+0:40            Constant:
+0:40              1 (const int)
+0:40          Constant:
+0:40            0 (const int)
+0:40        subgroupMul ( temp int)
+0:40          direct index ( temp int)
+0:40            i: direct index for structure ( temp 4-component vector of int)
+0:40              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:40                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:40                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:40                  Constant:
+0:40                    0 (const uint)
+0:40                direct index ( temp uint)
+0:40                  'dti' ( in 3-component vector of uint)
+0:40                  Constant:
+0:40                    0 (const int)
+0:40              Constant:
+0:40                1 (const int)
+0:40            Constant:
+0:40              0 (const int)
+0:41      move second child to first child ( temp 2-component vector of int)
+0:41        vector swizzle ( temp 2-component vector of int)
+0:41          i: direct index for structure ( temp 4-component vector of int)
+0:41            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:41              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:41                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:41                Constant:
+0:41                  0 (const uint)
+0:41              direct index ( temp uint)
+0:41                'dti' ( in 3-component vector of uint)
+0:41                Constant:
+0:41                  0 (const int)
+0:41            Constant:
+0:41              1 (const int)
+0:41          Sequence
+0:41            Constant:
+0:41              0 (const int)
+0:41            Constant:
+0:41              1 (const int)
+0:41        subgroupMul ( temp 2-component vector of int)
+0:41          vector swizzle ( temp 2-component vector of int)
+0:41            i: direct index for structure ( temp 4-component vector of int)
+0:41              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:41                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:41                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:41                  Constant:
+0:41                    0 (const uint)
+0:41                direct index ( temp uint)
+0:41                  'dti' ( in 3-component vector of uint)
+0:41                  Constant:
+0:41                    0 (const int)
+0:41              Constant:
+0:41                1 (const int)
+0:41            Sequence
+0:41              Constant:
+0:41                0 (const int)
+0:41              Constant:
+0:41                1 (const int)
+0:42      move second child to first child ( temp 3-component vector of int)
+0:42        vector swizzle ( temp 3-component vector of int)
+0:42          i: direct index for structure ( temp 4-component vector of int)
+0:42            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:42              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:42                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:42                Constant:
+0:42                  0 (const uint)
+0:42              direct index ( temp uint)
+0:42                'dti' ( in 3-component vector of uint)
+0:42                Constant:
+0:42                  0 (const int)
+0:42            Constant:
+0:42              1 (const int)
+0:42          Sequence
+0:42            Constant:
+0:42              0 (const int)
+0:42            Constant:
+0:42              1 (const int)
+0:42            Constant:
+0:42              2 (const int)
+0:42        subgroupMul ( temp 3-component vector of int)
+0:42          vector swizzle ( temp 3-component vector of int)
+0:42            i: direct index for structure ( temp 4-component vector of int)
+0:42              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:42                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:42                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:42                  Constant:
+0:42                    0 (const uint)
+0:42                direct index ( temp uint)
+0:42                  'dti' ( in 3-component vector of uint)
+0:42                  Constant:
+0:42                    0 (const int)
+0:42              Constant:
+0:42                1 (const int)
+0:42            Sequence
+0:42              Constant:
+0:42                0 (const int)
+0:42              Constant:
+0:42                1 (const int)
+0:42              Constant:
+0:42                2 (const int)
+0:44      move second child to first child ( temp 4-component vector of float)
+0:44        f: direct index for structure ( temp 4-component vector of float)
+0:44          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:44            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:44              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:44              Constant:
+0:44                0 (const uint)
+0:44            direct index ( temp uint)
+0:44              'dti' ( in 3-component vector of uint)
+0:44              Constant:
+0:44                0 (const int)
+0:44          Constant:
+0:44            2 (const int)
+0:44        subgroupMul ( temp 4-component vector of float)
+0:44          f: direct index for structure ( temp 4-component vector of float)
+0:44            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:44              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:44                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:44                Constant:
+0:44                  0 (const uint)
+0:44              direct index ( temp uint)
+0:44                'dti' ( in 3-component vector of uint)
+0:44                Constant:
+0:44                  0 (const int)
+0:44            Constant:
+0:44              2 (const int)
+0:45      move second child to first child ( temp float)
+0:45        direct index ( temp float)
+0:45          f: direct index for structure ( temp 4-component vector of float)
+0:45            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:45              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:45                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:45                Constant:
+0:45                  0 (const uint)
+0:45              direct index ( temp uint)
+0:45                'dti' ( in 3-component vector of uint)
+0:45                Constant:
+0:45                  0 (const int)
+0:45            Constant:
+0:45              2 (const int)
+0:45          Constant:
+0:45            0 (const int)
+0:45        subgroupMul ( temp float)
+0:45          direct index ( temp float)
+0:45            f: direct index for structure ( temp 4-component vector of float)
+0:45              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:45                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:45                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:45                  Constant:
+0:45                    0 (const uint)
+0:45                direct index ( temp uint)
+0:45                  'dti' ( in 3-component vector of uint)
+0:45                  Constant:
+0:45                    0 (const int)
+0:45              Constant:
+0:45                2 (const int)
+0:45            Constant:
+0:45              0 (const int)
+0:46      move second child to first child ( temp 2-component vector of float)
+0:46        vector swizzle ( temp 2-component vector of float)
+0:46          f: direct index for structure ( temp 4-component vector of float)
+0:46            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:46              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:46                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:46                Constant:
+0:46                  0 (const uint)
+0:46              direct index ( temp uint)
+0:46                'dti' ( in 3-component vector of uint)
+0:46                Constant:
+0:46                  0 (const int)
+0:46            Constant:
+0:46              2 (const int)
+0:46          Sequence
+0:46            Constant:
+0:46              0 (const int)
+0:46            Constant:
+0:46              1 (const int)
+0:46        subgroupMul ( temp 2-component vector of float)
+0:46          vector swizzle ( temp 2-component vector of float)
+0:46            f: direct index for structure ( temp 4-component vector of float)
+0:46              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:46                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:46                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:46                  Constant:
+0:46                    0 (const uint)
+0:46                direct index ( temp uint)
+0:46                  'dti' ( in 3-component vector of uint)
+0:46                  Constant:
+0:46                    0 (const int)
+0:46              Constant:
+0:46                2 (const int)
+0:46            Sequence
+0:46              Constant:
+0:46                0 (const int)
+0:46              Constant:
+0:46                1 (const int)
+0:47      move second child to first child ( temp 3-component vector of float)
+0:47        vector swizzle ( temp 3-component vector of float)
+0:47          f: direct index for structure ( temp 4-component vector of float)
+0:47            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:47              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:47                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:47                Constant:
+0:47                  0 (const uint)
+0:47              direct index ( temp uint)
+0:47                'dti' ( in 3-component vector of uint)
+0:47                Constant:
+0:47                  0 (const int)
+0:47            Constant:
+0:47              2 (const int)
+0:47          Sequence
+0:47            Constant:
+0:47              0 (const int)
+0:47            Constant:
+0:47              1 (const int)
+0:47            Constant:
+0:47              2 (const int)
+0:47        subgroupMul ( temp 3-component vector of float)
+0:47          vector swizzle ( temp 3-component vector of float)
+0:47            f: direct index for structure ( temp 4-component vector of float)
+0:47              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:47                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:47                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:47                  Constant:
+0:47                    0 (const uint)
+0:47                direct index ( temp uint)
+0:47                  'dti' ( in 3-component vector of uint)
+0:47                  Constant:
+0:47                    0 (const int)
+0:47              Constant:
+0:47                2 (const int)
+0:47            Sequence
+0:47              Constant:
+0:47                0 (const int)
+0:47              Constant:
+0:47                1 (const int)
+0:47              Constant:
+0:47                2 (const int)
+0:49      move second child to first child ( temp 4-component vector of double)
+0:49        d: direct index for structure ( temp 4-component vector of double)
+0:49          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:49            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:49              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:49              Constant:
+0:49                0 (const uint)
+0:49            direct index ( temp uint)
+0:49              'dti' ( in 3-component vector of uint)
+0:49              Constant:
+0:49                0 (const int)
+0:49          Constant:
+0:49            3 (const int)
+0:49        subgroupMul ( temp 4-component vector of double)
+0:49          d: direct index for structure ( temp 4-component vector of double)
+0:49            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:49              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:49                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:49                Constant:
+0:49                  0 (const uint)
+0:49              direct index ( temp uint)
+0:49                'dti' ( in 3-component vector of uint)
+0:49                Constant:
+0:49                  0 (const int)
+0:49            Constant:
+0:49              3 (const int)
+0:50      move second child to first child ( temp double)
+0:50        direct index ( temp double)
+0:50          d: direct index for structure ( temp 4-component vector of double)
+0:50            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:50              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:50                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:50                Constant:
+0:50                  0 (const uint)
+0:50              direct index ( temp uint)
+0:50                'dti' ( in 3-component vector of uint)
+0:50                Constant:
+0:50                  0 (const int)
+0:50            Constant:
+0:50              3 (const int)
+0:50          Constant:
+0:50            0 (const int)
+0:50        subgroupMul ( temp double)
+0:50          direct index ( temp double)
+0:50            d: direct index for structure ( temp 4-component vector of double)
+0:50              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:50                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:50                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:50                  Constant:
+0:50                    0 (const uint)
+0:50                direct index ( temp uint)
+0:50                  'dti' ( in 3-component vector of uint)
+0:50                  Constant:
+0:50                    0 (const int)
+0:50              Constant:
+0:50                3 (const int)
+0:50            Constant:
+0:50              0 (const int)
+0:51      move second child to first child ( temp 2-component vector of double)
+0:51        vector swizzle ( temp 2-component vector of double)
+0:51          d: direct index for structure ( temp 4-component vector of double)
+0:51            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:51              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:51                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:51                Constant:
+0:51                  0 (const uint)
+0:51              direct index ( temp uint)
+0:51                'dti' ( in 3-component vector of uint)
+0:51                Constant:
+0:51                  0 (const int)
+0:51            Constant:
+0:51              3 (const int)
+0:51          Sequence
+0:51            Constant:
+0:51              0 (const int)
+0:51            Constant:
+0:51              1 (const int)
+0:51        subgroupMul ( temp 2-component vector of double)
+0:51          vector swizzle ( temp 2-component vector of double)
+0:51            d: direct index for structure ( temp 4-component vector of double)
+0:51              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:51                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:51                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:51                  Constant:
+0:51                    0 (const uint)
+0:51                direct index ( temp uint)
+0:51                  'dti' ( in 3-component vector of uint)
+0:51                  Constant:
+0:51                    0 (const int)
+0:51              Constant:
+0:51                3 (const int)
+0:51            Sequence
+0:51              Constant:
+0:51                0 (const int)
+0:51              Constant:
+0:51                1 (const int)
+0:52      move second child to first child ( temp 3-component vector of double)
+0:52        vector swizzle ( temp 3-component vector of double)
+0:52          d: direct index for structure ( temp 4-component vector of double)
+0:52            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:52              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:52                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:52                Constant:
+0:52                  0 (const uint)
+0:52              direct index ( temp uint)
+0:52                'dti' ( in 3-component vector of uint)
+0:52                Constant:
+0:52                  0 (const int)
+0:52            Constant:
+0:52              3 (const int)
+0:52          Sequence
+0:52            Constant:
+0:52              0 (const int)
+0:52            Constant:
+0:52              1 (const int)
+0:52            Constant:
+0:52              2 (const int)
+0:52        subgroupMul ( temp 3-component vector of double)
+0:52          vector swizzle ( temp 3-component vector of double)
+0:52            d: direct index for structure ( temp 4-component vector of double)
+0:52              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:52                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:52                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:52                  Constant:
+0:52                    0 (const uint)
+0:52                direct index ( temp uint)
+0:52                  'dti' ( in 3-component vector of uint)
+0:52                  Constant:
+0:52                    0 (const int)
+0:52              Constant:
+0:52                3 (const int)
+0:52            Sequence
+0:52              Constant:
+0:52                0 (const int)
+0:52              Constant:
+0:52                1 (const int)
+0:52              Constant:
+0:52                2 (const int)
+0:54      move second child to first child ( temp 4-component vector of uint)
+0:54        u: direct index for structure ( temp 4-component vector of uint)
+0:54          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:54            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:54              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:54              Constant:
+0:54                0 (const uint)
+0:54            direct index ( temp uint)
+0:54              'dti' ( in 3-component vector of uint)
+0:54              Constant:
+0:54                0 (const int)
+0:54          Constant:
+0:54            0 (const int)
+0:54        subgroupMin ( temp 4-component vector of uint)
+0:54          u: direct index for structure ( temp 4-component vector of uint)
+0:54            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:54              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:54                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:54                Constant:
+0:54                  0 (const uint)
+0:54              direct index ( temp uint)
+0:54                'dti' ( in 3-component vector of uint)
+0:54                Constant:
+0:54                  0 (const int)
+0:54            Constant:
+0:54              0 (const int)
+0:55      move second child to first child ( temp uint)
+0:55        direct index ( temp uint)
+0:55          u: direct index for structure ( temp 4-component vector of uint)
+0:55            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:55              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:55                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:55                Constant:
+0:55                  0 (const uint)
+0:55              direct index ( temp uint)
+0:55                'dti' ( in 3-component vector of uint)
+0:55                Constant:
+0:55                  0 (const int)
+0:55            Constant:
+0:55              0 (const int)
+0:55          Constant:
+0:55            0 (const int)
+0:55        subgroupMin ( temp uint)
+0:55          direct index ( temp uint)
+0:55            u: direct index for structure ( temp 4-component vector of uint)
+0:55              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:55                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:55                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:55                  Constant:
+0:55                    0 (const uint)
+0:55                direct index ( temp uint)
+0:55                  'dti' ( in 3-component vector of uint)
+0:55                  Constant:
+0:55                    0 (const int)
+0:55              Constant:
+0:55                0 (const int)
+0:55            Constant:
+0:55              0 (const int)
+0:56      move second child to first child ( temp 2-component vector of uint)
+0:56        vector swizzle ( temp 2-component vector of uint)
+0:56          u: direct index for structure ( temp 4-component vector of uint)
+0:56            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:56              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:56                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:56                Constant:
+0:56                  0 (const uint)
+0:56              direct index ( temp uint)
+0:56                'dti' ( in 3-component vector of uint)
+0:56                Constant:
+0:56                  0 (const int)
+0:56            Constant:
+0:56              0 (const int)
+0:56          Sequence
+0:56            Constant:
+0:56              0 (const int)
+0:56            Constant:
+0:56              1 (const int)
+0:56        subgroupMin ( temp 2-component vector of uint)
+0:56          vector swizzle ( temp 2-component vector of uint)
+0:56            u: direct index for structure ( temp 4-component vector of uint)
+0:56              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:56                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:56                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:56                  Constant:
+0:56                    0 (const uint)
+0:56                direct index ( temp uint)
+0:56                  'dti' ( in 3-component vector of uint)
+0:56                  Constant:
+0:56                    0 (const int)
+0:56              Constant:
+0:56                0 (const int)
+0:56            Sequence
+0:56              Constant:
+0:56                0 (const int)
+0:56              Constant:
+0:56                1 (const int)
+0:57      move second child to first child ( temp 3-component vector of uint)
+0:57        vector swizzle ( temp 3-component vector of uint)
+0:57          u: direct index for structure ( temp 4-component vector of uint)
+0:57            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:57              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:57                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:57                Constant:
+0:57                  0 (const uint)
+0:57              direct index ( temp uint)
+0:57                'dti' ( in 3-component vector of uint)
+0:57                Constant:
+0:57                  0 (const int)
+0:57            Constant:
+0:57              0 (const int)
+0:57          Sequence
+0:57            Constant:
+0:57              0 (const int)
+0:57            Constant:
+0:57              1 (const int)
+0:57            Constant:
+0:57              2 (const int)
+0:57        subgroupMin ( temp 3-component vector of uint)
+0:57          vector swizzle ( temp 3-component vector of uint)
+0:57            u: direct index for structure ( temp 4-component vector of uint)
+0:57              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:57                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:57                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:57                  Constant:
+0:57                    0 (const uint)
+0:57                direct index ( temp uint)
+0:57                  'dti' ( in 3-component vector of uint)
+0:57                  Constant:
+0:57                    0 (const int)
+0:57              Constant:
+0:57                0 (const int)
+0:57            Sequence
+0:57              Constant:
+0:57                0 (const int)
+0:57              Constant:
+0:57                1 (const int)
+0:57              Constant:
+0:57                2 (const int)
+0:59      move second child to first child ( temp 4-component vector of int)
+0:59        i: direct index for structure ( temp 4-component vector of int)
+0:59          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:59            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:59              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:59              Constant:
+0:59                0 (const uint)
+0:59            direct index ( temp uint)
+0:59              'dti' ( in 3-component vector of uint)
+0:59              Constant:
+0:59                0 (const int)
+0:59          Constant:
+0:59            1 (const int)
+0:59        subgroupMin ( temp 4-component vector of int)
+0:59          i: direct index for structure ( temp 4-component vector of int)
+0:59            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:59              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:59                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:59                Constant:
+0:59                  0 (const uint)
+0:59              direct index ( temp uint)
+0:59                'dti' ( in 3-component vector of uint)
+0:59                Constant:
+0:59                  0 (const int)
+0:59            Constant:
+0:59              1 (const int)
+0:60      move second child to first child ( temp int)
+0:60        direct index ( temp int)
+0:60          i: direct index for structure ( temp 4-component vector of int)
+0:60            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:60              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:60                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:60                Constant:
+0:60                  0 (const uint)
+0:60              direct index ( temp uint)
+0:60                'dti' ( in 3-component vector of uint)
+0:60                Constant:
+0:60                  0 (const int)
+0:60            Constant:
+0:60              1 (const int)
+0:60          Constant:
+0:60            0 (const int)
+0:60        subgroupMin ( temp int)
+0:60          direct index ( temp int)
+0:60            i: direct index for structure ( temp 4-component vector of int)
+0:60              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:60                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:60                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:60                  Constant:
+0:60                    0 (const uint)
+0:60                direct index ( temp uint)
+0:60                  'dti' ( in 3-component vector of uint)
+0:60                  Constant:
+0:60                    0 (const int)
+0:60              Constant:
+0:60                1 (const int)
+0:60            Constant:
+0:60              0 (const int)
+0:61      move second child to first child ( temp 2-component vector of int)
+0:61        vector swizzle ( temp 2-component vector of int)
+0:61          i: direct index for structure ( temp 4-component vector of int)
+0:61            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:61              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:61                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:61                Constant:
+0:61                  0 (const uint)
+0:61              direct index ( temp uint)
+0:61                'dti' ( in 3-component vector of uint)
+0:61                Constant:
+0:61                  0 (const int)
+0:61            Constant:
+0:61              1 (const int)
+0:61          Sequence
+0:61            Constant:
+0:61              0 (const int)
+0:61            Constant:
+0:61              1 (const int)
+0:61        subgroupMin ( temp 2-component vector of int)
+0:61          vector swizzle ( temp 2-component vector of int)
+0:61            i: direct index for structure ( temp 4-component vector of int)
+0:61              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:61                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:61                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:61                  Constant:
+0:61                    0 (const uint)
+0:61                direct index ( temp uint)
+0:61                  'dti' ( in 3-component vector of uint)
+0:61                  Constant:
+0:61                    0 (const int)
+0:61              Constant:
+0:61                1 (const int)
+0:61            Sequence
+0:61              Constant:
+0:61                0 (const int)
+0:61              Constant:
+0:61                1 (const int)
+0:62      move second child to first child ( temp 3-component vector of int)
+0:62        vector swizzle ( temp 3-component vector of int)
+0:62          i: direct index for structure ( temp 4-component vector of int)
+0:62            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:62              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:62                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:62                Constant:
+0:62                  0 (const uint)
+0:62              direct index ( temp uint)
+0:62                'dti' ( in 3-component vector of uint)
+0:62                Constant:
+0:62                  0 (const int)
+0:62            Constant:
+0:62              1 (const int)
+0:62          Sequence
+0:62            Constant:
+0:62              0 (const int)
+0:62            Constant:
+0:62              1 (const int)
+0:62            Constant:
+0:62              2 (const int)
+0:62        subgroupMin ( temp 3-component vector of int)
+0:62          vector swizzle ( temp 3-component vector of int)
+0:62            i: direct index for structure ( temp 4-component vector of int)
+0:62              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:62                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:62                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:62                  Constant:
+0:62                    0 (const uint)
+0:62                direct index ( temp uint)
+0:62                  'dti' ( in 3-component vector of uint)
+0:62                  Constant:
+0:62                    0 (const int)
+0:62              Constant:
+0:62                1 (const int)
+0:62            Sequence
+0:62              Constant:
+0:62                0 (const int)
+0:62              Constant:
+0:62                1 (const int)
+0:62              Constant:
+0:62                2 (const int)
+0:64      move second child to first child ( temp 4-component vector of float)
+0:64        f: direct index for structure ( temp 4-component vector of float)
+0:64          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:64            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:64              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:64              Constant:
+0:64                0 (const uint)
+0:64            direct index ( temp uint)
+0:64              'dti' ( in 3-component vector of uint)
+0:64              Constant:
+0:64                0 (const int)
+0:64          Constant:
+0:64            2 (const int)
+0:64        subgroupMin ( temp 4-component vector of float)
+0:64          f: direct index for structure ( temp 4-component vector of float)
+0:64            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:64              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:64                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:64                Constant:
+0:64                  0 (const uint)
+0:64              direct index ( temp uint)
+0:64                'dti' ( in 3-component vector of uint)
+0:64                Constant:
+0:64                  0 (const int)
+0:64            Constant:
+0:64              2 (const int)
+0:65      move second child to first child ( temp float)
+0:65        direct index ( temp float)
+0:65          f: direct index for structure ( temp 4-component vector of float)
+0:65            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:65              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:65                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:65                Constant:
+0:65                  0 (const uint)
+0:65              direct index ( temp uint)
+0:65                'dti' ( in 3-component vector of uint)
+0:65                Constant:
+0:65                  0 (const int)
+0:65            Constant:
+0:65              2 (const int)
+0:65          Constant:
+0:65            0 (const int)
+0:65        subgroupMin ( temp float)
+0:65          direct index ( temp float)
+0:65            f: direct index for structure ( temp 4-component vector of float)
+0:65              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:65                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:65                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:65                  Constant:
+0:65                    0 (const uint)
+0:65                direct index ( temp uint)
+0:65                  'dti' ( in 3-component vector of uint)
+0:65                  Constant:
+0:65                    0 (const int)
+0:65              Constant:
+0:65                2 (const int)
+0:65            Constant:
+0:65              0 (const int)
+0:66      move second child to first child ( temp 2-component vector of float)
+0:66        vector swizzle ( temp 2-component vector of float)
+0:66          f: direct index for structure ( temp 4-component vector of float)
+0:66            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:66              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:66                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:66                Constant:
+0:66                  0 (const uint)
+0:66              direct index ( temp uint)
+0:66                'dti' ( in 3-component vector of uint)
+0:66                Constant:
+0:66                  0 (const int)
+0:66            Constant:
+0:66              2 (const int)
+0:66          Sequence
+0:66            Constant:
+0:66              0 (const int)
+0:66            Constant:
+0:66              1 (const int)
+0:66        subgroupMin ( temp 2-component vector of float)
+0:66          vector swizzle ( temp 2-component vector of float)
+0:66            f: direct index for structure ( temp 4-component vector of float)
+0:66              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:66                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:66                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:66                  Constant:
+0:66                    0 (const uint)
+0:66                direct index ( temp uint)
+0:66                  'dti' ( in 3-component vector of uint)
+0:66                  Constant:
+0:66                    0 (const int)
+0:66              Constant:
+0:66                2 (const int)
+0:66            Sequence
+0:66              Constant:
+0:66                0 (const int)
+0:66              Constant:
+0:66                1 (const int)
+0:67      move second child to first child ( temp 3-component vector of float)
+0:67        vector swizzle ( temp 3-component vector of float)
+0:67          f: direct index for structure ( temp 4-component vector of float)
+0:67            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:67              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:67                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:67                Constant:
+0:67                  0 (const uint)
+0:67              direct index ( temp uint)
+0:67                'dti' ( in 3-component vector of uint)
+0:67                Constant:
+0:67                  0 (const int)
+0:67            Constant:
+0:67              2 (const int)
+0:67          Sequence
+0:67            Constant:
+0:67              0 (const int)
+0:67            Constant:
+0:67              1 (const int)
+0:67            Constant:
+0:67              2 (const int)
+0:67        subgroupMin ( temp 3-component vector of float)
+0:67          vector swizzle ( temp 3-component vector of float)
+0:67            f: direct index for structure ( temp 4-component vector of float)
+0:67              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:67                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:67                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:67                  Constant:
+0:67                    0 (const uint)
+0:67                direct index ( temp uint)
+0:67                  'dti' ( in 3-component vector of uint)
+0:67                  Constant:
+0:67                    0 (const int)
+0:67              Constant:
+0:67                2 (const int)
+0:67            Sequence
+0:67              Constant:
+0:67                0 (const int)
+0:67              Constant:
+0:67                1 (const int)
+0:67              Constant:
+0:67                2 (const int)
+0:69      move second child to first child ( temp 4-component vector of double)
+0:69        d: direct index for structure ( temp 4-component vector of double)
+0:69          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:69            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:69              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:69              Constant:
+0:69                0 (const uint)
+0:69            direct index ( temp uint)
+0:69              'dti' ( in 3-component vector of uint)
+0:69              Constant:
+0:69                0 (const int)
+0:69          Constant:
+0:69            3 (const int)
+0:69        subgroupMin ( temp 4-component vector of double)
+0:69          d: direct index for structure ( temp 4-component vector of double)
+0:69            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:69              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:69                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:69                Constant:
+0:69                  0 (const uint)
+0:69              direct index ( temp uint)
+0:69                'dti' ( in 3-component vector of uint)
+0:69                Constant:
+0:69                  0 (const int)
+0:69            Constant:
+0:69              3 (const int)
+0:70      move second child to first child ( temp double)
+0:70        direct index ( temp double)
+0:70          d: direct index for structure ( temp 4-component vector of double)
+0:70            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:70              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:70                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:70                Constant:
+0:70                  0 (const uint)
+0:70              direct index ( temp uint)
+0:70                'dti' ( in 3-component vector of uint)
+0:70                Constant:
+0:70                  0 (const int)
+0:70            Constant:
+0:70              3 (const int)
+0:70          Constant:
+0:70            0 (const int)
+0:70        subgroupMin ( temp double)
+0:70          direct index ( temp double)
+0:70            d: direct index for structure ( temp 4-component vector of double)
+0:70              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:70                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:70                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:70                  Constant:
+0:70                    0 (const uint)
+0:70                direct index ( temp uint)
+0:70                  'dti' ( in 3-component vector of uint)
+0:70                  Constant:
+0:70                    0 (const int)
+0:70              Constant:
+0:70                3 (const int)
+0:70            Constant:
+0:70              0 (const int)
+0:71      move second child to first child ( temp 2-component vector of double)
+0:71        vector swizzle ( temp 2-component vector of double)
+0:71          d: direct index for structure ( temp 4-component vector of double)
+0:71            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:71              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:71                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:71                Constant:
+0:71                  0 (const uint)
+0:71              direct index ( temp uint)
+0:71                'dti' ( in 3-component vector of uint)
+0:71                Constant:
+0:71                  0 (const int)
+0:71            Constant:
+0:71              3 (const int)
+0:71          Sequence
+0:71            Constant:
+0:71              0 (const int)
+0:71            Constant:
+0:71              1 (const int)
+0:71        subgroupMin ( temp 2-component vector of double)
+0:71          vector swizzle ( temp 2-component vector of double)
+0:71            d: direct index for structure ( temp 4-component vector of double)
+0:71              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:71                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:71                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:71                  Constant:
+0:71                    0 (const uint)
+0:71                direct index ( temp uint)
+0:71                  'dti' ( in 3-component vector of uint)
+0:71                  Constant:
+0:71                    0 (const int)
+0:71              Constant:
+0:71                3 (const int)
+0:71            Sequence
+0:71              Constant:
+0:71                0 (const int)
+0:71              Constant:
+0:71                1 (const int)
+0:72      move second child to first child ( temp 3-component vector of double)
+0:72        vector swizzle ( temp 3-component vector of double)
+0:72          d: direct index for structure ( temp 4-component vector of double)
+0:72            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:72              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:72                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:72                Constant:
+0:72                  0 (const uint)
+0:72              direct index ( temp uint)
+0:72                'dti' ( in 3-component vector of uint)
+0:72                Constant:
+0:72                  0 (const int)
+0:72            Constant:
+0:72              3 (const int)
+0:72          Sequence
+0:72            Constant:
+0:72              0 (const int)
+0:72            Constant:
+0:72              1 (const int)
+0:72            Constant:
+0:72              2 (const int)
+0:72        subgroupMin ( temp 3-component vector of double)
+0:72          vector swizzle ( temp 3-component vector of double)
+0:72            d: direct index for structure ( temp 4-component vector of double)
+0:72              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:72                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:72                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:72                  Constant:
+0:72                    0 (const uint)
+0:72                direct index ( temp uint)
+0:72                  'dti' ( in 3-component vector of uint)
+0:72                  Constant:
+0:72                    0 (const int)
+0:72              Constant:
+0:72                3 (const int)
+0:72            Sequence
+0:72              Constant:
+0:72                0 (const int)
+0:72              Constant:
+0:72                1 (const int)
+0:72              Constant:
+0:72                2 (const int)
+0:74      move second child to first child ( temp 4-component vector of uint)
+0:74        u: direct index for structure ( temp 4-component vector of uint)
+0:74          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:74            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:74              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:74              Constant:
+0:74                0 (const uint)
+0:74            direct index ( temp uint)
+0:74              'dti' ( in 3-component vector of uint)
+0:74              Constant:
+0:74                0 (const int)
+0:74          Constant:
+0:74            0 (const int)
+0:74        subgroupMax ( temp 4-component vector of uint)
+0:74          u: direct index for structure ( temp 4-component vector of uint)
+0:74            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:74              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:74                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:74                Constant:
+0:74                  0 (const uint)
+0:74              direct index ( temp uint)
+0:74                'dti' ( in 3-component vector of uint)
+0:74                Constant:
+0:74                  0 (const int)
+0:74            Constant:
+0:74              0 (const int)
+0:75      move second child to first child ( temp uint)
+0:75        direct index ( temp uint)
+0:75          u: direct index for structure ( temp 4-component vector of uint)
+0:75            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:75              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:75                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:75                Constant:
+0:75                  0 (const uint)
+0:75              direct index ( temp uint)
+0:75                'dti' ( in 3-component vector of uint)
+0:75                Constant:
+0:75                  0 (const int)
+0:75            Constant:
+0:75              0 (const int)
+0:75          Constant:
+0:75            0 (const int)
+0:75        subgroupMax ( temp uint)
+0:75          direct index ( temp uint)
+0:75            u: direct index for structure ( temp 4-component vector of uint)
+0:75              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:75                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:75                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:75                  Constant:
+0:75                    0 (const uint)
+0:75                direct index ( temp uint)
+0:75                  'dti' ( in 3-component vector of uint)
+0:75                  Constant:
+0:75                    0 (const int)
+0:75              Constant:
+0:75                0 (const int)
+0:75            Constant:
+0:75              0 (const int)
+0:76      move second child to first child ( temp 2-component vector of uint)
+0:76        vector swizzle ( temp 2-component vector of uint)
+0:76          u: direct index for structure ( temp 4-component vector of uint)
+0:76            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:76              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:76                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:76                Constant:
+0:76                  0 (const uint)
+0:76              direct index ( temp uint)
+0:76                'dti' ( in 3-component vector of uint)
+0:76                Constant:
+0:76                  0 (const int)
+0:76            Constant:
+0:76              0 (const int)
+0:76          Sequence
+0:76            Constant:
+0:76              0 (const int)
+0:76            Constant:
+0:76              1 (const int)
+0:76        subgroupMax ( temp 2-component vector of uint)
+0:76          vector swizzle ( temp 2-component vector of uint)
+0:76            u: direct index for structure ( temp 4-component vector of uint)
+0:76              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:76                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:76                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:76                  Constant:
+0:76                    0 (const uint)
+0:76                direct index ( temp uint)
+0:76                  'dti' ( in 3-component vector of uint)
+0:76                  Constant:
+0:76                    0 (const int)
+0:76              Constant:
+0:76                0 (const int)
+0:76            Sequence
+0:76              Constant:
+0:76                0 (const int)
+0:76              Constant:
+0:76                1 (const int)
+0:77      move second child to first child ( temp 3-component vector of uint)
+0:77        vector swizzle ( temp 3-component vector of uint)
+0:77          u: direct index for structure ( temp 4-component vector of uint)
+0:77            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:77              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:77                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:77                Constant:
+0:77                  0 (const uint)
+0:77              direct index ( temp uint)
+0:77                'dti' ( in 3-component vector of uint)
+0:77                Constant:
+0:77                  0 (const int)
+0:77            Constant:
+0:77              0 (const int)
+0:77          Sequence
+0:77            Constant:
+0:77              0 (const int)
+0:77            Constant:
+0:77              1 (const int)
+0:77            Constant:
+0:77              2 (const int)
+0:77        subgroupMax ( temp 3-component vector of uint)
+0:77          vector swizzle ( temp 3-component vector of uint)
+0:77            u: direct index for structure ( temp 4-component vector of uint)
+0:77              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:77                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:77                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:77                  Constant:
+0:77                    0 (const uint)
+0:77                direct index ( temp uint)
+0:77                  'dti' ( in 3-component vector of uint)
+0:77                  Constant:
+0:77                    0 (const int)
+0:77              Constant:
+0:77                0 (const int)
+0:77            Sequence
+0:77              Constant:
+0:77                0 (const int)
+0:77              Constant:
+0:77                1 (const int)
+0:77              Constant:
+0:77                2 (const int)
+0:79      move second child to first child ( temp 4-component vector of int)
+0:79        i: direct index for structure ( temp 4-component vector of int)
+0:79          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:79            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:79              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:79              Constant:
+0:79                0 (const uint)
+0:79            direct index ( temp uint)
+0:79              'dti' ( in 3-component vector of uint)
+0:79              Constant:
+0:79                0 (const int)
+0:79          Constant:
+0:79            1 (const int)
+0:79        subgroupMax ( temp 4-component vector of int)
+0:79          i: direct index for structure ( temp 4-component vector of int)
+0:79            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:79              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:79                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:79                Constant:
+0:79                  0 (const uint)
+0:79              direct index ( temp uint)
+0:79                'dti' ( in 3-component vector of uint)
+0:79                Constant:
+0:79                  0 (const int)
+0:79            Constant:
+0:79              1 (const int)
+0:80      move second child to first child ( temp int)
+0:80        direct index ( temp int)
+0:80          i: direct index for structure ( temp 4-component vector of int)
+0:80            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:80              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:80                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:80                Constant:
+0:80                  0 (const uint)
+0:80              direct index ( temp uint)
+0:80                'dti' ( in 3-component vector of uint)
+0:80                Constant:
+0:80                  0 (const int)
+0:80            Constant:
+0:80              1 (const int)
+0:80          Constant:
+0:80            0 (const int)
+0:80        subgroupMax ( temp int)
+0:80          direct index ( temp int)
+0:80            i: direct index for structure ( temp 4-component vector of int)
+0:80              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:80                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:80                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:80                  Constant:
+0:80                    0 (const uint)
+0:80                direct index ( temp uint)
+0:80                  'dti' ( in 3-component vector of uint)
+0:80                  Constant:
+0:80                    0 (const int)
+0:80              Constant:
+0:80                1 (const int)
+0:80            Constant:
+0:80              0 (const int)
+0:81      move second child to first child ( temp 2-component vector of int)
+0:81        vector swizzle ( temp 2-component vector of int)
+0:81          i: direct index for structure ( temp 4-component vector of int)
+0:81            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:81              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:81                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:81                Constant:
+0:81                  0 (const uint)
+0:81              direct index ( temp uint)
+0:81                'dti' ( in 3-component vector of uint)
+0:81                Constant:
+0:81                  0 (const int)
+0:81            Constant:
+0:81              1 (const int)
+0:81          Sequence
+0:81            Constant:
+0:81              0 (const int)
+0:81            Constant:
+0:81              1 (const int)
+0:81        subgroupMax ( temp 2-component vector of int)
+0:81          vector swizzle ( temp 2-component vector of int)
+0:81            i: direct index for structure ( temp 4-component vector of int)
+0:81              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:81                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:81                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:81                  Constant:
+0:81                    0 (const uint)
+0:81                direct index ( temp uint)
+0:81                  'dti' ( in 3-component vector of uint)
+0:81                  Constant:
+0:81                    0 (const int)
+0:81              Constant:
+0:81                1 (const int)
+0:81            Sequence
+0:81              Constant:
+0:81                0 (const int)
+0:81              Constant:
+0:81                1 (const int)
+0:82      move second child to first child ( temp 3-component vector of int)
+0:82        vector swizzle ( temp 3-component vector of int)
+0:82          i: direct index for structure ( temp 4-component vector of int)
+0:82            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:82              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:82                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:82                Constant:
+0:82                  0 (const uint)
+0:82              direct index ( temp uint)
+0:82                'dti' ( in 3-component vector of uint)
+0:82                Constant:
+0:82                  0 (const int)
+0:82            Constant:
+0:82              1 (const int)
+0:82          Sequence
+0:82            Constant:
+0:82              0 (const int)
+0:82            Constant:
+0:82              1 (const int)
+0:82            Constant:
+0:82              2 (const int)
+0:82        subgroupMax ( temp 3-component vector of int)
+0:82          vector swizzle ( temp 3-component vector of int)
+0:82            i: direct index for structure ( temp 4-component vector of int)
+0:82              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:82                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:82                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:82                  Constant:
+0:82                    0 (const uint)
+0:82                direct index ( temp uint)
+0:82                  'dti' ( in 3-component vector of uint)
+0:82                  Constant:
+0:82                    0 (const int)
+0:82              Constant:
+0:82                1 (const int)
+0:82            Sequence
+0:82              Constant:
+0:82                0 (const int)
+0:82              Constant:
+0:82                1 (const int)
+0:82              Constant:
+0:82                2 (const int)
+0:84      move second child to first child ( temp 4-component vector of float)
+0:84        f: direct index for structure ( temp 4-component vector of float)
+0:84          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:84            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:84              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:84              Constant:
+0:84                0 (const uint)
+0:84            direct index ( temp uint)
+0:84              'dti' ( in 3-component vector of uint)
+0:84              Constant:
+0:84                0 (const int)
+0:84          Constant:
+0:84            2 (const int)
+0:84        subgroupMax ( temp 4-component vector of float)
+0:84          f: direct index for structure ( temp 4-component vector of float)
+0:84            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:84              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:84                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:84                Constant:
+0:84                  0 (const uint)
+0:84              direct index ( temp uint)
+0:84                'dti' ( in 3-component vector of uint)
+0:84                Constant:
+0:84                  0 (const int)
+0:84            Constant:
+0:84              2 (const int)
+0:85      move second child to first child ( temp float)
+0:85        direct index ( temp float)
+0:85          f: direct index for structure ( temp 4-component vector of float)
+0:85            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:85              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:85                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:85                Constant:
+0:85                  0 (const uint)
+0:85              direct index ( temp uint)
+0:85                'dti' ( in 3-component vector of uint)
+0:85                Constant:
+0:85                  0 (const int)
+0:85            Constant:
+0:85              2 (const int)
+0:85          Constant:
+0:85            0 (const int)
+0:85        subgroupMax ( temp float)
+0:85          direct index ( temp float)
+0:85            f: direct index for structure ( temp 4-component vector of float)
+0:85              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:85                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:85                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:85                  Constant:
+0:85                    0 (const uint)
+0:85                direct index ( temp uint)
+0:85                  'dti' ( in 3-component vector of uint)
+0:85                  Constant:
+0:85                    0 (const int)
+0:85              Constant:
+0:85                2 (const int)
+0:85            Constant:
+0:85              0 (const int)
+0:86      move second child to first child ( temp 2-component vector of float)
+0:86        vector swizzle ( temp 2-component vector of float)
+0:86          f: direct index for structure ( temp 4-component vector of float)
+0:86            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:86              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:86                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:86                Constant:
+0:86                  0 (const uint)
+0:86              direct index ( temp uint)
+0:86                'dti' ( in 3-component vector of uint)
+0:86                Constant:
+0:86                  0 (const int)
+0:86            Constant:
+0:86              2 (const int)
+0:86          Sequence
+0:86            Constant:
+0:86              0 (const int)
+0:86            Constant:
+0:86              1 (const int)
+0:86        subgroupMax ( temp 2-component vector of float)
+0:86          vector swizzle ( temp 2-component vector of float)
+0:86            f: direct index for structure ( temp 4-component vector of float)
+0:86              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:86                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:86                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:86                  Constant:
+0:86                    0 (const uint)
+0:86                direct index ( temp uint)
+0:86                  'dti' ( in 3-component vector of uint)
+0:86                  Constant:
+0:86                    0 (const int)
+0:86              Constant:
+0:86                2 (const int)
+0:86            Sequence
+0:86              Constant:
+0:86                0 (const int)
+0:86              Constant:
+0:86                1 (const int)
+0:87      move second child to first child ( temp 3-component vector of float)
+0:87        vector swizzle ( temp 3-component vector of float)
+0:87          f: direct index for structure ( temp 4-component vector of float)
+0:87            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:87              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:87                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:87                Constant:
+0:87                  0 (const uint)
+0:87              direct index ( temp uint)
+0:87                'dti' ( in 3-component vector of uint)
+0:87                Constant:
+0:87                  0 (const int)
+0:87            Constant:
+0:87              2 (const int)
+0:87          Sequence
+0:87            Constant:
+0:87              0 (const int)
+0:87            Constant:
+0:87              1 (const int)
+0:87            Constant:
+0:87              2 (const int)
+0:87        subgroupMax ( temp 3-component vector of float)
+0:87          vector swizzle ( temp 3-component vector of float)
+0:87            f: direct index for structure ( temp 4-component vector of float)
+0:87              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:87                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:87                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:87                  Constant:
+0:87                    0 (const uint)
+0:87                direct index ( temp uint)
+0:87                  'dti' ( in 3-component vector of uint)
+0:87                  Constant:
+0:87                    0 (const int)
+0:87              Constant:
+0:87                2 (const int)
+0:87            Sequence
+0:87              Constant:
+0:87                0 (const int)
+0:87              Constant:
+0:87                1 (const int)
+0:87              Constant:
+0:87                2 (const int)
+0:89      move second child to first child ( temp 4-component vector of double)
+0:89        d: direct index for structure ( temp 4-component vector of double)
+0:89          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:89            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:89              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:89              Constant:
+0:89                0 (const uint)
+0:89            direct index ( temp uint)
+0:89              'dti' ( in 3-component vector of uint)
+0:89              Constant:
+0:89                0 (const int)
+0:89          Constant:
+0:89            3 (const int)
+0:89        subgroupMax ( temp 4-component vector of double)
+0:89          d: direct index for structure ( temp 4-component vector of double)
+0:89            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:89              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:89                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:89                Constant:
+0:89                  0 (const uint)
+0:89              direct index ( temp uint)
+0:89                'dti' ( in 3-component vector of uint)
+0:89                Constant:
+0:89                  0 (const int)
+0:89            Constant:
+0:89              3 (const int)
+0:90      move second child to first child ( temp double)
+0:90        direct index ( temp double)
+0:90          d: direct index for structure ( temp 4-component vector of double)
+0:90            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:90              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:90                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:90                Constant:
+0:90                  0 (const uint)
+0:90              direct index ( temp uint)
+0:90                'dti' ( in 3-component vector of uint)
+0:90                Constant:
+0:90                  0 (const int)
+0:90            Constant:
+0:90              3 (const int)
+0:90          Constant:
+0:90            0 (const int)
+0:90        subgroupMax ( temp double)
+0:90          direct index ( temp double)
+0:90            d: direct index for structure ( temp 4-component vector of double)
+0:90              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:90                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:90                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:90                  Constant:
+0:90                    0 (const uint)
+0:90                direct index ( temp uint)
+0:90                  'dti' ( in 3-component vector of uint)
+0:90                  Constant:
+0:90                    0 (const int)
+0:90              Constant:
+0:90                3 (const int)
+0:90            Constant:
+0:90              0 (const int)
+0:91      move second child to first child ( temp 2-component vector of double)
+0:91        vector swizzle ( temp 2-component vector of double)
+0:91          d: direct index for structure ( temp 4-component vector of double)
+0:91            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:91              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:91                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:91                Constant:
+0:91                  0 (const uint)
+0:91              direct index ( temp uint)
+0:91                'dti' ( in 3-component vector of uint)
+0:91                Constant:
+0:91                  0 (const int)
+0:91            Constant:
+0:91              3 (const int)
+0:91          Sequence
+0:91            Constant:
+0:91              0 (const int)
+0:91            Constant:
+0:91              1 (const int)
+0:91        subgroupMax ( temp 2-component vector of double)
+0:91          vector swizzle ( temp 2-component vector of double)
+0:91            d: direct index for structure ( temp 4-component vector of double)
+0:91              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:91                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:91                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:91                  Constant:
+0:91                    0 (const uint)
+0:91                direct index ( temp uint)
+0:91                  'dti' ( in 3-component vector of uint)
+0:91                  Constant:
+0:91                    0 (const int)
+0:91              Constant:
+0:91                3 (const int)
+0:91            Sequence
+0:91              Constant:
+0:91                0 (const int)
+0:91              Constant:
+0:91                1 (const int)
+0:92      move second child to first child ( temp 3-component vector of double)
+0:92        vector swizzle ( temp 3-component vector of double)
+0:92          d: direct index for structure ( temp 4-component vector of double)
+0:92            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:92              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:92                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:92                Constant:
+0:92                  0 (const uint)
+0:92              direct index ( temp uint)
+0:92                'dti' ( in 3-component vector of uint)
+0:92                Constant:
+0:92                  0 (const int)
+0:92            Constant:
+0:92              3 (const int)
+0:92          Sequence
+0:92            Constant:
+0:92              0 (const int)
+0:92            Constant:
+0:92              1 (const int)
+0:92            Constant:
+0:92              2 (const int)
+0:92        subgroupMax ( temp 3-component vector of double)
+0:92          vector swizzle ( temp 3-component vector of double)
+0:92            d: direct index for structure ( temp 4-component vector of double)
+0:92              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:92                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:92                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:92                  Constant:
+0:92                    0 (const uint)
+0:92                direct index ( temp uint)
+0:92                  'dti' ( in 3-component vector of uint)
+0:92                  Constant:
+0:92                    0 (const int)
+0:92              Constant:
+0:92                3 (const int)
+0:92            Sequence
+0:92              Constant:
+0:92                0 (const int)
+0:92              Constant:
+0:92                1 (const int)
+0:92              Constant:
+0:92                2 (const int)
+0:94      move second child to first child ( temp 4-component vector of uint)
+0:94        u: direct index for structure ( temp 4-component vector of uint)
+0:94          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:94            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:94              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:94              Constant:
+0:94                0 (const uint)
+0:94            direct index ( temp uint)
+0:94              'dti' ( in 3-component vector of uint)
+0:94              Constant:
+0:94                0 (const int)
+0:94          Constant:
+0:94            0 (const int)
+0:94        subgroupAnd ( temp 4-component vector of uint)
+0:94          u: direct index for structure ( temp 4-component vector of uint)
+0:94            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:94              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:94                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:94                Constant:
+0:94                  0 (const uint)
+0:94              direct index ( temp uint)
+0:94                'dti' ( in 3-component vector of uint)
+0:94                Constant:
+0:94                  0 (const int)
+0:94            Constant:
+0:94              0 (const int)
+0:95      move second child to first child ( temp uint)
+0:95        direct index ( temp uint)
+0:95          u: direct index for structure ( temp 4-component vector of uint)
+0:95            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:95              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:95                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:95                Constant:
+0:95                  0 (const uint)
+0:95              direct index ( temp uint)
+0:95                'dti' ( in 3-component vector of uint)
+0:95                Constant:
+0:95                  0 (const int)
+0:95            Constant:
+0:95              0 (const int)
+0:95          Constant:
+0:95            0 (const int)
+0:95        subgroupAnd ( temp uint)
+0:95          direct index ( temp uint)
+0:95            u: direct index for structure ( temp 4-component vector of uint)
+0:95              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:95                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:95                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:95                  Constant:
+0:95                    0 (const uint)
+0:95                direct index ( temp uint)
+0:95                  'dti' ( in 3-component vector of uint)
+0:95                  Constant:
+0:95                    0 (const int)
+0:95              Constant:
+0:95                0 (const int)
+0:95            Constant:
+0:95              0 (const int)
+0:96      move second child to first child ( temp 2-component vector of uint)
+0:96        vector swizzle ( temp 2-component vector of uint)
+0:96          u: direct index for structure ( temp 4-component vector of uint)
+0:96            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:96              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:96                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:96                Constant:
+0:96                  0 (const uint)
+0:96              direct index ( temp uint)
+0:96                'dti' ( in 3-component vector of uint)
+0:96                Constant:
+0:96                  0 (const int)
+0:96            Constant:
+0:96              0 (const int)
+0:96          Sequence
+0:96            Constant:
+0:96              0 (const int)
+0:96            Constant:
+0:96              1 (const int)
+0:96        subgroupAnd ( temp 2-component vector of uint)
+0:96          vector swizzle ( temp 2-component vector of uint)
+0:96            u: direct index for structure ( temp 4-component vector of uint)
+0:96              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:96                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:96                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:96                  Constant:
+0:96                    0 (const uint)
+0:96                direct index ( temp uint)
+0:96                  'dti' ( in 3-component vector of uint)
+0:96                  Constant:
+0:96                    0 (const int)
+0:96              Constant:
+0:96                0 (const int)
+0:96            Sequence
+0:96              Constant:
+0:96                0 (const int)
+0:96              Constant:
+0:96                1 (const int)
+0:97      move second child to first child ( temp 3-component vector of uint)
+0:97        vector swizzle ( temp 3-component vector of uint)
+0:97          u: direct index for structure ( temp 4-component vector of uint)
+0:97            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:97              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:97                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:97                Constant:
+0:97                  0 (const uint)
+0:97              direct index ( temp uint)
+0:97                'dti' ( in 3-component vector of uint)
+0:97                Constant:
+0:97                  0 (const int)
+0:97            Constant:
+0:97              0 (const int)
+0:97          Sequence
+0:97            Constant:
+0:97              0 (const int)
+0:97            Constant:
+0:97              1 (const int)
+0:97            Constant:
+0:97              2 (const int)
+0:97        subgroupAnd ( temp 3-component vector of uint)
+0:97          vector swizzle ( temp 3-component vector of uint)
+0:97            u: direct index for structure ( temp 4-component vector of uint)
+0:97              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:97                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:97                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:97                  Constant:
+0:97                    0 (const uint)
+0:97                direct index ( temp uint)
+0:97                  'dti' ( in 3-component vector of uint)
+0:97                  Constant:
+0:97                    0 (const int)
+0:97              Constant:
+0:97                0 (const int)
+0:97            Sequence
+0:97              Constant:
+0:97                0 (const int)
+0:97              Constant:
+0:97                1 (const int)
+0:97              Constant:
+0:97                2 (const int)
+0:99      move second child to first child ( temp 4-component vector of int)
+0:99        i: direct index for structure ( temp 4-component vector of int)
+0:99          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:99            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:99              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:99              Constant:
+0:99                0 (const uint)
+0:99            direct index ( temp uint)
+0:99              'dti' ( in 3-component vector of uint)
+0:99              Constant:
+0:99                0 (const int)
+0:99          Constant:
+0:99            1 (const int)
+0:99        subgroupAnd ( temp 4-component vector of int)
+0:99          i: direct index for structure ( temp 4-component vector of int)
+0:99            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:99              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:99                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:99                Constant:
+0:99                  0 (const uint)
+0:99              direct index ( temp uint)
+0:99                'dti' ( in 3-component vector of uint)
+0:99                Constant:
+0:99                  0 (const int)
+0:99            Constant:
+0:99              1 (const int)
+0:100      move second child to first child ( temp int)
+0:100        direct index ( temp int)
+0:100          i: direct index for structure ( temp 4-component vector of int)
+0:100            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:100              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:100                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:100                Constant:
+0:100                  0 (const uint)
+0:100              direct index ( temp uint)
+0:100                'dti' ( in 3-component vector of uint)
+0:100                Constant:
+0:100                  0 (const int)
+0:100            Constant:
+0:100              1 (const int)
+0:100          Constant:
+0:100            0 (const int)
+0:100        subgroupAnd ( temp int)
+0:100          direct index ( temp int)
+0:100            i: direct index for structure ( temp 4-component vector of int)
+0:100              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:100                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:100                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:100                  Constant:
+0:100                    0 (const uint)
+0:100                direct index ( temp uint)
+0:100                  'dti' ( in 3-component vector of uint)
+0:100                  Constant:
+0:100                    0 (const int)
+0:100              Constant:
+0:100                1 (const int)
+0:100            Constant:
+0:100              0 (const int)
+0:101      move second child to first child ( temp 2-component vector of int)
+0:101        vector swizzle ( temp 2-component vector of int)
+0:101          i: direct index for structure ( temp 4-component vector of int)
+0:101            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:101              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:101                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:101                Constant:
+0:101                  0 (const uint)
+0:101              direct index ( temp uint)
+0:101                'dti' ( in 3-component vector of uint)
+0:101                Constant:
+0:101                  0 (const int)
+0:101            Constant:
+0:101              1 (const int)
+0:101          Sequence
+0:101            Constant:
+0:101              0 (const int)
+0:101            Constant:
+0:101              1 (const int)
+0:101        subgroupAnd ( temp 2-component vector of int)
+0:101          vector swizzle ( temp 2-component vector of int)
+0:101            i: direct index for structure ( temp 4-component vector of int)
+0:101              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:101                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:101                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:101                  Constant:
+0:101                    0 (const uint)
+0:101                direct index ( temp uint)
+0:101                  'dti' ( in 3-component vector of uint)
+0:101                  Constant:
+0:101                    0 (const int)
+0:101              Constant:
+0:101                1 (const int)
+0:101            Sequence
+0:101              Constant:
+0:101                0 (const int)
+0:101              Constant:
+0:101                1 (const int)
+0:102      move second child to first child ( temp 3-component vector of int)
+0:102        vector swizzle ( temp 3-component vector of int)
+0:102          i: direct index for structure ( temp 4-component vector of int)
+0:102            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:102              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:102                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:102                Constant:
+0:102                  0 (const uint)
+0:102              direct index ( temp uint)
+0:102                'dti' ( in 3-component vector of uint)
+0:102                Constant:
+0:102                  0 (const int)
+0:102            Constant:
+0:102              1 (const int)
+0:102          Sequence
+0:102            Constant:
+0:102              0 (const int)
+0:102            Constant:
+0:102              1 (const int)
+0:102            Constant:
+0:102              2 (const int)
+0:102        subgroupAnd ( temp 3-component vector of int)
+0:102          vector swizzle ( temp 3-component vector of int)
+0:102            i: direct index for structure ( temp 4-component vector of int)
+0:102              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:102                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:102                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:102                  Constant:
+0:102                    0 (const uint)
+0:102                direct index ( temp uint)
+0:102                  'dti' ( in 3-component vector of uint)
+0:102                  Constant:
+0:102                    0 (const int)
+0:102              Constant:
+0:102                1 (const int)
+0:102            Sequence
+0:102              Constant:
+0:102                0 (const int)
+0:102              Constant:
+0:102                1 (const int)
+0:102              Constant:
+0:102                2 (const int)
+0:104      move second child to first child ( temp 4-component vector of uint)
+0:104        u: direct index for structure ( temp 4-component vector of uint)
+0:104          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:104            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:104              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:104              Constant:
+0:104                0 (const uint)
+0:104            direct index ( temp uint)
+0:104              'dti' ( in 3-component vector of uint)
+0:104              Constant:
+0:104                0 (const int)
+0:104          Constant:
+0:104            0 (const int)
+0:104        subgroupOr ( temp 4-component vector of uint)
+0:104          u: direct index for structure ( temp 4-component vector of uint)
+0:104            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:104              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:104                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:104                Constant:
+0:104                  0 (const uint)
+0:104              direct index ( temp uint)
+0:104                'dti' ( in 3-component vector of uint)
+0:104                Constant:
+0:104                  0 (const int)
+0:104            Constant:
+0:104              0 (const int)
+0:105      move second child to first child ( temp uint)
+0:105        direct index ( temp uint)
+0:105          u: direct index for structure ( temp 4-component vector of uint)
+0:105            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:105              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:105                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:105                Constant:
+0:105                  0 (const uint)
+0:105              direct index ( temp uint)
+0:105                'dti' ( in 3-component vector of uint)
+0:105                Constant:
+0:105                  0 (const int)
+0:105            Constant:
+0:105              0 (const int)
+0:105          Constant:
+0:105            0 (const int)
+0:105        subgroupOr ( temp uint)
+0:105          direct index ( temp uint)
+0:105            u: direct index for structure ( temp 4-component vector of uint)
+0:105              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:105                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:105                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:105                  Constant:
+0:105                    0 (const uint)
+0:105                direct index ( temp uint)
+0:105                  'dti' ( in 3-component vector of uint)
+0:105                  Constant:
+0:105                    0 (const int)
+0:105              Constant:
+0:105                0 (const int)
+0:105            Constant:
+0:105              0 (const int)
+0:106      move second child to first child ( temp 2-component vector of uint)
+0:106        vector swizzle ( temp 2-component vector of uint)
+0:106          u: direct index for structure ( temp 4-component vector of uint)
+0:106            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:106              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:106                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:106                Constant:
+0:106                  0 (const uint)
+0:106              direct index ( temp uint)
+0:106                'dti' ( in 3-component vector of uint)
+0:106                Constant:
+0:106                  0 (const int)
+0:106            Constant:
+0:106              0 (const int)
+0:106          Sequence
+0:106            Constant:
+0:106              0 (const int)
+0:106            Constant:
+0:106              1 (const int)
+0:106        subgroupOr ( temp 2-component vector of uint)
+0:106          vector swizzle ( temp 2-component vector of uint)
+0:106            u: direct index for structure ( temp 4-component vector of uint)
+0:106              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:106                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:106                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:106                  Constant:
+0:106                    0 (const uint)
+0:106                direct index ( temp uint)
+0:106                  'dti' ( in 3-component vector of uint)
+0:106                  Constant:
+0:106                    0 (const int)
+0:106              Constant:
+0:106                0 (const int)
+0:106            Sequence
+0:106              Constant:
+0:106                0 (const int)
+0:106              Constant:
+0:106                1 (const int)
+0:107      move second child to first child ( temp 3-component vector of uint)
+0:107        vector swizzle ( temp 3-component vector of uint)
+0:107          u: direct index for structure ( temp 4-component vector of uint)
+0:107            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:107              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:107                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:107                Constant:
+0:107                  0 (const uint)
+0:107              direct index ( temp uint)
+0:107                'dti' ( in 3-component vector of uint)
+0:107                Constant:
+0:107                  0 (const int)
+0:107            Constant:
+0:107              0 (const int)
+0:107          Sequence
+0:107            Constant:
+0:107              0 (const int)
+0:107            Constant:
+0:107              1 (const int)
+0:107            Constant:
+0:107              2 (const int)
+0:107        subgroupOr ( temp 3-component vector of uint)
+0:107          vector swizzle ( temp 3-component vector of uint)
+0:107            u: direct index for structure ( temp 4-component vector of uint)
+0:107              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:107                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:107                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:107                  Constant:
+0:107                    0 (const uint)
+0:107                direct index ( temp uint)
+0:107                  'dti' ( in 3-component vector of uint)
+0:107                  Constant:
+0:107                    0 (const int)
+0:107              Constant:
+0:107                0 (const int)
+0:107            Sequence
+0:107              Constant:
+0:107                0 (const int)
+0:107              Constant:
+0:107                1 (const int)
+0:107              Constant:
+0:107                2 (const int)
+0:109      move second child to first child ( temp 4-component vector of int)
+0:109        i: direct index for structure ( temp 4-component vector of int)
+0:109          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:109            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:109              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:109              Constant:
+0:109                0 (const uint)
+0:109            direct index ( temp uint)
+0:109              'dti' ( in 3-component vector of uint)
+0:109              Constant:
+0:109                0 (const int)
+0:109          Constant:
+0:109            1 (const int)
+0:109        subgroupOr ( temp 4-component vector of int)
+0:109          i: direct index for structure ( temp 4-component vector of int)
+0:109            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:109              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:109                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:109                Constant:
+0:109                  0 (const uint)
+0:109              direct index ( temp uint)
+0:109                'dti' ( in 3-component vector of uint)
+0:109                Constant:
+0:109                  0 (const int)
+0:109            Constant:
+0:109              1 (const int)
+0:110      move second child to first child ( temp int)
+0:110        direct index ( temp int)
+0:110          i: direct index for structure ( temp 4-component vector of int)
+0:110            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:110              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:110                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:110                Constant:
+0:110                  0 (const uint)
+0:110              direct index ( temp uint)
+0:110                'dti' ( in 3-component vector of uint)
+0:110                Constant:
+0:110                  0 (const int)
+0:110            Constant:
+0:110              1 (const int)
+0:110          Constant:
+0:110            0 (const int)
+0:110        subgroupOr ( temp int)
+0:110          direct index ( temp int)
+0:110            i: direct index for structure ( temp 4-component vector of int)
+0:110              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:110                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:110                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:110                  Constant:
+0:110                    0 (const uint)
+0:110                direct index ( temp uint)
+0:110                  'dti' ( in 3-component vector of uint)
+0:110                  Constant:
+0:110                    0 (const int)
+0:110              Constant:
+0:110                1 (const int)
+0:110            Constant:
+0:110              0 (const int)
+0:111      move second child to first child ( temp 2-component vector of int)
+0:111        vector swizzle ( temp 2-component vector of int)
+0:111          i: direct index for structure ( temp 4-component vector of int)
+0:111            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:111              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:111                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:111                Constant:
+0:111                  0 (const uint)
+0:111              direct index ( temp uint)
+0:111                'dti' ( in 3-component vector of uint)
+0:111                Constant:
+0:111                  0 (const int)
+0:111            Constant:
+0:111              1 (const int)
+0:111          Sequence
+0:111            Constant:
+0:111              0 (const int)
+0:111            Constant:
+0:111              1 (const int)
+0:111        subgroupOr ( temp 2-component vector of int)
+0:111          vector swizzle ( temp 2-component vector of int)
+0:111            i: direct index for structure ( temp 4-component vector of int)
+0:111              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:111                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:111                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:111                  Constant:
+0:111                    0 (const uint)
+0:111                direct index ( temp uint)
+0:111                  'dti' ( in 3-component vector of uint)
+0:111                  Constant:
+0:111                    0 (const int)
+0:111              Constant:
+0:111                1 (const int)
+0:111            Sequence
+0:111              Constant:
+0:111                0 (const int)
+0:111              Constant:
+0:111                1 (const int)
+0:112      move second child to first child ( temp 3-component vector of int)
+0:112        vector swizzle ( temp 3-component vector of int)
+0:112          i: direct index for structure ( temp 4-component vector of int)
+0:112            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:112              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:112                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:112                Constant:
+0:112                  0 (const uint)
+0:112              direct index ( temp uint)
+0:112                'dti' ( in 3-component vector of uint)
+0:112                Constant:
+0:112                  0 (const int)
+0:112            Constant:
+0:112              1 (const int)
+0:112          Sequence
+0:112            Constant:
+0:112              0 (const int)
+0:112            Constant:
+0:112              1 (const int)
+0:112            Constant:
+0:112              2 (const int)
+0:112        subgroupOr ( temp 3-component vector of int)
+0:112          vector swizzle ( temp 3-component vector of int)
+0:112            i: direct index for structure ( temp 4-component vector of int)
+0:112              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:112                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:112                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:112                  Constant:
+0:112                    0 (const uint)
+0:112                direct index ( temp uint)
+0:112                  'dti' ( in 3-component vector of uint)
+0:112                  Constant:
+0:112                    0 (const int)
+0:112              Constant:
+0:112                1 (const int)
+0:112            Sequence
+0:112              Constant:
+0:112                0 (const int)
+0:112              Constant:
+0:112                1 (const int)
+0:112              Constant:
+0:112                2 (const int)
+0:114      move second child to first child ( temp 4-component vector of uint)
+0:114        u: direct index for structure ( temp 4-component vector of uint)
+0:114          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:114            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:114              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:114              Constant:
+0:114                0 (const uint)
+0:114            direct index ( temp uint)
+0:114              'dti' ( in 3-component vector of uint)
+0:114              Constant:
+0:114                0 (const int)
+0:114          Constant:
+0:114            0 (const int)
+0:114        subgroupXor ( temp 4-component vector of uint)
+0:114          u: direct index for structure ( temp 4-component vector of uint)
+0:114            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:114              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:114                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:114                Constant:
+0:114                  0 (const uint)
+0:114              direct index ( temp uint)
+0:114                'dti' ( in 3-component vector of uint)
+0:114                Constant:
+0:114                  0 (const int)
+0:114            Constant:
+0:114              0 (const int)
+0:115      move second child to first child ( temp uint)
+0:115        direct index ( temp uint)
+0:115          u: direct index for structure ( temp 4-component vector of uint)
+0:115            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:115              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:115                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:115                Constant:
+0:115                  0 (const uint)
+0:115              direct index ( temp uint)
+0:115                'dti' ( in 3-component vector of uint)
+0:115                Constant:
+0:115                  0 (const int)
+0:115            Constant:
+0:115              0 (const int)
+0:115          Constant:
+0:115            0 (const int)
+0:115        subgroupXor ( temp uint)
+0:115          direct index ( temp uint)
+0:115            u: direct index for structure ( temp 4-component vector of uint)
+0:115              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:115                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:115                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:115                  Constant:
+0:115                    0 (const uint)
+0:115                direct index ( temp uint)
+0:115                  'dti' ( in 3-component vector of uint)
+0:115                  Constant:
+0:115                    0 (const int)
+0:115              Constant:
+0:115                0 (const int)
+0:115            Constant:
+0:115              0 (const int)
+0:116      move second child to first child ( temp 2-component vector of uint)
+0:116        vector swizzle ( temp 2-component vector of uint)
+0:116          u: direct index for structure ( temp 4-component vector of uint)
+0:116            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:116              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:116                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:116                Constant:
+0:116                  0 (const uint)
+0:116              direct index ( temp uint)
+0:116                'dti' ( in 3-component vector of uint)
+0:116                Constant:
+0:116                  0 (const int)
+0:116            Constant:
+0:116              0 (const int)
+0:116          Sequence
+0:116            Constant:
+0:116              0 (const int)
+0:116            Constant:
+0:116              1 (const int)
+0:116        subgroupXor ( temp 2-component vector of uint)
+0:116          vector swizzle ( temp 2-component vector of uint)
+0:116            u: direct index for structure ( temp 4-component vector of uint)
+0:116              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:116                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:116                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:116                  Constant:
+0:116                    0 (const uint)
+0:116                direct index ( temp uint)
+0:116                  'dti' ( in 3-component vector of uint)
+0:116                  Constant:
+0:116                    0 (const int)
+0:116              Constant:
+0:116                0 (const int)
+0:116            Sequence
+0:116              Constant:
+0:116                0 (const int)
+0:116              Constant:
+0:116                1 (const int)
+0:117      move second child to first child ( temp 3-component vector of uint)
+0:117        vector swizzle ( temp 3-component vector of uint)
+0:117          u: direct index for structure ( temp 4-component vector of uint)
+0:117            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:117              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:117                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:117                Constant:
+0:117                  0 (const uint)
+0:117              direct index ( temp uint)
+0:117                'dti' ( in 3-component vector of uint)
+0:117                Constant:
+0:117                  0 (const int)
+0:117            Constant:
+0:117              0 (const int)
+0:117          Sequence
+0:117            Constant:
+0:117              0 (const int)
+0:117            Constant:
+0:117              1 (const int)
+0:117            Constant:
+0:117              2 (const int)
+0:117        subgroupXor ( temp 3-component vector of uint)
+0:117          vector swizzle ( temp 3-component vector of uint)
+0:117            u: direct index for structure ( temp 4-component vector of uint)
+0:117              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:117                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:117                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:117                  Constant:
+0:117                    0 (const uint)
+0:117                direct index ( temp uint)
+0:117                  'dti' ( in 3-component vector of uint)
+0:117                  Constant:
+0:117                    0 (const int)
+0:117              Constant:
+0:117                0 (const int)
+0:117            Sequence
+0:117              Constant:
+0:117                0 (const int)
+0:117              Constant:
+0:117                1 (const int)
+0:117              Constant:
+0:117                2 (const int)
+0:119      move second child to first child ( temp 4-component vector of int)
+0:119        i: direct index for structure ( temp 4-component vector of int)
+0:119          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:119            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:119              'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:119              Constant:
+0:119                0 (const uint)
+0:119            direct index ( temp uint)
+0:119              'dti' ( in 3-component vector of uint)
+0:119              Constant:
+0:119                0 (const int)
+0:119          Constant:
+0:119            1 (const int)
+0:119        subgroupXor ( temp 4-component vector of int)
+0:119          i: direct index for structure ( temp 4-component vector of int)
+0:119            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:119              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:119                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:119                Constant:
+0:119                  0 (const uint)
+0:119              direct index ( temp uint)
+0:119                'dti' ( in 3-component vector of uint)
+0:119                Constant:
+0:119                  0 (const int)
+0:119            Constant:
+0:119              1 (const int)
+0:120      move second child to first child ( temp int)
+0:120        direct index ( temp int)
+0:120          i: direct index for structure ( temp 4-component vector of int)
+0:120            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:120              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:120                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:120                Constant:
+0:120                  0 (const uint)
+0:120              direct index ( temp uint)
+0:120                'dti' ( in 3-component vector of uint)
+0:120                Constant:
+0:120                  0 (const int)
+0:120            Constant:
+0:120              1 (const int)
+0:120          Constant:
+0:120            0 (const int)
+0:120        subgroupXor ( temp int)
+0:120          direct index ( temp int)
+0:120            i: direct index for structure ( temp 4-component vector of int)
+0:120              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:120                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:120                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:120                  Constant:
+0:120                    0 (const uint)
+0:120                direct index ( temp uint)
+0:120                  'dti' ( in 3-component vector of uint)
+0:120                  Constant:
+0:120                    0 (const int)
+0:120              Constant:
+0:120                1 (const int)
+0:120            Constant:
+0:120              0 (const int)
+0:121      move second child to first child ( temp 2-component vector of int)
+0:121        vector swizzle ( temp 2-component vector of int)
+0:121          i: direct index for structure ( temp 4-component vector of int)
+0:121            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:121              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:121                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:121                Constant:
+0:121                  0 (const uint)
+0:121              direct index ( temp uint)
+0:121                'dti' ( in 3-component vector of uint)
+0:121                Constant:
+0:121                  0 (const int)
+0:121            Constant:
+0:121              1 (const int)
+0:121          Sequence
+0:121            Constant:
+0:121              0 (const int)
+0:121            Constant:
+0:121              1 (const int)
+0:121        subgroupXor ( temp 2-component vector of int)
+0:121          vector swizzle ( temp 2-component vector of int)
+0:121            i: direct index for structure ( temp 4-component vector of int)
+0:121              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:121                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:121                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:121                  Constant:
+0:121                    0 (const uint)
+0:121                direct index ( temp uint)
+0:121                  'dti' ( in 3-component vector of uint)
+0:121                  Constant:
+0:121                    0 (const int)
+0:121              Constant:
+0:121                1 (const int)
+0:121            Sequence
+0:121              Constant:
+0:121                0 (const int)
+0:121              Constant:
+0:121                1 (const int)
+0:122      move second child to first child ( temp 3-component vector of int)
+0:122        vector swizzle ( temp 3-component vector of int)
+0:122          i: direct index for structure ( temp 4-component vector of int)
+0:122            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:122              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:122                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:122                Constant:
+0:122                  0 (const uint)
+0:122              direct index ( temp uint)
+0:122                'dti' ( in 3-component vector of uint)
+0:122                Constant:
+0:122                  0 (const int)
+0:122            Constant:
+0:122              1 (const int)
+0:122          Sequence
+0:122            Constant:
+0:122              0 (const int)
+0:122            Constant:
+0:122              1 (const int)
+0:122            Constant:
+0:122              2 (const int)
+0:122        subgroupXor ( temp 3-component vector of int)
+0:122          vector swizzle ( temp 3-component vector of int)
+0:122            i: direct index for structure ( temp 4-component vector of int)
+0:122              indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:122                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:122                  'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:122                  Constant:
+0:122                    0 (const uint)
+0:122                direct index ( temp uint)
+0:122                  'dti' ( in 3-component vector of uint)
+0:122                  Constant:
+0:122                    0 (const int)
+0:122              Constant:
+0:122                1 (const int)
+0:122            Sequence
+0:122              Constant:
+0:122                0 (const int)
+0:122              Constant:
+0:122                1 (const int)
+0:122              Constant:
+0:122                2 (const int)
+0:124      move second child to first child ( temp uint)
+0:124        direct index ( temp uint)
+0:124          u: direct index for structure ( temp 4-component vector of uint)
+0:124            indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:124              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:124                'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:124                Constant:
+0:124                  0 (const uint)
+0:124              direct index ( temp uint)
+0:124                'dti' ( in 3-component vector of uint)
+0:124                Constant:
+0:124                  0 (const int)
+0:124            Constant:
+0:124              0 (const int)
+0:124          Constant:
+0:124            0 (const int)
+0:124        subgroupBallotBitCount ( temp uint)
+0:124          subgroupBallot ( temp 4-component vector of uint)
+0:124            Compare Equal ( temp bool)
+0:124              direct index ( temp uint)
+0:124                u: direct index for structure ( temp 4-component vector of uint)
+0:124                  indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:124                    @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d})
+0:124                      'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:124                      Constant:
+0:124                        0 (const uint)
+0:124                    direct index ( temp uint)
+0:124                      'dti' ( in 3-component vector of uint)
+0:124                      Constant:
+0:124                        0 (const int)
+0:124                  Constant:
+0:124                    0 (const int)
+0:124                Constant:
+0:124                  0 (const int)
+0:124              Constant:
+0:124                0 (const uint)
+0:13  Function Definition: CSMain( ( temp void)
+0:13    Function Parameters: 
+0:?     Sequence
+0:13      move second child to first child ( temp 3-component vector of uint)
+0:?         'dti' ( temp 3-component vector of uint)
+0:?         'dti' ( in 3-component vector of uint GlobalInvocationID)
+0:13      Function Call: @CSMain(vu3; ( temp void)
+0:?         'dti' ( temp 3-component vector of uint)
+0:?   Linker Objects
+0:?     'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of uint u,  temp 4-component vector of int i,  temp 4-component vector of float f,  temp 4-component vector of double d} @data})
+0:?     'dti' ( in 3-component vector of uint GlobalInvocationID)
+
+// Module Version 10300
+// Generated by (magic number): 80006
+// Id's are bound by 901
+
+                              Capability Shader
+                              Capability Float64
+                              Capability GroupNonUniform
+                              Capability GroupNonUniformArithmetic
+                              Capability GroupNonUniformBallot
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "CSMain" 896
+                              ExecutionMode 4 LocalSize 32 16 1
+                              Source HLSL 500
+                              Name 4  "CSMain"
+                              Name 11  "@CSMain(vu3;"
+                              Name 10  "dti"
+                              Name 20  "Types"
+                              MemberName 20(Types) 0  "u"
+                              MemberName 20(Types) 1  "i"
+                              MemberName 20(Types) 2  "f"
+                              MemberName 20(Types) 3  "d"
+                              Name 22  "data"
+                              MemberName 22(data) 0  "@data"
+                              Name 24  "data"
+                              Name 894  "dti"
+                              Name 896  "dti"
+                              Name 898  "param"
+                              MemberDecorate 20(Types) 0 Offset 0
+                              MemberDecorate 20(Types) 1 Offset 16
+                              MemberDecorate 20(Types) 2 Offset 32
+                              MemberDecorate 20(Types) 3 Offset 64
+                              Decorate 21 ArrayStride 96
+                              MemberDecorate 22(data) 0 Offset 0
+                              Decorate 22(data) BufferBlock
+                              Decorate 24(data) DescriptorSet 0
+                              Decorate 896(dti) BuiltIn GlobalInvocationId
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypeVector 6(int) 3
+               8:             TypePointer Function 7(ivec3)
+               9:             TypeFunction 2 8(ptr)
+              13:             TypeVector 6(int) 4
+              14:             TypeInt 32 1
+              15:             TypeVector 14(int) 4
+              16:             TypeFloat 32
+              17:             TypeVector 16(float) 4
+              18:             TypeFloat 64
+              19:             TypeVector 18(float) 4
+       20(Types):             TypeStruct 13(ivec4) 15(ivec4) 17(fvec4) 19(fvec4)
+              21:             TypeRuntimeArray 20(Types)
+        22(data):             TypeStruct 21
+              23:             TypePointer Uniform 22(data)
+        24(data):     23(ptr) Variable Uniform
+              25:     14(int) Constant 0
+              26:      6(int) Constant 0
+              27:             TypePointer Function 6(int)
+              32:             TypePointer Uniform 13(ivec4)
+              35:      6(int) Constant 3
+              42:             TypePointer Uniform 6(int)
+              51:             TypeVector 6(int) 2
+              72:     14(int) Constant 1
+              75:             TypePointer Uniform 15(ivec4)
+              84:             TypePointer Uniform 14(int)
+              93:             TypeVector 14(int) 2
+             105:             TypeVector 14(int) 3
+             115:     14(int) Constant 2
+             118:             TypePointer Uniform 17(fvec4)
+             127:             TypePointer Uniform 16(float)
+             136:             TypeVector 16(float) 2
+             148:             TypeVector 16(float) 3
+             158:     14(int) Constant 3
+             161:             TypePointer Uniform 19(fvec4)
+             170:             TypePointer Uniform 18(float)
+             179:             TypeVector 18(float) 2
+             191:             TypeVector 18(float) 3
+             889:             TypeBool
+             895:             TypePointer Input 7(ivec3)
+        896(dti):    895(ptr) Variable Input
+       4(CSMain):           2 Function None 3
+               5:             Label
+        894(dti):      8(ptr) Variable Function
+      898(param):      8(ptr) Variable Function
+             897:    7(ivec3) Load 896(dti)
+                              Store 894(dti) 897
+             899:    7(ivec3) Load 894(dti)
+                              Store 898(param) 899
+             900:           2 FunctionCall 11(@CSMain(vu3;) 898(param)
+                              Return
+                              FunctionEnd
+11(@CSMain(vu3;):           2 Function None 9
+         10(dti):      8(ptr) FunctionParameter
+              12:             Label
+              28:     27(ptr) AccessChain 10(dti) 26
+              29:      6(int) Load 28
+              30:     27(ptr) AccessChain 10(dti) 26
+              31:      6(int) Load 30
+              33:     32(ptr) AccessChain 24(data) 25 31 25
+              34:   13(ivec4) Load 33
+              36:   13(ivec4) GroupNonUniformIAdd 35 Reduce 34
+              37:     32(ptr) AccessChain 24(data) 25 29 25
+                              Store 37 36
+              38:     27(ptr) AccessChain 10(dti) 26
+              39:      6(int) Load 38
+              40:     27(ptr) AccessChain 10(dti) 26
+              41:      6(int) Load 40
+              43:     42(ptr) AccessChain 24(data) 25 41 25 26
+              44:      6(int) Load 43
+              45:      6(int) GroupNonUniformIAdd 35 Reduce 44
+              46:     42(ptr) AccessChain 24(data) 25 39 25 26
+                              Store 46 45
+              47:     27(ptr) AccessChain 10(dti) 26
+              48:      6(int) Load 47
+              49:     27(ptr) AccessChain 10(dti) 26
+              50:      6(int) Load 49
+              52:     32(ptr) AccessChain 24(data) 25 50 25
+              53:   13(ivec4) Load 52
+              54:   51(ivec2) VectorShuffle 53 53 0 1
+              55:   51(ivec2) GroupNonUniformIAdd 35 Reduce 54
+              56:     32(ptr) AccessChain 24(data) 25 48 25
+              57:   13(ivec4) Load 56
+              58:   13(ivec4) VectorShuffle 57 55 4 5 2 3
+                              Store 56 58
+              59:     27(ptr) AccessChain 10(dti) 26
+              60:      6(int) Load 59
+              61:     27(ptr) AccessChain 10(dti) 26
+              62:      6(int) Load 61
+              63:     32(ptr) AccessChain 24(data) 25 62 25
+              64:   13(ivec4) Load 63
+              65:    7(ivec3) VectorShuffle 64 64 0 1 2
+              66:    7(ivec3) GroupNonUniformIAdd 35 Reduce 65
+              67:     32(ptr) AccessChain 24(data) 25 60 25
+              68:   13(ivec4) Load 67
+              69:   13(ivec4) VectorShuffle 68 66 4 5 6 3
+                              Store 67 69
+              70:     27(ptr) AccessChain 10(dti) 26
+              71:      6(int) Load 70
+              73:     27(ptr) AccessChain 10(dti) 26
+              74:      6(int) Load 73
+              76:     75(ptr) AccessChain 24(data) 25 74 72
+              77:   15(ivec4) Load 76
+              78:   15(ivec4) GroupNonUniformIAdd 35 Reduce 77
+              79:     75(ptr) AccessChain 24(data) 25 71 72
+                              Store 79 78
+              80:     27(ptr) AccessChain 10(dti) 26
+              81:      6(int) Load 80
+              82:     27(ptr) AccessChain 10(dti) 26
+              83:      6(int) Load 82
+              85:     84(ptr) AccessChain 24(data) 25 83 72 26
+              86:     14(int) Load 85
+              87:     14(int) GroupNonUniformIAdd 35 Reduce 86
+              88:     84(ptr) AccessChain 24(data) 25 81 72 26
+                              Store 88 87
+              89:     27(ptr) AccessChain 10(dti) 26
+              90:      6(int) Load 89
+              91:     27(ptr) AccessChain 10(dti) 26
+              92:      6(int) Load 91
+              94:     75(ptr) AccessChain 24(data) 25 92 72
+              95:   15(ivec4) Load 94
+              96:   93(ivec2) VectorShuffle 95 95 0 1
+              97:   93(ivec2) GroupNonUniformIAdd 35 Reduce 96
+              98:     75(ptr) AccessChain 24(data) 25 90 72
+              99:   15(ivec4) Load 98
+             100:   15(ivec4) VectorShuffle 99 97 4 5 2 3
+                              Store 98 100
+             101:     27(ptr) AccessChain 10(dti) 26
+             102:      6(int) Load 101
+             103:     27(ptr) AccessChain 10(dti) 26
+             104:      6(int) Load 103
+             106:     75(ptr) AccessChain 24(data) 25 104 72
+             107:   15(ivec4) Load 106
+             108:  105(ivec3) VectorShuffle 107 107 0 1 2
+             109:  105(ivec3) GroupNonUniformIAdd 35 Reduce 108
+             110:     75(ptr) AccessChain 24(data) 25 102 72
+             111:   15(ivec4) Load 110
+             112:   15(ivec4) VectorShuffle 111 109 4 5 6 3
+                              Store 110 112
+             113:     27(ptr) AccessChain 10(dti) 26
+             114:      6(int) Load 113
+             116:     27(ptr) AccessChain 10(dti) 26
+             117:      6(int) Load 116
+             119:    118(ptr) AccessChain 24(data) 25 117 115
+             120:   17(fvec4) Load 119
+             121:   17(fvec4) GroupNonUniformFAdd 35 Reduce 120
+             122:    118(ptr) AccessChain 24(data) 25 114 115
+                              Store 122 121
+             123:     27(ptr) AccessChain 10(dti) 26
+             124:      6(int) Load 123
+             125:     27(ptr) AccessChain 10(dti) 26
+             126:      6(int) Load 125
+             128:    127(ptr) AccessChain 24(data) 25 126 115 26
+             129:   16(float) Load 128
+             130:   16(float) GroupNonUniformFAdd 35 Reduce 129
+             131:    127(ptr) AccessChain 24(data) 25 124 115 26
+                              Store 131 130
+             132:     27(ptr) AccessChain 10(dti) 26
+             133:      6(int) Load 132
+             134:     27(ptr) AccessChain 10(dti) 26
+             135:      6(int) Load 134
+             137:    118(ptr) AccessChain 24(data) 25 135 115
+             138:   17(fvec4) Load 137
+             139:  136(fvec2) VectorShuffle 138 138 0 1
+             140:  136(fvec2) GroupNonUniformFAdd 35 Reduce 139
+             141:    118(ptr) AccessChain 24(data) 25 133 115
+             142:   17(fvec4) Load 141
+             143:   17(fvec4) VectorShuffle 142 140 4 5 2 3
+                              Store 141 143
+             144:     27(ptr) AccessChain 10(dti) 26
+             145:      6(int) Load 144
+             146:     27(ptr) AccessChain 10(dti) 26
+             147:      6(int) Load 146
+             149:    118(ptr) AccessChain 24(data) 25 147 115
+             150:   17(fvec4) Load 149
+             151:  148(fvec3) VectorShuffle 150 150 0 1 2
+             152:  148(fvec3) GroupNonUniformFAdd 35 Reduce 151
+             153:    118(ptr) AccessChain 24(data) 25 145 115
+             154:   17(fvec4) Load 153
+             155:   17(fvec4) VectorShuffle 154 152 4 5 6 3
+                              Store 153 155
+             156:     27(ptr) AccessChain 10(dti) 26
+             157:      6(int) Load 156
+             159:     27(ptr) AccessChain 10(dti) 26
+             160:      6(int) Load 159
+             162:    161(ptr) AccessChain 24(data) 25 160 158
+             163:   19(fvec4) Load 162
+             164:   19(fvec4) GroupNonUniformFAdd 35 Reduce 163
+             165:    161(ptr) AccessChain 24(data) 25 157 158
+                              Store 165 164
+             166:     27(ptr) AccessChain 10(dti) 26
+             167:      6(int) Load 166
+             168:     27(ptr) AccessChain 10(dti) 26
+             169:      6(int) Load 168
+             171:    170(ptr) AccessChain 24(data) 25 169 158 26
+             172:   18(float) Load 171
+             173:   18(float) GroupNonUniformFAdd 35 Reduce 172
+             174:    170(ptr) AccessChain 24(data) 25 167 158 26
+                              Store 174 173
+             175:     27(ptr) AccessChain 10(dti) 26
+             176:      6(int) Load 175
+             177:     27(ptr) AccessChain 10(dti) 26
+             178:      6(int) Load 177
+             180:    161(ptr) AccessChain 24(data) 25 178 158
+             181:   19(fvec4) Load 180
+             182:  179(fvec2) VectorShuffle 181 181 0 1
+             183:  179(fvec2) GroupNonUniformFAdd 35 Reduce 182
+             184:    161(ptr) AccessChain 24(data) 25 176 158
+             185:   19(fvec4) Load 184
+             186:   19(fvec4) VectorShuffle 185 183 4 5 2 3
+                              Store 184 186
+             187:     27(ptr) AccessChain 10(dti) 26
+             188:      6(int) Load 187
+             189:     27(ptr) AccessChain 10(dti) 26
+             190:      6(int) Load 189
+             192:    161(ptr) AccessChain 24(data) 25 190 158
+             193:   19(fvec4) Load 192
+             194:  191(fvec3) VectorShuffle 193 193 0 1 2
+             195:  191(fvec3) GroupNonUniformFAdd 35 Reduce 194
+             196:    161(ptr) AccessChain 24(data) 25 188 158
+             197:   19(fvec4) Load 196
+             198:   19(fvec4) VectorShuffle 197 195 4 5 6 3
+                              Store 196 198
+             199:     27(ptr) AccessChain 10(dti) 26
+             200:      6(int) Load 199
+             201:     27(ptr) AccessChain 10(dti) 26
+             202:      6(int) Load 201
+             203:     32(ptr) AccessChain 24(data) 25 202 25
+             204:   13(ivec4) Load 203
+             205:   13(ivec4) GroupNonUniformIMul 35 Reduce 204
+             206:     32(ptr) AccessChain 24(data) 25 200 25
+                              Store 206 205
+             207:     27(ptr) AccessChain 10(dti) 26
+             208:      6(int) Load 207
+             209:     27(ptr) AccessChain 10(dti) 26
+             210:      6(int) Load 209
+             211:     42(ptr) AccessChain 24(data) 25 210 25 26
+             212:      6(int) Load 211
+             213:      6(int) GroupNonUniformIMul 35 Reduce 212
+             214:     42(ptr) AccessChain 24(data) 25 208 25 26
+                              Store 214 213
+             215:     27(ptr) AccessChain 10(dti) 26
+             216:      6(int) Load 215
+             217:     27(ptr) AccessChain 10(dti) 26
+             218:      6(int) Load 217
+             219:     32(ptr) AccessChain 24(data) 25 218 25
+             220:   13(ivec4) Load 219
+             221:   51(ivec2) VectorShuffle 220 220 0 1
+             222:   51(ivec2) GroupNonUniformIMul 35 Reduce 221
+             223:     32(ptr) AccessChain 24(data) 25 216 25
+             224:   13(ivec4) Load 223
+             225:   13(ivec4) VectorShuffle 224 222 4 5 2 3
+                              Store 223 225
+             226:     27(ptr) AccessChain 10(dti) 26
+             227:      6(int) Load 226
+             228:     27(ptr) AccessChain 10(dti) 26
+             229:      6(int) Load 228
+             230:     32(ptr) AccessChain 24(data) 25 229 25
+             231:   13(ivec4) Load 230
+             232:    7(ivec3) VectorShuffle 231 231 0 1 2
+             233:    7(ivec3) GroupNonUniformIMul 35 Reduce 232
+             234:     32(ptr) AccessChain 24(data) 25 227 25
+             235:   13(ivec4) Load 234
+             236:   13(ivec4) VectorShuffle 235 233 4 5 6 3
+                              Store 234 236
+             237:     27(ptr) AccessChain 10(dti) 26
+             238:      6(int) Load 237
+             239:     27(ptr) AccessChain 10(dti) 26
+             240:      6(int) Load 239
+             241:     75(ptr) AccessChain 24(data) 25 240 72
+             242:   15(ivec4) Load 241
+             243:   15(ivec4) GroupNonUniformIMul 35 Reduce 242
+             244:     75(ptr) AccessChain 24(data) 25 238 72
+                              Store 244 243
+             245:     27(ptr) AccessChain 10(dti) 26
+             246:      6(int) Load 245
+             247:     27(ptr) AccessChain 10(dti) 26
+             248:      6(int) Load 247
+             249:     84(ptr) AccessChain 24(data) 25 248 72 26
+             250:     14(int) Load 249
+             251:     14(int) GroupNonUniformIMul 35 Reduce 250
+             252:     84(ptr) AccessChain 24(data) 25 246 72 26
+                              Store 252 251
+             253:     27(ptr) AccessChain 10(dti) 26
+             254:      6(int) Load 253
+             255:     27(ptr) AccessChain 10(dti) 26
+             256:      6(int) Load 255
+             257:     75(ptr) AccessChain 24(data) 25 256 72
+             258:   15(ivec4) Load 257
+             259:   93(ivec2) VectorShuffle 258 258 0 1
+             260:   93(ivec2) GroupNonUniformIMul 35 Reduce 259
+             261:     75(ptr) AccessChain 24(data) 25 254 72
+             262:   15(ivec4) Load 261
+             263:   15(ivec4) VectorShuffle 262 260 4 5 2 3
+                              Store 261 263
+             264:     27(ptr) AccessChain 10(dti) 26
+             265:      6(int) Load 264
+             266:     27(ptr) AccessChain 10(dti) 26
+             267:      6(int) Load 266
+             268:     75(ptr) AccessChain 24(data) 25 267 72
+             269:   15(ivec4) Load 268
+             270:  105(ivec3) VectorShuffle 269 269 0 1 2
+             271:  105(ivec3) GroupNonUniformIMul 35 Reduce 270
+             272:     75(ptr) AccessChain 24(data) 25 265 72
+             273:   15(ivec4) Load 272
+             274:   15(ivec4) VectorShuffle 273 271 4 5 6 3
+                              Store 272 274
+             275:     27(ptr) AccessChain 10(dti) 26
+             276:      6(int) Load 275
+             277:     27(ptr) AccessChain 10(dti) 26
+             278:      6(int) Load 277
+             279:    118(ptr) AccessChain 24(data) 25 278 115
+             280:   17(fvec4) Load 279
+             281:   17(fvec4) GroupNonUniformFMul 35 Reduce 280
+             282:    118(ptr) AccessChain 24(data) 25 276 115
+                              Store 282 281
+             283:     27(ptr) AccessChain 10(dti) 26
+             284:      6(int) Load 283
+             285:     27(ptr) AccessChain 10(dti) 26
+             286:      6(int) Load 285
+             287:    127(ptr) AccessChain 24(data) 25 286 115 26
+             288:   16(float) Load 287
+             289:   16(float) GroupNonUniformFMul 35 Reduce 288
+             290:    127(ptr) AccessChain 24(data) 25 284 115 26
+                              Store 290 289
+             291:     27(ptr) AccessChain 10(dti) 26
+             292:      6(int) Load 291
+             293:     27(ptr) AccessChain 10(dti) 26
+             294:      6(int) Load 293
+             295:    118(ptr) AccessChain 24(data) 25 294 115
+             296:   17(fvec4) Load 295
+             297:  136(fvec2) VectorShuffle 296 296 0 1
+             298:  136(fvec2) GroupNonUniformFMul 35 Reduce 297
+             299:    118(ptr) AccessChain 24(data) 25 292 115
+             300:   17(fvec4) Load 299
+             301:   17(fvec4) VectorShuffle 300 298 4 5 2 3
+                              Store 299 301
+             302:     27(ptr) AccessChain 10(dti) 26
+             303:      6(int) Load 302
+             304:     27(ptr) AccessChain 10(dti) 26
+             305:      6(int) Load 304
+             306:    118(ptr) AccessChain 24(data) 25 305 115
+             307:   17(fvec4) Load 306
+             308:  148(fvec3) VectorShuffle 307 307 0 1 2
+             309:  148(fvec3) GroupNonUniformFMul 35 Reduce 308
+             310:    118(ptr) AccessChain 24(data) 25 303 115
+             311:   17(fvec4) Load 310
+             312:   17(fvec4) VectorShuffle 311 309 4 5 6 3
+                              Store 310 312
+             313:     27(ptr) AccessChain 10(dti) 26
+             314:      6(int) Load 313
+             315:     27(ptr) AccessChain 10(dti) 26
+             316:      6(int) Load 315
+             317:    161(ptr) AccessChain 24(data) 25 316 158
+             318:   19(fvec4) Load 317
+             319:   19(fvec4) GroupNonUniformFMul 35 Reduce 318
+             320:    161(ptr) AccessChain 24(data) 25 314 158
+                              Store 320 319
+             321:     27(ptr) AccessChain 10(dti) 26
+             322:      6(int) Load 321
+             323:     27(ptr) AccessChain 10(dti) 26
+             324:      6(int) Load 323
+             325:    170(ptr) AccessChain 24(data) 25 324 158 26
+             326:   18(float) Load 325
+             327:   18(float) GroupNonUniformFMul 35 Reduce 326
+             328:    170(ptr) AccessChain 24(data) 25 322 158 26
+                              Store 328 327
+             329:     27(ptr) AccessChain 10(dti) 26
+             330:      6(int) Load 329
+             331:     27(ptr) AccessChain 10(dti) 26
+             332:      6(int) Load 331
+             333:    161(ptr) AccessChain 24(data) 25 332 158
+             334:   19(fvec4) Load 333
+             335:  179(fvec2) VectorShuffle 334 334 0 1
+             336:  179(fvec2) GroupNonUniformFMul 35 Reduce 335
+             337:    161(ptr) AccessChain 24(data) 25 330 158
+             338:   19(fvec4) Load 337
+             339:   19(fvec4) VectorShuffle 338 336 4 5 2 3
+                              Store 337 339
+             340:     27(ptr) AccessChain 10(dti) 26
+             341:      6(int) Load 340
+             342:     27(ptr) AccessChain 10(dti) 26
+             343:      6(int) Load 342
+             344:    161(ptr) AccessChain 24(data) 25 343 158
+             345:   19(fvec4) Load 344
+             346:  191(fvec3) VectorShuffle 345 345 0 1 2
+             347:  191(fvec3) GroupNonUniformFMul 35 Reduce 346
+             348:    161(ptr) AccessChain 24(data) 25 341 158
+             349:   19(fvec4) Load 348
+             350:   19(fvec4) VectorShuffle 349 347 4 5 6 3
+                              Store 348 350
+             351:     27(ptr) AccessChain 10(dti) 26
+             352:      6(int) Load 351
+             353:     27(ptr) AccessChain 10(dti) 26
+             354:      6(int) Load 353
+             355:     32(ptr) AccessChain 24(data) 25 354 25
+             356:   13(ivec4) Load 355
+             357:   13(ivec4) GroupNonUniformUMin 35 Reduce 356
+             358:     32(ptr) AccessChain 24(data) 25 352 25
+                              Store 358 357
+             359:     27(ptr) AccessChain 10(dti) 26
+             360:      6(int) Load 359
+             361:     27(ptr) AccessChain 10(dti) 26
+             362:      6(int) Load 361
+             363:     42(ptr) AccessChain 24(data) 25 362 25 26
+             364:      6(int) Load 363
+             365:      6(int) GroupNonUniformUMin 35 Reduce 364
+             366:     42(ptr) AccessChain 24(data) 25 360 25 26
+                              Store 366 365
+             367:     27(ptr) AccessChain 10(dti) 26
+             368:      6(int) Load 367
+             369:     27(ptr) AccessChain 10(dti) 26
+             370:      6(int) Load 369
+             371:     32(ptr) AccessChain 24(data) 25 370 25
+             372:   13(ivec4) Load 371
+             373:   51(ivec2) VectorShuffle 372 372 0 1
+             374:   51(ivec2) GroupNonUniformUMin 35 Reduce 373
+             375:     32(ptr) AccessChain 24(data) 25 368 25
+             376:   13(ivec4) Load 375
+             377:   13(ivec4) VectorShuffle 376 374 4 5 2 3
+                              Store 375 377
+             378:     27(ptr) AccessChain 10(dti) 26
+             379:      6(int) Load 378
+             380:     27(ptr) AccessChain 10(dti) 26
+             381:      6(int) Load 380
+             382:     32(ptr) AccessChain 24(data) 25 381 25
+             383:   13(ivec4) Load 382
+             384:    7(ivec3) VectorShuffle 383 383 0 1 2
+             385:    7(ivec3) GroupNonUniformUMin 35 Reduce 384
+             386:     32(ptr) AccessChain 24(data) 25 379 25
+             387:   13(ivec4) Load 386
+             388:   13(ivec4) VectorShuffle 387 385 4 5 6 3
+                              Store 386 388
+             389:     27(ptr) AccessChain 10(dti) 26
+             390:      6(int) Load 389
+             391:     27(ptr) AccessChain 10(dti) 26
+             392:      6(int) Load 391
+             393:     75(ptr) AccessChain 24(data) 25 392 72
+             394:   15(ivec4) Load 393
+             395:   15(ivec4) GroupNonUniformSMin 35 Reduce 394
+             396:     75(ptr) AccessChain 24(data) 25 390 72
+                              Store 396 395
+             397:     27(ptr) AccessChain 10(dti) 26
+             398:      6(int) Load 397
+             399:     27(ptr) AccessChain 10(dti) 26
+             400:      6(int) Load 399
+             401:     84(ptr) AccessChain 24(data) 25 400 72 26
+             402:     14(int) Load 401
+             403:     14(int) GroupNonUniformSMin 35 Reduce 402
+             404:     84(ptr) AccessChain 24(data) 25 398 72 26
+                              Store 404 403
+             405:     27(ptr) AccessChain 10(dti) 26
+             406:      6(int) Load 405
+             407:     27(ptr) AccessChain 10(dti) 26
+             408:      6(int) Load 407
+             409:     75(ptr) AccessChain 24(data) 25 408 72
+             410:   15(ivec4) Load 409
+             411:   93(ivec2) VectorShuffle 410 410 0 1
+             412:   93(ivec2) GroupNonUniformSMin 35 Reduce 411
+             413:     75(ptr) AccessChain 24(data) 25 406 72
+             414:   15(ivec4) Load 413
+             415:   15(ivec4) VectorShuffle 414 412 4 5 2 3
+                              Store 413 415
+             416:     27(ptr) AccessChain 10(dti) 26
+             417:      6(int) Load 416
+             418:     27(ptr) AccessChain 10(dti) 26
+             419:      6(int) Load 418
+             420:     75(ptr) AccessChain 24(data) 25 419 72
+             421:   15(ivec4) Load 420
+             422:  105(ivec3) VectorShuffle 421 421 0 1 2
+             423:  105(ivec3) GroupNonUniformSMin 35 Reduce 422
+             424:     75(ptr) AccessChain 24(data) 25 417 72
+             425:   15(ivec4) Load 424
+             426:   15(ivec4) VectorShuffle 425 423 4 5 6 3
+                              Store 424 426
+             427:     27(ptr) AccessChain 10(dti) 26
+             428:      6(int) Load 427
+             429:     27(ptr) AccessChain 10(dti) 26
+             430:      6(int) Load 429
+             431:    118(ptr) AccessChain 24(data) 25 430 115
+             432:   17(fvec4) Load 431
+             433:   17(fvec4) GroupNonUniformFMin 35 Reduce 432
+             434:    118(ptr) AccessChain 24(data) 25 428 115
+                              Store 434 433
+             435:     27(ptr) AccessChain 10(dti) 26
+             436:      6(int) Load 435
+             437:     27(ptr) AccessChain 10(dti) 26
+             438:      6(int) Load 437
+             439:    127(ptr) AccessChain 24(data) 25 438 115 26
+             440:   16(float) Load 439
+             441:   16(float) GroupNonUniformFMin 35 Reduce 440
+             442:    127(ptr) AccessChain 24(data) 25 436 115 26
+                              Store 442 441
+             443:     27(ptr) AccessChain 10(dti) 26
+             444:      6(int) Load 443
+             445:     27(ptr) AccessChain 10(dti) 26
+             446:      6(int) Load 445
+             447:    118(ptr) AccessChain 24(data) 25 446 115
+             448:   17(fvec4) Load 447
+             449:  136(fvec2) VectorShuffle 448 448 0 1
+             450:  136(fvec2) GroupNonUniformFMin 35 Reduce 449
+             451:    118(ptr) AccessChain 24(data) 25 444 115
+             452:   17(fvec4) Load 451
+             453:   17(fvec4) VectorShuffle 452 450 4 5 2 3
+                              Store 451 453
+             454:     27(ptr) AccessChain 10(dti) 26
+             455:      6(int) Load 454
+             456:     27(ptr) AccessChain 10(dti) 26
+             457:      6(int) Load 456
+             458:    118(ptr) AccessChain 24(data) 25 457 115
+             459:   17(fvec4) Load 458
+             460:  148(fvec3) VectorShuffle 459 459 0 1 2
+             461:  148(fvec3) GroupNonUniformFMin 35 Reduce 460
+             462:    118(ptr) AccessChain 24(data) 25 455 115
+             463:   17(fvec4) Load 462
+             464:   17(fvec4) VectorShuffle 463 461 4 5 6 3
+                              Store 462 464
+             465:     27(ptr) AccessChain 10(dti) 26
+             466:      6(int) Load 465
+             467:     27(ptr) AccessChain 10(dti) 26
+             468:      6(int) Load 467
+             469:    161(ptr) AccessChain 24(data) 25 468 158
+             470:   19(fvec4) Load 469
+             471:   19(fvec4) GroupNonUniformFMin 35 Reduce 470
+             472:    161(ptr) AccessChain 24(data) 25 466 158
+                              Store 472 471
+             473:     27(ptr) AccessChain 10(dti) 26
+             474:      6(int) Load 473
+             475:     27(ptr) AccessChain 10(dti) 26
+             476:      6(int) Load 475
+             477:    170(ptr) AccessChain 24(data) 25 476 158 26
+             478:   18(float) Load 477
+             479:   18(float) GroupNonUniformFMin 35 Reduce 478
+             480:    170(ptr) AccessChain 24(data) 25 474 158 26
+                              Store 480 479
+             481:     27(ptr) AccessChain 10(dti) 26
+             482:      6(int) Load 481
+             483:     27(ptr) AccessChain 10(dti) 26
+             484:      6(int) Load 483
+             485:    161(ptr) AccessChain 24(data) 25 484 158
+             486:   19(fvec4) Load 485
+             487:  179(fvec2) VectorShuffle 486 486 0 1
+             488:  179(fvec2) GroupNonUniformFMin 35 Reduce 487
+             489:    161(ptr) AccessChain 24(data) 25 482 158
+             490:   19(fvec4) Load 489
+             491:   19(fvec4) VectorShuffle 490 488 4 5 2 3
+                              Store 489 491
+             492:     27(ptr) AccessChain 10(dti) 26
+             493:      6(int) Load 492
+             494:     27(ptr) AccessChain 10(dti) 26
+             495:      6(int) Load 494
+             496:    161(ptr) AccessChain 24(data) 25 495 158
+             497:   19(fvec4) Load 496
+             498:  191(fvec3) VectorShuffle 497 497 0 1 2
+             499:  191(fvec3) GroupNonUniformFMin 35 Reduce 498
+             500:    161(ptr) AccessChain 24(data) 25 493 158
+             501:   19(fvec4) Load 500
+             502:   19(fvec4) VectorShuffle 501 499 4 5 6 3
+                              Store 500 502
+             503:     27(ptr) AccessChain 10(dti) 26
+             504:      6(int) Load 503
+             505:     27(ptr) AccessChain 10(dti) 26
+             506:      6(int) Load 505
+             507:     32(ptr) AccessChain 24(data) 25 506 25
+             508:   13(ivec4) Load 507
+             509:   13(ivec4) GroupNonUniformUMax 35 Reduce 508
+             510:     32(ptr) AccessChain 24(data) 25 504 25
+                              Store 510 509
+             511:     27(ptr) AccessChain 10(dti) 26
+             512:      6(int) Load 511
+             513:     27(ptr) AccessChain 10(dti) 26
+             514:      6(int) Load 513
+             515:     42(ptr) AccessChain 24(data) 25 514 25 26
+             516:      6(int) Load 515
+             517:      6(int) GroupNonUniformUMax 35 Reduce 516
+             518:     42(ptr) AccessChain 24(data) 25 512 25 26
+                              Store 518 517
+             519:     27(ptr) AccessChain 10(dti) 26
+             520:      6(int) Load 519
+             521:     27(ptr) AccessChain 10(dti) 26
+             522:      6(int) Load 521
+             523:     32(ptr) AccessChain 24(data) 25 522 25
+             524:   13(ivec4) Load 523
+             525:   51(ivec2) VectorShuffle 524 524 0 1
+             526:   51(ivec2) GroupNonUniformUMax 35 Reduce 525
+             527:     32(ptr) AccessChain 24(data) 25 520 25
+             528:   13(ivec4) Load 527
+             529:   13(ivec4) VectorShuffle 528 526 4 5 2 3
+                              Store 527 529
+             530:     27(ptr) AccessChain 10(dti) 26
+             531:      6(int) Load 530
+             532:     27(ptr) AccessChain 10(dti) 26
+             533:      6(int) Load 532
+             534:     32(ptr) AccessChain 24(data) 25 533 25
+             535:   13(ivec4) Load 534
+             536:    7(ivec3) VectorShuffle 535 535 0 1 2
+             537:    7(ivec3) GroupNonUniformUMax 35 Reduce 536
+             538:     32(ptr) AccessChain 24(data) 25 531 25
+             539:   13(ivec4) Load 538
+             540:   13(ivec4) VectorShuffle 539 537 4 5 6 3
+                              Store 538 540
+             541:     27(ptr) AccessChain 10(dti) 26
+             542:      6(int) Load 541
+             543:     27(ptr) AccessChain 10(dti) 26
+             544:      6(int) Load 543
+             545:     75(ptr) AccessChain 24(data) 25 544 72
+             546:   15(ivec4) Load 545
+             547:   15(ivec4) GroupNonUniformSMax 35 Reduce 546
+             548:     75(ptr) AccessChain 24(data) 25 542 72
+                              Store 548 547
+             549:     27(ptr) AccessChain 10(dti) 26
+             550:      6(int) Load 549
+             551:     27(ptr) AccessChain 10(dti) 26
+             552:      6(int) Load 551
+             553:     84(ptr) AccessChain 24(data) 25 552 72 26
+             554:     14(int) Load 553
+             555:     14(int) GroupNonUniformSMax 35 Reduce 554
+             556:     84(ptr) AccessChain 24(data) 25 550 72 26
+                              Store 556 555
+             557:     27(ptr) AccessChain 10(dti) 26
+             558:      6(int) Load 557
+             559:     27(ptr) AccessChain 10(dti) 26
+             560:      6(int) Load 559
+             561:     75(ptr) AccessChain 24(data) 25 560 72
+             562:   15(ivec4) Load 561
+             563:   93(ivec2) VectorShuffle 562 562 0 1
+             564:   93(ivec2) GroupNonUniformSMax 35 Reduce 563
+             565:     75(ptr) AccessChain 24(data) 25 558 72
+             566:   15(ivec4) Load 565
+             567:   15(ivec4) VectorShuffle 566 564 4 5 2 3
+                              Store 565 567
+             568:     27(ptr) AccessChain 10(dti) 26
+             569:      6(int) Load 568
+             570:     27(ptr) AccessChain 10(dti) 26
+             571:      6(int) Load 570
+             572:     75(ptr) AccessChain 24(data) 25 571 72
+             573:   15(ivec4) Load 572
+             574:  105(ivec3) VectorShuffle 573 573 0 1 2
+             575:  105(ivec3) GroupNonUniformSMax 35 Reduce 574
+             576:     75(ptr) AccessChain 24(data) 25 569 72
+             577:   15(ivec4) Load 576
+             578:   15(ivec4) VectorShuffle 577 575 4 5 6 3
+                              Store 576 578
+             579:     27(ptr) AccessChain 10(dti) 26
+             580:      6(int) Load 579
+             581:     27(ptr) AccessChain 10(dti) 26
+             582:      6(int) Load 581
+             583:    118(ptr) AccessChain 24(data) 25 582 115
+             584:   17(fvec4) Load 583
+             585:   17(fvec4) GroupNonUniformFMax 35 Reduce 584
+             586:    118(ptr) AccessChain 24(data) 25 580 115
+                              Store 586 585
+             587:     27(ptr) AccessChain 10(dti) 26
+             588:      6(int) Load 587
+             589:     27(ptr) AccessChain 10(dti) 26
+             590:      6(int) Load 589
+             591:    127(ptr) AccessChain 24(data) 25 590 115 26
+             592:   16(float) Load 591
+             593:   16(float) GroupNonUniformFMax 35 Reduce 592
+             594:    127(ptr) AccessChain 24(data) 25 588 115 26
+                              Store 594 593
+             595:     27(ptr) AccessChain 10(dti) 26
+             596:      6(int) Load 595
+             597:     27(ptr) AccessChain 10(dti) 26
+             598:      6(int) Load 597
+             599:    118(ptr) AccessChain 24(data) 25 598 115
+             600:   17(fvec4) Load 599
+             601:  136(fvec2) VectorShuffle 600 600 0 1
+             602:  136(fvec2) GroupNonUniformFMax 35 Reduce 601
+             603:    118(ptr) AccessChain 24(data) 25 596 115
+             604:   17(fvec4) Load 603
+             605:   17(fvec4) VectorShuffle 604 602 4 5 2 3
+                              Store 603 605
+             606:     27(ptr) AccessChain 10(dti) 26
+             607:      6(int) Load 606
+             608:     27(ptr) AccessChain 10(dti) 26
+             609:      6(int) Load 608
+             610:    118(ptr) AccessChain 24(data) 25 609 115
+             611:   17(fvec4) Load 610
+             612:  148(fvec3) VectorShuffle 611 611 0 1 2
+             613:  148(fvec3) GroupNonUniformFMax 35 Reduce 612
+             614:    118(ptr) AccessChain 24(data) 25 607 115
+             615:   17(fvec4) Load 614
+             616:   17(fvec4) VectorShuffle 615 613 4 5 6 3
+                              Store 614 616
+             617:     27(ptr) AccessChain 10(dti) 26
+             618:      6(int) Load 617
+             619:     27(ptr) AccessChain 10(dti) 26
+             620:      6(int) Load 619
+             621:    161(ptr) AccessChain 24(data) 25 620 158
+             622:   19(fvec4) Load 621
+             623:   19(fvec4) GroupNonUniformFMax 35 Reduce 622
+             624:    161(ptr) AccessChain 24(data) 25 618 158
+                              Store 624 623
+             625:     27(ptr) AccessChain 10(dti) 26
+             626:      6(int) Load 625
+             627:     27(ptr) AccessChain 10(dti) 26
+             628:      6(int) Load 627
+             629:    170(ptr) AccessChain 24(data) 25 628 158 26
+             630:   18(float) Load 629
+             631:   18(float) GroupNonUniformFMax 35 Reduce 630
+             632:    170(ptr) AccessChain 24(data) 25 626 158 26
+                              Store 632 631
+             633:     27(ptr) AccessChain 10(dti) 26
+             634:      6(int) Load 633
+             635:     27(ptr) AccessChain 10(dti) 26
+             636:      6(int) Load 635
+             637:    161(ptr) AccessChain 24(data) 25 636 158
+             638:   19(fvec4) Load 637
+             639:  179(fvec2) VectorShuffle 638 638 0 1
+             640:  179(fvec2) GroupNonUniformFMax 35 Reduce 639
+             641:    161(ptr) AccessChain 24(data) 25 634 158
+             642:   19(fvec4) Load 641
+             643:   19(fvec4) VectorShuffle 642 640 4 5 2 3
+                              Store 641 643
+             644:     27(ptr) AccessChain 10(dti) 26
+             645:      6(int) Load 644
+             646:     27(ptr) AccessChain 10(dti) 26
+             647:      6(int) Load 646
+             648:    161(ptr) AccessChain 24(data) 25 647 158
+             649:   19(fvec4) Load 648
+             650:  191(fvec3) VectorShuffle 649 649 0 1 2
+             651:  191(fvec3) GroupNonUniformFMax 35 Reduce 650
+             652:    161(ptr) AccessChain 24(data) 25 645 158
+             653:   19(fvec4) Load 652
+             654:   19(fvec4) VectorShuffle 653 651 4 5 6 3
+                              Store 652 654
+             655:     27(ptr) AccessChain 10(dti) 26
+             656:      6(int) Load 655
+             657:     27(ptr) AccessChain 10(dti) 26
+             658:      6(int) Load 657
+             659:     32(ptr) AccessChain 24(data) 25 658 25
+             660:   13(ivec4) Load 659
+             661:   13(ivec4) GroupNonUniformBitwiseAnd 35 Reduce 660
+             662:     32(ptr) AccessChain 24(data) 25 656 25
+                              Store 662 661
+             663:     27(ptr) AccessChain 10(dti) 26
+             664:      6(int) Load 663
+             665:     27(ptr) AccessChain 10(dti) 26
+             666:      6(int) Load 665
+             667:     42(ptr) AccessChain 24(data) 25 666 25 26
+             668:      6(int) Load 667
+             669:      6(int) GroupNonUniformBitwiseAnd 35 Reduce 668
+             670:     42(ptr) AccessChain 24(data) 25 664 25 26
+                              Store 670 669
+             671:     27(ptr) AccessChain 10(dti) 26
+             672:      6(int) Load 671
+             673:     27(ptr) AccessChain 10(dti) 26
+             674:      6(int) Load 673
+             675:     32(ptr) AccessChain 24(data) 25 674 25
+             676:   13(ivec4) Load 675
+             677:   51(ivec2) VectorShuffle 676 676 0 1
+             678:   51(ivec2) GroupNonUniformBitwiseAnd 35 Reduce 677
+             679:     32(ptr) AccessChain 24(data) 25 672 25
+             680:   13(ivec4) Load 679
+             681:   13(ivec4) VectorShuffle 680 678 4 5 2 3
+                              Store 679 681
+             682:     27(ptr) AccessChain 10(dti) 26
+             683:      6(int) Load 682
+             684:     27(ptr) AccessChain 10(dti) 26
+             685:      6(int) Load 684
+             686:     32(ptr) AccessChain 24(data) 25 685 25
+             687:   13(ivec4) Load 686
+             688:    7(ivec3) VectorShuffle 687 687 0 1 2
+             689:    7(ivec3) GroupNonUniformBitwiseAnd 35 Reduce 688
+             690:     32(ptr) AccessChain 24(data) 25 683 25
+             691:   13(ivec4) Load 690
+             692:   13(ivec4) VectorShuffle 691 689 4 5 6 3
+                              Store 690 692
+             693:     27(ptr) AccessChain 10(dti) 26
+             694:      6(int) Load 693
+             695:     27(ptr) AccessChain 10(dti) 26
+             696:      6(int) Load 695
+             697:     75(ptr) AccessChain 24(data) 25 696 72
+             698:   15(ivec4) Load 697
+             699:   15(ivec4) GroupNonUniformBitwiseAnd 35 Reduce 698
+             700:     75(ptr) AccessChain 24(data) 25 694 72
+                              Store 700 699
+             701:     27(ptr) AccessChain 10(dti) 26
+             702:      6(int) Load 701
+             703:     27(ptr) AccessChain 10(dti) 26
+             704:      6(int) Load 703
+             705:     84(ptr) AccessChain 24(data) 25 704 72 26
+             706:     14(int) Load 705
+             707:     14(int) GroupNonUniformBitwiseAnd 35 Reduce 706
+             708:     84(ptr) AccessChain 24(data) 25 702 72 26
+                              Store 708 707
+             709:     27(ptr) AccessChain 10(dti) 26
+             710:      6(int) Load 709
+             711:     27(ptr) AccessChain 10(dti) 26
+             712:      6(int) Load 711
+             713:     75(ptr) AccessChain 24(data) 25 712 72
+             714:   15(ivec4) Load 713
+             715:   93(ivec2) VectorShuffle 714 714 0 1
+             716:   93(ivec2) GroupNonUniformBitwiseAnd 35 Reduce 715
+             717:     75(ptr) AccessChain 24(data) 25 710 72
+             718:   15(ivec4) Load 717
+             719:   15(ivec4) VectorShuffle 718 716 4 5 2 3
+                              Store 717 719
+             720:     27(ptr) AccessChain 10(dti) 26
+             721:      6(int) Load 720
+             722:     27(ptr) AccessChain 10(dti) 26
+             723:      6(int) Load 722
+             724:     75(ptr) AccessChain 24(data) 25 723 72
+             725:   15(ivec4) Load 724
+             726:  105(ivec3) VectorShuffle 725 725 0 1 2
+             727:  105(ivec3) GroupNonUniformBitwiseAnd 35 Reduce 726
+             728:     75(ptr) AccessChain 24(data) 25 721 72
+             729:   15(ivec4) Load 728
+             730:   15(ivec4) VectorShuffle 729 727 4 5 6 3
+                              Store 728 730
+             731:     27(ptr) AccessChain 10(dti) 26
+             732:      6(int) Load 731
+             733:     27(ptr) AccessChain 10(dti) 26
+             734:      6(int) Load 733
+             735:     32(ptr) AccessChain 24(data) 25 734 25
+             736:   13(ivec4) Load 735
+             737:   13(ivec4) GroupNonUniformBitwiseOr 35 Reduce 736
+             738:     32(ptr) AccessChain 24(data) 25 732 25
+                              Store 738 737
+             739:     27(ptr) AccessChain 10(dti) 26
+             740:      6(int) Load 739
+             741:     27(ptr) AccessChain 10(dti) 26
+             742:      6(int) Load 741
+             743:     42(ptr) AccessChain 24(data) 25 742 25 26
+             744:      6(int) Load 743
+             745:      6(int) GroupNonUniformBitwiseOr 35 Reduce 744
+             746:     42(ptr) AccessChain 24(data) 25 740 25 26
+                              Store 746 745
+             747:     27(ptr) AccessChain 10(dti) 26
+             748:      6(int) Load 747
+             749:     27(ptr) AccessChain 10(dti) 26
+             750:      6(int) Load 749
+             751:     32(ptr) AccessChain 24(data) 25 750 25
+             752:   13(ivec4) Load 751
+             753:   51(ivec2) VectorShuffle 752 752 0 1
+             754:   51(ivec2) GroupNonUniformBitwiseOr 35 Reduce 753
+             755:     32(ptr) AccessChain 24(data) 25 748 25
+             756:   13(ivec4) Load 755
+             757:   13(ivec4) VectorShuffle 756 754 4 5 2 3
+                              Store 755 757
+             758:     27(ptr) AccessChain 10(dti) 26
+             759:      6(int) Load 758
+             760:     27(ptr) AccessChain 10(dti) 26
+             761:      6(int) Load 760
+             762:     32(ptr) AccessChain 24(data) 25 761 25
+             763:   13(ivec4) Load 762
+             764:    7(ivec3) VectorShuffle 763 763 0 1 2
+             765:    7(ivec3) GroupNonUniformBitwiseOr 35 Reduce 764
+             766:     32(ptr) AccessChain 24(data) 25 759 25
+             767:   13(ivec4) Load 766
+             768:   13(ivec4) VectorShuffle 767 765 4 5 6 3
+                              Store 766 768
+             769:     27(ptr) AccessChain 10(dti) 26
+             770:      6(int) Load 769
+             771:     27(ptr) AccessChain 10(dti) 26
+             772:      6(int) Load 771
+             773:     75(ptr) AccessChain 24(data) 25 772 72
+             774:   15(ivec4) Load 773
+             775:   15(ivec4) GroupNonUniformBitwiseOr 35 Reduce 774
+             776:     75(ptr) AccessChain 24(data) 25 770 72
+                              Store 776 775
+             777:     27(ptr) AccessChain 10(dti) 26
+             778:      6(int) Load 777
+             779:     27(ptr) AccessChain 10(dti) 26
+             780:      6(int) Load 779
+             781:     84(ptr) AccessChain 24(data) 25 780 72 26
+             782:     14(int) Load 781
+             783:     14(int) GroupNonUniformBitwiseOr 35 Reduce 782
+             784:     84(ptr) AccessChain 24(data) 25 778 72 26
+                              Store 784 783
+             785:     27(ptr) AccessChain 10(dti) 26
+             786:      6(int) Load 785
+             787:     27(ptr) AccessChain 10(dti) 26
+             788:      6(int) Load 787
+             789:     75(ptr) AccessChain 24(data) 25 788 72
+             790:   15(ivec4) Load 789
+             791:   93(ivec2) VectorShuffle 790 790 0 1
+             792:   93(ivec2) GroupNonUniformBitwiseOr 35 Reduce 791
+             793:     75(ptr) AccessChain 24(data) 25 786 72
+             794:   15(ivec4) Load 793
+             795:   15(ivec4) VectorShuffle 794 792 4 5 2 3
+                              Store 793 795
+             796:     27(ptr) AccessChain 10(dti) 26
+             797:      6(int) Load 796
+             798:     27(ptr) AccessChain 10(dti) 26
+             799:      6(int) Load 798
+             800:     75(ptr) AccessChain 24(data) 25 799 72
+             801:   15(ivec4) Load 800
+             802:  105(ivec3) VectorShuffle 801 801 0 1 2
+             803:  105(ivec3) GroupNonUniformBitwiseOr 35 Reduce 802
+             804:     75(ptr) AccessChain 24(data) 25 797 72
+             805:   15(ivec4) Load 804
+             806:   15(ivec4) VectorShuffle 805 803 4 5 6 3
+                              Store 804 806
+             807:     27(ptr) AccessChain 10(dti) 26
+             808:      6(int) Load 807
+             809:     27(ptr) AccessChain 10(dti) 26
+             810:      6(int) Load 809
+             811:     32(ptr) AccessChain 24(data) 25 810 25
+             812:   13(ivec4) Load 811
+             813:   13(ivec4) GroupNonUniformBitwiseXor 35 Reduce 812
+             814:     32(ptr) AccessChain 24(data) 25 808 25
+                              Store 814 813
+             815:     27(ptr) AccessChain 10(dti) 26
+             816:      6(int) Load 815
+             817:     27(ptr) AccessChain 10(dti) 26
+             818:      6(int) Load 817
+             819:     42(ptr) AccessChain 24(data) 25 818 25 26
+             820:      6(int) Load 819
+             821:      6(int) GroupNonUniformBitwiseXor 35 Reduce 820
+             822:     42(ptr) AccessChain 24(data) 25 816 25 26
+                              Store 822 821
+             823:     27(ptr) AccessChain 10(dti) 26
+             824:      6(int) Load 823
+             825:     27(ptr) AccessChain 10(dti) 26
+             826:      6(int) Load 825
+             827:     32(ptr) AccessChain 24(data) 25 826 25
+             828:   13(ivec4) Load 827
+             829:   51(ivec2) VectorShuffle 828 828 0 1
+             830:   51(ivec2) GroupNonUniformBitwiseXor 35 Reduce 829
+             831:     32(ptr) AccessChain 24(data) 25 824 25
+             832:   13(ivec4) Load 831
+             833:   13(ivec4) VectorShuffle 832 830 4 5 2 3
+                              Store 831 833
+             834:     27(ptr) AccessChain 10(dti) 26
+             835:      6(int) Load 834
+             836:     27(ptr) AccessChain 10(dti) 26
+             837:      6(int) Load 836
+             838:     32(ptr) AccessChain 24(data) 25 837 25
+             839:   13(ivec4) Load 838
+             840:    7(ivec3) VectorShuffle 839 839 0 1 2
+             841:    7(ivec3) GroupNonUniformBitwiseXor 35 Reduce 840
+             842:     32(ptr) AccessChain 24(data) 25 835 25
+             843:   13(ivec4) Load 842
+             844:   13(ivec4) VectorShuffle 843 841 4 5 6 3
+                              Store 842 844
+             845:     27(ptr) AccessChain 10(dti) 26
+             846:      6(int) Load 845
+             847:     27(ptr) AccessChain 10(dti) 26
+             848:      6(int) Load 847
+             849:     75(ptr) AccessChain 24(data) 25 848 72
+             850:   15(ivec4) Load 849
+             851:   15(ivec4) GroupNonUniformBitwiseXor 35 Reduce 850
+             852:     75(ptr) AccessChain 24(data) 25 846 72
+                              Store 852 851
+             853:     27(ptr) AccessChain 10(dti) 26
+             854:      6(int) Load 853
+             855:     27(ptr) AccessChain 10(dti) 26
+             856:      6(int) Load 855
+             857:     84(ptr) AccessChain 24(data) 25 856 72 26
+             858:     14(int) Load 857
+             859:     14(int) GroupNonUniformBitwiseXor 35 Reduce 858
+             860:     84(ptr) AccessChain 24(data) 25 854 72 26
+                              Store 860 859
+             861:     27(ptr) AccessChain 10(dti) 26
+             862:      6(int) Load 861
+             863:     27(ptr) AccessChain 10(dti) 26
+             864:      6(int) Load 863
+             865:     75(ptr) AccessChain 24(data) 25 864 72
+             866:   15(ivec4) Load 865
+             867:   93(ivec2) VectorShuffle 866 866 0 1
+             868:   93(ivec2) GroupNonUniformBitwiseXor 35 Reduce 867
+             869:     75(ptr) AccessChain 24(data) 25 862 72
+             870:   15(ivec4) Load 869
+             871:   15(ivec4) VectorShuffle 870 868 4 5 2 3
+                              Store 869 871
+             872:     27(ptr) AccessChain 10(dti) 26
+             873:      6(int) Load 872
+             874:     27(ptr) AccessChain 10(dti) 26
+             875:      6(int) Load 874
+             876:     75(ptr) AccessChain 24(data) 25 875 72
+             877:   15(ivec4) Load 876
+             878:  105(ivec3) VectorShuffle 877 877 0 1 2
+             879:  105(ivec3) GroupNonUniformBitwiseXor 35 Reduce 878
+             880:     75(ptr) AccessChain 24(data) 25 873 72
+             881:   15(ivec4) Load 880
+             882:   15(ivec4) VectorShuffle 881 879 4 5 6 3
+                              Store 880 882
+             883:     27(ptr) AccessChain 10(dti) 26
+             884:      6(int) Load 883
+             885:     27(ptr) AccessChain 10(dti) 26
+             886:      6(int) Load 885
+             887:     42(ptr) AccessChain 24(data) 25 886 25 26
+             888:      6(int) Load 887
+             890:   889(bool) IEqual 888 26
+             891:   13(ivec4) GroupNonUniformBallot 35 890
+             892:      6(int) GroupNonUniformBallotBitCount 35 Reduce 891
+             893:     42(ptr) AccessChain 24(data) 25 884 25 26
+                              Store 893 892
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.wavevote.comp.out b/Test/baseResults/hlsl.wavevote.comp.out
new file mode 100644
index 0000000..004ee8b
--- /dev/null
+++ b/Test/baseResults/hlsl.wavevote.comp.out
@@ -0,0 +1,316 @@
+hlsl.wavevote.comp
+Shader version: 500
+local_size = (32, 16, 1)
+0:? Sequence
+0:5  Function Definition: @CSMain(vu3; ( temp void)
+0:5    Function Parameters: 
+0:5      'dti' ( in 3-component vector of uint)
+0:?     Sequence
+0:6      move second child to first child ( temp uint64_t)
+0:6        indirect index (layout( row_major std430) buffer uint64_t)
+0:6          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint64_t)
+0:6            'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint64_t @data})
+0:6            Constant:
+0:6              0 (const uint)
+0:6          direct index ( temp uint)
+0:6            'dti' ( in 3-component vector of uint)
+0:6            Constant:
+0:6              0 (const int)
+0:6        Construct uint64 (layout( row_major std430) buffer uint64_t)
+0:6          Convert uint to uint64 ( temp 4-component vector of uint64_t)
+0:6            subgroupBallot ( temp 4-component vector of uint)
+0:6              subgroupAny ( temp bool)
+0:6                Compare Equal ( temp bool)
+0:6                  direct index ( temp uint)
+0:6                    'dti' ( in 3-component vector of uint)
+0:6                    Constant:
+0:6                      0 (const int)
+0:6                  Constant:
+0:6                    0 (const uint)
+0:7      move second child to first child ( temp uint64_t)
+0:7        indirect index (layout( row_major std430) buffer uint64_t)
+0:7          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint64_t)
+0:7            'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint64_t @data})
+0:7            Constant:
+0:7              0 (const uint)
+0:7          direct index ( temp uint)
+0:7            'dti' ( in 3-component vector of uint)
+0:7            Constant:
+0:7              1 (const int)
+0:7        Construct uint64 (layout( row_major std430) buffer uint64_t)
+0:7          Convert uint to uint64 ( temp 4-component vector of uint64_t)
+0:7            subgroupBallot ( temp 4-component vector of uint)
+0:7              subgroupAll ( temp bool)
+0:7                Compare Equal ( temp bool)
+0:7                  direct index ( temp uint)
+0:7                    'dti' ( in 3-component vector of uint)
+0:7                    Constant:
+0:7                      1 (const int)
+0:7                  Constant:
+0:7                    0 (const uint)
+0:8      move second child to first child ( temp uint64_t)
+0:8        indirect index (layout( row_major std430) buffer uint64_t)
+0:8          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint64_t)
+0:8            'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint64_t @data})
+0:8            Constant:
+0:8              0 (const uint)
+0:8          direct index ( temp uint)
+0:8            'dti' ( in 3-component vector of uint)
+0:8            Constant:
+0:8              2 (const int)
+0:8        Construct uint64 (layout( row_major std430) buffer uint64_t)
+0:8          Convert uint to uint64 ( temp 4-component vector of uint64_t)
+0:8            subgroupBallot ( temp 4-component vector of uint)
+0:8              subgroupAllEqual ( temp bool)
+0:8                Compare Equal ( temp bool)
+0:8                  direct index ( temp uint)
+0:8                    'dti' ( in 3-component vector of uint)
+0:8                    Constant:
+0:8                      2 (const int)
+0:8                  Constant:
+0:8                    0 (const uint)
+0:9      move second child to first child ( temp uint64_t)
+0:9        indirect index (layout( row_major std430) buffer uint64_t)
+0:9          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint64_t)
+0:9            'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint64_t @data})
+0:9            Constant:
+0:9              0 (const uint)
+0:9          direct index ( temp uint)
+0:9            'dti' ( in 3-component vector of uint)
+0:9            Constant:
+0:9              2 (const int)
+0:9        Construct uint64 (layout( row_major std430) buffer uint64_t)
+0:9          Convert uint to uint64 ( temp 4-component vector of uint64_t)
+0:9            subgroupBallot ( temp 4-component vector of uint)
+0:9              subgroupAllEqual ( temp bool)
+0:9                direct index ( temp uint)
+0:9                  'dti' ( in 3-component vector of uint)
+0:9                  Constant:
+0:9                    2 (const int)
+0:5  Function Definition: CSMain( ( temp void)
+0:5    Function Parameters: 
+0:?     Sequence
+0:5      move second child to first child ( temp 3-component vector of uint)
+0:?         'dti' ( temp 3-component vector of uint)
+0:?         'dti' ( in 3-component vector of uint GlobalInvocationID)
+0:5      Function Call: @CSMain(vu3; ( temp void)
+0:?         'dti' ( temp 3-component vector of uint)
+0:?   Linker Objects
+0:?     'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint64_t @data})
+0:?     'dti' ( in 3-component vector of uint GlobalInvocationID)
+
+
+Linked compute stage:
+
+
+Shader version: 500
+local_size = (32, 16, 1)
+0:? Sequence
+0:5  Function Definition: @CSMain(vu3; ( temp void)
+0:5    Function Parameters: 
+0:5      'dti' ( in 3-component vector of uint)
+0:?     Sequence
+0:6      move second child to first child ( temp uint64_t)
+0:6        indirect index (layout( row_major std430) buffer uint64_t)
+0:6          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint64_t)
+0:6            'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint64_t @data})
+0:6            Constant:
+0:6              0 (const uint)
+0:6          direct index ( temp uint)
+0:6            'dti' ( in 3-component vector of uint)
+0:6            Constant:
+0:6              0 (const int)
+0:6        Construct uint64 (layout( row_major std430) buffer uint64_t)
+0:6          Convert uint to uint64 ( temp 4-component vector of uint64_t)
+0:6            subgroupBallot ( temp 4-component vector of uint)
+0:6              subgroupAny ( temp bool)
+0:6                Compare Equal ( temp bool)
+0:6                  direct index ( temp uint)
+0:6                    'dti' ( in 3-component vector of uint)
+0:6                    Constant:
+0:6                      0 (const int)
+0:6                  Constant:
+0:6                    0 (const uint)
+0:7      move second child to first child ( temp uint64_t)
+0:7        indirect index (layout( row_major std430) buffer uint64_t)
+0:7          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint64_t)
+0:7            'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint64_t @data})
+0:7            Constant:
+0:7              0 (const uint)
+0:7          direct index ( temp uint)
+0:7            'dti' ( in 3-component vector of uint)
+0:7            Constant:
+0:7              1 (const int)
+0:7        Construct uint64 (layout( row_major std430) buffer uint64_t)
+0:7          Convert uint to uint64 ( temp 4-component vector of uint64_t)
+0:7            subgroupBallot ( temp 4-component vector of uint)
+0:7              subgroupAll ( temp bool)
+0:7                Compare Equal ( temp bool)
+0:7                  direct index ( temp uint)
+0:7                    'dti' ( in 3-component vector of uint)
+0:7                    Constant:
+0:7                      1 (const int)
+0:7                  Constant:
+0:7                    0 (const uint)
+0:8      move second child to first child ( temp uint64_t)
+0:8        indirect index (layout( row_major std430) buffer uint64_t)
+0:8          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint64_t)
+0:8            'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint64_t @data})
+0:8            Constant:
+0:8              0 (const uint)
+0:8          direct index ( temp uint)
+0:8            'dti' ( in 3-component vector of uint)
+0:8            Constant:
+0:8              2 (const int)
+0:8        Construct uint64 (layout( row_major std430) buffer uint64_t)
+0:8          Convert uint to uint64 ( temp 4-component vector of uint64_t)
+0:8            subgroupBallot ( temp 4-component vector of uint)
+0:8              subgroupAllEqual ( temp bool)
+0:8                Compare Equal ( temp bool)
+0:8                  direct index ( temp uint)
+0:8                    'dti' ( in 3-component vector of uint)
+0:8                    Constant:
+0:8                      2 (const int)
+0:8                  Constant:
+0:8                    0 (const uint)
+0:9      move second child to first child ( temp uint64_t)
+0:9        indirect index (layout( row_major std430) buffer uint64_t)
+0:9          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint64_t)
+0:9            'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint64_t @data})
+0:9            Constant:
+0:9              0 (const uint)
+0:9          direct index ( temp uint)
+0:9            'dti' ( in 3-component vector of uint)
+0:9            Constant:
+0:9              2 (const int)
+0:9        Construct uint64 (layout( row_major std430) buffer uint64_t)
+0:9          Convert uint to uint64 ( temp 4-component vector of uint64_t)
+0:9            subgroupBallot ( temp 4-component vector of uint)
+0:9              subgroupAllEqual ( temp bool)
+0:9                direct index ( temp uint)
+0:9                  'dti' ( in 3-component vector of uint)
+0:9                  Constant:
+0:9                    2 (const int)
+0:5  Function Definition: CSMain( ( temp void)
+0:5    Function Parameters: 
+0:?     Sequence
+0:5      move second child to first child ( temp 3-component vector of uint)
+0:?         'dti' ( temp 3-component vector of uint)
+0:?         'dti' ( in 3-component vector of uint GlobalInvocationID)
+0:5      Function Call: @CSMain(vu3; ( temp void)
+0:?         'dti' ( temp 3-component vector of uint)
+0:?   Linker Objects
+0:?     'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint64_t @data})
+0:?     'dti' ( in 3-component vector of uint GlobalInvocationID)
+
+// Module Version 10300
+// Generated by (magic number): 80006
+// Id's are bound by 75
+
+                              Capability Shader
+                              Capability Int64
+                              Capability GroupNonUniform
+                              Capability GroupNonUniformVote
+                              Capability GroupNonUniformBallot
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "CSMain" 70
+                              ExecutionMode 4 LocalSize 32 16 1
+                              Source HLSL 500
+                              Name 4  "CSMain"
+                              Name 11  "@CSMain(vu3;"
+                              Name 10  "dti"
+                              Name 15  "data"
+                              MemberName 15(data) 0  "@data"
+                              Name 17  "data"
+                              Name 68  "dti"
+                              Name 70  "dti"
+                              Name 72  "param"
+                              Decorate 14 ArrayStride 8
+                              MemberDecorate 15(data) 0 Offset 0
+                              Decorate 15(data) BufferBlock
+                              Decorate 17(data) DescriptorSet 0
+                              Decorate 70(dti) BuiltIn GlobalInvocationId
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypeVector 6(int) 3
+               8:             TypePointer Function 7(ivec3)
+               9:             TypeFunction 2 8(ptr)
+              13:             TypeInt 64 0
+              14:             TypeRuntimeArray 13(int)
+        15(data):             TypeStruct 14
+              16:             TypePointer Uniform 15(data)
+        17(data):     16(ptr) Variable Uniform
+              18:             TypeInt 32 1
+              19:     18(int) Constant 0
+              20:      6(int) Constant 0
+              21:             TypePointer Function 6(int)
+              26:             TypeBool
+              28:      6(int) Constant 3
+              30:             TypeVector 6(int) 4
+              32:             TypeVector 13(int) 4
+              35:             TypePointer Uniform 13(int)
+              37:      6(int) Constant 1
+              48:      6(int) Constant 2
+              69:             TypePointer Input 7(ivec3)
+         70(dti):     69(ptr) Variable Input
+       4(CSMain):           2 Function None 3
+               5:             Label
+         68(dti):      8(ptr) Variable Function
+       72(param):      8(ptr) Variable Function
+              71:    7(ivec3) Load 70(dti)
+                              Store 68(dti) 71
+              73:    7(ivec3) Load 68(dti)
+                              Store 72(param) 73
+              74:           2 FunctionCall 11(@CSMain(vu3;) 72(param)
+                              Return
+                              FunctionEnd
+11(@CSMain(vu3;):           2 Function None 9
+         10(dti):      8(ptr) FunctionParameter
+              12:             Label
+              22:     21(ptr) AccessChain 10(dti) 20
+              23:      6(int) Load 22
+              24:     21(ptr) AccessChain 10(dti) 20
+              25:      6(int) Load 24
+              27:    26(bool) IEqual 25 20
+              29:    26(bool) GroupNonUniformAny 28 27
+              31:   30(ivec4) GroupNonUniformBallot 28 29
+              33:   32(ivec4) UConvert 31
+              34:     13(int) CompositeExtract 33 0
+              36:     35(ptr) AccessChain 17(data) 19 23
+                              Store 36 34
+              38:     21(ptr) AccessChain 10(dti) 37
+              39:      6(int) Load 38
+              40:     21(ptr) AccessChain 10(dti) 37
+              41:      6(int) Load 40
+              42:    26(bool) IEqual 41 20
+              43:    26(bool) GroupNonUniformAll 28 42
+              44:   30(ivec4) GroupNonUniformBallot 28 43
+              45:   32(ivec4) UConvert 44
+              46:     13(int) CompositeExtract 45 0
+              47:     35(ptr) AccessChain 17(data) 19 39
+                              Store 47 46
+              49:     21(ptr) AccessChain 10(dti) 48
+              50:      6(int) Load 49
+              51:     21(ptr) AccessChain 10(dti) 48
+              52:      6(int) Load 51
+              53:    26(bool) IEqual 52 20
+              54:    26(bool) GroupNonUniformAllEqual 28 53
+              55:   30(ivec4) GroupNonUniformBallot 28 54
+              56:   32(ivec4) UConvert 55
+              57:     13(int) CompositeExtract 56 0
+              58:     35(ptr) AccessChain 17(data) 19 50
+                              Store 58 57
+              59:     21(ptr) AccessChain 10(dti) 48
+              60:      6(int) Load 59
+              61:     21(ptr) AccessChain 10(dti) 48
+              62:      6(int) Load 61
+              63:    26(bool) GroupNonUniformAllEqual 28 62
+              64:   30(ivec4) GroupNonUniformBallot 28 63
+              65:   32(ivec4) UConvert 64
+              66:     13(int) CompositeExtract 65 0
+              67:     35(ptr) AccessChain 17(data) 19 60
+                              Store 67 66
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.whileLoop.frag.out b/Test/baseResults/hlsl.whileLoop.frag.out
index cffef62..b8b3ab5 100755
--- a/Test/baseResults/hlsl.whileLoop.frag.out
+++ b/Test/baseResults/hlsl.whileLoop.frag.out
@@ -21,7 +21,7 @@
 0:4        Constant:
 0:4          false (const bool)
 0:4        No loop body
-0:5      Loop with condition tested first
+0:5      Loop with condition tested first: Unroll
 0:5        Loop Condition
 0:5        Constant:
 0:5          false (const bool)
@@ -71,7 +71,7 @@
 0:4        Constant:
 0:4          false (const bool)
 0:4        No loop body
-0:5      Loop with condition tested first
+0:5      Loop with condition tested first: Unroll
 0:5        Loop Condition
 0:5        Constant:
 0:5          false (const bool)
@@ -96,7 +96,7 @@
 0:?     'input' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 52
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.y-negate-1.vert.out b/Test/baseResults/hlsl.y-negate-1.vert.out
new file mode 100644
index 0000000..7a6efbc
--- /dev/null
+++ b/Test/baseResults/hlsl.y-negate-1.vert.out
@@ -0,0 +1,130 @@
+hlsl.y-negate-1.vert
+Shader version: 500
+0:? Sequence
+0:7  Function Definition: @main( ( temp 4-component vector of float)
+0:7    Function Parameters: 
+0:?     Sequence
+0:8      Branch: Return with expression
+0:8        pos: direct index for structure ( uniform 4-component vector of float)
+0:8          'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float pos})
+0:8          Constant:
+0:8            0 (const uint)
+0:7  Function Definition: main( ( temp void)
+0:7    Function Parameters: 
+0:?     Sequence
+0:7      Sequence
+0:7        move second child to first child ( temp 4-component vector of float)
+0:7          '@position' ( temp 4-component vector of float)
+0:7          Function Call: @main( ( temp 4-component vector of float)
+0:7        move second child to first child ( temp float)
+0:7          direct index ( temp float)
+0:7            '@position' ( temp 4-component vector of float)
+0:7            Constant:
+0:7              1 (const int)
+0:7          Negate value ( temp float)
+0:7            direct index ( temp float)
+0:7              '@position' ( temp 4-component vector of float)
+0:7              Constant:
+0:7                1 (const int)
+0:7        move second child to first child ( temp 4-component vector of float)
+0:?           '@entryPointOutput' ( out 4-component vector of float Position)
+0:7          '@position' ( temp 4-component vector of float)
+0:?   Linker Objects
+0:?     'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float pos})
+0:?     '@entryPointOutput' ( out 4-component vector of float Position)
+
+
+Linked vertex stage:
+
+
+Shader version: 500
+0:? Sequence
+0:7  Function Definition: @main( ( temp 4-component vector of float)
+0:7    Function Parameters: 
+0:?     Sequence
+0:8      Branch: Return with expression
+0:8        pos: direct index for structure ( uniform 4-component vector of float)
+0:8          'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float pos})
+0:8          Constant:
+0:8            0 (const uint)
+0:7  Function Definition: main( ( temp void)
+0:7    Function Parameters: 
+0:?     Sequence
+0:7      Sequence
+0:7        move second child to first child ( temp 4-component vector of float)
+0:7          '@position' ( temp 4-component vector of float)
+0:7          Function Call: @main( ( temp 4-component vector of float)
+0:7        move second child to first child ( temp float)
+0:7          direct index ( temp float)
+0:7            '@position' ( temp 4-component vector of float)
+0:7            Constant:
+0:7              1 (const int)
+0:7          Negate value ( temp float)
+0:7            direct index ( temp float)
+0:7              '@position' ( temp 4-component vector of float)
+0:7              Constant:
+0:7                1 (const int)
+0:7        move second child to first child ( temp 4-component vector of float)
+0:?           '@entryPointOutput' ( out 4-component vector of float Position)
+0:7          '@position' ( temp 4-component vector of float)
+0:?   Linker Objects
+0:?     'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float pos})
+0:?     '@entryPointOutput' ( out 4-component vector of float Position)
+
+// Module Version 10000
+// Generated by (magic number): 80006
+// Id's are bound by 34
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4  "main" 32
+                              Source HLSL 500
+                              Name 4  "main"
+                              Name 9  "@main("
+                              Name 11  "$Global"
+                              MemberName 11($Global) 0  "pos"
+                              Name 13  ""
+                              Name 22  "@position"
+                              Name 32  "@entryPointOutput"
+                              MemberDecorate 11($Global) 0 Offset 0
+                              Decorate 11($Global) Block
+                              Decorate 13 DescriptorSet 0
+                              Decorate 32(@entryPointOutput) BuiltIn Position
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypeFunction 7(fvec4)
+     11($Global):             TypeStruct 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)
+              21:             TypePointer Function 7(fvec4)
+              24:             TypeInt 32 0
+              25:     24(int) Constant 1
+              26:             TypePointer Function 6(float)
+              31:             TypePointer Output 7(fvec4)
+32(@entryPointOutput):     31(ptr) Variable Output
+         4(main):           2 Function None 3
+               5:             Label
+   22(@position):     21(ptr) Variable Function
+              23:    7(fvec4) FunctionCall 9(@main()
+                              Store 22(@position) 23
+              27:     26(ptr) AccessChain 22(@position) 25
+              28:    6(float) Load 27
+              29:    6(float) FNegate 28
+              30:     26(ptr) AccessChain 22(@position) 25
+                              Store 30 29
+              33:    7(fvec4) Load 22(@position)
+                              Store 32(@entryPointOutput) 33
+                              Return
+                              FunctionEnd
+       9(@main():    7(fvec4) Function None 8
+              10:             Label
+              17:     16(ptr) AccessChain 13 15
+              18:    7(fvec4) Load 17
+                              ReturnValue 18
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.y-negate-2.vert.out b/Test/baseResults/hlsl.y-negate-2.vert.out
new file mode 100644
index 0000000..f45dc16
--- /dev/null
+++ b/Test/baseResults/hlsl.y-negate-2.vert.out
@@ -0,0 +1,148 @@
+hlsl.y-negate-2.vert
+Shader version: 500
+0:? Sequence
+0:6  Function Definition: @main(vf4; ( temp void)
+0:6    Function Parameters: 
+0:6      'position' ( out 4-component vector of float)
+0:?     Sequence
+0:7      move second child to first child ( temp 4-component vector of float)
+0:7        'position' ( out 4-component vector of float)
+0:7        pos: direct index for structure ( uniform 4-component vector of float)
+0:7          'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float pos})
+0:7          Constant:
+0:7            0 (const uint)
+0:6  Function Definition: main( ( temp void)
+0:6    Function Parameters: 
+0:?     Sequence
+0:6      Function Call: @main(vf4; ( temp void)
+0:?         'position' ( temp 4-component vector of float)
+0:6      Sequence
+0:6        move second child to first child ( temp 4-component vector of float)
+0:6          '@position' ( temp 4-component vector of float)
+0:?           'position' ( temp 4-component vector of float)
+0:6        move second child to first child ( temp float)
+0:6          direct index ( temp float)
+0:6            '@position' ( temp 4-component vector of float)
+0:6            Constant:
+0:6              1 (const int)
+0:6          Negate value ( temp float)
+0:6            direct index ( temp float)
+0:6              '@position' ( temp 4-component vector of float)
+0:6              Constant:
+0:6                1 (const int)
+0:6        move second child to first child ( temp 4-component vector of float)
+0:?           'position' ( out 4-component vector of float Position)
+0:6          '@position' ( temp 4-component vector of float)
+0:?   Linker Objects
+0:?     'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float pos})
+0:?     'position' ( out 4-component vector of float Position)
+
+
+Linked vertex stage:
+
+
+Shader version: 500
+0:? Sequence
+0:6  Function Definition: @main(vf4; ( temp void)
+0:6    Function Parameters: 
+0:6      'position' ( out 4-component vector of float)
+0:?     Sequence
+0:7      move second child to first child ( temp 4-component vector of float)
+0:7        'position' ( out 4-component vector of float)
+0:7        pos: direct index for structure ( uniform 4-component vector of float)
+0:7          'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float pos})
+0:7          Constant:
+0:7            0 (const uint)
+0:6  Function Definition: main( ( temp void)
+0:6    Function Parameters: 
+0:?     Sequence
+0:6      Function Call: @main(vf4; ( temp void)
+0:?         'position' ( temp 4-component vector of float)
+0:6      Sequence
+0:6        move second child to first child ( temp 4-component vector of float)
+0:6          '@position' ( temp 4-component vector of float)
+0:?           'position' ( temp 4-component vector of float)
+0:6        move second child to first child ( temp float)
+0:6          direct index ( temp float)
+0:6            '@position' ( temp 4-component vector of float)
+0:6            Constant:
+0:6              1 (const int)
+0:6          Negate value ( temp float)
+0:6            direct index ( temp float)
+0:6              '@position' ( temp 4-component vector of float)
+0:6              Constant:
+0:6                1 (const int)
+0:6        move second child to first child ( temp 4-component vector of float)
+0:?           'position' ( out 4-component vector of float Position)
+0:6          '@position' ( temp 4-component vector of float)
+0:?   Linker Objects
+0:?     'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float pos})
+0:?     'position' ( out 4-component vector of float Position)
+
+// Module Version 10000
+// Generated by (magic number): 80006
+// Id's are bound by 37
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4  "main" 35
+                              Source HLSL 500
+                              Name 4  "main"
+                              Name 11  "@main(vf4;"
+                              Name 10  "position"
+                              Name 13  "$Global"
+                              MemberName 13($Global) 0  "pos"
+                              Name 15  ""
+                              Name 21  "position"
+                              Name 22  "param"
+                              Name 25  "@position"
+                              Name 35  "position"
+                              MemberDecorate 13($Global) 0 Offset 0
+                              Decorate 13($Global) Block
+                              Decorate 15 DescriptorSet 0
+                              Decorate 35(position) BuiltIn Position
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Function 7(fvec4)
+               9:             TypeFunction 2 8(ptr)
+     13($Global):             TypeStruct 7(fvec4)
+              14:             TypePointer Uniform 13($Global)
+              15:     14(ptr) Variable Uniform
+              16:             TypeInt 32 1
+              17:     16(int) Constant 0
+              18:             TypePointer Uniform 7(fvec4)
+              27:             TypeInt 32 0
+              28:     27(int) Constant 1
+              29:             TypePointer Function 6(float)
+              34:             TypePointer Output 7(fvec4)
+    35(position):     34(ptr) Variable Output
+         4(main):           2 Function None 3
+               5:             Label
+    21(position):      8(ptr) Variable Function
+       22(param):      8(ptr) Variable Function
+   25(@position):      8(ptr) Variable Function
+              23:           2 FunctionCall 11(@main(vf4;) 22(param)
+              24:    7(fvec4) Load 22(param)
+                              Store 21(position) 24
+              26:    7(fvec4) Load 21(position)
+                              Store 25(@position) 26
+              30:     29(ptr) AccessChain 25(@position) 28
+              31:    6(float) Load 30
+              32:    6(float) FNegate 31
+              33:     29(ptr) AccessChain 25(@position) 28
+                              Store 33 32
+              36:    7(fvec4) Load 25(@position)
+                              Store 35(position) 36
+                              Return
+                              FunctionEnd
+  11(@main(vf4;):           2 Function None 9
+    10(position):      8(ptr) FunctionParameter
+              12:             Label
+              19:     18(ptr) AccessChain 15 17
+              20:    7(fvec4) Load 19
+                              Store 10(position) 20
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.y-negate-3.vert.out b/Test/baseResults/hlsl.y-negate-3.vert.out
new file mode 100644
index 0000000..1de7d10
--- /dev/null
+++ b/Test/baseResults/hlsl.y-negate-3.vert.out
@@ -0,0 +1,211 @@
+hlsl.y-negate-3.vert
+Shader version: 500
+0:? Sequence
+0:11  Function Definition: @main( ( temp structure{ temp 4-component vector of float pos,  temp int somethingelse})
+0:11    Function Parameters: 
+0:?     Sequence
+0:14      move second child to first child ( temp 4-component vector of float)
+0:14        pos: direct index for structure ( temp 4-component vector of float)
+0:14          'vsout' ( temp structure{ temp 4-component vector of float pos,  temp int somethingelse})
+0:14          Constant:
+0:14            0 (const int)
+0:14        position: direct index for structure ( uniform 4-component vector of float)
+0:14          'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float position})
+0:14          Constant:
+0:14            0 (const uint)
+0:15      move second child to first child ( temp int)
+0:15        somethingelse: direct index for structure ( temp int)
+0:15          'vsout' ( temp structure{ temp 4-component vector of float pos,  temp int somethingelse})
+0:15          Constant:
+0:15            1 (const int)
+0:15        Constant:
+0:15          42 (const int)
+0:17      Branch: Return with expression
+0:17        'vsout' ( temp structure{ temp 4-component vector of float pos,  temp int somethingelse})
+0:11  Function Definition: main( ( temp void)
+0:11    Function Parameters: 
+0:?     Sequence
+0:11      Sequence
+0:11        move second child to first child ( temp structure{ temp 4-component vector of float pos,  temp int somethingelse})
+0:11          'flattenTemp' ( temp structure{ temp 4-component vector of float pos,  temp int somethingelse})
+0:11          Function Call: @main( ( temp structure{ temp 4-component vector of float pos,  temp int somethingelse})
+0:11        Sequence
+0:11          move second child to first child ( temp 4-component vector of float)
+0:11            '@position' ( temp 4-component vector of float)
+0:11            pos: direct index for structure ( temp 4-component vector of float)
+0:11              'flattenTemp' ( temp structure{ temp 4-component vector of float pos,  temp int somethingelse})
+0:11              Constant:
+0:11                0 (const int)
+0:11          move second child to first child ( temp float)
+0:11            direct index ( temp float)
+0:11              '@position' ( temp 4-component vector of float)
+0:11              Constant:
+0:11                1 (const int)
+0:11            Negate value ( temp float)
+0:11              direct index ( temp float)
+0:11                '@position' ( temp 4-component vector of float)
+0:11                Constant:
+0:11                  1 (const int)
+0:11          move second child to first child ( temp 4-component vector of float)
+0:?             '@entryPointOutput.pos' ( out 4-component vector of float Position)
+0:11            '@position' ( temp 4-component vector of float)
+0:11        move second child to first child ( temp int)
+0:?           '@entryPointOutput.somethingelse' (layout( location=0) out int)
+0:11          somethingelse: direct index for structure ( temp int)
+0:11            'flattenTemp' ( temp structure{ temp 4-component vector of float pos,  temp int somethingelse})
+0:11            Constant:
+0:11              1 (const int)
+0:?   Linker Objects
+0:?     'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float position})
+0:?     '@entryPointOutput.pos' ( out 4-component vector of float Position)
+0:?     '@entryPointOutput.somethingelse' (layout( location=0) out int)
+
+
+Linked vertex stage:
+
+
+Shader version: 500
+0:? Sequence
+0:11  Function Definition: @main( ( temp structure{ temp 4-component vector of float pos,  temp int somethingelse})
+0:11    Function Parameters: 
+0:?     Sequence
+0:14      move second child to first child ( temp 4-component vector of float)
+0:14        pos: direct index for structure ( temp 4-component vector of float)
+0:14          'vsout' ( temp structure{ temp 4-component vector of float pos,  temp int somethingelse})
+0:14          Constant:
+0:14            0 (const int)
+0:14        position: direct index for structure ( uniform 4-component vector of float)
+0:14          'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float position})
+0:14          Constant:
+0:14            0 (const uint)
+0:15      move second child to first child ( temp int)
+0:15        somethingelse: direct index for structure ( temp int)
+0:15          'vsout' ( temp structure{ temp 4-component vector of float pos,  temp int somethingelse})
+0:15          Constant:
+0:15            1 (const int)
+0:15        Constant:
+0:15          42 (const int)
+0:17      Branch: Return with expression
+0:17        'vsout' ( temp structure{ temp 4-component vector of float pos,  temp int somethingelse})
+0:11  Function Definition: main( ( temp void)
+0:11    Function Parameters: 
+0:?     Sequence
+0:11      Sequence
+0:11        move second child to first child ( temp structure{ temp 4-component vector of float pos,  temp int somethingelse})
+0:11          'flattenTemp' ( temp structure{ temp 4-component vector of float pos,  temp int somethingelse})
+0:11          Function Call: @main( ( temp structure{ temp 4-component vector of float pos,  temp int somethingelse})
+0:11        Sequence
+0:11          move second child to first child ( temp 4-component vector of float)
+0:11            '@position' ( temp 4-component vector of float)
+0:11            pos: direct index for structure ( temp 4-component vector of float)
+0:11              'flattenTemp' ( temp structure{ temp 4-component vector of float pos,  temp int somethingelse})
+0:11              Constant:
+0:11                0 (const int)
+0:11          move second child to first child ( temp float)
+0:11            direct index ( temp float)
+0:11              '@position' ( temp 4-component vector of float)
+0:11              Constant:
+0:11                1 (const int)
+0:11            Negate value ( temp float)
+0:11              direct index ( temp float)
+0:11                '@position' ( temp 4-component vector of float)
+0:11                Constant:
+0:11                  1 (const int)
+0:11          move second child to first child ( temp 4-component vector of float)
+0:?             '@entryPointOutput.pos' ( out 4-component vector of float Position)
+0:11            '@position' ( temp 4-component vector of float)
+0:11        move second child to first child ( temp int)
+0:?           '@entryPointOutput.somethingelse' (layout( location=0) out int)
+0:11          somethingelse: direct index for structure ( temp int)
+0:11            'flattenTemp' ( temp structure{ temp 4-component vector of float pos,  temp int somethingelse})
+0:11            Constant:
+0:11              1 (const int)
+0:?   Linker Objects
+0:?     'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float position})
+0:?     '@entryPointOutput.pos' ( out 4-component vector of float Position)
+0:?     '@entryPointOutput.somethingelse' (layout( location=0) out int)
+
+// Module Version 10000
+// Generated by (magic number): 80006
+// Id's are bound by 50
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4  "main" 44 47
+                              Source HLSL 500
+                              Name 4  "main"
+                              Name 9  "VS_OUT"
+                              MemberName 9(VS_OUT) 0  "pos"
+                              MemberName 9(VS_OUT) 1  "somethingelse"
+                              Name 11  "@main("
+                              Name 14  "vsout"
+                              Name 16  "$Global"
+                              MemberName 16($Global) 0  "position"
+                              Name 18  ""
+                              Name 31  "flattenTemp"
+                              Name 33  "@position"
+                              Name 44  "@entryPointOutput.pos"
+                              Name 47  "@entryPointOutput.somethingelse"
+                              MemberDecorate 16($Global) 0 Offset 0
+                              Decorate 16($Global) Block
+                              Decorate 18 DescriptorSet 0
+                              Decorate 44(@entryPointOutput.pos) BuiltIn Position
+                              Decorate 47(@entryPointOutput.somethingelse) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypeInt 32 1
+       9(VS_OUT):             TypeStruct 7(fvec4) 8(int)
+              10:             TypeFunction 9(VS_OUT)
+              13:             TypePointer Function 9(VS_OUT)
+              15:      8(int) Constant 0
+     16($Global):             TypeStruct 7(fvec4)
+              17:             TypePointer Uniform 16($Global)
+              18:     17(ptr) Variable Uniform
+              19:             TypePointer Uniform 7(fvec4)
+              22:             TypePointer Function 7(fvec4)
+              24:      8(int) Constant 1
+              25:      8(int) Constant 42
+              26:             TypePointer Function 8(int)
+              36:             TypeInt 32 0
+              37:     36(int) Constant 1
+              38:             TypePointer Function 6(float)
+              43:             TypePointer Output 7(fvec4)
+44(@entryPointOutput.pos):     43(ptr) Variable Output
+              46:             TypePointer Output 8(int)
+47(@entryPointOutput.somethingelse):     46(ptr) Variable Output
+         4(main):           2 Function None 3
+               5:             Label
+ 31(flattenTemp):     13(ptr) Variable Function
+   33(@position):     22(ptr) Variable Function
+              32:   9(VS_OUT) FunctionCall 11(@main()
+                              Store 31(flattenTemp) 32
+              34:     22(ptr) AccessChain 31(flattenTemp) 15
+              35:    7(fvec4) Load 34
+                              Store 33(@position) 35
+              39:     38(ptr) AccessChain 33(@position) 37
+              40:    6(float) Load 39
+              41:    6(float) FNegate 40
+              42:     38(ptr) AccessChain 33(@position) 37
+                              Store 42 41
+              45:    7(fvec4) Load 33(@position)
+                              Store 44(@entryPointOutput.pos) 45
+              48:     26(ptr) AccessChain 31(flattenTemp) 24
+              49:      8(int) Load 48
+                              Store 47(@entryPointOutput.somethingelse) 49
+                              Return
+                              FunctionEnd
+      11(@main():   9(VS_OUT) Function None 10
+              12:             Label
+       14(vsout):     13(ptr) Variable Function
+              20:     19(ptr) AccessChain 18 15
+              21:    7(fvec4) Load 20
+              23:     22(ptr) AccessChain 14(vsout) 15
+                              Store 23 21
+              27:     26(ptr) AccessChain 14(vsout) 24
+                              Store 27 25
+              28:   9(VS_OUT) Load 14(vsout)
+                              ReturnValue 28
+                              FunctionEnd
diff --git a/Test/baseResults/implicitInnerAtomicUint.frag.out b/Test/baseResults/implicitInnerAtomicUint.frag.out
old mode 100644
new mode 100755
index 6f68980..ed9771e
--- a/Test/baseResults/implicitInnerAtomicUint.frag.out
+++ b/Test/baseResults/implicitInnerAtomicUint.frag.out
@@ -1,13 +1,12 @@
 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.
+ERROR: 1 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)
+0:?     'c' (layout( binding=0 offset=0) uniform 1-element array of 1-element array of atomic_uint)
 
 
 Linked fragment stage:
@@ -17,5 +16,5 @@
 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)
+0:?     'c' (layout( binding=0 offset=0) uniform 1-element array of 1-element array of atomic_uint)
 
diff --git a/Test/baseResults/link1.vk.frag.out b/Test/baseResults/link1.vk.frag.out
index 26a26af..e113a36 100644
--- a/Test/baseResults/link1.vk.frag.out
+++ b/Test/baseResults/link1.vk.frag.out
@@ -2,30 +2,105 @@
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:7  Function Definition: main( ( global void)
-0:7    Function Parameters: 
-0:9    Sequence
-0:9      move second child to first child ( temp highp 4-component vector of float)
-0:9        'color' ( out highp 4-component vector of float)
-0:9        Function Call: getColor( ( global highp 4-component vector of float)
+0:16  Function Definition: main( ( global void)
+0:16    Function Parameters: 
+0:18    Sequence
+0:18      move second child to first child ( temp highp 4-component vector of float)
+0:18        'color' (layout( location=0) out highp 4-component vector of float)
+0:18        Function Call: getColor( ( global highp 4-component vector of float)
+0:20      move second child to first child ( temp highp int)
+0:20        direct index ( temp highp int)
+0:20          'a1' ( global unsized 9-element array of highp int)
+0:20          Constant:
+0:20            8 (const int)
+0:20        Constant:
+0:20          1 (const int)
+0:21      move second child to first child ( temp highp int)
+0:21        direct index ( temp highp int)
+0:21          'a2' ( global unsized 2-element array of highp int)
+0:21          Constant:
+0:21            1 (const int)
+0:21        Constant:
+0:21          1 (const int)
+0:22      move second child to first child ( temp highp int)
+0:22        indirect index ( temp highp int)
+0:22          'b' ( global 5-element array of highp int)
+0:22          'i' ( global highp int)
+0:22        Constant:
+0:22          1 (const int)
+0:23      move second child to first child ( temp highp int)
+0:23        direct index ( temp highp int)
+0:23          'c' ( global unsized 4-element array of highp int)
+0:23          Constant:
+0:23            3 (const int)
+0:23        Constant:
+0:23          1 (const int)
 0:?   Linker Objects
-0:?     'color' ( out highp 4-component vector of float)
+0:?     'color' (layout( location=0) out highp 4-component vector of float)
+0:?     'a1' ( global unsized 9-element array of highp int)
+0:?     'a2' ( global unsized 2-element array of highp int)
+0:?     'b' ( global 5-element array of highp int)
+0:?     'c' ( global unsized 4-element array of highp int)
+0:?     'i' ( global highp int)
+0:?     'anon@0' (layout( column_major std430) buffer block{layout( column_major std430) buffer unsized 1-element array of highp float r})
+0:?     'anon@1' (layout( column_major std430) buffer block{layout( column_major std430) buffer unsized 1-element array of highp float m})
 
 link2.vk.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:5  Function Definition: getColor( ( global highp 4-component vector of float)
-0:5    Function Parameters: 
-0:7    Sequence
-0:7      Branch: Return with expression
-0:7        texture ( global highp 4-component vector of float)
-0:7          's2D' ( uniform highp sampler2D)
-0:7          Constant:
-0:7            0.500000
-0:7            0.500000
+0:14  Function Definition: getColor( ( global highp 4-component vector of float)
+0:14    Function Parameters: 
+0:16    Sequence
+0:16      move second child to first child ( temp highp int)
+0:16        direct index ( temp highp int)
+0:16          'a1' ( global unsized 3-element array of highp int)
+0:16          Constant:
+0:16            2 (const int)
+0:16        Constant:
+0:16          1 (const int)
+0:17      move second child to first child ( temp highp int)
+0:17        direct index ( temp highp int)
+0:17          'a2' ( global unsized 10-element array of highp int)
+0:17          Constant:
+0:17            9 (const int)
+0:17        Constant:
+0:17          1 (const int)
+0:18      move second child to first child ( temp highp int)
+0:18        direct index ( temp highp int)
+0:18          'b' ( global unsized 3-element array of highp int)
+0:18          Constant:
+0:18            2 (const int)
+0:18        Constant:
+0:18          1 (const int)
+0:19      move second child to first child ( temp highp int)
+0:19        direct index ( temp highp int)
+0:19          'c' ( global 7-element array of highp int)
+0:19          Constant:
+0:19            3 (const int)
+0:19        Constant:
+0:19          1 (const int)
+0:20      move second child to first child ( temp highp int)
+0:20        indirect index ( temp highp int)
+0:20          'c' ( global 7-element array of highp int)
+0:20          'i' ( global highp int)
+0:20        Constant:
+0:20          1 (const int)
+0:22      Branch: Return with expression
+0:22        texture ( global highp 4-component vector of float)
+0:22          's2D' (layout( binding=1) uniform highp sampler2D)
+0:22          Constant:
+0:22            0.500000
+0:22            0.500000
 0:?   Linker Objects
-0:?     's2D' ( uniform highp sampler2D)
+0:?     's2D' (layout( binding=1) uniform highp sampler2D)
+0:?     'a1' ( global unsized 3-element array of highp int)
+0:?     'a2' ( global unsized 10-element array of highp int)
+0:?     'b' ( global unsized 3-element array of highp int)
+0:?     'c' ( global 7-element array of highp int)
+0:?     'i' ( global highp int)
+0:?     'anon@0' (layout( column_major std430) buffer block{layout( column_major std430) buffer unsized 1-element array of highp float r})
+0:?     'anon@1' (layout( column_major std430) buffer block{layout( column_major std430) buffer 4-element array of highp float m})
 
 
 Linked fragment stage:
@@ -34,23 +109,207 @@
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:7  Function Definition: main( ( global void)
-0:7    Function Parameters: 
-0:9    Sequence
-0:9      move second child to first child ( temp highp 4-component vector of float)
-0:9        'color' ( out highp 4-component vector of float)
-0:9        Function Call: getColor( ( global highp 4-component vector of float)
-0:5  Function Definition: getColor( ( global highp 4-component vector of float)
-0:5    Function Parameters: 
-0:7    Sequence
-0:7      Branch: Return with expression
-0:7        texture ( global highp 4-component vector of float)
-0:7          's2D' ( uniform highp sampler2D)
-0:7          Constant:
-0:7            0.500000
-0:7            0.500000
+0:16  Function Definition: main( ( global void)
+0:16    Function Parameters: 
+0:18    Sequence
+0:18      move second child to first child ( temp highp 4-component vector of float)
+0:18        'color' (layout( location=0) out highp 4-component vector of float)
+0:18        Function Call: getColor( ( global highp 4-component vector of float)
+0:20      move second child to first child ( temp highp int)
+0:20        direct index ( temp highp int)
+0:20          'a1' ( global 9-element array of highp int)
+0:20          Constant:
+0:20            8 (const int)
+0:20        Constant:
+0:20          1 (const int)
+0:21      move second child to first child ( temp highp int)
+0:21        direct index ( temp highp int)
+0:21          'a2' ( global 10-element array of highp int)
+0:21          Constant:
+0:21            1 (const int)
+0:21        Constant:
+0:21          1 (const int)
+0:22      move second child to first child ( temp highp int)
+0:22        indirect index ( temp highp int)
+0:22          'b' ( global 5-element array of highp int)
+0:22          'i' ( global highp int)
+0:22        Constant:
+0:22          1 (const int)
+0:23      move second child to first child ( temp highp int)
+0:23        direct index ( temp highp int)
+0:23          'c' ( global 7-element array of highp int)
+0:23          Constant:
+0:23            3 (const int)
+0:23        Constant:
+0:23          1 (const int)
+0:14  Function Definition: getColor( ( global highp 4-component vector of float)
+0:14    Function Parameters: 
+0:16    Sequence
+0:16      move second child to first child ( temp highp int)
+0:16        direct index ( temp highp int)
+0:16          'a1' ( global 3-element array of highp int)
+0:16          Constant:
+0:16            2 (const int)
+0:16        Constant:
+0:16          1 (const int)
+0:17      move second child to first child ( temp highp int)
+0:17        direct index ( temp highp int)
+0:17          'a2' ( global 10-element array of highp int)
+0:17          Constant:
+0:17            9 (const int)
+0:17        Constant:
+0:17          1 (const int)
+0:18      move second child to first child ( temp highp int)
+0:18        direct index ( temp highp int)
+0:18          'b' ( global 3-element array of highp int)
+0:18          Constant:
+0:18            2 (const int)
+0:18        Constant:
+0:18          1 (const int)
+0:19      move second child to first child ( temp highp int)
+0:19        direct index ( temp highp int)
+0:19          'c' ( global 7-element array of highp int)
+0:19          Constant:
+0:19            3 (const int)
+0:19        Constant:
+0:19          1 (const int)
+0:20      move second child to first child ( temp highp int)
+0:20        indirect index ( temp highp int)
+0:20          'c' ( global 7-element array of highp int)
+0:20          'i' ( global highp int)
+0:20        Constant:
+0:20          1 (const int)
+0:22      Branch: Return with expression
+0:22        texture ( global highp 4-component vector of float)
+0:22          's2D' (layout( binding=1) uniform highp sampler2D)
+0:22          Constant:
+0:22            0.500000
+0:22            0.500000
 0:?   Linker Objects
-0:?     'color' ( out highp 4-component vector of float)
-0:?     's2D' ( uniform highp sampler2D)
+0:?     'color' (layout( location=0) out highp 4-component vector of float)
+0:?     'a1' ( global 9-element array of highp int)
+0:?     'a2' ( global 10-element array of highp int)
+0:?     'b' ( global 5-element array of highp int)
+0:?     'c' ( global 7-element array of highp int)
+0:?     'i' ( global highp int)
+0:?     'anon@0' (layout( column_major std430) buffer block{layout( column_major std430) buffer unsized 1-element array of highp float r})
+0:?     'anon@1' (layout( column_major std430) buffer block{layout( column_major std430) buffer 4-element array of highp float m})
+0:?     's2D' (layout( binding=1) uniform highp sampler2D)
 
-SPIR-V is not generated for failed compile or link
+// Module Version 10000
+// Generated by (magic number): 80006
+// Id's are bound by 71
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 12
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              Name 4  "main"
+                              Name 9  "getColor("
+                              Name 12  "color"
+                              Name 19  "a1"
+                              Name 27  "a2"
+                              Name 32  "b"
+                              Name 33  "i"
+                              Name 39  "c"
+                              Name 54  "s2D"
+                              Name 63  "bnameRuntime"
+                              MemberName 63(bnameRuntime) 0  "r"
+                              Name 65  ""
+                              Name 68  "bnameImplicit"
+                              MemberName 68(bnameImplicit) 0  "m"
+                              Name 70  ""
+                              Decorate 12(color) Location 0
+                              Decorate 54(s2D) DescriptorSet 0
+                              Decorate 54(s2D) Binding 1
+                              Decorate 62 ArrayStride 4
+                              MemberDecorate 63(bnameRuntime) 0 Offset 0
+                              Decorate 63(bnameRuntime) BufferBlock
+                              Decorate 65 DescriptorSet 0
+                              Decorate 67 ArrayStride 4
+                              MemberDecorate 68(bnameImplicit) 0 Offset 0
+                              Decorate 68(bnameImplicit) BufferBlock
+                              Decorate 70 DescriptorSet 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypeFunction 7(fvec4)
+              11:             TypePointer Output 7(fvec4)
+       12(color):     11(ptr) Variable Output
+              14:             TypeInt 32 1
+              15:             TypeInt 32 0
+              16:     15(int) Constant 9
+              17:             TypeArray 14(int) 16
+              18:             TypePointer Private 17
+          19(a1):     18(ptr) Variable Private
+              20:     14(int) Constant 8
+              21:     14(int) Constant 1
+              22:             TypePointer Private 14(int)
+              24:     15(int) Constant 10
+              25:             TypeArray 14(int) 24
+              26:             TypePointer Private 25
+          27(a2):     26(ptr) Variable Private
+              29:     15(int) Constant 5
+              30:             TypeArray 14(int) 29
+              31:             TypePointer Private 30
+           32(b):     31(ptr) Variable Private
+           33(i):     22(ptr) Variable Private
+              36:     15(int) Constant 7
+              37:             TypeArray 14(int) 36
+              38:             TypePointer Private 37
+           39(c):     38(ptr) Variable Private
+              40:     14(int) Constant 3
+              42:     14(int) Constant 2
+              43:             TypePointer Output 6(float)
+              45:     14(int) Constant 9
+              51:             TypeImage 6(float) 2D sampled format:Unknown
+              52:             TypeSampledImage 51
+              53:             TypePointer UniformConstant 52
+         54(s2D):     53(ptr) Variable UniformConstant
+              56:             TypeVector 6(float) 2
+              57:    6(float) Constant 1056964608
+              58:   56(fvec2) ConstantComposite 57 57
+              62:             TypeRuntimeArray 6(float)
+63(bnameRuntime):             TypeStruct 62
+              64:             TypePointer Uniform 63(bnameRuntime)
+              65:     64(ptr) Variable Uniform
+              66:     15(int) Constant 4
+              67:             TypeArray 6(float) 66
+68(bnameImplicit):             TypeStruct 67
+              69:             TypePointer Uniform 68(bnameImplicit)
+              70:     69(ptr) Variable Uniform
+         4(main):           2 Function None 3
+               5:             Label
+              13:    7(fvec4) FunctionCall 9(getColor()
+                              Store 12(color) 13
+              23:     22(ptr) AccessChain 19(a1) 20
+                              Store 23 21
+              28:     22(ptr) AccessChain 27(a2) 21
+                              Store 28 21
+              34:     14(int) Load 33(i)
+              35:     22(ptr) AccessChain 32(b) 34
+                              Store 35 21
+              41:     22(ptr) AccessChain 39(c) 40
+                              Store 41 21
+                              Return
+                              FunctionEnd
+    9(getColor():    7(fvec4) Function None 8
+              10:             Label
+              44:     43(ptr) AccessChain 12(color) 42
+                              Store 44 21
+              46:     22(ptr) AccessChain 19(a1) 45
+                              Store 46 21
+              47:     22(ptr) AccessChain 27(a2) 42
+                              Store 47 21
+              48:     22(ptr) AccessChain 32(b) 40
+                              Store 48 21
+              49:          37 Load 39(c)
+              50:     22(ptr) AccessChain 32(b) 49
+                              Store 50 21
+              55:          52 Load 54(s2D)
+              59:    7(fvec4) ImageSampleImplicitLod 55 58
+                              ReturnValue 59
+                              FunctionEnd
diff --git a/Test/baseResults/matrix2.frag.out b/Test/baseResults/matrix2.frag.out
index 880f75a..3e3b3f0 100644
--- a/Test/baseResults/matrix2.frag.out
+++ b/Test/baseResults/matrix2.frag.out
@@ -158,6 +158,9 @@
 0:49            'FragColor' ( out 4-component vector of float)
 0:49            Constant:
 0:49              3 (const int)
+0:50      matrix mult second child into first child ( temp 3X4 matrix of float)
+0:50        'm34' ( temp 3X4 matrix of float)
+0:50        'colorTransform' ( uniform 3X3 matrix of float)
 0:?   Linker Objects
 0:?     'colorTransform' ( uniform 3X3 matrix of float)
 0:?     'Color' ( smooth in 3-component vector of float)
@@ -331,6 +334,9 @@
 0:49            'FragColor' ( out 4-component vector of float)
 0:49            Constant:
 0:49              3 (const int)
+0:50      matrix mult second child into first child ( temp 3X4 matrix of float)
+0:50        'm34' ( temp 3X4 matrix of float)
+0:50        'colorTransform' ( uniform 3X3 matrix of float)
 0:?   Linker Objects
 0:?     'colorTransform' ( uniform 3X3 matrix of float)
 0:?     'Color' ( smooth in 3-component vector of float)
diff --git a/Test/baseResults/matrixError.vert.out b/Test/baseResults/matrixError.vert.out
index f818892..0a0d1e4 100644
--- a/Test/baseResults/matrixError.vert.out
+++ b/Test/baseResults/matrixError.vert.out
@@ -6,7 +6,9 @@
 ERROR: 0:19: 'xy' : does not apply to this type:  temp 2X3 matrix of float
 ERROR: 0:21: '[' :  matrix index out of range '2'
 ERROR: 0:21: '[' :  vector index out of range '4'
-ERROR: 7 compilation errors.  No code generated.
+ERROR: 0:22: 'assign' :  cannot convert from ' temp 2X3 matrix of float' to ' temp 2X3 matrix of float'
+ERROR: 0:23: 'assign' :  cannot convert from ' uniform 3X2 matrix of float' to ' temp 2X3 matrix of float'
+ERROR: 9 compilation errors.  No code generated.
 
 
 Shader version: 120
@@ -32,6 +34,8 @@
 0:21                2 (const int)
 0:21            Constant:
 0:21              4 (const int)
+0:22      'm23' ( temp 2X3 matrix of float)
+0:23      'm23' ( temp 2X3 matrix of float)
 0:?   Linker Objects
 0:?     'v3' ( in 3-component vector of float)
 0:?     'm32' ( uniform 3X2 matrix of float)
@@ -64,6 +68,8 @@
 0:21                2 (const int)
 0:21            Constant:
 0:21              4 (const int)
+0:22      'm23' ( temp 2X3 matrix of float)
+0:23      'm23' ( temp 2X3 matrix of float)
 0:?   Linker Objects
 0:?     'v3' ( in 3-component vector of float)
 0:?     'm32' ( uniform 3X2 matrix of float)
diff --git a/Test/baseResults/mixedArrayDecls.frag.out b/Test/baseResults/mixedArrayDecls.frag.out
new file mode 100755
index 0000000..598b828
--- /dev/null
+++ b/Test/baseResults/mixedArrayDecls.frag.out
@@ -0,0 +1,68 @@
+mixedArrayDecls.frag
+ERROR: 0:30: '' :  syntax error, unexpected LEFT_PAREN, expecting COMMA or SEMICOLON
+ERROR: 1 compilation errors.  No code generated.
+
+
+Shader version: 450
+ERROR: node is still EOpNull!
+0:16  Function Definition: foo(i1[14][15][6]; ( global 14-element array of 15-element array of 6-element array of int)
+0:16    Function Parameters: 
+0:16      'p' ( in 14-element array of 15-element array of 6-element array of int)
+0:16    Sequence
+0:16      Branch: Return with expression
+0:16        'p' ( in 14-element array of 15-element array of 6-element array of int)
+0:18  Function Definition: main( ( global void)
+0:18    Function Parameters: 
+0:20    Sequence
+0:20      direct index ( temp 14-element array of int)
+0:20        'g' ( global unsized 4-element array of 14-element array of int)
+0:20        Constant:
+0:20          3 (const int)
+0:21      direct index ( temp 14-element array of int)
+0:21        'h' ( global unsized 3-element array of 14-element array of int)
+0:21        Constant:
+0:21          2 (const int)
+0:24  Function Definition: bar( ( global 4-element array of 3-element array of 2-element array of float)
+0:24    Function Parameters: 
+0:?     Sequence
+0:24      Branch: Return with expression
+0:24        'a' ( temp 4-element array of 3-element array of 2-element array of float)
+0:?   Linker Objects
+0:?     's' ( global structure{ global 2-element array of 3-element array of int a,  global 5-element array of 3-element array of int b})
+0:?     'c' ( global 4-element array of 5-element array of int)
+0:?     'd' ( global 8-element array of 5-element array of int)
+0:?     'e' ( global 11-element array of 9-element array of int)
+0:?     'f' ( global 13-element array of 9-element array of int)
+0:?     'g' ( global unsized 4-element array of 14-element array of int)
+0:?     'h' ( global unsized 3-element array of 14-element array of int)
+0:?     'inbinst' ( in 4-element array of 5-element array of 6-element array of block{ in 8-element array of 9-element array of 7-element array of float f})
+0:?     'barm' ( global 4-element array of 3-element array of 2-element array of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+ERROR: node is still EOpNull!
+0:18  Function Definition: main( ( global void)
+0:18    Function Parameters: 
+0:20    Sequence
+0:20      direct index ( temp 14-element array of int)
+0:20        'g' ( global 4-element array of 14-element array of int)
+0:20        Constant:
+0:20          3 (const int)
+0:21      direct index ( temp 14-element array of int)
+0:21        'h' ( global 3-element array of 14-element array of int)
+0:21        Constant:
+0:21          2 (const int)
+0:?   Linker Objects
+0:?     's' ( global structure{ global 2-element array of 3-element array of int a,  global 5-element array of 3-element array of int b})
+0:?     'c' ( global 4-element array of 5-element array of int)
+0:?     'd' ( global 8-element array of 5-element array of int)
+0:?     'e' ( global 11-element array of 9-element array of int)
+0:?     'f' ( global 13-element array of 9-element array of int)
+0:?     'g' ( global 4-element array of 14-element array of int)
+0:?     'h' ( global 3-element array of 14-element array of int)
+0:?     'inbinst' ( in 4-element array of 5-element array of 6-element array of block{ in 8-element array of 9-element array of 7-element array of float f})
+0:?     'barm' ( global 4-element array of 3-element array of 2-element array of float)
+
diff --git a/Test/baseResults/nonuniform.frag.out b/Test/baseResults/nonuniform.frag.out
new file mode 100755
index 0000000..2d4e9b0
--- /dev/null
+++ b/Test/baseResults/nonuniform.frag.out
@@ -0,0 +1,92 @@
+nonuniform.frag
+ERROR: 0:10: 'nonuniformEXT' : for non-parameter, can only apply to 'in' or no storage qualifier 
+ERROR: 0:11: 'nonuniformEXT' : for non-parameter, can only apply to 'in' or no storage qualifier 
+ERROR: 0:12: 'nonuniformEXT' : for non-parameter, can only apply to 'in' or no storage qualifier 
+ERROR: 0:22: 'nonuniformEXT' : for non-parameter, can only apply to 'in' or no storage qualifier 
+ERROR: 0:28: 'constructor' : too many arguments 
+ERROR: 0:28: 'assign' :  cannot convert from ' const float' to ' nonuniform temp int'
+ERROR: 0:29: 'constructor' : not enough data provided for construction 
+ERROR: 0:29: 'assign' :  cannot convert from ' const float' to ' nonuniform temp int'
+ERROR: 0:32: 'nonuniformEXT' : not allowed on block or structure members 
+ERROR: 0:33: 'nonuniformEXT' : not allowed on block or structure members 
+ERROR: 10 compilation errors.  No code generated.
+
+
+Shader version: 450
+Requested GL_EXT_nonuniform_qualifier
+ERROR: node is still EOpNull!
+0:14  Function Definition: foo(i1;i1; ( nonuniform temp int)
+0:14    Function Parameters: 
+0:14      'nupi' ( nonuniform in int)
+0:14      'f' ( nonuniform out int)
+0:16    Sequence
+0:16      Branch: Return with expression
+0:16        'nupi' ( nonuniform in int)
+0:19  Function Definition: main( ( global void)
+0:19    Function Parameters: 
+0:?     Sequence
+0:24      Function Call: foo(i1;i1; ( nonuniform temp int)
+0:24        'nu_li' ( nonuniform temp int)
+0:24        'nu_li' ( nonuniform temp int)
+0:27      move second child to first child ( temp int)
+0:27        'nu_li' ( nonuniform temp int)
+0:27        add ( nonuniform temp int)
+0:27          'a' ( nonuniform temp int)
+0:27          component-wise multiply ( nonuniform temp int)
+0:27            'a' ( temp int)
+0:27            Constant:
+0:27              2 (const int)
+0:28      'nu_li' ( nonuniform temp int)
+0:29      'nu_li' ( nonuniform temp int)
+0:?   Linker Objects
+0:?     'nonuniformEXT' ( global int)
+0:?     'nu_inv4' ( smooth nonuniform in 4-component vector of float)
+0:?     'nu_gf' ( nonuniform temp float)
+0:?     'nu_outv4' ( nonuniform out 4-component vector of float)
+0:?     'nu_uv4' ( nonuniform uniform 4-component vector of float)
+0:?     'nu_constf' ( nonuniform const float)
+0:?       1.000000
+0:?     'ins' (layout( location=1) smooth in structure{ global float a,  temp float b})
+0:?     'inb' (layout( location=3) in block{ in float a,  in float b})
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+Requested GL_EXT_nonuniform_qualifier
+ERROR: node is still EOpNull!
+0:14  Function Definition: foo(i1;i1; ( nonuniform temp int)
+0:14    Function Parameters: 
+0:14      'nupi' ( nonuniform in int)
+0:14      'f' ( nonuniform out int)
+0:16    Sequence
+0:16      Branch: Return with expression
+0:16        'nupi' ( nonuniform in int)
+0:19  Function Definition: main( ( global void)
+0:19    Function Parameters: 
+0:?     Sequence
+0:24      Function Call: foo(i1;i1; ( nonuniform temp int)
+0:24        'nu_li' ( nonuniform temp int)
+0:24        'nu_li' ( nonuniform temp int)
+0:27      move second child to first child ( temp int)
+0:27        'nu_li' ( nonuniform temp int)
+0:27        add ( nonuniform temp int)
+0:27          'a' ( nonuniform temp int)
+0:27          component-wise multiply ( nonuniform temp int)
+0:27            'a' ( temp int)
+0:27            Constant:
+0:27              2 (const int)
+0:28      'nu_li' ( nonuniform temp int)
+0:29      'nu_li' ( nonuniform temp int)
+0:?   Linker Objects
+0:?     'nonuniformEXT' ( global int)
+0:?     'nu_inv4' ( smooth nonuniform in 4-component vector of float)
+0:?     'nu_gf' ( nonuniform temp float)
+0:?     'nu_outv4' ( nonuniform out 4-component vector of float)
+0:?     'nu_uv4' ( nonuniform uniform 4-component vector of float)
+0:?     'nu_constf' ( nonuniform const float)
+0:?       1.000000
+0:?     'ins' (layout( location=1) smooth in structure{ global float a,  temp float b})
+0:?     'inb' (layout( location=3) in block{ in float a,  in float b})
+
diff --git a/Test/baseResults/numeral.frag.out b/Test/baseResults/numeral.frag.out
index c1e3134..a7343f9 100644
--- a/Test/baseResults/numeral.frag.out
+++ b/Test/baseResults/numeral.frag.out
@@ -85,12 +85,12 @@
 0:17        move second child to first child ( temp int)
 0:17          'obig' ( temp int)
 0:17          Constant:
-0:17            995208915 (const int)
+0:17            -1662398820 (const int)
 0:18      Sequence
 0:18        move second child to first child ( temp int)
 0:18          'omax1' ( temp int)
 0:18          Constant:
-0:18            536870912 (const int)
+0:18            0 (const int)
 0:20      Sequence
 0:20        move second child to first child ( temp uint)
 0:20          'uo5' ( temp uint)
@@ -225,7 +225,7 @@
 0:50        move second child to first child ( temp int)
 0:50          'hbig' ( temp int)
 0:50          Constant:
-0:50            -1 (const int)
+0:50            -15 (const int)
 0:52      Sequence
 0:52        move second child to first child ( temp float)
 0:52          'f1' ( temp float)
@@ -494,12 +494,12 @@
 0:17        move second child to first child ( temp int)
 0:17          'obig' ( temp int)
 0:17          Constant:
-0:17            995208915 (const int)
+0:17            -1662398820 (const int)
 0:18      Sequence
 0:18        move second child to first child ( temp int)
 0:18          'omax1' ( temp int)
 0:18          Constant:
-0:18            536870912 (const int)
+0:18            0 (const int)
 0:20      Sequence
 0:20        move second child to first child ( temp uint)
 0:20          'uo5' ( temp uint)
@@ -634,7 +634,7 @@
 0:50        move second child to first child ( temp int)
 0:50          'hbig' ( temp int)
 0:50          Constant:
-0:50            -1 (const int)
+0:50            -15 (const int)
 0:52      Sequence
 0:52        move second child to first child ( temp float)
 0:52          'f1' ( temp float)
diff --git a/Test/baseResults/nvShaderNoperspectiveInterpolation.frag.out b/Test/baseResults/nvShaderNoperspectiveInterpolation.frag.out
new file mode 100644
index 0000000..ae004c6
--- /dev/null
+++ b/Test/baseResults/nvShaderNoperspectiveInterpolation.frag.out
@@ -0,0 +1,38 @@
+nvShaderNoperspectiveInterpolation.frag
+ERROR: 0:5: 'noperspective' : Reserved word. 
+ERROR: 0:5: 'noperspective' : not supported for this version or the enabled extensions 
+ERROR: 2 compilation errors.  No code generated.
+
+
+Shader version: 300
+Requested GL_NV_shader_noperspective_interpolation
+ERROR: node is still EOpNull!
+0:13  Function Definition: main( ( global void)
+0:13    Function Parameters: 
+0:14    Sequence
+0:14      move second child to first child ( temp mediump 4-component vector of float)
+0:14        'fragColor' ( out mediump 4-component vector of float)
+0:14        'color' ( noperspective in mediump 4-component vector of float)
+0:?   Linker Objects
+0:?     'bad' ( noperspective in mediump 4-component vector of float)
+0:?     'color' ( noperspective in mediump 4-component vector of float)
+0:?     'fragColor' ( out mediump 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 300
+Requested GL_NV_shader_noperspective_interpolation
+ERROR: node is still EOpNull!
+0:13  Function Definition: main( ( global void)
+0:13    Function Parameters: 
+0:14    Sequence
+0:14      move second child to first child ( temp mediump 4-component vector of float)
+0:14        'fragColor' ( out mediump 4-component vector of float)
+0:14        'color' ( noperspective in mediump 4-component vector of float)
+0:?   Linker Objects
+0:?     'bad' ( noperspective in mediump 4-component vector of float)
+0:?     'color' ( noperspective in mediump 4-component vector of float)
+0:?     'fragColor' ( out mediump 4-component vector of float)
+
diff --git a/Test/baseResults/preprocessor.pragma.vert.err b/Test/baseResults/preprocessor.pragma.vert.err
index e69de29..da435db 100644
--- a/Test/baseResults/preprocessor.pragma.vert.err
+++ b/Test/baseResults/preprocessor.pragma.vert.err
@@ -0,0 +1,2 @@
+WARNING: 0:10: '#pragma once' : not implemented 
+
diff --git a/Test/baseResults/preprocessor.pragma.vert.out b/Test/baseResults/preprocessor.pragma.vert.out
index 8c52814..ebe1e4a 100644
--- a/Test/baseResults/preprocessor.pragma.vert.out
+++ b/Test/baseResults/preprocessor.pragma.vert.out
@@ -7,6 +7,8 @@
 
 #pragma undefined_pragma(x,4)
 
+#pragma once
+
 int main(){
 }
 
diff --git a/Test/baseResults/preprocessor.simple.vert.out b/Test/baseResults/preprocessor.simple.vert.out
index 8cbabda..56bfe01 100644
--- a/Test/baseResults/preprocessor.simple.vert.out
+++ b/Test/baseResults/preprocessor.simple.vert.out
@@ -25,6 +25,6 @@
   == !=
   & ^ | && ^^ || ? :
   += -= *= /= %= <<= >>= &= |= ^=
-  1.2 2E10 5u - 5 lf
+  1.2 2E10 5u - 5l f
 }
 
diff --git a/Test/baseResults/remap.basic.dcefunc.frag.out b/Test/baseResults/remap.basic.dcefunc.frag.out
index da8f78a..97cc2b4 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): 80002
+// Generated by (magic number): 80006
 // 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 bf17c59..2389590 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): 80002
+// Generated by (magic number): 80006
 // 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 054a6b4..c3e661b 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): 80002
+// Generated by (magic number): 80006
 // 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 ee9d93c..2cd21d6 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): 80002
+// Generated by (magic number): 80006
 // 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 b986a7d..b39179d 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): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 24878
 
                               Capability Shader
@@ -11,6 +11,7 @@
                               MemoryModel Logical GLSL450
                               EntryPoint Fragment 5663  "main" 4253 3709
                               ExecutionMode 5663 OriginUpperLeft
+                              ExecutionMode 5663 DepthReplacing
                               Decorate 4727 DescriptorSet 0
                               Decorate 4727 Binding 0
                               Decorate 3305 DescriptorSet 0
diff --git a/Test/baseResults/remap.hlsl.sample.basic.none.frag.out b/Test/baseResults/remap.hlsl.sample.basic.none.frag.out
index 699fb8d..e58a9e6 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): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 198
 
                               Capability Shader
@@ -11,6 +11,7 @@
                               MemoryModel Logical GLSL450
                               EntryPoint Fragment 4  "main" 188 192
                               ExecutionMode 4 OriginUpperLeft
+                              ExecutionMode 4 DepthReplacing
                               Source HLSL 500
                               Name 4  "main"
                               Name 8  "PS_OUTPUT"
diff --git a/Test/baseResults/remap.hlsl.sample.basic.strip.frag.out b/Test/baseResults/remap.hlsl.sample.basic.strip.frag.out
index f46f93f..54a368e 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): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 198
 
                               Capability Shader
@@ -11,6 +11,7 @@
                               MemoryModel Logical GLSL450
                               EntryPoint Fragment 4  "main" 188 192
                               ExecutionMode 4 OriginUpperLeft
+                              ExecutionMode 4 DepthReplacing
                               Decorate 45 DescriptorSet 0
                               Decorate 45 Binding 0
                               Decorate 49 DescriptorSet 0
diff --git a/Test/baseResults/remap.hlsl.templatetypes.everything.frag.out b/Test/baseResults/remap.hlsl.templatetypes.everything.frag.out
index fe2df78..fe85679 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): 80002
+// Generated by (magic number): 80006
 // 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 bc5916e..a17b744 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): 80002
+// Generated by (magic number): 80006
 // 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 7a1733e..1b4482b 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): 80002
+// Generated by (magic number): 80006
 // 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 1601a6c..09ab2d4 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): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 25
 
                               Capability Shader
diff --git a/Test/baseResults/remap.similar_1a.everything.frag.out b/Test/baseResults/remap.similar_1a.everything.frag.out
index f67acfb..6f4a140 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): 80002
+// Generated by (magic number): 80006
 // 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 2bbf53a..6763686 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): 80002
+// Generated by (magic number): 80006
 // 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 67ff7df..cf4eb7c 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): 80002
+// Generated by (magic number): 80006
 // 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 089ea5c..1b76cbb 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): 80002
+// Generated by (magic number): 80006
 // 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 cc439f1..16e096c 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): 80002
+// Generated by (magic number): 80006
 // 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 c1fddd9..5e8d3b2 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): 80002
+// Generated by (magic number): 80006
 // 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 fa78e77..57cf4d7 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): 80002
+// Generated by (magic number): 80006
 // 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 aa9014c..6ec56a5 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): 80002
+// Generated by (magic number): 80006
 // 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 cba724e..71849eb 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): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 53
 
                               Capability Shader
diff --git a/Test/baseResults/runtimeArray.vert.out b/Test/baseResults/runtimeArray.vert.out
new file mode 100755
index 0000000..839c5bd
--- /dev/null
+++ b/Test/baseResults/runtimeArray.vert.out
@@ -0,0 +1,632 @@
+runtimeArray.vert
+WARNING: 0:33: '[]' : assuming binding count of one for compile-time checking of binding numbers for unsized array 
+WARNING: 0:34: '[]' : assuming binding count of one for compile-time checking of binding numbers for unsized array 
+WARNING: 0:37: '[]' : assuming binding count of one for compile-time checking of binding numbers for unsized array 
+WARNING: 0:38: '[]' : assuming binding count of one for compile-time checking of binding numbers for unsized array 
+WARNING: 0:39: '[]' : assuming binding count of one for compile-time checking of binding numbers for unsized array 
+WARNING: 0:40: '[]' : assuming binding count of one for compile-time checking of binding numbers for unsized array 
+ERROR: 0:61: '[' :  array must be redeclared with a size before being indexed with a variable
+ERROR: 0:62: '[' :  array must be redeclared with a size before being indexed with a variable
+ERROR: 0:63: '[' :  array must be redeclared with a size before being indexed with a variable
+ERROR: 0:66: 'length' :  array must be declared with a size before using this method
+ERROR: 0:67: 'length' :  array must be declared with a size before using this method
+ERROR: 0:68: 'length' :  array must be declared with a size before using this method
+ERROR: 0:71: '[' :  array must be redeclared with a size before being indexed with a variable
+ERROR: 0:72: '[' :  array must be redeclared with a size before being indexed with a variable
+ERROR: 0:73: '[' :  array must be redeclared with a size before being indexed with a variable
+ERROR: 0:76: 'length' :  array must be declared with a size before using this method
+ERROR: 0:77: 'length' :  array must be declared with a size before using this method
+ERROR: 0:78: 'length' :  array must be declared with a size before using this method
+ERROR: 0:81: '[' :  array must be redeclared with a size before being indexed with a variable
+ERROR: 0:82: '[' :  array must be redeclared with a size before being indexed with a variable
+ERROR: 0:83: '[' :  array must be redeclared with a size before being indexed with a variable
+ERROR: 0:86: 'length' :  array must be declared with a size before using this method
+ERROR: 0:87: 'length' :  array must be declared with a size before using this method
+ERROR: 0:88: 'length' :  array must be declared with a size before using this method
+ERROR: 0:100: 'variable index' : required extension not requested: GL_EXT_nonuniform_qualifier
+ERROR: 0:101: 'variable index' : required extension not requested: GL_EXT_nonuniform_qualifier
+ERROR: 0:102: 'variable index' : required extension not requested: GL_EXT_nonuniform_qualifier
+ERROR: 0:103: 'variable index' : required extension not requested: GL_EXT_nonuniform_qualifier
+ERROR: 0:104: 'variable index' : required extension not requested: GL_EXT_nonuniform_qualifier
+ERROR: 0:105: 'variable index' : required extension not requested: GL_EXT_nonuniform_qualifier
+ERROR: 0:106: 'variable index' : required extension not requested: GL_EXT_nonuniform_qualifier
+ERROR: 0:107: 'variable index' : required extension not requested: GL_EXT_nonuniform_qualifier
+ERROR: 26 compilation errors.  No code generated.
+
+
+Shader version: 450
+ERROR: node is still EOpNull!
+0:44  Function Definition: main( ( global void)
+0:44    Function Parameters: 
+0:46    Sequence
+0:46      direct index (layout( column_major shared) temp int)
+0:46        a: direct index for structure (layout( column_major shared) uniform runtime-sized array of int)
+0:46          'ubuf' (layout( column_major shared) uniform block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
+0:46          Constant:
+0:46            0 (const int)
+0:46        Constant:
+0:46          3 (const int)
+0:47      direct index (layout( column_major shared) temp float)
+0:47        b: direct index for structure (layout( column_major shared) uniform runtime-sized array of float)
+0:47          'ubuf' (layout( column_major shared) uniform block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
+0:47          Constant:
+0:47            1 (const int)
+0:47        Constant:
+0:47          3 (const int)
+0:48      direct index (layout( column_major shared) temp int)
+0:48        a: direct index for structure (layout( column_major shared) buffer runtime-sized array of int)
+0:48          'buf' (layout( column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
+0:48          Constant:
+0:48            0 (const int)
+0:48        Constant:
+0:48          3 (const int)
+0:49      direct index (layout( column_major shared) temp float)
+0:49        b: direct index for structure (layout( column_major shared) buffer runtime-sized array of float)
+0:49          'buf' (layout( column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
+0:49          Constant:
+0:49            1 (const int)
+0:49        Constant:
+0:49          3 (const int)
+0:51      direct index (layout( column_major shared) temp int)
+0:51        a: direct index for structure (layout( column_major shared) uniform runtime-sized array of int)
+0:51          direct index (layout( column_major shared) temp block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
+0:51            'ubufa' (layout( column_major shared) uniform 4-element array of block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
+0:51            Constant:
+0:51              3 (const int)
+0:51          Constant:
+0:51            0 (const int)
+0:51        Constant:
+0:51          3 (const int)
+0:52      direct index (layout( column_major shared) temp float)
+0:52        b: direct index for structure (layout( column_major shared) uniform runtime-sized array of float)
+0:52          direct index (layout( column_major shared) temp block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
+0:52            'ubufa' (layout( column_major shared) uniform 4-element array of block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
+0:52            Constant:
+0:52              3 (const int)
+0:52          Constant:
+0:52            1 (const int)
+0:52        Constant:
+0:52          3 (const int)
+0:53      direct index (layout( column_major shared) temp int)
+0:53        a: direct index for structure (layout( column_major shared) buffer runtime-sized array of int)
+0:53          direct index (layout( column_major shared) temp block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
+0:53            'bufa' (layout( column_major shared) buffer 4-element array of block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
+0:53            Constant:
+0:53              3 (const int)
+0:53          Constant:
+0:53            0 (const int)
+0:53        Constant:
+0:53          3 (const int)
+0:54      direct index (layout( column_major shared) temp float)
+0:54        b: direct index for structure (layout( column_major shared) buffer runtime-sized array of float)
+0:54          direct index (layout( column_major shared) temp block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
+0:54            'bufa' (layout( column_major shared) buffer 4-element array of block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
+0:54            Constant:
+0:54              3 (const int)
+0:54          Constant:
+0:54            1 (const int)
+0:54        Constant:
+0:54          3 (const int)
+0:56      direct index (layout( column_major shared) temp int)
+0:56        aua: direct index for structure (layout( column_major shared) uniform runtime-sized array of int)
+0:56          'anon@1' (layout( column_major shared) uniform block{layout( column_major shared) uniform runtime-sized array of int aua, layout( column_major shared) uniform runtime-sized array of float aub})
+0:56          Constant:
+0:56            0 (const uint)
+0:56        Constant:
+0:56          3 (const int)
+0:57      direct index (layout( column_major shared) temp float)
+0:57        aub: direct index for structure (layout( column_major shared) uniform runtime-sized array of float)
+0:57          'anon@1' (layout( column_major shared) uniform block{layout( column_major shared) uniform runtime-sized array of int aua, layout( column_major shared) uniform runtime-sized array of float aub})
+0:57          Constant:
+0:57            1 (const uint)
+0:57        Constant:
+0:57          3 (const int)
+0:58      direct index (layout( column_major shared) temp int)
+0:58        aba: direct index for structure (layout( column_major shared) buffer runtime-sized array of int)
+0:58          'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int aba, layout( column_major shared) buffer runtime-sized array of float abb})
+0:58          Constant:
+0:58            0 (const uint)
+0:58        Constant:
+0:58          3 (const int)
+0:59      direct index (layout( column_major shared) temp float)
+0:59        abb: direct index for structure (layout( column_major shared) buffer runtime-sized array of float)
+0:59          'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int aba, layout( column_major shared) buffer runtime-sized array of float abb})
+0:59          Constant:
+0:59            1 (const uint)
+0:59        Constant:
+0:59          3 (const int)
+0:61      indirect index (layout( column_major shared) temp int)
+0:61        a: direct index for structure (layout( column_major shared) uniform runtime-sized array of int)
+0:61          'ubuf' (layout( column_major shared) uniform block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
+0:61          Constant:
+0:61            0 (const int)
+0:61        'i' ( global int)
+0:62      indirect index (layout( column_major shared) temp float)
+0:62        b: direct index for structure (layout( column_major shared) uniform runtime-sized array of float)
+0:62          'ubuf' (layout( column_major shared) uniform block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
+0:62          Constant:
+0:62            1 (const int)
+0:62        'i' ( global int)
+0:63      indirect index (layout( column_major shared) temp int)
+0:63        a: direct index for structure (layout( column_major shared) buffer runtime-sized array of int)
+0:63          'buf' (layout( column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
+0:63          Constant:
+0:63            0 (const int)
+0:63        'i' ( global int)
+0:64      indirect index (layout( column_major shared) temp float)
+0:64        b: direct index for structure (layout( column_major shared) buffer runtime-sized array of float)
+0:64          'buf' (layout( column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
+0:64          Constant:
+0:64            1 (const int)
+0:64        'i' ( global int)
+0:66      Constant:
+0:66        1 (const int)
+0:67      Constant:
+0:67        1 (const int)
+0:68      Constant:
+0:68        1 (const int)
+0:69      array length ( temp int)
+0:69        b: direct index for structure (layout( column_major shared) buffer runtime-sized array of float)
+0:69          'buf' (layout( column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
+0:69          Constant:
+0:69            1 (const int)
+0:71      indirect index (layout( column_major shared) temp int)
+0:71        a: direct index for structure (layout( column_major shared) uniform runtime-sized array of int)
+0:71          direct index (layout( column_major shared) temp block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
+0:71            'ubufa' (layout( column_major shared) uniform 4-element array of block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
+0:71            Constant:
+0:71              1 (const int)
+0:71          Constant:
+0:71            0 (const int)
+0:71        'i' ( global int)
+0:72      indirect index (layout( column_major shared) temp float)
+0:72        b: direct index for structure (layout( column_major shared) uniform runtime-sized array of float)
+0:72          direct index (layout( column_major shared) temp block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
+0:72            'ubufa' (layout( column_major shared) uniform 4-element array of block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
+0:72            Constant:
+0:72              1 (const int)
+0:72          Constant:
+0:72            1 (const int)
+0:72        'i' ( global int)
+0:73      indirect index (layout( column_major shared) temp int)
+0:73        a: direct index for structure (layout( column_major shared) buffer runtime-sized array of int)
+0:73          direct index (layout( column_major shared) temp block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
+0:73            'bufa' (layout( column_major shared) buffer 4-element array of block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
+0:73            Constant:
+0:73              1 (const int)
+0:73          Constant:
+0:73            0 (const int)
+0:73        'i' ( global int)
+0:74      indirect index (layout( column_major shared) temp float)
+0:74        b: direct index for structure (layout( column_major shared) buffer runtime-sized array of float)
+0:74          direct index (layout( column_major shared) temp block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
+0:74            'bufa' (layout( column_major shared) buffer 4-element array of block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
+0:74            Constant:
+0:74              1 (const int)
+0:74          Constant:
+0:74            1 (const int)
+0:74        'i' ( global int)
+0:76      Constant:
+0:76        1 (const int)
+0:77      Constant:
+0:77        1 (const int)
+0:78      Constant:
+0:78        1 (const int)
+0:79      array length ( temp int)
+0:79        b: direct index for structure (layout( column_major shared) buffer runtime-sized array of float)
+0:79          direct index (layout( column_major shared) temp block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
+0:79            'bufa' (layout( column_major shared) buffer 4-element array of block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
+0:79            Constant:
+0:79              1 (const int)
+0:79          Constant:
+0:79            1 (const int)
+0:81      indirect index (layout( column_major shared) temp int)
+0:81        aua: direct index for structure (layout( column_major shared) uniform runtime-sized array of int)
+0:81          'anon@1' (layout( column_major shared) uniform block{layout( column_major shared) uniform runtime-sized array of int aua, layout( column_major shared) uniform runtime-sized array of float aub})
+0:81          Constant:
+0:81            0 (const uint)
+0:81        'i' ( global int)
+0:82      indirect index (layout( column_major shared) temp float)
+0:82        aub: direct index for structure (layout( column_major shared) uniform runtime-sized array of float)
+0:82          'anon@1' (layout( column_major shared) uniform block{layout( column_major shared) uniform runtime-sized array of int aua, layout( column_major shared) uniform runtime-sized array of float aub})
+0:82          Constant:
+0:82            1 (const uint)
+0:82        'i' ( global int)
+0:83      indirect index (layout( column_major shared) temp int)
+0:83        aba: direct index for structure (layout( column_major shared) buffer runtime-sized array of int)
+0:83          'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int aba, layout( column_major shared) buffer runtime-sized array of float abb})
+0:83          Constant:
+0:83            0 (const uint)
+0:83        'i' ( global int)
+0:84      indirect index (layout( column_major shared) temp float)
+0:84        abb: direct index for structure (layout( column_major shared) buffer runtime-sized array of float)
+0:84          'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int aba, layout( column_major shared) buffer runtime-sized array of float abb})
+0:84          Constant:
+0:84            1 (const uint)
+0:84        'i' ( global int)
+0:86      Constant:
+0:86        1 (const int)
+0:87      Constant:
+0:87        1 (const int)
+0:88      Constant:
+0:88        1 (const int)
+0:89      array length ( temp int)
+0:89        abb: direct index for structure (layout( column_major shared) buffer runtime-sized array of float)
+0:89          'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int aba, layout( column_major shared) buffer runtime-sized array of float abb})
+0:89          Constant:
+0:89            1 (const uint)
+0:91      direct index (layout( binding=1) temp samplerBuffer)
+0:91        'uniformTexelBufferDyn' (layout( binding=1) uniform runtime-sized array of samplerBuffer)
+0:91        Constant:
+0:91          1 (const int)
+0:92      direct index (layout( binding=2 r32f) temp imageBuffer)
+0:92        'storageTexelBufferDyn' (layout( binding=2 r32f) uniform runtime-sized array of imageBuffer)
+0:92        Constant:
+0:92          1 (const int)
+0:93      direct index (layout( binding=3 column_major shared) temp block{layout( column_major shared) uniform float a})
+0:93        'uniformBuffer' (layout( binding=3 column_major shared) uniform runtime-sized array of block{layout( column_major shared) uniform float a})
+0:93        Constant:
+0:93          1 (const int)
+0:94      direct index (layout( binding=4 column_major shared) temp block{layout( column_major shared) buffer float b})
+0:94        'storageBuffer' (layout( binding=4 column_major shared) buffer runtime-sized array of block{layout( column_major shared) buffer float b})
+0:94        Constant:
+0:94          1 (const int)
+0:95      direct index (layout( binding=5) temp sampler2D)
+0:95        'sampledImage' (layout( binding=5) uniform runtime-sized array of sampler2D)
+0:95        Constant:
+0:95          1 (const int)
+0:96      direct index (layout( binding=6 r32f) temp image2D)
+0:96        'storageImage' (layout( binding=6 r32f) uniform runtime-sized array of image2D)
+0:96        Constant:
+0:96          1 (const int)
+0:97      direct index (layout( binding=8) temp samplerBuffer)
+0:97        'uniformTexelBuffer' (layout( binding=8) uniform runtime-sized array of samplerBuffer)
+0:97        Constant:
+0:97          1 (const int)
+0:98      direct index (layout( binding=9 r32f) temp imageBuffer)
+0:98        'storageTexelBuffer' (layout( binding=9 r32f) uniform runtime-sized array of imageBuffer)
+0:98        Constant:
+0:98          1 (const int)
+0:100      indirect index (layout( binding=1) temp samplerBuffer)
+0:100        'uniformTexelBufferDyn' (layout( binding=1) uniform runtime-sized array of samplerBuffer)
+0:100        'i' ( global int)
+0:101      indirect index (layout( binding=2 r32f) temp imageBuffer)
+0:101        'storageTexelBufferDyn' (layout( binding=2 r32f) uniform runtime-sized array of imageBuffer)
+0:101        'i' ( global int)
+0:102      indirect index (layout( binding=3 column_major shared) temp block{layout( column_major shared) uniform float a})
+0:102        'uniformBuffer' (layout( binding=3 column_major shared) uniform runtime-sized array of block{layout( column_major shared) uniform float a})
+0:102        'i' ( global int)
+0:103      indirect index (layout( binding=4 column_major shared) temp block{layout( column_major shared) buffer float b})
+0:103        'storageBuffer' (layout( binding=4 column_major shared) buffer runtime-sized array of block{layout( column_major shared) buffer float b})
+0:103        'i' ( global int)
+0:104      indirect index (layout( binding=5) temp sampler2D)
+0:104        'sampledImage' (layout( binding=5) uniform runtime-sized array of sampler2D)
+0:104        'i' ( global int)
+0:105      indirect index (layout( binding=6 r32f) temp image2D)
+0:105        'storageImage' (layout( binding=6 r32f) uniform runtime-sized array of image2D)
+0:105        'i' ( global int)
+0:106      indirect index (layout( binding=8) temp samplerBuffer)
+0:106        'uniformTexelBuffer' (layout( binding=8) uniform runtime-sized array of samplerBuffer)
+0:106        'i' ( global int)
+0:107      indirect index (layout( binding=9 r32f) temp imageBuffer)
+0:107        'storageTexelBuffer' (layout( binding=9 r32f) uniform runtime-sized array of imageBuffer)
+0:107        'i' ( global int)
+0:?   Linker Objects
+0:?     'buf' (layout( column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
+0:?     'ubuf' (layout( column_major shared) uniform block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
+0:?     'bufa' (layout( column_major shared) buffer 4-element array of block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
+0:?     'ubufa' (layout( column_major shared) uniform 4-element array of block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
+0:?     'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int aba, layout( column_major shared) buffer runtime-sized array of float abb})
+0:?     'anon@1' (layout( column_major shared) uniform block{layout( column_major shared) uniform runtime-sized array of int aua, layout( column_major shared) uniform runtime-sized array of float aub})
+0:?     'uniformTexelBufferDyn' (layout( binding=1) uniform runtime-sized array of samplerBuffer)
+0:?     'storageTexelBufferDyn' (layout( binding=2 r32f) uniform runtime-sized array of imageBuffer)
+0:?     'uniformBuffer' (layout( binding=3 column_major shared) uniform runtime-sized array of block{layout( column_major shared) uniform float a})
+0:?     'storageBuffer' (layout( binding=4 column_major shared) buffer runtime-sized array of block{layout( column_major shared) buffer float b})
+0:?     'sampledImage' (layout( binding=5) uniform runtime-sized array of sampler2D)
+0:?     'storageImage' (layout( binding=6 r32f) uniform runtime-sized array of image2D)
+0:?     'uniformTexelBuffer' (layout( binding=8) uniform runtime-sized array of samplerBuffer)
+0:?     'storageTexelBuffer' (layout( binding=9 r32f) uniform runtime-sized array of imageBuffer)
+0:?     'i' ( global int)
+0:?     'gl_VertexID' ( gl_VertexId int VertexId)
+0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
+
+
+Linked vertex stage:
+
+
+Shader version: 450
+ERROR: node is still EOpNull!
+0:44  Function Definition: main( ( global void)
+0:44    Function Parameters: 
+0:46    Sequence
+0:46      direct index (layout( column_major shared) temp int)
+0:46        a: direct index for structure (layout( column_major shared) uniform runtime-sized array of int)
+0:46          'ubuf' (layout( column_major shared) uniform block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
+0:46          Constant:
+0:46            0 (const int)
+0:46        Constant:
+0:46          3 (const int)
+0:47      direct index (layout( column_major shared) temp float)
+0:47        b: direct index for structure (layout( column_major shared) uniform runtime-sized array of float)
+0:47          'ubuf' (layout( column_major shared) uniform block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
+0:47          Constant:
+0:47            1 (const int)
+0:47        Constant:
+0:47          3 (const int)
+0:48      direct index (layout( column_major shared) temp int)
+0:48        a: direct index for structure (layout( column_major shared) buffer runtime-sized array of int)
+0:48          'buf' (layout( column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
+0:48          Constant:
+0:48            0 (const int)
+0:48        Constant:
+0:48          3 (const int)
+0:49      direct index (layout( column_major shared) temp float)
+0:49        b: direct index for structure (layout( column_major shared) buffer runtime-sized array of float)
+0:49          'buf' (layout( column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
+0:49          Constant:
+0:49            1 (const int)
+0:49        Constant:
+0:49          3 (const int)
+0:51      direct index (layout( column_major shared) temp int)
+0:51        a: direct index for structure (layout( column_major shared) uniform runtime-sized array of int)
+0:51          direct index (layout( column_major shared) temp block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
+0:51            'ubufa' (layout( column_major shared) uniform 4-element array of block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
+0:51            Constant:
+0:51              3 (const int)
+0:51          Constant:
+0:51            0 (const int)
+0:51        Constant:
+0:51          3 (const int)
+0:52      direct index (layout( column_major shared) temp float)
+0:52        b: direct index for structure (layout( column_major shared) uniform runtime-sized array of float)
+0:52          direct index (layout( column_major shared) temp block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
+0:52            'ubufa' (layout( column_major shared) uniform 4-element array of block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
+0:52            Constant:
+0:52              3 (const int)
+0:52          Constant:
+0:52            1 (const int)
+0:52        Constant:
+0:52          3 (const int)
+0:53      direct index (layout( column_major shared) temp int)
+0:53        a: direct index for structure (layout( column_major shared) buffer runtime-sized array of int)
+0:53          direct index (layout( column_major shared) temp block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
+0:53            'bufa' (layout( column_major shared) buffer 4-element array of block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
+0:53            Constant:
+0:53              3 (const int)
+0:53          Constant:
+0:53            0 (const int)
+0:53        Constant:
+0:53          3 (const int)
+0:54      direct index (layout( column_major shared) temp float)
+0:54        b: direct index for structure (layout( column_major shared) buffer runtime-sized array of float)
+0:54          direct index (layout( column_major shared) temp block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
+0:54            'bufa' (layout( column_major shared) buffer 4-element array of block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
+0:54            Constant:
+0:54              3 (const int)
+0:54          Constant:
+0:54            1 (const int)
+0:54        Constant:
+0:54          3 (const int)
+0:56      direct index (layout( column_major shared) temp int)
+0:56        aua: direct index for structure (layout( column_major shared) uniform runtime-sized array of int)
+0:56          'anon@1' (layout( column_major shared) uniform block{layout( column_major shared) uniform runtime-sized array of int aua, layout( column_major shared) uniform runtime-sized array of float aub})
+0:56          Constant:
+0:56            0 (const uint)
+0:56        Constant:
+0:56          3 (const int)
+0:57      direct index (layout( column_major shared) temp float)
+0:57        aub: direct index for structure (layout( column_major shared) uniform runtime-sized array of float)
+0:57          'anon@1' (layout( column_major shared) uniform block{layout( column_major shared) uniform runtime-sized array of int aua, layout( column_major shared) uniform runtime-sized array of float aub})
+0:57          Constant:
+0:57            1 (const uint)
+0:57        Constant:
+0:57          3 (const int)
+0:58      direct index (layout( column_major shared) temp int)
+0:58        aba: direct index for structure (layout( column_major shared) buffer runtime-sized array of int)
+0:58          'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int aba, layout( column_major shared) buffer runtime-sized array of float abb})
+0:58          Constant:
+0:58            0 (const uint)
+0:58        Constant:
+0:58          3 (const int)
+0:59      direct index (layout( column_major shared) temp float)
+0:59        abb: direct index for structure (layout( column_major shared) buffer runtime-sized array of float)
+0:59          'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int aba, layout( column_major shared) buffer runtime-sized array of float abb})
+0:59          Constant:
+0:59            1 (const uint)
+0:59        Constant:
+0:59          3 (const int)
+0:61      indirect index (layout( column_major shared) temp int)
+0:61        a: direct index for structure (layout( column_major shared) uniform runtime-sized array of int)
+0:61          'ubuf' (layout( column_major shared) uniform block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
+0:61          Constant:
+0:61            0 (const int)
+0:61        'i' ( global int)
+0:62      indirect index (layout( column_major shared) temp float)
+0:62        b: direct index for structure (layout( column_major shared) uniform runtime-sized array of float)
+0:62          'ubuf' (layout( column_major shared) uniform block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
+0:62          Constant:
+0:62            1 (const int)
+0:62        'i' ( global int)
+0:63      indirect index (layout( column_major shared) temp int)
+0:63        a: direct index for structure (layout( column_major shared) buffer runtime-sized array of int)
+0:63          'buf' (layout( column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
+0:63          Constant:
+0:63            0 (const int)
+0:63        'i' ( global int)
+0:64      indirect index (layout( column_major shared) temp float)
+0:64        b: direct index for structure (layout( column_major shared) buffer runtime-sized array of float)
+0:64          'buf' (layout( column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
+0:64          Constant:
+0:64            1 (const int)
+0:64        'i' ( global int)
+0:66      Constant:
+0:66        1 (const int)
+0:67      Constant:
+0:67        1 (const int)
+0:68      Constant:
+0:68        1 (const int)
+0:69      array length ( temp int)
+0:69        b: direct index for structure (layout( column_major shared) buffer runtime-sized array of float)
+0:69          'buf' (layout( column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
+0:69          Constant:
+0:69            1 (const int)
+0:71      indirect index (layout( column_major shared) temp int)
+0:71        a: direct index for structure (layout( column_major shared) uniform runtime-sized array of int)
+0:71          direct index (layout( column_major shared) temp block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
+0:71            'ubufa' (layout( column_major shared) uniform 4-element array of block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
+0:71            Constant:
+0:71              1 (const int)
+0:71          Constant:
+0:71            0 (const int)
+0:71        'i' ( global int)
+0:72      indirect index (layout( column_major shared) temp float)
+0:72        b: direct index for structure (layout( column_major shared) uniform runtime-sized array of float)
+0:72          direct index (layout( column_major shared) temp block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
+0:72            'ubufa' (layout( column_major shared) uniform 4-element array of block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
+0:72            Constant:
+0:72              1 (const int)
+0:72          Constant:
+0:72            1 (const int)
+0:72        'i' ( global int)
+0:73      indirect index (layout( column_major shared) temp int)
+0:73        a: direct index for structure (layout( column_major shared) buffer runtime-sized array of int)
+0:73          direct index (layout( column_major shared) temp block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
+0:73            'bufa' (layout( column_major shared) buffer 4-element array of block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
+0:73            Constant:
+0:73              1 (const int)
+0:73          Constant:
+0:73            0 (const int)
+0:73        'i' ( global int)
+0:74      indirect index (layout( column_major shared) temp float)
+0:74        b: direct index for structure (layout( column_major shared) buffer runtime-sized array of float)
+0:74          direct index (layout( column_major shared) temp block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
+0:74            'bufa' (layout( column_major shared) buffer 4-element array of block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
+0:74            Constant:
+0:74              1 (const int)
+0:74          Constant:
+0:74            1 (const int)
+0:74        'i' ( global int)
+0:76      Constant:
+0:76        1 (const int)
+0:77      Constant:
+0:77        1 (const int)
+0:78      Constant:
+0:78        1 (const int)
+0:79      array length ( temp int)
+0:79        b: direct index for structure (layout( column_major shared) buffer runtime-sized array of float)
+0:79          direct index (layout( column_major shared) temp block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
+0:79            'bufa' (layout( column_major shared) buffer 4-element array of block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
+0:79            Constant:
+0:79              1 (const int)
+0:79          Constant:
+0:79            1 (const int)
+0:81      indirect index (layout( column_major shared) temp int)
+0:81        aua: direct index for structure (layout( column_major shared) uniform runtime-sized array of int)
+0:81          'anon@1' (layout( column_major shared) uniform block{layout( column_major shared) uniform runtime-sized array of int aua, layout( column_major shared) uniform runtime-sized array of float aub})
+0:81          Constant:
+0:81            0 (const uint)
+0:81        'i' ( global int)
+0:82      indirect index (layout( column_major shared) temp float)
+0:82        aub: direct index for structure (layout( column_major shared) uniform runtime-sized array of float)
+0:82          'anon@1' (layout( column_major shared) uniform block{layout( column_major shared) uniform runtime-sized array of int aua, layout( column_major shared) uniform runtime-sized array of float aub})
+0:82          Constant:
+0:82            1 (const uint)
+0:82        'i' ( global int)
+0:83      indirect index (layout( column_major shared) temp int)
+0:83        aba: direct index for structure (layout( column_major shared) buffer runtime-sized array of int)
+0:83          'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int aba, layout( column_major shared) buffer runtime-sized array of float abb})
+0:83          Constant:
+0:83            0 (const uint)
+0:83        'i' ( global int)
+0:84      indirect index (layout( column_major shared) temp float)
+0:84        abb: direct index for structure (layout( column_major shared) buffer runtime-sized array of float)
+0:84          'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int aba, layout( column_major shared) buffer runtime-sized array of float abb})
+0:84          Constant:
+0:84            1 (const uint)
+0:84        'i' ( global int)
+0:86      Constant:
+0:86        1 (const int)
+0:87      Constant:
+0:87        1 (const int)
+0:88      Constant:
+0:88        1 (const int)
+0:89      array length ( temp int)
+0:89        abb: direct index for structure (layout( column_major shared) buffer runtime-sized array of float)
+0:89          'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int aba, layout( column_major shared) buffer runtime-sized array of float abb})
+0:89          Constant:
+0:89            1 (const uint)
+0:91      direct index (layout( binding=1) temp samplerBuffer)
+0:91        'uniformTexelBufferDyn' (layout( binding=1) uniform runtime-sized array of samplerBuffer)
+0:91        Constant:
+0:91          1 (const int)
+0:92      direct index (layout( binding=2 r32f) temp imageBuffer)
+0:92        'storageTexelBufferDyn' (layout( binding=2 r32f) uniform runtime-sized array of imageBuffer)
+0:92        Constant:
+0:92          1 (const int)
+0:93      direct index (layout( binding=3 column_major shared) temp block{layout( column_major shared) uniform float a})
+0:93        'uniformBuffer' (layout( binding=3 column_major shared) uniform runtime-sized array of block{layout( column_major shared) uniform float a})
+0:93        Constant:
+0:93          1 (const int)
+0:94      direct index (layout( binding=4 column_major shared) temp block{layout( column_major shared) buffer float b})
+0:94        'storageBuffer' (layout( binding=4 column_major shared) buffer runtime-sized array of block{layout( column_major shared) buffer float b})
+0:94        Constant:
+0:94          1 (const int)
+0:95      direct index (layout( binding=5) temp sampler2D)
+0:95        'sampledImage' (layout( binding=5) uniform runtime-sized array of sampler2D)
+0:95        Constant:
+0:95          1 (const int)
+0:96      direct index (layout( binding=6 r32f) temp image2D)
+0:96        'storageImage' (layout( binding=6 r32f) uniform runtime-sized array of image2D)
+0:96        Constant:
+0:96          1 (const int)
+0:97      direct index (layout( binding=8) temp samplerBuffer)
+0:97        'uniformTexelBuffer' (layout( binding=8) uniform runtime-sized array of samplerBuffer)
+0:97        Constant:
+0:97          1 (const int)
+0:98      direct index (layout( binding=9 r32f) temp imageBuffer)
+0:98        'storageTexelBuffer' (layout( binding=9 r32f) uniform runtime-sized array of imageBuffer)
+0:98        Constant:
+0:98          1 (const int)
+0:100      indirect index (layout( binding=1) temp samplerBuffer)
+0:100        'uniformTexelBufferDyn' (layout( binding=1) uniform runtime-sized array of samplerBuffer)
+0:100        'i' ( global int)
+0:101      indirect index (layout( binding=2 r32f) temp imageBuffer)
+0:101        'storageTexelBufferDyn' (layout( binding=2 r32f) uniform runtime-sized array of imageBuffer)
+0:101        'i' ( global int)
+0:102      indirect index (layout( binding=3 column_major shared) temp block{layout( column_major shared) uniform float a})
+0:102        'uniformBuffer' (layout( binding=3 column_major shared) uniform runtime-sized array of block{layout( column_major shared) uniform float a})
+0:102        'i' ( global int)
+0:103      indirect index (layout( binding=4 column_major shared) temp block{layout( column_major shared) buffer float b})
+0:103        'storageBuffer' (layout( binding=4 column_major shared) buffer runtime-sized array of block{layout( column_major shared) buffer float b})
+0:103        'i' ( global int)
+0:104      indirect index (layout( binding=5) temp sampler2D)
+0:104        'sampledImage' (layout( binding=5) uniform runtime-sized array of sampler2D)
+0:104        'i' ( global int)
+0:105      indirect index (layout( binding=6 r32f) temp image2D)
+0:105        'storageImage' (layout( binding=6 r32f) uniform runtime-sized array of image2D)
+0:105        'i' ( global int)
+0:106      indirect index (layout( binding=8) temp samplerBuffer)
+0:106        'uniformTexelBuffer' (layout( binding=8) uniform runtime-sized array of samplerBuffer)
+0:106        'i' ( global int)
+0:107      indirect index (layout( binding=9 r32f) temp imageBuffer)
+0:107        'storageTexelBuffer' (layout( binding=9 r32f) uniform runtime-sized array of imageBuffer)
+0:107        'i' ( global int)
+0:?   Linker Objects
+0:?     'buf' (layout( column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
+0:?     'ubuf' (layout( column_major shared) uniform block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
+0:?     'bufa' (layout( column_major shared) buffer 4-element array of block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
+0:?     'ubufa' (layout( column_major shared) uniform 4-element array of block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
+0:?     'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int aba, layout( column_major shared) buffer runtime-sized array of float abb})
+0:?     'anon@1' (layout( column_major shared) uniform block{layout( column_major shared) uniform runtime-sized array of int aua, layout( column_major shared) uniform runtime-sized array of float aub})
+0:?     'uniformTexelBufferDyn' (layout( binding=1) uniform runtime-sized array of samplerBuffer)
+0:?     'storageTexelBufferDyn' (layout( binding=2 r32f) uniform runtime-sized array of imageBuffer)
+0:?     'uniformBuffer' (layout( binding=3 column_major shared) uniform runtime-sized array of block{layout( column_major shared) uniform float a})
+0:?     'storageBuffer' (layout( binding=4 column_major shared) buffer runtime-sized array of block{layout( column_major shared) buffer float b})
+0:?     'sampledImage' (layout( binding=5) uniform runtime-sized array of sampler2D)
+0:?     'storageImage' (layout( binding=6 r32f) uniform runtime-sized array of image2D)
+0:?     'uniformTexelBuffer' (layout( binding=8) uniform runtime-sized array of samplerBuffer)
+0:?     'storageTexelBuffer' (layout( binding=9 r32f) uniform runtime-sized array of imageBuffer)
+0:?     'i' ( global int)
+0:?     'gl_VertexID' ( gl_VertexId int VertexId)
+0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
+
diff --git a/Test/baseResults/specExamples.frag.out b/Test/baseResults/specExamples.frag.out
index ba47b6c..5eec3cb 100644
--- a/Test/baseResults/specExamples.frag.out
+++ b/Test/baseResults/specExamples.frag.out
@@ -320,7 +320,7 @@
 0:?     'factor' (layout( location=3 index=1) out 4-component vector of float)
 0:?     'colors' (layout( location=2) out 3-element array of 4-component vector of float)
 0:?     'gl_FragDepth' ( gl_FragDepth float FragDepth)
-0:?     'anon@2' ( in block{ in float FogFragCoord gl_FogFragCoord,  in implicitly-sized array of 4-component vector of float TexCoord gl_TexCoord,  flat in 4-component vector of float Color gl_Color,  in 4-component vector of float SecondaryColor gl_SecondaryColor})
+0:?     'anon@2' ( in block{ in float FogFragCoord gl_FogFragCoord,  in unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord,  flat in 4-component vector of float Color gl_Color,  in 4-component vector of float SecondaryColor gl_SecondaryColor})
 
 
 Linked fragment stage:
diff --git a/Test/baseResults/specExamples.vert.out b/Test/baseResults/specExamples.vert.out
index 71ce868..5c8ca39 100644
--- a/Test/baseResults/specExamples.vert.out
+++ b/Test/baseResults/specExamples.vert.out
@@ -19,7 +19,6 @@
 ERROR: 0:87: 'binding' : atomic_uint binding is too large; see gl_MaxAtomicCounterBindings 
 ERROR: 0:89: 'binding' : atomic_uint binding is too large 
 ERROR: 0:91: 'bar' : redefinition 
-ERROR: 0:92: 'atomic_uint' : layout(binding=X) is required 
 ERROR: 0:94: 'a2' : redefinition 
 ERROR: 0:95: 'binding' : atomic_uint binding is too large; see gl_MaxAtomicCounterBindings 
 ERROR: 0:96: 'binding' : atomic_uint binding is too large; see gl_MaxAtomicCounterBindings 
@@ -32,7 +31,7 @@
 ERROR: 0:136: '' : function does not return a value: funcB
 ERROR: 0:153: '' : function does not return a value: func3
 ERROR: 0:170: 'coherent' : argument cannot drop memory qualifier when passed to formal parameter 
-ERROR: 33 compilation errors.  No code generated.
+ERROR: 32 compilation errors.  No code generated.
 
 
 Shader version: 430
@@ -277,7 +276,7 @@
 0:?   Linker Objects
 0:?     'Coords' ( out block{ out 4-component vector of float Position,  out 2-component vector of float Texture})
 0:?     'anon@0' ( out block{ out 4-component vector of float Color})
-0:?     'transforms' (layout( column_major shared) uniform 4-element array of block{layout( column_major shared) uniform 4X4 matrix of float ModelViewMatrix, layout( column_major shared) uniform 4X4 matrix of float ModelViewProjectionMatrix, layout( column_major shared) uniform implicitly-sized array of 4-component vector of float a, layout( column_major shared) uniform float Deformation})
+0:?     'transforms' (layout( column_major shared) uniform 4-element array of block{layout( column_major shared) uniform 4X4 matrix of float ModelViewMatrix, layout( column_major shared) uniform 4X4 matrix of float ModelViewProjectionMatrix, layout( column_major shared) uniform unsized 1-element array of 4-component vector of float a, layout( column_major shared) uniform float Deformation})
 0:?     'normal' (layout( location=3) in 4-component vector of float)
 0:?     'colors' (layout( location=6) in 3-element array of 4-component vector of float)
 0:?     'transforms2' (layout( location=9) in 2-element array of 4X4 matrix of float)
@@ -296,7 +295,7 @@
 0:?     'b2' (layout( binding=2) uniform atomic_uint)
 0:?     'c2' (layout( binding=3) uniform atomic_uint)
 0:?     'd2' (layout( binding=2) uniform atomic_uint)
-0:?     'anon@5' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  flat out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out implicitly-sized array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
+0:?     'anon@5' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  flat out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
 0:?     'ColorInv' ( smooth out 3-component vector of float)
 0:?     'Color4' ( invariant centroid smooth out 3-component vector of float)
 0:?     'position' ( noContraction smooth out 4-component vector of float)
diff --git a/Test/baseResults/specExamplesConf.vert.out b/Test/baseResults/specExamplesConf.vert.out
new file mode 100755
index 0000000..e721781
--- /dev/null
+++ b/Test/baseResults/specExamplesConf.vert.out
@@ -0,0 +1,599 @@
+specExamples.vert
+ERROR: 0:29: 'location' : can only apply to uniform, buffer, in, or out storage qualifiers 
+ERROR: 0:31: 'triangles' : unrecognized layout identifier, or qualifier requires assignment (e.g., binding = 4) 
+ERROR: 0:31: 'invocations' : there is no such layout identifier for this stage taking an assigned value 
+ERROR: 0:33: 'lines' : unrecognized layout identifier, or qualifier requires assignment (e.g., binding = 4) 
+ERROR: 0:35: 'triangle_strip' : unrecognized layout identifier, or qualifier requires assignment (e.g., binding = 4) 
+ERROR: 0:35: 'max_vertices' : there is no such layout identifier for this stage taking an assigned value 
+ERROR: 0:36: 'max_vertices' : there is no such layout identifier for this stage taking an assigned value 
+ERROR: 0:37: 'triangle_strip' : unrecognized layout identifier, or qualifier requires assignment (e.g., binding = 4) 
+ERROR: 0:41: 'stream' : there is no such layout identifier for this stage taking an assigned value 
+ERROR: 0:43: 'stream' : there is no such layout identifier for this stage taking an assigned value 
+ERROR: 0:45: 'stream' : there is no such layout identifier for this stage taking an assigned value 
+ERROR: 0:46: 'stream' : there is no such layout identifier for this stage taking an assigned value 
+ERROR: 0:47: 'stream' : there is no such layout identifier for this stage taking an assigned value 
+ERROR: 0:50: 'stream' : there is no such layout identifier for this stage taking an assigned value 
+ERROR: 0:55: 'stream' : there is no such layout identifier for this stage taking an assigned value 
+ERROR: 0:80: 's17' : redefinition 
+ERROR: 0:85: 'binding' : atomic_uint binding is too large; see gl_MaxAtomicCounterBindings 
+ERROR: 0:87: 'binding' : atomic_uint binding is too large; see gl_MaxAtomicCounterBindings 
+ERROR: 0:89: 'binding' : atomic_uint binding is too large 
+ERROR: 0:91: 'bar' : redefinition 
+ERROR: 0:92: 'atomic_uint' : layout(binding=X) is required 
+ERROR: 0:94: 'a2' : redefinition 
+ERROR: 0:95: 'binding' : atomic_uint binding is too large; see gl_MaxAtomicCounterBindings 
+ERROR: 0:96: 'binding' : atomic_uint binding is too large; see gl_MaxAtomicCounterBindings 
+ERROR: 0:97: 'binding' : atomic_uint binding is too large; see gl_MaxAtomicCounterBindings 
+ERROR: 0:106: '' : vertex input cannot be further qualified 
+ERROR: 0:106: 'redeclaration' : cannot change storage, memory, or auxiliary qualification of gl_FrontColor
+ERROR: 0:112: 'ColorIvn' : identifier not previously declared 
+ERROR: 0:132: 'shared' : not supported in this stage: vertex
+ERROR: 0:134: '' : function does not return a value: funcA
+ERROR: 0:136: '' : function does not return a value: funcB
+ERROR: 0:153: '' : function does not return a value: func3
+ERROR: 0:170: 'coherent' : argument cannot drop memory qualifier when passed to formal parameter 
+ERROR: 33 compilation errors.  No code generated.
+
+
+Shader version: 430
+Requested GL_3DL_array_objects
+ERROR: node is still EOpNull!
+0:134  Function Definition: funcA(I21; ( global 4-component vector of float)
+0:134    Function Parameters: 
+0:134      'a' ( restrict in image2D)
+0:136  Function Definition: funcB(I21; ( global 4-component vector of float)
+0:136    Function Parameters: 
+0:136      'a' ( in image2D)
+0:140  Function Definition: func(f1;f1;f1;f1; ( global float)
+0:140    Function Parameters: 
+0:140      'e' ( in float)
+0:140      'f' ( in float)
+0:140      'g' ( in float)
+0:140      'h' ( in float)
+0:142    Sequence
+0:142      Branch: Return with expression
+0:142        add ( temp float)
+0:142          component-wise multiply ( temp float)
+0:142            'e' ( in float)
+0:142            'f' ( in float)
+0:142          component-wise multiply ( temp float)
+0:142            'g' ( in float)
+0:142            'h' ( in float)
+0:146  Function Definition: func2(f1;f1;f1;f1; ( global float)
+0:146    Function Parameters: 
+0:146      'e' ( in float)
+0:146      'f' ( in float)
+0:146      'g' ( in float)
+0:146      'h' ( in float)
+0:148    Sequence
+0:148      Sequence
+0:148        move second child to first child ( temp float)
+0:148          'result' ( noContraction temp float)
+0:148          add ( temp float)
+0:148            component-wise multiply ( temp float)
+0:148              'e' ( in float)
+0:148              'f' ( in float)
+0:148            component-wise multiply ( temp float)
+0:148              'g' ( in float)
+0:148              'h' ( in float)
+0:150      Branch: Return with expression
+0:150        'result' ( noContraction temp float)
+0:153  Function Definition: func3(f1;f1;f1; ( global float)
+0:153    Function Parameters: 
+0:153      'i' ( in float)
+0:153      'j' ( in float)
+0:153      'k' ( noContraction out float)
+0:155    Sequence
+0:155      move second child to first child ( temp float)
+0:155        'k' ( noContraction out float)
+0:155        add ( temp float)
+0:155          component-wise multiply ( temp float)
+0:155            'i' ( in float)
+0:155            'i' ( in float)
+0:155          'j' ( in float)
+0:158  Function Definition: main( ( global void)
+0:158    Function Parameters: 
+0:160    Sequence
+0:160      Sequence
+0:160        move second child to first child ( temp 3-component vector of float)
+0:160          'r' ( temp 3-component vector of float)
+0:160          Construct vec3 ( temp 3-component vector of float)
+0:160            component-wise multiply ( temp 4-component vector of float)
+0:160              'a' ( in 4-component vector of float)
+0:160              'b' ( in 4-component vector of float)
+0:161      Sequence
+0:161        move second child to first child ( temp 3-component vector of float)
+0:161          's' ( temp 3-component vector of float)
+0:161          Construct vec3 ( temp 3-component vector of float)
+0:161            component-wise multiply ( temp 4-component vector of float)
+0:161              'c' ( in 4-component vector of float)
+0:161              'd' ( in 4-component vector of float)
+0:162      move second child to first child ( temp 3-component vector of float)
+0:162        vector swizzle ( noContraction temp 3-component vector of float)
+0:162          'v' ( noContraction smooth out 4-component vector of float)
+0:162          Sequence
+0:162            Constant:
+0:162              0 (const int)
+0:162            Constant:
+0:162              1 (const int)
+0:162            Constant:
+0:162              2 (const int)
+0:162        add ( temp 3-component vector of float)
+0:162          'r' ( temp 3-component vector of float)
+0:162          's' ( temp 3-component vector of float)
+0:163      move second child to first child ( temp float)
+0:163        direct index ( noContraction temp float)
+0:163          'v' ( noContraction smooth out 4-component vector of float)
+0:163          Constant:
+0:163            3 (const int)
+0:163        add ( temp float)
+0:163          component-wise multiply ( temp float)
+0:163            direct index ( temp float)
+0:163              'a' ( in 4-component vector of float)
+0:163              Constant:
+0:163                3 (const int)
+0:163            direct index ( temp float)
+0:163              'b' ( in 4-component vector of float)
+0:163              Constant:
+0:163                3 (const int)
+0:163          component-wise multiply ( temp float)
+0:163            direct index ( temp float)
+0:163              'c' ( in 4-component vector of float)
+0:163              Constant:
+0:163                3 (const int)
+0:163            direct index ( temp float)
+0:163              'd' ( in 4-component vector of float)
+0:163              Constant:
+0:163                3 (const int)
+0:164      move second child to first child ( temp float)
+0:164        direct index ( noContraction temp float)
+0:164          'v' ( noContraction smooth out 4-component vector of float)
+0:164          Constant:
+0:164            0 (const int)
+0:164        Function Call: func(f1;f1;f1;f1; ( global float)
+0:164          direct index ( temp float)
+0:164            'a' ( in 4-component vector of float)
+0:164            Constant:
+0:164              0 (const int)
+0:164          direct index ( temp float)
+0:164            'b' ( in 4-component vector of float)
+0:164            Constant:
+0:164              0 (const int)
+0:164          direct index ( temp float)
+0:164            'c' ( in 4-component vector of float)
+0:164            Constant:
+0:164              0 (const int)
+0:164          direct index ( temp float)
+0:164            'd' ( in 4-component vector of float)
+0:164            Constant:
+0:164              0 (const int)
+0:166      move second child to first child ( temp float)
+0:166        direct index ( noContraction temp float)
+0:166          'v' ( noContraction smooth out 4-component vector of float)
+0:166          Constant:
+0:166            0 (const int)
+0:166        Function Call: func2(f1;f1;f1;f1; ( global float)
+0:166          direct index ( temp float)
+0:166            'a' ( in 4-component vector of float)
+0:166            Constant:
+0:166              0 (const int)
+0:166          direct index ( temp float)
+0:166            'b' ( in 4-component vector of float)
+0:166            Constant:
+0:166              0 (const int)
+0:166          direct index ( temp float)
+0:166            'c' ( in 4-component vector of float)
+0:166            Constant:
+0:166              0 (const int)
+0:166          direct index ( temp float)
+0:166            'd' ( in 4-component vector of float)
+0:166            Constant:
+0:166              0 (const int)
+0:167      Function Call: func3(f1;f1;f1; ( global float)
+0:167        component-wise multiply ( temp float)
+0:167          direct index ( temp float)
+0:167            'a' ( in 4-component vector of float)
+0:167            Constant:
+0:167              0 (const int)
+0:167          direct index ( temp float)
+0:167            'b' ( in 4-component vector of float)
+0:167            Constant:
+0:167              0 (const int)
+0:167        component-wise multiply ( temp float)
+0:167          direct index ( temp float)
+0:167            'c' ( in 4-component vector of float)
+0:167            Constant:
+0:167              0 (const int)
+0:167          direct index ( temp float)
+0:167            'd' ( in 4-component vector of float)
+0:167            Constant:
+0:167              0 (const int)
+0:167        direct index ( noContraction temp float)
+0:167          'v' ( noContraction smooth out 4-component vector of float)
+0:167          Constant:
+0:167            0 (const int)
+0:169      Function Call: funcA(I21; ( global 4-component vector of float)
+0:169        'img1' (layout( rgba32f) uniform image2D)
+0:170      Function Call: funcB(I21; ( global 4-component vector of float)
+0:170        'img2' (layout( rgba32f) coherent uniform image2D)
+0:?       Sequence
+0:178        Sequence
+0:178          move second child to first child ( temp structure{ temp float intensity,  temp 3-component vector of float position})
+0:178            'lightVar' ( temp structure{ temp float intensity,  temp 3-component vector of float position})
+0:178            Constant:
+0:178              3.000000
+0:178              1.000000
+0:178              2.000000
+0:178              3.000000
+0:?       Sequence
+0:185        Sequence
+0:185          move second child to first child ( temp 5-element array of float)
+0:185            'a' ( temp 5-element array of float)
+0:185            Construct float ( temp 5-element array of float)
+0:185              'g' ( temp float)
+0:185              Constant:
+0:185                1.000000
+0:185              'g' ( temp float)
+0:185              Constant:
+0:185                2.300000
+0:185              'g' ( temp float)
+0:188        move second child to first child ( temp 3-element array of float)
+0:188          'b' ( temp 3-element array of float)
+0:188          Construct float ( temp 3-element array of float)
+0:188            'g' ( temp float)
+0:188            add ( temp float)
+0:188              'g' ( temp float)
+0:188              Constant:
+0:188                1.000000
+0:188            add ( temp float)
+0:188              'g' ( temp float)
+0:188              Constant:
+0:188                2.000000
+0:191      Sequence
+0:191        Sequence
+0:191          move second child to first child ( temp 2-element array of 4-component vector of float)
+0:191            'b' ( temp 2-element array of 4-component vector of float)
+0:191            Constant:
+0:191              1.000000
+0:191              1.000000
+0:191              1.000000
+0:191              1.000000
+0:191              1.000000
+0:191              1.000000
+0:191              1.000000
+0:191              1.000000
+0:192        Construct vec4 ( temp 3-element array of 2-element array of 4-component vector of float)
+0:192          'b' ( temp 2-element array of 4-component vector of float)
+0:192          'b' ( temp 2-element array of 4-component vector of float)
+0:192          'b' ( temp 2-element array of 4-component vector of float)
+0:193        Construct vec4 ( temp 3-element array of 2-element array of 4-component vector of float)
+0:193          'b' ( temp 2-element array of 4-component vector of float)
+0:193          'b' ( temp 2-element array of 4-component vector of float)
+0:193          'b' ( temp 2-element array of 4-component vector of float)
+0:194        Construct vec4 ( temp 3-element array of 2-element array of 4-component vector of float)
+0:194          'b' ( temp 2-element array of 4-component vector of float)
+0:194          'b' ( temp 2-element array of 4-component vector of float)
+0:194          'b' ( temp 2-element array of 4-component vector of float)
+0:?   Linker Objects
+0:?     'Coords' ( out block{ out 4-component vector of float Position,  out 2-component vector of float Texture})
+0:?     'anon@0' ( out block{ out 4-component vector of float Color})
+0:?     'transforms' (layout( column_major shared) uniform 4-element array of block{layout( column_major shared) uniform 4X4 matrix of float ModelViewMatrix, layout( column_major shared) uniform 4X4 matrix of float ModelViewProjectionMatrix, layout( column_major shared) uniform unsized 1-element array of 4-component vector of float a, layout( column_major shared) uniform float Deformation})
+0:?     'normal' (layout( location=3) in 4-component vector of float)
+0:?     'colors' (layout( location=6) in 3-element array of 4-component vector of float)
+0:?     'transforms2' (layout( location=9) in 2-element array of 4X4 matrix of float)
+0:?     's' (layout( location=3) temp structure{ global 3-component vector of float a1,  global 2X2 matrix of float b,  global 2-element array of 4-component vector of float c})
+0:?     'var1' ( smooth out 4-component vector of float)
+0:?     'anon@1' ( out block{ out 4-component vector of float var2,  out 2-component vector of float var3,  out 3-component vector of float var4})
+0:?     'var5' ( smooth out 4-component vector of float)
+0:?     'anon@2' ( out block{ out 4-component vector of float var6})
+0:?     'var7' ( smooth out 4-component vector of float)
+0:?     'anon@3' (layout( row_major std140) uniform block{layout( row_major std140 offset=0) uniform 4X4 matrix of float M1, layout( column_major std140 offset=64) uniform 4X4 matrix of float M2, layout( row_major std140 offset=128) uniform 3X3 matrix of float N1})
+0:?     'anon@4' (layout( column_major shared) uniform block{layout( column_major shared) uniform 4X4 matrix of float M13, layout( row_major shared) uniform 4X4 matrix of float m14, layout( column_major shared) uniform 3X3 matrix of float N12})
+0:?     's17' (layout( binding=3) uniform sampler2D)
+0:?     'a2' (layout( binding=2 offset=4) uniform atomic_uint)
+0:?     'bar' (layout( binding=2) uniform atomic_uint)
+0:?     'bar23' (layout( offset=8) uniform atomic_uint)
+0:?     'b2' (layout( binding=2) uniform atomic_uint)
+0:?     'c2' (layout( binding=3) uniform atomic_uint)
+0:?     'd2' (layout( binding=2) uniform atomic_uint)
+0:?     'anon@5' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  flat out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
+0:?     'ColorInv' ( smooth out 3-component vector of float)
+0:?     'Color4' ( invariant centroid smooth out 3-component vector of float)
+0:?     'position' ( noContraction smooth out 4-component vector of float)
+0:?     'Color5' ( noContraction smooth out 3-component vector of float)
+0:?     'a' ( in 4-component vector of float)
+0:?     'b' ( in 4-component vector of float)
+0:?     'c' ( in 4-component vector of float)
+0:?     'd' ( in 4-component vector of float)
+0:?     'v' ( noContraction smooth out 4-component vector of float)
+0:?     'anon@6' (layout( column_major shared) coherent buffer block{layout( column_major shared) readonly buffer 4-component vector of float member1, layout( column_major shared) buffer 4-component vector of float member2})
+0:?     'anon@7' (layout( column_major shared) buffer block{layout( column_major shared) coherent readonly buffer 4-component vector of float member1A, layout( column_major shared) coherent buffer 4-component vector of float member2A})
+0:?     'shv' ( shared 4-component vector of float)
+0:?     'img1' (layout( rgba32f) uniform image2D)
+0:?     'img2' (layout( rgba32f) coherent uniform image2D)
+0:?     'gl_VertexID' ( gl_VertexId int VertexId)
+0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
+
+
+Linked vertex stage:
+
+
+Shader version: 430
+Requested GL_3DL_array_objects
+ERROR: node is still EOpNull!
+0:134  Function Definition: funcA(I21; ( global 4-component vector of float)
+0:134    Function Parameters: 
+0:134      'a' ( restrict in image2D)
+0:136  Function Definition: funcB(I21; ( global 4-component vector of float)
+0:136    Function Parameters: 
+0:136      'a' ( in image2D)
+0:140  Function Definition: func(f1;f1;f1;f1; ( global float)
+0:140    Function Parameters: 
+0:140      'e' ( in float)
+0:140      'f' ( in float)
+0:140      'g' ( in float)
+0:140      'h' ( in float)
+0:142    Sequence
+0:142      Branch: Return with expression
+0:142        add ( temp float)
+0:142          component-wise multiply ( temp float)
+0:142            'e' ( in float)
+0:142            'f' ( in float)
+0:142          component-wise multiply ( temp float)
+0:142            'g' ( in float)
+0:142            'h' ( in float)
+0:146  Function Definition: func2(f1;f1;f1;f1; ( global float)
+0:146    Function Parameters: 
+0:146      'e' ( in float)
+0:146      'f' ( in float)
+0:146      'g' ( in float)
+0:146      'h' ( in float)
+0:148    Sequence
+0:148      Sequence
+0:148        move second child to first child ( temp float)
+0:148          'result' ( noContraction temp float)
+0:148          add ( temp float)
+0:148            component-wise multiply ( temp float)
+0:148              'e' ( in float)
+0:148              'f' ( in float)
+0:148            component-wise multiply ( temp float)
+0:148              'g' ( in float)
+0:148              'h' ( in float)
+0:150      Branch: Return with expression
+0:150        'result' ( noContraction temp float)
+0:153  Function Definition: func3(f1;f1;f1; ( global float)
+0:153    Function Parameters: 
+0:153      'i' ( in float)
+0:153      'j' ( in float)
+0:153      'k' ( noContraction out float)
+0:155    Sequence
+0:155      move second child to first child ( temp float)
+0:155        'k' ( noContraction out float)
+0:155        add ( temp float)
+0:155          component-wise multiply ( temp float)
+0:155            'i' ( in float)
+0:155            'i' ( in float)
+0:155          'j' ( in float)
+0:158  Function Definition: main( ( global void)
+0:158    Function Parameters: 
+0:160    Sequence
+0:160      Sequence
+0:160        move second child to first child ( temp 3-component vector of float)
+0:160          'r' ( temp 3-component vector of float)
+0:160          Construct vec3 ( temp 3-component vector of float)
+0:160            component-wise multiply ( temp 4-component vector of float)
+0:160              'a' ( in 4-component vector of float)
+0:160              'b' ( in 4-component vector of float)
+0:161      Sequence
+0:161        move second child to first child ( temp 3-component vector of float)
+0:161          's' ( temp 3-component vector of float)
+0:161          Construct vec3 ( temp 3-component vector of float)
+0:161            component-wise multiply ( temp 4-component vector of float)
+0:161              'c' ( in 4-component vector of float)
+0:161              'd' ( in 4-component vector of float)
+0:162      move second child to first child ( temp 3-component vector of float)
+0:162        vector swizzle ( noContraction temp 3-component vector of float)
+0:162          'v' ( noContraction smooth out 4-component vector of float)
+0:162          Sequence
+0:162            Constant:
+0:162              0 (const int)
+0:162            Constant:
+0:162              1 (const int)
+0:162            Constant:
+0:162              2 (const int)
+0:162        add ( temp 3-component vector of float)
+0:162          'r' ( temp 3-component vector of float)
+0:162          's' ( temp 3-component vector of float)
+0:163      move second child to first child ( temp float)
+0:163        direct index ( noContraction temp float)
+0:163          'v' ( noContraction smooth out 4-component vector of float)
+0:163          Constant:
+0:163            3 (const int)
+0:163        add ( temp float)
+0:163          component-wise multiply ( temp float)
+0:163            direct index ( temp float)
+0:163              'a' ( in 4-component vector of float)
+0:163              Constant:
+0:163                3 (const int)
+0:163            direct index ( temp float)
+0:163              'b' ( in 4-component vector of float)
+0:163              Constant:
+0:163                3 (const int)
+0:163          component-wise multiply ( temp float)
+0:163            direct index ( temp float)
+0:163              'c' ( in 4-component vector of float)
+0:163              Constant:
+0:163                3 (const int)
+0:163            direct index ( temp float)
+0:163              'd' ( in 4-component vector of float)
+0:163              Constant:
+0:163                3 (const int)
+0:164      move second child to first child ( temp float)
+0:164        direct index ( noContraction temp float)
+0:164          'v' ( noContraction smooth out 4-component vector of float)
+0:164          Constant:
+0:164            0 (const int)
+0:164        Function Call: func(f1;f1;f1;f1; ( global float)
+0:164          direct index ( temp float)
+0:164            'a' ( in 4-component vector of float)
+0:164            Constant:
+0:164              0 (const int)
+0:164          direct index ( temp float)
+0:164            'b' ( in 4-component vector of float)
+0:164            Constant:
+0:164              0 (const int)
+0:164          direct index ( temp float)
+0:164            'c' ( in 4-component vector of float)
+0:164            Constant:
+0:164              0 (const int)
+0:164          direct index ( temp float)
+0:164            'd' ( in 4-component vector of float)
+0:164            Constant:
+0:164              0 (const int)
+0:166      move second child to first child ( temp float)
+0:166        direct index ( noContraction temp float)
+0:166          'v' ( noContraction smooth out 4-component vector of float)
+0:166          Constant:
+0:166            0 (const int)
+0:166        Function Call: func2(f1;f1;f1;f1; ( global float)
+0:166          direct index ( temp float)
+0:166            'a' ( in 4-component vector of float)
+0:166            Constant:
+0:166              0 (const int)
+0:166          direct index ( temp float)
+0:166            'b' ( in 4-component vector of float)
+0:166            Constant:
+0:166              0 (const int)
+0:166          direct index ( temp float)
+0:166            'c' ( in 4-component vector of float)
+0:166            Constant:
+0:166              0 (const int)
+0:166          direct index ( temp float)
+0:166            'd' ( in 4-component vector of float)
+0:166            Constant:
+0:166              0 (const int)
+0:167      Function Call: func3(f1;f1;f1; ( global float)
+0:167        component-wise multiply ( temp float)
+0:167          direct index ( temp float)
+0:167            'a' ( in 4-component vector of float)
+0:167            Constant:
+0:167              0 (const int)
+0:167          direct index ( temp float)
+0:167            'b' ( in 4-component vector of float)
+0:167            Constant:
+0:167              0 (const int)
+0:167        component-wise multiply ( temp float)
+0:167          direct index ( temp float)
+0:167            'c' ( in 4-component vector of float)
+0:167            Constant:
+0:167              0 (const int)
+0:167          direct index ( temp float)
+0:167            'd' ( in 4-component vector of float)
+0:167            Constant:
+0:167              0 (const int)
+0:167        direct index ( noContraction temp float)
+0:167          'v' ( noContraction smooth out 4-component vector of float)
+0:167          Constant:
+0:167            0 (const int)
+0:169      Function Call: funcA(I21; ( global 4-component vector of float)
+0:169        'img1' (layout( rgba32f) uniform image2D)
+0:170      Function Call: funcB(I21; ( global 4-component vector of float)
+0:170        'img2' (layout( rgba32f) coherent uniform image2D)
+0:?       Sequence
+0:178        Sequence
+0:178          move second child to first child ( temp structure{ temp float intensity,  temp 3-component vector of float position})
+0:178            'lightVar' ( temp structure{ temp float intensity,  temp 3-component vector of float position})
+0:178            Constant:
+0:178              3.000000
+0:178              1.000000
+0:178              2.000000
+0:178              3.000000
+0:?       Sequence
+0:185        Sequence
+0:185          move second child to first child ( temp 5-element array of float)
+0:185            'a' ( temp 5-element array of float)
+0:185            Construct float ( temp 5-element array of float)
+0:185              'g' ( temp float)
+0:185              Constant:
+0:185                1.000000
+0:185              'g' ( temp float)
+0:185              Constant:
+0:185                2.300000
+0:185              'g' ( temp float)
+0:188        move second child to first child ( temp 3-element array of float)
+0:188          'b' ( temp 3-element array of float)
+0:188          Construct float ( temp 3-element array of float)
+0:188            'g' ( temp float)
+0:188            add ( temp float)
+0:188              'g' ( temp float)
+0:188              Constant:
+0:188                1.000000
+0:188            add ( temp float)
+0:188              'g' ( temp float)
+0:188              Constant:
+0:188                2.000000
+0:191      Sequence
+0:191        Sequence
+0:191          move second child to first child ( temp 2-element array of 4-component vector of float)
+0:191            'b' ( temp 2-element array of 4-component vector of float)
+0:191            Constant:
+0:191              1.000000
+0:191              1.000000
+0:191              1.000000
+0:191              1.000000
+0:191              1.000000
+0:191              1.000000
+0:191              1.000000
+0:191              1.000000
+0:192        Construct vec4 ( temp 3-element array of 2-element array of 4-component vector of float)
+0:192          'b' ( temp 2-element array of 4-component vector of float)
+0:192          'b' ( temp 2-element array of 4-component vector of float)
+0:192          'b' ( temp 2-element array of 4-component vector of float)
+0:193        Construct vec4 ( temp 3-element array of 2-element array of 4-component vector of float)
+0:193          'b' ( temp 2-element array of 4-component vector of float)
+0:193          'b' ( temp 2-element array of 4-component vector of float)
+0:193          'b' ( temp 2-element array of 4-component vector of float)
+0:194        Construct vec4 ( temp 3-element array of 2-element array of 4-component vector of float)
+0:194          'b' ( temp 2-element array of 4-component vector of float)
+0:194          'b' ( temp 2-element array of 4-component vector of float)
+0:194          'b' ( temp 2-element array of 4-component vector of float)
+0:?   Linker Objects
+0:?     'Coords' ( out block{ out 4-component vector of float Position,  out 2-component vector of float Texture})
+0:?     'anon@0' ( out block{ out 4-component vector of float Color})
+0:?     'transforms' (layout( column_major shared) uniform 4-element array of block{layout( column_major shared) uniform 4X4 matrix of float ModelViewMatrix, layout( column_major shared) uniform 4X4 matrix of float ModelViewProjectionMatrix, layout( column_major shared) uniform 1-element array of 4-component vector of float a, layout( column_major shared) uniform float Deformation})
+0:?     'normal' (layout( location=3) in 4-component vector of float)
+0:?     'colors' (layout( location=6) in 3-element array of 4-component vector of float)
+0:?     'transforms2' (layout( location=9) in 2-element array of 4X4 matrix of float)
+0:?     's' (layout( location=3) temp structure{ global 3-component vector of float a1,  global 2X2 matrix of float b,  global 2-element array of 4-component vector of float c})
+0:?     'var1' ( smooth out 4-component vector of float)
+0:?     'anon@1' ( out block{ out 4-component vector of float var2,  out 2-component vector of float var3,  out 3-component vector of float var4})
+0:?     'var5' ( smooth out 4-component vector of float)
+0:?     'anon@2' ( out block{ out 4-component vector of float var6})
+0:?     'var7' ( smooth out 4-component vector of float)
+0:?     'anon@3' (layout( row_major std140) uniform block{layout( row_major std140 offset=0) uniform 4X4 matrix of float M1, layout( column_major std140 offset=64) uniform 4X4 matrix of float M2, layout( row_major std140 offset=128) uniform 3X3 matrix of float N1})
+0:?     'anon@4' (layout( column_major shared) uniform block{layout( column_major shared) uniform 4X4 matrix of float M13, layout( row_major shared) uniform 4X4 matrix of float m14, layout( column_major shared) uniform 3X3 matrix of float N12})
+0:?     's17' (layout( binding=3) uniform sampler2D)
+0:?     'a2' (layout( binding=2 offset=4) uniform atomic_uint)
+0:?     'bar' (layout( binding=2) uniform atomic_uint)
+0:?     'bar23' (layout( offset=8) uniform atomic_uint)
+0:?     'b2' (layout( binding=2) uniform atomic_uint)
+0:?     'c2' (layout( binding=3) uniform atomic_uint)
+0:?     'd2' (layout( binding=2) uniform atomic_uint)
+0:?     'anon@5' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out 1-element array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  flat out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out 1-element array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
+0:?     'ColorInv' ( smooth out 3-component vector of float)
+0:?     'Color4' ( invariant centroid smooth out 3-component vector of float)
+0:?     'position' ( noContraction smooth out 4-component vector of float)
+0:?     'Color5' ( noContraction smooth out 3-component vector of float)
+0:?     'a' ( in 4-component vector of float)
+0:?     'b' ( in 4-component vector of float)
+0:?     'c' ( in 4-component vector of float)
+0:?     'd' ( in 4-component vector of float)
+0:?     'v' ( noContraction smooth out 4-component vector of float)
+0:?     'anon@6' (layout( column_major shared) coherent buffer block{layout( column_major shared) readonly buffer 4-component vector of float member1, layout( column_major shared) buffer 4-component vector of float member2})
+0:?     'anon@7' (layout( column_major shared) buffer block{layout( column_major shared) coherent readonly buffer 4-component vector of float member1A, layout( column_major shared) coherent buffer 4-component vector of float member2A})
+0:?     'shv' ( shared 4-component vector of float)
+0:?     'img1' (layout( rgba32f) uniform image2D)
+0:?     'img2' (layout( rgba32f) coherent uniform image2D)
+0:?     'gl_VertexID' ( gl_VertexId int VertexId)
+0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
+
diff --git a/Test/baseResults/spv.100ops.frag.out b/Test/baseResults/spv.100ops.frag.out
index 5cf2100..a1b03f7 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): 80002
+// Generated by (magic number): 80006
 // 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 51e8b09..80b57bc 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): 80002
+// Generated by (magic number): 80006
 // 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 c63fb93..09c7755 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): 80002
+// Generated by (magic number): 80006
 // 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 5026768..d32450d 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): 80002
+// Generated by (magic number): 80006
 // 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 2ad9461..928347e 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): 80002
+// Generated by (magic number): 80006
 // 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 a2c5075..cead3fa 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): 80002
+// Generated by (magic number): 80006
 // 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 8200bb8..c931b40 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): 80002
+// Generated by (magic number): 80006
 // 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 a820796..e47835e 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): 80002
+// Generated by (magic number): 80006
 // 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 78098eb..1a4cd7f 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): 80002
+// Generated by (magic number): 80006
 // 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 bcbe8e6..5eb29ea 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): 80002
+// Generated by (magic number): 80006
 // 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 fec52c5..68772e4 100644
--- a/Test/baseResults/spv.310.comp.out
+++ b/Test/baseResults/spv.310.comp.out
@@ -1,7 +1,7 @@
 spv.310.comp
 // Module Version 10000
-// Generated by (magic number): 80002
-// Id's are bound by 69
+// Generated by (magic number): 80006
+// Id's are bound by 71
 
                               Capability Shader
                               Capability DeviceGroup
@@ -13,17 +13,17 @@
                               Source ESSL 310
                               SourceExtension  "GL_EXT_device_group"
                               Name 4  "main"
-                              Name 13  "outb"
-                              MemberName 13(outb) 0  "f"
-                              MemberName 13(outb) 1  "g"
-                              MemberName 13(outb) 2  "h"
-                              MemberName 13(outb) 3  "uns"
-                              Name 15  "outbname"
-                              Name 19  "s"
-                              Name 24  "outbna"
-                              MemberName 24(outbna) 0  "k"
-                              MemberName 24(outbna) 1  "na"
-                              Name 26  "outbnamena"
+                              Name 12  "outb"
+                              MemberName 12(outb) 0  "f"
+                              MemberName 12(outb) 1  "g"
+                              MemberName 12(outb) 2  "h"
+                              MemberName 12(outb) 3  "uns"
+                              Name 14  "outbname"
+                              Name 18  "s"
+                              Name 23  "outbna"
+                              MemberName 23(outbna) 0  "k"
+                              MemberName 23(outbna) 1  "na"
+                              Name 25  "outbnamena"
                               Name 42  "i"
                               Name 48  "outs"
                               MemberName 48(outs) 0  "s"
@@ -31,17 +31,17 @@
                               Name 50  "outnames"
                               Name 53  "gl_LocalInvocationID"
                               Name 64  "gl_DeviceIndex"
-                              Decorate 12 ArrayStride 16
-                              MemberDecorate 13(outb) 0 Offset 0
-                              MemberDecorate 13(outb) 1 Offset 4
-                              MemberDecorate 13(outb) 2 Offset 8
-                              MemberDecorate 13(outb) 3 Offset 16
-                              Decorate 13(outb) BufferBlock
-                              Decorate 15(outbname) DescriptorSet 0
-                              MemberDecorate 24(outbna) 0 Offset 0
-                              MemberDecorate 24(outbna) 1 Offset 16
-                              Decorate 24(outbna) BufferBlock
-                              Decorate 26(outbnamena) DescriptorSet 0
+                              Decorate 11 ArrayStride 16
+                              MemberDecorate 12(outb) 0 Offset 0
+                              MemberDecorate 12(outb) 1 Offset 4
+                              MemberDecorate 12(outb) 2 Offset 8
+                              MemberDecorate 12(outb) 3 Offset 16
+                              Decorate 12(outb) BufferBlock
+                              Decorate 14(outbname) DescriptorSet 0
+                              MemberDecorate 23(outbna) 0 Offset 0
+                              MemberDecorate 23(outbna) 1 Offset 16
+                              Decorate 23(outbna) BufferBlock
+                              Decorate 25(outbnamena) DescriptorSet 0
                               Decorate 47 ArrayStride 16
                               MemberDecorate 48(outs) 0 Offset 0
                               MemberDecorate 48(outs) 1 Offset 16
@@ -49,81 +49,85 @@
                               Decorate 50(outnames) DescriptorSet 0
                               Decorate 53(gl_LocalInvocationID) BuiltIn LocalInvocationId
                               Decorate 64(gl_DeviceIndex) BuiltIn DeviceIndex
-                              Decorate 68 BuiltIn WorkgroupSize
+                              Decorate 70 BuiltIn WorkgroupSize
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
                7:      6(int) Constant 2
-               8:      6(int) Constant 1
-               9:      6(int) Constant 0
-              10:             TypeFloat 32
-              11:             TypeVector 10(float) 3
-              12:             TypeRuntimeArray 11(fvec3)
-        13(outb):             TypeStruct 10(float) 10(float) 10(float) 12
-              14:             TypePointer Uniform 13(outb)
-    15(outbname):     14(ptr) Variable Uniform
-              16:             TypeInt 32 1
-              17:     16(int) Constant 0
-              18:             TypePointer Workgroup 10(float)
-           19(s):     18(ptr) Variable Workgroup
-              21:             TypePointer Uniform 10(float)
-              23:             TypeVector 10(float) 4
-      24(outbna):             TypeStruct 16(int) 23(fvec4)
-              25:             TypePointer Uniform 24(outbna)
-  26(outbnamena):     25(ptr) Variable Uniform
-              27:     16(int) Constant 1
-              30:             TypePointer Uniform 23(fvec4)
-              32:     16(int) Constant 3
-              33:     16(int) Constant 18
-              36:     16(int) Constant 17
-              37:   10(float) Constant 1077936128
-              38:   11(fvec3) ConstantComposite 37 37 37
-              39:             TypePointer Uniform 11(fvec3)
-              41:             TypePointer Workgroup 16(int)
+               8:      6(int) Constant 264
+               9:             TypeFloat 32
+              10:             TypeVector 9(float) 3
+              11:             TypeRuntimeArray 10(fvec3)
+        12(outb):             TypeStruct 9(float) 9(float) 9(float) 11
+              13:             TypePointer Uniform 12(outb)
+    14(outbname):     13(ptr) Variable Uniform
+              15:             TypeInt 32 1
+              16:     15(int) Constant 0
+              17:             TypePointer Workgroup 9(float)
+           18(s):     17(ptr) Variable Workgroup
+              20:             TypePointer Uniform 9(float)
+              22:             TypeVector 9(float) 4
+      23(outbna):             TypeStruct 15(int) 22(fvec4)
+              24:             TypePointer Uniform 23(outbna)
+  25(outbnamena):     24(ptr) Variable Uniform
+              26:     15(int) Constant 1
+              29:             TypePointer Uniform 22(fvec4)
+              31:     15(int) Constant 3
+              32:     15(int) Constant 18
+              33:      6(int) Constant 0
+              36:     15(int) Constant 17
+              37:    9(float) Constant 1077936128
+              38:   10(fvec3) ConstantComposite 37 37 37
+              39:             TypePointer Uniform 10(fvec3)
+              41:             TypePointer Workgroup 15(int)
            42(i):     41(ptr) Variable Workgroup
-              47:             TypeRuntimeArray 23(fvec4)
-        48(outs):             TypeStruct 16(int) 47
+              47:             TypeRuntimeArray 22(fvec4)
+        48(outs):             TypeStruct 15(int) 47
               49:             TypePointer Uniform 48(outs)
     50(outnames):     49(ptr) Variable Uniform
               51:             TypeVector 6(int) 3
               52:             TypePointer Input 51(ivec3)
 53(gl_LocalInvocationID):     52(ptr) Variable Input
               54:             TypePointer Input 6(int)
-              61:             TypePointer Uniform 16(int)
-              63:             TypePointer Input 16(int)
+              61:             TypePointer Uniform 15(int)
+              63:             TypePointer Input 15(int)
 64(gl_DeviceIndex):     63(ptr) Variable Input
-              65:      6(int) Constant 16
-              66:      6(int) Constant 32
-              67:      6(int) Constant 4
-              68:   51(ivec3) ConstantComposite 65 66 67
+              65:      6(int) Constant 1
+              66:      6(int) Constant 3400
+              67:      6(int) Constant 16
+              68:      6(int) Constant 32
+              69:      6(int) Constant 4
+              70:   51(ivec3) ConstantComposite 67 68 69
          4(main):           2 Function None 3
                5:             Label
-                              ControlBarrier 7 8 9
-              20:   10(float) Load 19(s)
-              22:     21(ptr) AccessChain 15(outbname) 17
-                              Store 22 20
-              28:   10(float) Load 19(s)
-              29:   23(fvec4) CompositeConstruct 28 28 28 28
-              31:     30(ptr) AccessChain 26(outbnamena) 27
-                              Store 31 29
-              34:     21(ptr) AccessChain 15(outbname) 32 33 9
-              35:   10(float) Load 34
-                              Store 19(s) 35
-              40:     39(ptr) AccessChain 15(outbname) 32 36
+                              ControlBarrier 7 7 8
+              19:    9(float) Load 18(s)
+              21:     20(ptr) AccessChain 14(outbname) 16
+                              Store 21 19
+              27:    9(float) Load 18(s)
+              28:   22(fvec4) CompositeConstruct 27 27 27 27
+              30:     29(ptr) AccessChain 25(outbnamena) 26
+                              Store 30 28
+              34:     20(ptr) AccessChain 14(outbname) 31 32 33
+              35:    9(float) Load 34
+                              Store 18(s) 35
+              40:     39(ptr) AccessChain 14(outbname) 31 36
                               Store 40 38
-              43:     16(int) Load 42(i)
-              44:   10(float) Load 19(s)
-              45:   11(fvec3) CompositeConstruct 44 44 44
-              46:     39(ptr) AccessChain 15(outbname) 32 43
+              43:     15(int) Load 42(i)
+              44:    9(float) Load 18(s)
+              45:   10(fvec3) CompositeConstruct 44 44 44
+              46:     39(ptr) AccessChain 14(outbname) 31 43
                               Store 46 45
-              55:     54(ptr) AccessChain 53(gl_LocalInvocationID) 9
+              55:     54(ptr) AccessChain 53(gl_LocalInvocationID) 33
               56:      6(int) Load 55
-              57:   10(float) Load 19(s)
-              58:   23(fvec4) CompositeConstruct 57 57 57 57
-              59:     30(ptr) AccessChain 50(outnames) 27 56
+              57:    9(float) Load 18(s)
+              58:   22(fvec4) CompositeConstruct 57 57 57 57
+              59:     29(ptr) AccessChain 50(outnames) 26 56
                               Store 59 58
-              60:     16(int) ArrayLength 15(outbname) 3
-              62:     61(ptr) AccessChain 50(outnames) 17
+              60:     15(int) ArrayLength 14(outbname) 3
+              62:     61(ptr) AccessChain 50(outnames) 16
                               Store 62 60
+                              MemoryBarrier 65 8
+                              MemoryBarrier 7 66
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.330.geom.out b/Test/baseResults/spv.330.geom.out
index eccaccd..5052e77 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): 80002
+// Generated by (magic number): 80006
 // 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 2b574ab..4606e99 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): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 1118
 
                               Capability Shader
@@ -273,10 +273,10 @@
      439(bvec2v):    438(ptr) Variable Function
      448(bvec3v):    447(ptr) Variable Function
      457(bvec4v):    456(ptr) Variable Function
-             556:    429(ptr) Variable Function
-             565:    438(ptr) Variable Function
-             574:    447(ptr) Variable Function
-             583:    456(ptr) Variable Function
+             557:    429(ptr) Variable Function
+             566:    438(ptr) Variable Function
+             575:    447(ptr) Variable Function
+             584:    456(ptr) Variable Function
      739(dmat2v):    738(ptr) Variable Function
      745(dmat3v):    744(ptr) Variable Function
      751(dmat4v):    750(ptr) Variable Function
@@ -875,61 +875,61 @@
              554:   53(fvec4) Load 55(dvec4v)
              555:  455(bvec4) IsNan 554
                               Store 457(bvec4v) 555
-             557:   428(bool) Load 430(boolv)
+             556:   428(bool) Load 430(boolv)
                               SelectionMerge 559 None
-                              BranchConditional 557 558 562
+                              BranchConditional 556 558 562
              558:               Label
              560:   39(float)   Load 41(doublev)
              561:   428(bool)   IsInf 560
-                                Store 556 561
+                                Store 557 561
                                 Branch 559
              562:               Label
-                                Store 556 563
+                                Store 557 563
                                 Branch 559
              559:             Label
-             564:   428(bool) Load 556
+             564:   428(bool) Load 557
                               Store 430(boolv) 564
-             566:   428(bool) Load 430(boolv)
+             565:   428(bool) Load 430(boolv)
                               SelectionMerge 568 None
-                              BranchConditional 566 567 571
+                              BranchConditional 565 567 571
              567:               Label
              569:   43(fvec2)   Load 45(dvec2v)
              570:  437(bvec2)   IsInf 569
-                                Store 565 570
+                                Store 566 570
                                 Branch 568
              571:               Label
-                                Store 565 572
+                                Store 566 572
                                 Branch 568
              568:             Label
-             573:  437(bvec2) Load 565
+             573:  437(bvec2) Load 566
                               Store 439(bvec2v) 573
-             575:   428(bool) Load 430(boolv)
+             574:   428(bool) Load 430(boolv)
                               SelectionMerge 577 None
-                              BranchConditional 575 576 580
+                              BranchConditional 574 576 580
              576:               Label
              578:   48(fvec3)   Load 50(dvec3v)
              579:  446(bvec3)   IsInf 578
-                                Store 574 579
+                                Store 575 579
                                 Branch 577
              580:               Label
-                                Store 574 581
+                                Store 575 581
                                 Branch 577
              577:             Label
-             582:  446(bvec3) Load 574
+             582:  446(bvec3) Load 575
                               Store 448(bvec3v) 582
-             584:   428(bool) Load 430(boolv)
+             583:   428(bool) Load 430(boolv)
                               SelectionMerge 586 None
-                              BranchConditional 584 585 589
+                              BranchConditional 583 585 589
              585:               Label
              587:   53(fvec4)   Load 55(dvec4v)
              588:  455(bvec4)   IsInf 587
-                                Store 583 588
+                                Store 584 588
                                 Branch 586
              589:               Label
-                                Store 583 590
+                                Store 584 590
                                 Branch 586
              586:             Label
-             591:  455(bvec4) Load 583
+             591:  455(bvec4) Load 584
                               Store 457(bvec4v) 591
              592:   39(float) Load 41(doublev)
              593:   39(float) ExtInst 1(GLSL.std.450) 66(Length) 592
@@ -1368,18 +1368,18 @@
              997:   10(float) Select 995 996 21
              998:   39(float) FConvert 997
              999:   39(float) FAdd 994 998
-            1000:  437(bvec2) Load 439(bvec2v)
-            1001:   428(bool) CompositeExtract 1000 0
+            1000:    429(ptr) AccessChain 439(bvec2v) 33
+            1001:   428(bool) Load 1000
             1002:   10(float) Select 1001 996 21
             1003:   39(float) FConvert 1002
             1004:   39(float) FAdd 999 1003
-            1005:  446(bvec3) Load 448(bvec3v)
-            1006:   428(bool) CompositeExtract 1005 0
+            1005:    429(ptr) AccessChain 448(bvec3v) 33
+            1006:   428(bool) Load 1005
             1007:   10(float) Select 1006 996 21
             1008:   39(float) FConvert 1007
             1009:   39(float) FAdd 1004 1008
-            1010:  455(bvec4) Load 457(bvec4v)
-            1011:   428(bool) CompositeExtract 1010 0
+            1010:    429(ptr) AccessChain 457(bvec4v) 33
+            1011:   428(bool) Load 1010
             1012:   10(float) Select 1011 996 21
             1013:   39(float) FConvert 1012
             1014:   39(float) FAdd 1009 1013
diff --git a/Test/baseResults/spv.400.tesc.out b/Test/baseResults/spv.400.tesc.out
index 5b6a6b1..24c669e 100644
--- a/Test/baseResults/spv.400.tesc.out
+++ b/Test/baseResults/spv.400.tesc.out
@@ -1,14 +1,14 @@
 spv.400.tesc
 // Module Version 10000
-// Generated by (magic number): 80002
-// Id's are bound by 93
+// Generated by (magic number): 80006
+// Id's are bound by 92
 
                               Capability Tessellation
                               Capability TessellationPointSize
                               Capability ClipDistance
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint TessellationControl 4  "main" 24 41 44 47 54 68 73 79 83 84 87 88 91 92
+                              EntryPoint TessellationControl 4  "main" 24 41 44 47 53 67 72 78 82 83 86 87 90 91
                               ExecutionMode 4 OutputVertices 4
                               Source GLSL 400
                               SourceExtension  "GL_ARB_separate_shader_objects"
@@ -32,17 +32,17 @@
                               MemberName 50(gl_PerVertex) 0  "gl_Position"
                               MemberName 50(gl_PerVertex) 1  "gl_PointSize"
                               MemberName 50(gl_PerVertex) 2  "gl_ClipDistance"
-                              Name 54  "gl_out"
-                              Name 68  "gl_TessLevelOuter"
-                              Name 73  "gl_TessLevelInner"
-                              Name 78  "outa"
-                              Name 79  "patchOut"
-                              Name 83  "inb"
-                              Name 84  "ind"
-                              Name 87  "ivla"
-                              Name 88  "ivlb"
-                              Name 91  "ovla"
-                              Name 92  "ovlb"
+                              Name 53  "gl_out"
+                              Name 67  "gl_TessLevelOuter"
+                              Name 72  "gl_TessLevelInner"
+                              Name 77  "outa"
+                              Name 78  "patchOut"
+                              Name 82  "inb"
+                              Name 83  "ind"
+                              Name 86  "ivla"
+                              Name 87  "ivlb"
+                              Name 90  "ovla"
+                              Name 91  "ovlb"
                               MemberDecorate 20(gl_PerVertex) 0 BuiltIn Position
                               MemberDecorate 20(gl_PerVertex) 1 BuiltIn PointSize
                               MemberDecorate 20(gl_PerVertex) 2 BuiltIn ClipDistance
@@ -54,20 +54,20 @@
                               MemberDecorate 50(gl_PerVertex) 1 BuiltIn PointSize
                               MemberDecorate 50(gl_PerVertex) 2 BuiltIn ClipDistance
                               Decorate 50(gl_PerVertex) Block
-                              Decorate 68(gl_TessLevelOuter) Patch
-                              Decorate 68(gl_TessLevelOuter) BuiltIn TessLevelOuter
-                              Decorate 73(gl_TessLevelInner) Patch
-                              Decorate 73(gl_TessLevelInner) BuiltIn TessLevelInner
-                              Decorate 79(patchOut) Patch
-                              Decorate 87(ivla) Location 3
-                              Decorate 88(ivlb) Location 4
-                              Decorate 91(ovla) Location 3
-                              Decorate 92(ovlb) Location 4
+                              Decorate 67(gl_TessLevelOuter) Patch
+                              Decorate 67(gl_TessLevelOuter) BuiltIn TessLevelOuter
+                              Decorate 72(gl_TessLevelInner) Patch
+                              Decorate 72(gl_TessLevelInner) BuiltIn TessLevelInner
+                              Decorate 78(patchOut) Patch
+                              Decorate 86(ivla) Location 3
+                              Decorate 87(ivlb) Location 4
+                              Decorate 90(ovla) Location 3
+                              Decorate 91(ovlb) Location 4
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
                7:      6(int) Constant 2
-               8:      6(int) Constant 1
+               8:      6(int) Constant 4
                9:      6(int) Constant 0
               10:             TypeInt 32 1
               11:             TypePointer Function 10(int)
@@ -94,37 +94,36 @@
 47(gl_InvocationID):     40(ptr) Variable Input
               49:             TypeArray 14(float) 7
 50(gl_PerVertex):             TypeStruct 15(fvec4) 14(float) 49
-              51:      6(int) Constant 4
-              52:             TypeArray 50(gl_PerVertex) 51
-              53:             TypePointer Output 52
-      54(gl_out):     53(ptr) Variable Output
-              57:             TypePointer Output 15(fvec4)
-              61:             TypePointer Output 14(float)
-              66:             TypeArray 14(float) 51
-              67:             TypePointer Output 66
-68(gl_TessLevelOuter):     67(ptr) Variable Output
-              69:     10(int) Constant 3
-              70:   14(float) Constant 1078774989
-              72:             TypePointer Output 49
-73(gl_TessLevelInner):     72(ptr) Variable Output
-              74:   14(float) Constant 1067869798
-              76:             TypeArray 10(int) 51
-              77:             TypePointer Private 76
-        78(outa):     77(ptr) Variable Private
-    79(patchOut):     57(ptr) Variable Output
-              80:             TypeVector 14(float) 2
-              81:             TypeArray 80(fvec2) 21
-              82:             TypePointer Input 81
-         83(inb):     82(ptr) Variable Input
-         84(ind):     82(ptr) Variable Input
-              85:             TypeArray 15(fvec4) 21
-              86:             TypePointer Input 85
-        87(ivla):     86(ptr) Variable Input
-        88(ivlb):     86(ptr) Variable Input
-              89:             TypeArray 15(fvec4) 51
-              90:             TypePointer Output 89
-        91(ovla):     90(ptr) Variable Output
-        92(ovlb):     90(ptr) Variable Output
+              51:             TypeArray 50(gl_PerVertex) 8
+              52:             TypePointer Output 51
+      53(gl_out):     52(ptr) Variable Output
+              56:             TypePointer Output 15(fvec4)
+              60:             TypePointer Output 14(float)
+              65:             TypeArray 14(float) 8
+              66:             TypePointer Output 65
+67(gl_TessLevelOuter):     66(ptr) Variable Output
+              68:     10(int) Constant 3
+              69:   14(float) Constant 1078774989
+              71:             TypePointer Output 49
+72(gl_TessLevelInner):     71(ptr) Variable Output
+              73:   14(float) Constant 1067869798
+              75:             TypeArray 10(int) 8
+              76:             TypePointer Private 75
+        77(outa):     76(ptr) Variable Private
+    78(patchOut):     56(ptr) Variable Output
+              79:             TypeVector 14(float) 2
+              80:             TypeArray 79(fvec2) 21
+              81:             TypePointer Input 80
+         82(inb):     81(ptr) Variable Input
+         83(ind):     81(ptr) Variable Input
+              84:             TypeArray 15(fvec4) 21
+              85:             TypePointer Input 84
+        86(ivla):     85(ptr) Variable Input
+        87(ivlb):     85(ptr) Variable Input
+              88:             TypeArray 15(fvec4) 8
+              89:             TypePointer Output 88
+        90(ovla):     89(ptr) Variable Output
+        91(ovlb):     89(ptr) Variable Output
          4(main):           2 Function None 3
                5:             Label
            12(a):     11(ptr) Variable Function
@@ -151,21 +150,21 @@
                               Store 43(pid) 45
               48:     10(int) Load 47(gl_InvocationID)
                               Store 46(iid) 48
-              55:     10(int) Load 47(gl_InvocationID)
-              56:   15(fvec4) Load 17(p)
-              58:     57(ptr) AccessChain 54(gl_out) 55 26
-                              Store 58 56
-              59:     10(int) Load 47(gl_InvocationID)
-              60:   14(float) Load 31(ps)
-              62:     61(ptr) AccessChain 54(gl_out) 59 25
-                              Store 62 60
-              63:     10(int) Load 47(gl_InvocationID)
-              64:   14(float) Load 35(cd)
-              65:     61(ptr) AccessChain 54(gl_out) 63 36 25
-                              Store 65 64
-              71:     61(ptr) AccessChain 68(gl_TessLevelOuter) 69
-                              Store 71 70
-              75:     61(ptr) AccessChain 73(gl_TessLevelInner) 25
-                              Store 75 74
+              54:     10(int) Load 47(gl_InvocationID)
+              55:   15(fvec4) Load 17(p)
+              57:     56(ptr) AccessChain 53(gl_out) 54 26
+                              Store 57 55
+              58:     10(int) Load 47(gl_InvocationID)
+              59:   14(float) Load 31(ps)
+              61:     60(ptr) AccessChain 53(gl_out) 58 25
+                              Store 61 59
+              62:     10(int) Load 47(gl_InvocationID)
+              63:   14(float) Load 35(cd)
+              64:     60(ptr) AccessChain 53(gl_out) 62 36 25
+                              Store 64 63
+              70:     60(ptr) AccessChain 67(gl_TessLevelOuter) 68
+                              Store 70 69
+              74:     60(ptr) AccessChain 72(gl_TessLevelInner) 25
+                              Store 74 73
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.400.tese.out b/Test/baseResults/spv.400.tese.out
index 37cdb4b..c313123 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): 80002
+// Generated by (magic number): 80006
 // 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 28665bc..b5f86c2 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): 80002
+// Generated by (magic number): 80006
 // 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 4aedf77..db3dd61 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): 80002
+// Generated by (magic number): 80006
 // 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 c63d5e9..ccc695d 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): 80002
+// Generated by (magic number): 80006
 // 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 f745068..ff52b1e 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): 80002
+// Generated by (magic number): 80006
 // 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 4d6a25a..f37dbe2 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): 80002
+// Generated by (magic number): 80006
 // 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 5cbaca9..e8bbc8e 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): 80002
+// Generated by (magic number): 80006
 // 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 d8e68be..e1c6896 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): 80002
+// Generated by (magic number): 80006
 // 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 6cdcc85..90e67ee 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): 80002
+// Generated by (magic number): 80006
 // 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 7b8d953..ec911a1 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): 80002
+// Generated by (magic number): 80006
 // 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 8c0d6c0..88a313b 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): 80002
+// Generated by (magic number): 80006
 // 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 2b85ddf..f8a4c6d 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): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 15
 
                               Capability Geometry
@@ -11,7 +11,7 @@
                               EntryPoint Geometry 4  "main" 10 14
                               ExecutionMode 4 Triangles
                               ExecutionMode 4 Invocations 1
-                              ExecutionMode 4 OutputVertices
+                              ExecutionMode 4 OutputVertices 3
                               Source GLSL 450
                               SourceExtension  "GL_NV_geometry_shader_passthrough"
                               Name 4  "main"
diff --git a/Test/baseResults/spv.OVR_multiview.vert.out b/Test/baseResults/spv.OVR_multiview.vert.out
index 49901a5..7eb7a9c 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): 80002
+// Generated by (magic number): 80006
 // 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 8f61e02..4d7b03c 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): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 532
 
                               Capability Shader
@@ -90,10 +90,10 @@
           188(f):    143(ptr) Variable Function
           285(u):    284(ptr) Variable Function
           305(b):    304(ptr) Variable Function
-             486:      8(ptr) Variable Function
+             487:      8(ptr) Variable Function
          503(m1):    502(ptr) Variable Function
          510(m2):    502(ptr) Variable Function
-             513:    502(ptr) Variable Function
+             514:    502(ptr) Variable Function
               12:    7(fvec4) Load 11(uv4)
               13:    7(fvec4) ExtInst 1(GLSL.std.450) 11(Radians) 12
                               Store 9(v) 13
@@ -658,9 +658,9 @@
              482:   178(bool) Load 305(b)
              483:   178(bool) LogicalNot 482
                               Store 305(b) 483
-             487:   178(bool) Load 305(b)
+             486:   178(bool) Load 305(b)
                               SelectionMerge 489 None
-                              BranchConditional 487 488 498
+                              BranchConditional 486 488 498
              488:               Label
              490:     18(int)   Load 20(i)
              491:    6(float)   ConvertSToF 490
@@ -670,30 +670,30 @@
              495:    7(fvec4)   FAdd 492 494
              496:    7(fvec4)   Load 9(v)
              497:    7(fvec4)   FAdd 495 496
-                                Store 486 497
+                                Store 487 497
                                 Branch 489
              498:               Label
              499:    7(fvec4)   Load 9(v)
-                                Store 486 499
+                                Store 487 499
                                 Branch 489
              489:             Label
-             500:    7(fvec4) Load 486
+             500:    7(fvec4) Load 487
                               Store 485(FragColor) 500
                               Store 503(m1) 509
                               Store 510(m2) 512
-             514:   178(bool) Load 305(b)
+             513:   178(bool) Load 305(b)
                               SelectionMerge 516 None
-                              BranchConditional 514 515 518
+                              BranchConditional 513 515 518
              515:               Label
              517:         501   Load 503(m1)
-                                Store 513 517
+                                Store 514 517
                                 Branch 516
              518:               Label
              519:         501   Load 510(m2)
-                                Store 513 519
+                                Store 514 519
                                 Branch 516
              516:             Label
-             520:      8(ptr) AccessChain 513 405
+             520:      8(ptr) AccessChain 514 405
              521:    7(fvec4) Load 520
              522:    7(fvec4) Load 485(FragColor)
              523:    7(fvec4) FAdd 522 521
diff --git a/Test/baseResults/spv.accessChain.frag.out b/Test/baseResults/spv.accessChain.frag.out
index 89a39a0..6e57405 100755
--- a/Test/baseResults/spv.accessChain.frag.out
+++ b/Test/baseResults/spv.accessChain.frag.out
@@ -1,12 +1,12 @@
 spv.accessChain.frag
 // Module Version 10000
-// Generated by (magic number): 80002
-// Id's are bound by 206
+// Generated by (magic number): 80006
+// Id's are bound by 222
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 65 158
+                              EntryPoint Fragment 4  "main" 69 170
                               ExecutionMode 4 OriginUpperLeft
                               Source GLSL 420
                               Name 4  "main"
@@ -50,12 +50,12 @@
                               Name 62  "GetColor13(struct-S-vf31;i1;"
                               Name 60  "i"
                               Name 61  "comp"
-                              Name 65  "OutColor"
-                              Name 153  "s"
-                              Name 158  "u"
-                              Name 159  "param"
-                              Name 163  "param"
-                              Name 167  "param"
+                              Name 66  "GetColor14(struct-S-vf31;i1;"
+                              Name 64  "i"
+                              Name 65  "comp"
+                              Name 69  "OutColor"
+                              Name 165  "s"
+                              Name 170  "u"
                               Name 171  "param"
                               Name 175  "param"
                               Name 179  "param"
@@ -65,8 +65,12 @@
                               Name 195  "param"
                               Name 199  "param"
                               Name 203  "param"
-                              Decorate 65(OutColor) Location 0
-                              Decorate 158(u) Flat
+                              Name 207  "param"
+                              Name 211  "param"
+                              Name 215  "param"
+                              Name 219  "param"
+                              Decorate 69(OutColor) Location 0
+                              Decorate 170(u) Flat
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -76,25 +80,27 @@
               13:             TypeInt 32 1
               14:             TypePointer Function 13(int)
               15:             TypeFunction 2 8(S) 14(ptr)
-              64:             TypePointer Output 7(fvec3)
-    65(OutColor):     64(ptr) Variable Output
-              66:     13(int) Constant 0
-              67:             TypeInt 32 0
-              68:     67(int) Constant 0
-              95:             TypeVector 6(float) 2
-             109:     67(int) Constant 2
-             136:             TypePointer Output 6(float)
-             150:    6(float) Constant 0
-             151:    7(fvec3) ConstantComposite 150 150 150
-             152:             TypePointer Function 8(S)
-             157:             TypePointer Input 13(int)
-          158(u):    157(ptr) Variable Input
+              68:             TypePointer Output 7(fvec3)
+    69(OutColor):     68(ptr) Variable Output
+              70:     13(int) Constant 0
+              71:             TypeInt 32 0
+              72:     71(int) Constant 0
+              99:             TypeVector 6(float) 2
+             113:     71(int) Constant 2
+             140:             TypePointer Output 6(float)
+             147:     71(int) Constant 1
+             148:             TypeVector 71(int) 2
+             149:  148(ivec2) ConstantComposite 113 147
+             158:             TypeVector 71(int) 3
+             159:  158(ivec3) ConstantComposite 113 147 72
+             162:    6(float) Constant 0
+             163:    7(fvec3) ConstantComposite 162 162 162
+             164:             TypePointer Function 8(S)
+             169:             TypePointer Input 13(int)
+          170(u):    169(ptr) Variable Input
          4(main):           2 Function None 3
                5:             Label
-          153(s):    152(ptr) Variable Function
-      159(param):     14(ptr) Variable Function
-      163(param):     14(ptr) Variable Function
-      167(param):     14(ptr) Variable Function
+          165(s):    164(ptr) Variable Function
       171(param):     14(ptr) Variable Function
       175(param):     14(ptr) Variable Function
       179(param):     14(ptr) Variable Function
@@ -104,224 +110,242 @@
       195(param):     14(ptr) Variable Function
       199(param):     14(ptr) Variable Function
       203(param):     14(ptr) Variable Function
-                              Store 65(OutColor) 151
-             154:        8(S) Load 153(s)
-             155:           2 FunctionCall 11(GetColor1(struct-S-vf31;) 154
-             156:        8(S) Load 153(s)
-             160:     13(int) Load 158(u)
-                              Store 159(param) 160
-             161:           2 FunctionCall 18(GetColor2(struct-S-vf31;i1;) 156 159(param)
-             162:        8(S) Load 153(s)
-             164:     13(int) Load 158(u)
-                              Store 163(param) 164
-             165:           2 FunctionCall 22(GetColor3(struct-S-vf31;i1;) 162 163(param)
-             166:        8(S) Load 153(s)
-             168:     13(int) Load 158(u)
-                              Store 167(param) 168
-             169:           2 FunctionCall 26(GetColor4(struct-S-vf31;i1;) 166 167(param)
-             170:        8(S) Load 153(s)
-             172:     13(int) Load 158(u)
+      207(param):     14(ptr) Variable Function
+      211(param):     14(ptr) Variable Function
+      215(param):     14(ptr) Variable Function
+      219(param):     14(ptr) Variable Function
+                              Store 69(OutColor) 163
+             166:        8(S) Load 165(s)
+             167:           2 FunctionCall 11(GetColor1(struct-S-vf31;) 166
+             168:        8(S) Load 165(s)
+             172:     13(int) Load 170(u)
                               Store 171(param) 172
-             173:           2 FunctionCall 30(GetColor5(struct-S-vf31;i1;) 170 171(param)
-             174:        8(S) Load 153(s)
-             176:     13(int) Load 158(u)
+             173:           2 FunctionCall 18(GetColor2(struct-S-vf31;i1;) 168 171(param)
+             174:        8(S) Load 165(s)
+             176:     13(int) Load 170(u)
                               Store 175(param) 176
-             177:           2 FunctionCall 34(GetColor6(struct-S-vf31;i1;) 174 175(param)
-             178:        8(S) Load 153(s)
-             180:     13(int) Load 158(u)
+             177:           2 FunctionCall 22(GetColor3(struct-S-vf31;i1;) 174 175(param)
+             178:        8(S) Load 165(s)
+             180:     13(int) Load 170(u)
                               Store 179(param) 180
-             181:           2 FunctionCall 38(GetColor7(struct-S-vf31;i1;) 178 179(param)
-             182:        8(S) Load 153(s)
-             184:     13(int) Load 158(u)
+             181:           2 FunctionCall 26(GetColor4(struct-S-vf31;i1;) 178 179(param)
+             182:        8(S) Load 165(s)
+             184:     13(int) Load 170(u)
                               Store 183(param) 184
-             185:           2 FunctionCall 42(GetColor8(struct-S-vf31;i1;) 182 183(param)
-             186:        8(S) Load 153(s)
-             188:     13(int) Load 158(u)
+             185:           2 FunctionCall 30(GetColor5(struct-S-vf31;i1;) 182 183(param)
+             186:        8(S) Load 165(s)
+             188:     13(int) Load 170(u)
                               Store 187(param) 188
-             189:           2 FunctionCall 46(GetColor9(struct-S-vf31;i1;) 186 187(param)
-             190:        8(S) Load 153(s)
-             192:     13(int) Load 158(u)
+             189:           2 FunctionCall 34(GetColor6(struct-S-vf31;i1;) 186 187(param)
+             190:        8(S) Load 165(s)
+             192:     13(int) Load 170(u)
                               Store 191(param) 192
-             193:           2 FunctionCall 50(GetColor10(struct-S-vf31;i1;) 190 191(param)
-             194:        8(S) Load 153(s)
-             196:     13(int) Load 158(u)
+             193:           2 FunctionCall 38(GetColor7(struct-S-vf31;i1;) 190 191(param)
+             194:        8(S) Load 165(s)
+             196:     13(int) Load 170(u)
                               Store 195(param) 196
-             197:           2 FunctionCall 54(GetColor11(struct-S-vf31;i1;) 194 195(param)
-             198:        8(S) Load 153(s)
-             200:     13(int) Load 158(u)
+             197:           2 FunctionCall 42(GetColor8(struct-S-vf31;i1;) 194 195(param)
+             198:        8(S) Load 165(s)
+             200:     13(int) Load 170(u)
                               Store 199(param) 200
-             201:           2 FunctionCall 58(GetColor12(struct-S-vf31;i1;) 198 199(param)
-             202:        8(S) Load 153(s)
-             204:     13(int) Load 158(u)
+             201:           2 FunctionCall 46(GetColor9(struct-S-vf31;i1;) 198 199(param)
+             202:        8(S) Load 165(s)
+             204:     13(int) Load 170(u)
                               Store 203(param) 204
-             205:           2 FunctionCall 62(GetColor13(struct-S-vf31;i1;) 202 203(param)
+             205:           2 FunctionCall 50(GetColor10(struct-S-vf31;i1;) 202 203(param)
+             206:        8(S) Load 165(s)
+             208:     13(int) Load 170(u)
+                              Store 207(param) 208
+             209:           2 FunctionCall 54(GetColor11(struct-S-vf31;i1;) 206 207(param)
+             210:        8(S) Load 165(s)
+             212:     13(int) Load 170(u)
+                              Store 211(param) 212
+             213:           2 FunctionCall 58(GetColor12(struct-S-vf31;i1;) 210 211(param)
+             214:        8(S) Load 165(s)
+             216:     13(int) Load 170(u)
+                              Store 215(param) 216
+             217:           2 FunctionCall 62(GetColor13(struct-S-vf31;i1;) 214 215(param)
+             218:        8(S) Load 165(s)
+             220:     13(int) Load 170(u)
+                              Store 219(param) 220
+             221:           2 FunctionCall 66(GetColor14(struct-S-vf31;i1;) 218 219(param)
                               Return
                               FunctionEnd
 11(GetColor1(struct-S-vf31;):           2 Function None 9
            10(i):        8(S) FunctionParameter
               12:             Label
-              69:    6(float) CompositeExtract 10(i) 0 0
-              70:    7(fvec3) Load 65(OutColor)
-              71:    7(fvec3) CompositeConstruct 69 69 69
-              72:    7(fvec3) FAdd 70 71
-                              Store 65(OutColor) 72
+              73:    6(float) CompositeExtract 10(i) 0 0
+              74:    7(fvec3) Load 69(OutColor)
+              75:    7(fvec3) CompositeConstruct 73 73 73
+              76:    7(fvec3) FAdd 74 75
+                              Store 69(OutColor) 76
                               Return
                               FunctionEnd
 18(GetColor2(struct-S-vf31;i1;):           2 Function None 15
            16(i):        8(S) FunctionParameter
         17(comp):     14(ptr) FunctionParameter
               19:             Label
-              73:     13(int) Load 17(comp)
-              74:    7(fvec3) CompositeExtract 16(i) 0
-              75:    6(float) VectorExtractDynamic 74 73
-              76:    7(fvec3) Load 65(OutColor)
-              77:    7(fvec3) CompositeConstruct 75 75 75
-              78:    7(fvec3) FAdd 76 77
-                              Store 65(OutColor) 78
+              77:     13(int) Load 17(comp)
+              78:    7(fvec3) CompositeExtract 16(i) 0
+              79:    6(float) VectorExtractDynamic 78 77
+              80:    7(fvec3) Load 69(OutColor)
+              81:    7(fvec3) CompositeConstruct 79 79 79
+              82:    7(fvec3) FAdd 80 81
+                              Store 69(OutColor) 82
                               Return
                               FunctionEnd
 22(GetColor3(struct-S-vf31;i1;):           2 Function None 15
            20(i):        8(S) FunctionParameter
         21(comp):     14(ptr) FunctionParameter
               23:             Label
-              79:     13(int) Load 21(comp)
-              80:    7(fvec3) CompositeExtract 20(i) 0
-              81:    6(float) VectorExtractDynamic 80 79
-              82:    7(fvec3) Load 65(OutColor)
-              83:    7(fvec3) CompositeConstruct 81 81 81
-              84:    7(fvec3) FAdd 82 83
-                              Store 65(OutColor) 84
+              83:     13(int) Load 21(comp)
+              84:    7(fvec3) CompositeExtract 20(i) 0
+              85:    6(float) VectorExtractDynamic 84 83
+              86:    7(fvec3) Load 69(OutColor)
+              87:    7(fvec3) CompositeConstruct 85 85 85
+              88:    7(fvec3) FAdd 86 87
+                              Store 69(OutColor) 88
                               Return
                               FunctionEnd
 26(GetColor4(struct-S-vf31;i1;):           2 Function None 15
            24(i):        8(S) FunctionParameter
         25(comp):     14(ptr) FunctionParameter
               27:             Label
-              85:     13(int) Load 25(comp)
-              86:    7(fvec3) CompositeExtract 24(i) 0
-              87:    6(float) VectorExtractDynamic 86 85
-              88:    7(fvec3) Load 65(OutColor)
-              89:    7(fvec3) CompositeConstruct 87 87 87
-              90:    7(fvec3) FAdd 88 89
-                              Store 65(OutColor) 90
+              89:     13(int) Load 25(comp)
+              90:    7(fvec3) CompositeExtract 24(i) 0
+              91:    6(float) VectorExtractDynamic 90 89
+              92:    7(fvec3) Load 69(OutColor)
+              93:    7(fvec3) CompositeConstruct 91 91 91
+              94:    7(fvec3) FAdd 92 93
+                              Store 69(OutColor) 94
                               Return
                               FunctionEnd
 30(GetColor5(struct-S-vf31;i1;):           2 Function None 15
            28(i):        8(S) FunctionParameter
         29(comp):     14(ptr) FunctionParameter
               31:             Label
-              91:    7(fvec3) CompositeExtract 28(i) 0
-              92:    7(fvec3) Load 65(OutColor)
-              93:    7(fvec3) FAdd 92 91
-                              Store 65(OutColor) 93
+              95:    7(fvec3) CompositeExtract 28(i) 0
+              96:    7(fvec3) Load 69(OutColor)
+              97:    7(fvec3) FAdd 96 95
+                              Store 69(OutColor) 97
                               Return
                               FunctionEnd
 34(GetColor6(struct-S-vf31;i1;):           2 Function None 15
            32(i):        8(S) FunctionParameter
         33(comp):     14(ptr) FunctionParameter
               35:             Label
-              94:     13(int) Load 33(comp)
-              96:    7(fvec3) CompositeExtract 32(i) 0
-              97:   95(fvec2) VectorShuffle 96 96 1 0
-              98:    6(float) VectorExtractDynamic 97 94
-              99:    7(fvec3) Load 65(OutColor)
-             100:    7(fvec3) CompositeConstruct 98 98 98
-             101:    7(fvec3) FAdd 99 100
-                              Store 65(OutColor) 101
+              98:     13(int) Load 33(comp)
+             100:    7(fvec3) CompositeExtract 32(i) 0
+             101:   99(fvec2) VectorShuffle 100 100 1 0
+             102:    6(float) VectorExtractDynamic 101 98
+             103:    7(fvec3) Load 69(OutColor)
+             104:    7(fvec3) CompositeConstruct 102 102 102
+             105:    7(fvec3) FAdd 103 104
+                              Store 69(OutColor) 105
                               Return
                               FunctionEnd
 38(GetColor7(struct-S-vf31;i1;):           2 Function None 15
            36(i):        8(S) FunctionParameter
         37(comp):     14(ptr) FunctionParameter
               39:             Label
-             102:    7(fvec3) CompositeExtract 36(i) 0
-             103:   95(fvec2) VectorShuffle 102 102 0 1
-             104:    7(fvec3) Load 65(OutColor)
-             105:   95(fvec2) VectorShuffle 104 104 0 1
-             106:   95(fvec2) FAdd 105 103
-             107:    7(fvec3) Load 65(OutColor)
-             108:    7(fvec3) VectorShuffle 107 106 3 4 2
-                              Store 65(OutColor) 108
+             106:    7(fvec3) CompositeExtract 36(i) 0
+             107:   99(fvec2) VectorShuffle 106 106 0 1
+             108:    7(fvec3) Load 69(OutColor)
+             109:   99(fvec2) VectorShuffle 108 108 0 1
+             110:   99(fvec2) FAdd 109 107
+             111:    7(fvec3) Load 69(OutColor)
+             112:    7(fvec3) VectorShuffle 111 110 3 4 2
+                              Store 69(OutColor) 112
                               Return
                               FunctionEnd
 42(GetColor8(struct-S-vf31;i1;):           2 Function None 15
            40(i):        8(S) FunctionParameter
         41(comp):     14(ptr) FunctionParameter
               43:             Label
-             110:    6(float) CompositeExtract 40(i) 0 2
-             111:    7(fvec3) Load 65(OutColor)
-             112:    7(fvec3) CompositeConstruct 110 110 110
-             113:    7(fvec3) FAdd 111 112
-                              Store 65(OutColor) 113
+             114:    6(float) CompositeExtract 40(i) 0 2
+             115:    7(fvec3) Load 69(OutColor)
+             116:    7(fvec3) CompositeConstruct 114 114 114
+             117:    7(fvec3) FAdd 115 116
+                              Store 69(OutColor) 117
                               Return
                               FunctionEnd
 46(GetColor9(struct-S-vf31;i1;):           2 Function None 15
            44(i):        8(S) FunctionParameter
         45(comp):     14(ptr) FunctionParameter
               47:             Label
-             114:    7(fvec3) CompositeExtract 44(i) 0
-             115:    7(fvec3) Load 65(OutColor)
-             116:    7(fvec3) VectorShuffle 115 115 2 0 1
-             117:    7(fvec3) FAdd 116 114
-             118:    7(fvec3) Load 65(OutColor)
-             119:    7(fvec3) VectorShuffle 118 117 4 5 3
-                              Store 65(OutColor) 119
+             118:    7(fvec3) CompositeExtract 44(i) 0
+             119:    7(fvec3) Load 69(OutColor)
+             120:    7(fvec3) VectorShuffle 119 119 2 0 1
+             121:    7(fvec3) FAdd 120 118
+             122:    7(fvec3) Load 69(OutColor)
+             123:    7(fvec3) VectorShuffle 122 121 4 5 3
+                              Store 69(OutColor) 123
                               Return
                               FunctionEnd
 50(GetColor10(struct-S-vf31;i1;):           2 Function None 15
            48(i):        8(S) FunctionParameter
         49(comp):     14(ptr) FunctionParameter
               51:             Label
-             120:    7(fvec3) CompositeExtract 48(i) 0
-             121:   95(fvec2) VectorShuffle 120 120 0 1
-             122:    7(fvec3) Load 65(OutColor)
-             123:   95(fvec2) VectorShuffle 122 122 2 1
-             124:   95(fvec2) FAdd 123 121
-             125:    7(fvec3) Load 65(OutColor)
-             126:    7(fvec3) VectorShuffle 125 124 0 4 3
-                              Store 65(OutColor) 126
+             124:    7(fvec3) CompositeExtract 48(i) 0
+             125:   99(fvec2) VectorShuffle 124 124 0 1
+             126:    7(fvec3) Load 69(OutColor)
+             127:   99(fvec2) VectorShuffle 126 126 2 1
+             128:   99(fvec2) FAdd 127 125
+             129:    7(fvec3) Load 69(OutColor)
+             130:    7(fvec3) VectorShuffle 129 128 0 4 3
+                              Store 69(OutColor) 130
                               Return
                               FunctionEnd
 54(GetColor11(struct-S-vf31;i1;):           2 Function None 15
            52(i):        8(S) FunctionParameter
         53(comp):     14(ptr) FunctionParameter
               55:             Label
-             127:    7(fvec3) CompositeExtract 52(i) 0
-             128:   95(fvec2) VectorShuffle 127 127 0 1
-             129:    7(fvec3) Load 65(OutColor)
-             130:   95(fvec2) VectorShuffle 129 129 0 2
-             131:   95(fvec2) FAdd 130 128
-             132:    7(fvec3) Load 65(OutColor)
-             133:    7(fvec3) VectorShuffle 132 131 3 1 4
-                              Store 65(OutColor) 133
+             131:    7(fvec3) CompositeExtract 52(i) 0
+             132:   99(fvec2) VectorShuffle 131 131 0 1
+             133:    7(fvec3) Load 69(OutColor)
+             134:   99(fvec2) VectorShuffle 133 133 0 2
+             135:   99(fvec2) FAdd 134 132
+             136:    7(fvec3) Load 69(OutColor)
+             137:    7(fvec3) VectorShuffle 136 135 3 1 4
+                              Store 69(OutColor) 137
                               Return
                               FunctionEnd
 58(GetColor12(struct-S-vf31;i1;):           2 Function None 15
            56(i):        8(S) FunctionParameter
         57(comp):     14(ptr) FunctionParameter
               59:             Label
-             134:     13(int) Load 57(comp)
-             135:    6(float) CompositeExtract 56(i) 0 0
-             137:    136(ptr) AccessChain 65(OutColor) 134
-             138:    6(float) Load 137
-             139:    6(float) FAdd 138 135
-             140:    136(ptr) AccessChain 65(OutColor) 134
-                              Store 140 139
+             138:     13(int) Load 57(comp)
+             139:    6(float) CompositeExtract 56(i) 0 0
+             141:    140(ptr) AccessChain 69(OutColor) 138
+             142:    6(float) Load 141
+             143:    6(float) FAdd 142 139
+             144:    140(ptr) AccessChain 69(OutColor) 138
+                              Store 144 143
                               Return
                               FunctionEnd
 62(GetColor13(struct-S-vf31;i1;):           2 Function None 15
            60(i):        8(S) FunctionParameter
         61(comp):     14(ptr) FunctionParameter
               63:             Label
-             141:     13(int) Load 61(comp)
-             142:    6(float) CompositeExtract 60(i) 0 0
-             143:    7(fvec3) Load 65(OutColor)
-             144:   95(fvec2) VectorShuffle 143 143 2 1
-             145:    6(float) VectorExtractDynamic 144 141
-             146:    6(float) FAdd 145 142
-             147:    7(fvec3) Load 65(OutColor)
-             148:    7(fvec3) VectorShuffle 147 147 2 1 2
-             149:    7(fvec3) VectorInsertDynamic 148 146 141
-                              Store 65(OutColor) 149
+             145:     13(int) Load 61(comp)
+             146:    6(float) CompositeExtract 60(i) 0 0
+             150:     71(int) VectorExtractDynamic 149 145
+             151:    140(ptr) AccessChain 69(OutColor) 150
+             152:    6(float) Load 151
+             153:    6(float) FAdd 152 146
+             154:     71(int) VectorExtractDynamic 149 145
+             155:    140(ptr) AccessChain 69(OutColor) 154
+                              Store 155 153
+                              Return
+                              FunctionEnd
+66(GetColor14(struct-S-vf31;i1;):           2 Function None 15
+           64(i):        8(S) FunctionParameter
+        65(comp):     14(ptr) FunctionParameter
+              67:             Label
+             156:     13(int) Load 65(comp)
+             157:    6(float) CompositeExtract 64(i) 0 0
+             160:     71(int) VectorExtractDynamic 159 156
+             161:    140(ptr) AccessChain 69(OutColor) 160
+                              Store 161 157
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.aggOps.frag.out b/Test/baseResults/spv.aggOps.frag.out
index ca495c1..f730e45 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): 80002
+// Generated by (magic number): 80006
 // 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 ac4c9f3..5831c47 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): 80002
+// Generated by (magic number): 80006
 // 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 5aed2e0..e96de55 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): 80002
+// Generated by (magic number): 80006
 // 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 7c5a3b6..9bb521c 100644
--- a/Test/baseResults/spv.arbPostDepthCoverage.frag.out
+++ b/Test/baseResults/spv.arbPostDepthCoverage.frag.out
@@ -1,10 +1,9 @@
 spv.arbPostDepthCoverage.frag
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 18
 
                               Capability Shader
-                              Capability SampleRateShading
                               Capability SampleMaskPostDepthCoverage
                               Extension  "SPV_KHR_post_depth_coverage"
                1:             ExtInstImport  "GLSL.std.450"
diff --git a/Test/baseResults/spv.atomic.comp.out b/Test/baseResults/spv.atomic.comp.out
index b64dc90..b6e9903 100755
--- a/Test/baseResults/spv.atomic.comp.out
+++ b/Test/baseResults/spv.atomic.comp.out
@@ -1,6 +1,6 @@
 spv.atomic.comp
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 74
 
                               Capability Shader
@@ -47,7 +47,7 @@
                8:             TypeFunction 6(int) 7(ptr)
               14:      6(int) Constant 1
               15:      6(int) Constant 0
-              19:      6(int) Constant 1024
+              19:      6(int) Constant 1032
      20(counter):      7(ptr) Variable AtomicCounter
               22:             TypePointer Function 6(int)
               24:      6(int) Constant 4
diff --git a/Test/baseResults/spv.atomicInt64.comp.out b/Test/baseResults/spv.atomicInt64.comp.out
index cbd7c1c..720e316 100644
--- a/Test/baseResults/spv.atomicInt64.comp.out
+++ b/Test/baseResults/spv.atomicInt64.comp.out
@@ -1,6 +1,6 @@
 spv.atomicInt64.comp
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 149
 
                               Capability Shader
@@ -50,7 +50,7 @@
               24:     22(int) Constant 0
               28:     17(int) Constant 1
               29:             TypePointer Uniform 10(int)
-              31:     10(int) Constant 15 0
+              31:     10(int) Constant 15 240
       84(Struct):             TypeStruct 6(int) 10(int)
               85:             TypePointer Workgroup 84(Struct)
            86(s):     85(ptr) Variable Workgroup
diff --git a/Test/baseResults/spv.barrier.vert.out b/Test/baseResults/spv.barrier.vert.out
new file mode 100755
index 0000000..c6ba5f5
--- /dev/null
+++ b/Test/baseResults/spv.barrier.vert.out
@@ -0,0 +1,46 @@
+spv.barrier.vert
+// Module Version 10000
+// Generated by (magic number): 80006
+// Id's are bound by 24
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4  "main" 9 15
+                              Source GLSL 450
+                              Name 4  "main"
+                              Name 9  "c0"
+                              Name 15  "c1"
+                              Decorate 9(c0) Location 0
+                              Decorate 15(c1) Location 1
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Output 7(fvec4)
+           9(c0):      8(ptr) Variable Output
+              10:    6(float) Constant 1065353216
+              11:    7(fvec4) ConstantComposite 10 10 10 10
+              12:             TypeInt 32 0
+              13:     12(int) Constant 1
+              14:     12(int) Constant 3400
+          15(c1):      8(ptr) Variable Output
+              16:     12(int) Constant 72
+              20:     12(int) Constant 2056
+         4(main):           2 Function None 3
+               5:             Label
+                              Store 9(c0) 11
+                              MemoryBarrier 13 14
+                              Store 15(c1) 11
+                              MemoryBarrier 13 16
+              17:    7(fvec4) Load 9(c0)
+              18:    7(fvec4) CompositeConstruct 10 10 10 10
+              19:    7(fvec4) FAdd 17 18
+                              Store 9(c0) 19
+                              MemoryBarrier 13 20
+              21:    7(fvec4) Load 9(c0)
+              22:    7(fvec4) CompositeConstruct 10 10 10 10
+              23:    7(fvec4) FAdd 21 22
+                              Store 9(c0) 23
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.bitCast.frag.out b/Test/baseResults/spv.bitCast.frag.out
index 7566213..02aaca9 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): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 172
 
                               Capability Shader
@@ -86,8 +86,8 @@
          148(u4):    147(ptr) Variable Input
              153:             TypePointer Output 46(fvec4)
   154(fragColor):    153(ptr) Variable Output
-             159:             TypeBool
-             160:             TypeVector 159(bool) 4
+             158:             TypeBool
+             159:             TypeVector 158(bool) 4
              168:   12(float) Constant 1045220557
              169:   46(fvec4) ConstantComposite 168 168 168 168
          4(main):           2 Function None 3
@@ -95,7 +95,7 @@
         9(idata):      8(ptr) Variable Function
        55(udata):     54(ptr) Variable Function
        85(fdata):     84(ptr) Variable Function
-             155:     84(ptr) Variable Function
+             162:     84(ptr) Variable Function
                               Store 9(idata) 11
               15:   12(float) Load 14(f1)
               16:      6(int) Bitcast 15
@@ -211,24 +211,24 @@
              151:   46(fvec4) Load 85(fdata)
              152:   46(fvec4) FAdd 151 150
                               Store 85(fdata) 152
-             156:    7(ivec4) Load 9(idata)
-             157:   53(ivec4) Bitcast 156
-             158:   53(ivec4) Load 55(udata)
-             161:  160(bvec4) IEqual 157 158
-             162:   159(bool) All 161
+             155:    7(ivec4) Load 9(idata)
+             156:   53(ivec4) Bitcast 155
+             157:   53(ivec4) Load 55(udata)
+             160:  159(bvec4) IEqual 156 157
+             161:   158(bool) All 160
                               SelectionMerge 164 None
-                              BranchConditional 162 163 166
+                              BranchConditional 161 163 166
              163:               Label
              165:   46(fvec4)   Load 85(fdata)
-                                Store 155 165
+                                Store 162 165
                                 Branch 164
              166:               Label
              167:   46(fvec4)   Load 85(fdata)
              170:   46(fvec4)   FAdd 167 169
-                                Store 155 170
+                                Store 162 170
                                 Branch 164
              164:             Label
-             171:   46(fvec4) Load 155
+             171:   46(fvec4) Load 162
                               Store 154(fragColor) 171
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.bool.vert.out b/Test/baseResults/spv.bool.vert.out
index 5f02671..370cc3e 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): 80002
+// Generated by (magic number): 80006
 // 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 6102c4a..8a79c70 100644
--- a/Test/baseResults/spv.boolInBlock.frag.out
+++ b/Test/baseResults/spv.boolInBlock.frag.out
@@ -1,12 +1,12 @@
 spv.boolInBlock.frag
 // Module Version 10000
-// Generated by (magic number): 80002
-// Id's are bound by 107
+// Generated by (magic number): 80006
+// Id's are bound by 102
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 75
+                              EntryPoint Fragment 4  "main" 74
                               ExecutionMode 4 OriginUpperLeft
                               Source GLSL 450
                               Name 4  "main"
@@ -14,24 +14,24 @@
                               Name 12  "paramb4"
                               Name 13  "paramb2"
                               Name 17  "b1"
-                              Name 24  "Buffer"
-                              MemberName 24(Buffer) 0  "b2"
-                              Name 26  ""
-                              Name 39  "Uniform"
-                              MemberName 39(Uniform) 0  "b4"
-                              Name 41  ""
-                              Name 62  "param"
-                              Name 67  "param"
-                              Name 75  "fragColor"
-                              MemberDecorate 24(Buffer) 0 Offset 0
-                              Decorate 24(Buffer) BufferBlock
-                              Decorate 26 DescriptorSet 0
-                              Decorate 26 Binding 1
-                              MemberDecorate 39(Uniform) 0 Offset 0
-                              Decorate 39(Uniform) Block
-                              Decorate 41 DescriptorSet 0
-                              Decorate 41 Binding 0
-                              Decorate 75(fragColor) Location 0
+                              Name 25  "Buffer"
+                              MemberName 25(Buffer) 0  "b2"
+                              Name 27  ""
+                              Name 40  "Uniform"
+                              MemberName 40(Uniform) 0  "b4"
+                              Name 42  ""
+                              Name 60  "param"
+                              Name 66  "param"
+                              Name 74  "fragColor"
+                              MemberDecorate 25(Buffer) 0 Offset 0
+                              Decorate 25(Buffer) BufferBlock
+                              Decorate 27 DescriptorSet 0
+                              Decorate 27 Binding 1
+                              MemberDecorate 40(Uniform) 0 Offset 0
+                              Decorate 40(Uniform) Block
+                              Decorate 42 DescriptorSet 0
+                              Decorate 42 Binding 0
+                              Decorate 74(fragColor) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeBool
@@ -41,111 +41,106 @@
               10:             TypePointer Function 9(bvec2)
               11:             TypeFunction 2 8(ptr) 10(ptr)
               16:             TypePointer Function 6(bool)
-              22:             TypeInt 32 0
-              23:             TypeVector 22(int) 2
-      24(Buffer):             TypeStruct 23(ivec2)
-              25:             TypePointer Uniform 24(Buffer)
-              26:     25(ptr) Variable Uniform
-              27:             TypeInt 32 1
-              28:     27(int) Constant 0
-              29:     6(bool) ConstantFalse
-              30:    9(bvec2) ConstantComposite 29 29
-              31:     22(int) Constant 1
-              32:   23(ivec2) ConstantComposite 31 31
-              33:     22(int) Constant 0
-              34:   23(ivec2) ConstantComposite 33 33
-              36:             TypePointer Uniform 23(ivec2)
-              38:             TypeVector 22(int) 4
-     39(Uniform):             TypeStruct 38(ivec4)
-              40:             TypePointer Uniform 39(Uniform)
-              41:     40(ptr) Variable Uniform
-              42:             TypePointer Uniform 38(ivec4)
-              65:   38(ivec4) ConstantComposite 33 33 33 33
-              72:             TypeFloat 32
-              73:             TypeVector 72(float) 4
-              74:             TypePointer Output 73(fvec4)
-   75(fragColor):     74(ptr) Variable Output
-              87:   72(float) Constant 0
-              88:   72(float) Constant 1065353216
+              18:             TypeInt 32 0
+              19:     18(int) Constant 2
+              24:             TypeVector 18(int) 2
+      25(Buffer):             TypeStruct 24(ivec2)
+              26:             TypePointer Uniform 25(Buffer)
+              27:     26(ptr) Variable Uniform
+              28:             TypeInt 32 1
+              29:     28(int) Constant 0
+              30:     6(bool) ConstantFalse
+              31:    9(bvec2) ConstantComposite 30 30
+              32:     18(int) Constant 1
+              33:   24(ivec2) ConstantComposite 32 32
+              34:     18(int) Constant 0
+              35:   24(ivec2) ConstantComposite 34 34
+              37:             TypePointer Uniform 24(ivec2)
+              39:             TypeVector 18(int) 4
+     40(Uniform):             TypeStruct 39(ivec4)
+              41:             TypePointer Uniform 40(Uniform)
+              42:     41(ptr) Variable Uniform
+              43:             TypePointer Uniform 18(int)
+              61:             TypePointer Uniform 39(ivec4)
+              64:   39(ivec4) ConstantComposite 34 34 34 34
+              71:             TypeFloat 32
+              72:             TypeVector 71(float) 4
+              73:             TypePointer Output 72(fvec4)
+   74(fragColor):     73(ptr) Variable Output
+              84:   71(float) Constant 0
+              85:   71(float) Constant 1065353216
          4(main):           2 Function None 3
                5:             Label
-       62(param):      8(ptr) Variable Function
-       67(param):     10(ptr) Variable Function
-              35:   23(ivec2) Select 30 32 34
-              37:     36(ptr) AccessChain 26 28
-                              Store 37 35
-              43:     42(ptr) AccessChain 41 28
-              44:   38(ivec4) Load 43
-              45:     22(int) CompositeExtract 44 2
-              46:     6(bool) INotEqual 45 33
+       60(param):      8(ptr) Variable Function
+       66(param):     10(ptr) Variable Function
+              36:   24(ivec2) Select 31 33 35
+              38:     37(ptr) AccessChain 27 29
+                              Store 38 36
+              44:     43(ptr) AccessChain 42 29 19
+              45:     18(int) Load 44
+              46:     6(bool) INotEqual 45 34
                               SelectionMerge 48 None
                               BranchConditional 46 47 48
               47:               Label
-              49:     42(ptr)   AccessChain 41 28
-              50:   38(ivec4)   Load 49
-              51:     22(int)   CompositeExtract 50 0
-              52:     6(bool)   INotEqual 51 33
-              53:    9(bvec2)   CompositeConstruct 52 52
-              54:   23(ivec2)   Select 53 32 34
-              55:     36(ptr)   AccessChain 26 28
-                                Store 55 54
+              49:     43(ptr)   AccessChain 42 29 34
+              50:     18(int)   Load 49
+              51:     6(bool)   INotEqual 50 34
+              52:    9(bvec2)   CompositeConstruct 51 51
+              53:   24(ivec2)   Select 52 33 35
+              54:     37(ptr)   AccessChain 27 29
+                                Store 54 53
                                 Branch 48
               48:             Label
-              56:     36(ptr) AccessChain 26 28
-              57:   23(ivec2) Load 56
-              58:     22(int) CompositeExtract 57 0
-              59:     6(bool) INotEqual 58 33
-                              SelectionMerge 61 None
-                              BranchConditional 59 60 61
-              60:               Label
-              63:     42(ptr)   AccessChain 41 28
-              64:   38(ivec4)   Load 63
-              66:    7(bvec4)   INotEqual 64 65
-                                Store 62(param) 66
-              68:           2   FunctionCall 14(foo(vb4;vb2;) 62(param) 67(param)
-              69:    9(bvec2)   Load 67(param)
-              70:   23(ivec2)   Select 69 32 34
-              71:     36(ptr)   AccessChain 26 28
-                                Store 71 70
-                                Branch 61
-              61:             Label
-              76:     42(ptr) AccessChain 41 28
-              77:   38(ivec4) Load 76
-              78:     22(int) CompositeExtract 77 0
-              79:     6(bool) INotEqual 78 33
-                              SelectionMerge 81 None
-                              BranchConditional 79 80 81
-              80:               Label
-              82:     42(ptr)   AccessChain 41 28
-              83:   38(ivec4)   Load 82
-              84:     22(int)   CompositeExtract 83 1
-              85:     6(bool)   INotEqual 84 33
-                                Branch 81
-              81:             Label
-              86:     6(bool) Phi 79 61 85 80
-              89:   72(float) Select 86 88 87
-              90:   73(fvec4) CompositeConstruct 89 89 89 89
-                              Store 75(fragColor) 90
-              91:     42(ptr) AccessChain 41 28
-              92:   38(ivec4) Load 91
-              93:     22(int) CompositeExtract 92 0
-              94:     6(bool) INotEqual 93 33
-              95:     6(bool) LogicalNot 94
-                              SelectionMerge 97 None
-                              BranchConditional 95 96 97
-              96:               Label
-              98:     42(ptr)   AccessChain 41 28
-              99:   38(ivec4)   Load 98
-             100:     22(int)   CompositeExtract 99 1
-             101:     6(bool)   INotEqual 100 33
-                                Branch 97
-              97:             Label
-             102:     6(bool) Phi 94 81 101 96
-             103:   72(float) Select 102 88 87
-             104:   73(fvec4) CompositeConstruct 103 103 103 103
-             105:   73(fvec4) Load 75(fragColor)
-             106:   73(fvec4) FSub 105 104
-                              Store 75(fragColor) 106
+              55:     43(ptr) AccessChain 27 29 34
+              56:     18(int) Load 55
+              57:     6(bool) INotEqual 56 34
+                              SelectionMerge 59 None
+                              BranchConditional 57 58 59
+              58:               Label
+              62:     61(ptr)   AccessChain 42 29
+              63:   39(ivec4)   Load 62
+              65:    7(bvec4)   INotEqual 63 64
+                                Store 60(param) 65
+              67:           2   FunctionCall 14(foo(vb4;vb2;) 60(param) 66(param)
+              68:    9(bvec2)   Load 66(param)
+              69:   24(ivec2)   Select 68 33 35
+              70:     37(ptr)   AccessChain 27 29
+                                Store 70 69
+                                Branch 59
+              59:             Label
+              75:     43(ptr) AccessChain 42 29 34
+              76:     18(int) Load 75
+              77:     6(bool) INotEqual 76 34
+                              SelectionMerge 79 None
+                              BranchConditional 77 78 79
+              78:               Label
+              80:     43(ptr)   AccessChain 42 29 32
+              81:     18(int)   Load 80
+              82:     6(bool)   INotEqual 81 34
+                                Branch 79
+              79:             Label
+              83:     6(bool) Phi 77 59 82 78
+              86:   71(float) Select 83 85 84
+              87:   72(fvec4) CompositeConstruct 86 86 86 86
+                              Store 74(fragColor) 87
+              88:     43(ptr) AccessChain 42 29 34
+              89:     18(int) Load 88
+              90:     6(bool) INotEqual 89 34
+              91:     6(bool) LogicalNot 90
+                              SelectionMerge 93 None
+                              BranchConditional 91 92 93
+              92:               Label
+              94:     43(ptr)   AccessChain 42 29 32
+              95:     18(int)   Load 94
+              96:     6(bool)   INotEqual 95 34
+                                Branch 93
+              93:             Label
+              97:     6(bool) Phi 90 79 96 92
+              98:   71(float) Select 97 85 84
+              99:   72(fvec4) CompositeConstruct 98 98 98 98
+             100:   72(fvec4) Load 74(fragColor)
+             101:   72(fvec4) FSub 100 99
+                              Store 74(fragColor) 101
                               Return
                               FunctionEnd
 14(foo(vb4;vb2;):           2 Function None 11
@@ -153,11 +148,11 @@
      13(paramb2):     10(ptr) FunctionParameter
               15:             Label
           17(b1):     16(ptr) Variable Function
-              18:    7(bvec4) Load 12(paramb4)
-              19:     6(bool) CompositeExtract 18 2
-                              Store 17(b1) 19
-              20:     6(bool) Load 17(b1)
-              21:    9(bvec2) CompositeConstruct 20 20
-                              Store 13(paramb2) 21
+              20:     16(ptr) AccessChain 12(paramb4) 19
+              21:     6(bool) Load 20
+                              Store 17(b1) 21
+              22:     6(bool) Load 17(b1)
+              23:    9(bvec2) CompositeConstruct 22 22
+                              Store 13(paramb2) 23
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.branch-return.vert.out b/Test/baseResults/spv.branch-return.vert.out
index 6633d66..e4cc8d7 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): 80002
+// Generated by (magic number): 80006
 // 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 549a5a2..ebf64a2 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): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 50
 
                               Capability Shader
diff --git a/Test/baseResults/spv.builtInXFB.vert.out b/Test/baseResults/spv.builtInXFB.vert.out
new file mode 100755
index 0000000..98483d4
--- /dev/null
+++ b/Test/baseResults/spv.builtInXFB.vert.out
@@ -0,0 +1,47 @@
+spv.builtInXFB.vert
+// Module Version 10000
+// Generated by (magic number): 80006
+// Id's are bound by 21
+
+                              Capability Shader
+                              Capability TransformFeedback
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4  "main" 10
+                              ExecutionMode 4 Xfb
+                              Source GLSL 450
+                              Name 4  "main"
+                              Name 8  "gl_PerVertex"
+                              MemberName 8(gl_PerVertex) 0  "gl_Position"
+                              MemberName 8(gl_PerVertex) 1  "gl_PointSize"
+                              Name 10  ""
+                              MemberDecorate 8(gl_PerVertex) 0 Offset 20
+                              MemberDecorate 8(gl_PerVertex) 0 BuiltIn Position
+                              MemberDecorate 8(gl_PerVertex) 1 Offset 16
+                              MemberDecorate 8(gl_PerVertex) 1 BuiltIn PointSize
+                              Decorate 8(gl_PerVertex) Block
+                              Decorate 10 XfbBuffer 1
+                              Decorate 10 XfbStride 64
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+ 8(gl_PerVertex):             TypeStruct 7(fvec4) 6(float)
+               9:             TypePointer Output 8(gl_PerVertex)
+              10:      9(ptr) Variable Output
+              11:             TypeInt 32 1
+              12:     11(int) Constant 0
+              13:    6(float) Constant 1065353216
+              14:    7(fvec4) ConstantComposite 13 13 13 13
+              15:             TypePointer Output 7(fvec4)
+              17:     11(int) Constant 1
+              18:    6(float) Constant 1073741824
+              19:             TypePointer Output 6(float)
+         4(main):           2 Function None 3
+               5:             Label
+              16:     15(ptr) AccessChain 10 12
+                              Store 16 14
+              20:     19(ptr) AccessChain 10 17
+                              Store 20 18
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.conditionalDiscard.frag.out b/Test/baseResults/spv.conditionalDiscard.frag.out
index b62e3b3..d16aadf 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): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 36
 
                               Capability Shader
diff --git a/Test/baseResults/spv.constStruct.vert.out b/Test/baseResults/spv.constStruct.vert.out
new file mode 100755
index 0000000..68169cd
--- /dev/null
+++ b/Test/baseResults/spv.constStruct.vert.out
@@ -0,0 +1,45 @@
+spv.constStruct.vert
+// Module Version 10000
+// Generated by (magic number): 80006
+// Id's are bound by 23
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4  "main"
+                              Source GLSL 450
+                              Name 4  "main"
+                              Name 9  "T"
+                              MemberName 9(T) 0  "m"
+                              Name 10  "U"
+                              MemberName 10(U) 0  "m"
+                              Name 11  "S"
+                              MemberName 11(S) 0  "t"
+                              MemberName 11(S) 1  "u"
+                              Name 13  "s1"
+                              Name 22  "s2"
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 2
+               8:             TypeMatrix 7(fvec2) 2
+            9(T):             TypeStruct 8
+           10(U):             TypeStruct 8
+           11(S):             TypeStruct 9(T) 10(U)
+              12:             TypePointer Function 11(S)
+              14:    6(float) Constant 1065353216
+              15:    6(float) Constant 0
+              16:    7(fvec2) ConstantComposite 14 15
+              17:    7(fvec2) ConstantComposite 15 14
+              18:           8 ConstantComposite 16 17
+              19:        9(T) ConstantComposite 18
+              20:       10(U) ConstantComposite 18
+              21:       11(S) ConstantComposite 19 20
+         4(main):           2 Function None 3
+               5:             Label
+          13(s1):     12(ptr) Variable Function
+          22(s2):     12(ptr) Variable Function
+                              Store 13(s1) 21
+                              Store 22(s2) 21
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.controlFlowAttributes.frag.out b/Test/baseResults/spv.controlFlowAttributes.frag.out
new file mode 100755
index 0000000..f7e3186
--- /dev/null
+++ b/Test/baseResults/spv.controlFlowAttributes.frag.out
@@ -0,0 +1,238 @@
+spv.controlFlowAttributes.frag
+WARNING: 0:20: '' : attribute with arguments not recognized, skipping 
+WARNING: 0:21: '' : attribute with arguments not recognized, skipping 
+WARNING: 0:22: '' : attribute with arguments not recognized, skipping 
+WARNING: 0:23: 'dependency_length' : expected a single integer argument 
+WARNING: 0:24: '' : attribute with arguments not recognized, skipping 
+WARNING: 0:25: '' : attribute with arguments not recognized, skipping 
+WARNING: 0:26: '' : attribute with arguments not recognized, skipping 
+
+// Module Version 10000
+// Generated by (magic number): 80006
+// Id's are bound by 118
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main"
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              SourceExtension  "GL_EXT_control_flow_attributes"
+                              Name 4  "main"
+                              Name 8  "i"
+                              Name 36  "i"
+                              Name 47  "cond"
+                              Name 60  "i"
+                              Name 79  "i"
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 1
+               7:             TypePointer Function 6(int)
+               9:      6(int) Constant 0
+              16:      6(int) Constant 8
+              17:             TypeBool
+              20:      6(int) Constant 1
+              31:    17(bool) ConstantTrue
+              46:             TypePointer Private 17(bool)
+        47(cond):     46(ptr) Variable Private
+              54:    17(bool) ConstantFalse
+              55:      6(int) Constant 3
+         4(main):           2 Function None 3
+               5:             Label
+            8(i):      7(ptr) Variable Function
+           36(i):      7(ptr) Variable Function
+           60(i):      7(ptr) Variable Function
+           79(i):      7(ptr) Variable Function
+                              Store 8(i) 9
+                              Branch 10
+              10:             Label
+                              LoopMerge 12 13 Unroll 
+                              Branch 14
+              14:             Label
+              15:      6(int) Load 8(i)
+              18:    17(bool) SLessThan 15 16
+                              BranchConditional 18 11 12
+              11:               Label
+                                Branch 13
+              13:               Label
+              19:      6(int)   Load 8(i)
+              21:      6(int)   IAdd 19 20
+                                Store 8(i) 21
+                                Branch 10
+              12:             Label
+                              Branch 22
+              22:             Label
+                              LoopMerge 24 25 DontUnroll 
+                              Branch 23
+              23:             Label
+                              Branch 25
+              25:             Label
+                              Branch 22
+              24:             Label
+                              Branch 26
+              26:             Label
+                              LoopMerge 28 29 DontUnroll 
+                              Branch 30
+              30:             Label
+                              BranchConditional 31 27 28
+              27:               Label
+                                Branch 29
+              29:               Label
+                                Branch 26
+              28:             Label
+                              Branch 32
+              32:             Label
+                              LoopMerge 34 35 DependencyInfinite 
+                              Branch 33
+              33:             Label
+                              Branch 35
+              35:             Label
+                              BranchConditional 31 32 34
+              34:             Label
+                              Store 36(i) 9
+                              Branch 37
+              37:             Label
+                              LoopMerge 39 40 DependencyLength  4
+                              Branch 41
+              41:             Label
+              42:      6(int) Load 36(i)
+              43:    17(bool) SLessThan 42 16
+                              BranchConditional 43 38 39
+              38:               Label
+                                Branch 40
+              40:               Label
+              44:      6(int)   Load 36(i)
+              45:      6(int)   IAdd 44 20
+                                Store 36(i) 45
+                                Branch 37
+              39:             Label
+              48:    17(bool) Load 47(cond)
+                              SelectionMerge 50 Flatten 
+                              BranchConditional 48 49 50
+              49:               Label
+                                Branch 50
+              50:             Label
+              51:    17(bool) Load 47(cond)
+                              SelectionMerge 53 DontFlatten 
+                              BranchConditional 51 52 53
+              52:               Label
+                                Store 47(cond) 54
+                                Branch 53
+              53:             Label
+                              SelectionMerge 57 DontFlatten 
+                              Switch 55 57 
+                                     case 3: 56
+              56:               Label
+                                Branch 57
+              57:             Label
+                              Store 60(i) 9
+                              Branch 61
+              61:             Label
+                              LoopMerge 63 64 None
+                              Branch 65
+              65:             Label
+              66:      6(int) Load 60(i)
+              67:    17(bool) SLessThan 66 16
+                              BranchConditional 67 62 63
+              62:               Label
+                                Branch 64
+              64:               Label
+              68:      6(int)   Load 60(i)
+              69:      6(int)   IAdd 68 20
+                                Store 60(i) 69
+                                Branch 61
+              63:             Label
+                              Branch 70
+              70:             Label
+                              LoopMerge 72 73 None
+                              Branch 74
+              74:             Label
+                              BranchConditional 31 71 72
+              71:               Label
+                                Branch 73
+              73:               Label
+                                Branch 70
+              72:             Label
+                              Branch 75
+              75:             Label
+                              LoopMerge 77 78 None
+                              Branch 76
+              76:             Label
+                              Branch 78
+              78:             Label
+                              BranchConditional 31 75 77
+              77:             Label
+                              Store 79(i) 9
+                              Branch 80
+              80:             Label
+                              LoopMerge 82 83 None
+                              Branch 84
+              84:             Label
+              85:      6(int) Load 79(i)
+              86:    17(bool) SLessThan 85 16
+                              BranchConditional 86 81 82
+              81:               Label
+                                Branch 83
+              83:               Label
+              87:      6(int)   Load 79(i)
+              88:      6(int)   IAdd 87 20
+                                Store 79(i) 88
+                                Branch 80
+              82:             Label
+              89:    17(bool) Load 47(cond)
+                              SelectionMerge 91 None
+                              BranchConditional 89 90 91
+              90:               Label
+                                Branch 91
+              91:             Label
+              92:    17(bool) Load 47(cond)
+                              SelectionMerge 94 None
+                              BranchConditional 92 93 94
+              93:               Label
+                                Store 47(cond) 54
+                                Branch 94
+              94:             Label
+                              SelectionMerge 96 None
+                              Switch 55 96 
+                                     case 3: 95
+              95:               Label
+                                Branch 96
+              96:             Label
+                              Branch 99
+              99:             Label
+                              LoopMerge 101 102 Unroll DontUnroll DependencyLength  2
+                              Branch 103
+             103:             Label
+             104:    17(bool) Load 47(cond)
+                              BranchConditional 104 100 101
+             100:               Label
+                                Branch 102
+             102:               Label
+                                Branch 99
+             101:             Label
+                              SelectionMerge 106 DontFlatten 
+                              Switch 55 106 
+                                     case 3: 105
+             105:               Label
+                                Branch 106
+             106:             Label
+             109:    17(bool) Load 47(cond)
+                              SelectionMerge 111 Flatten 
+                              BranchConditional 109 110 111
+             110:               Label
+                                Branch 111
+             111:             Label
+                              Branch 112
+             112:             Label
+                              LoopMerge 114 115 DependencyInfinite 
+                              Branch 116
+             116:             Label
+             117:    17(bool) Load 47(cond)
+                              BranchConditional 117 113 114
+             113:               Label
+                                Branch 115
+             115:               Label
+                                Branch 112
+             114:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.conversion.frag.out b/Test/baseResults/spv.conversion.frag.out
index bdc1972..63c26b3 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): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 455
 
                               Capability Shader
@@ -119,8 +119,8 @@
              315:     13(int) Constant 1
              321:             TypePointer Output 95(fvec4)
 322(gl_FragColor):    321(ptr) Variable Output
-             367:     13(int) Constant 2
-             380:     13(int) Constant 3
+             336:     13(int) Constant 2
+             349:     13(int) Constant 3
              427:             TypePointer Private 6(bool)
         428(u_b):    427(ptr) Variable Private
              429:             TypePointer Private 23(bvec2)
@@ -163,9 +163,9 @@
          110(f2):    109(ptr) Variable Function
          114(f3):    113(ptr) Variable Function
          118(f4):    117(ptr) Variable Function
-             297:    105(ptr) Variable Function
-             307:    105(ptr) Variable Function
-             323:    117(ptr) Variable Function
+             298:    105(ptr) Variable Function
+             309:    105(ptr) Variable Function
+             353:    117(ptr) Variable Function
         417(cv2):     93(ptr) Variable Function
         418(cv5):     44(ptr) Variable Function
               12:      9(int) Load 11(u_i)
@@ -425,101 +425,101 @@
                               SelectionMerge 296 None
                               BranchConditional 294 295 296
              295:               Label
-             298:     6(bool)   Load 8(b)
+             297:     6(bool)   Load 8(b)
                                 SelectionMerge 300 None
-                                BranchConditional 298 299 303
+                                BranchConditional 297 299 303
              299:                 Label
              301:      9(int)     Load 58(i)
              302:   16(float)     ConvertSToF 301
-                                  Store 297 302
+                                  Store 298 302
                                   Branch 300
              303:                 Label
              304:    105(ptr)     AccessChain 110(f2) 14
              305:   16(float)     Load 304
-                                  Store 297 305
+                                  Store 298 305
                                   Branch 300
              300:               Label
-             306:   16(float)   Load 297
-             308:   23(bvec2)   Load 25(b2)
-             309:     6(bool)   CompositeExtract 308 0
+             306:   16(float)   Load 298
+             307:      7(ptr)   AccessChain 25(b2) 14
+             308:     6(bool)   Load 307
                                 SelectionMerge 311 None
-                                BranchConditional 309 310 314
+                                BranchConditional 308 310 314
              310:                 Label
              312:    105(ptr)     AccessChain 114(f3) 14
              313:   16(float)     Load 312
-                                  Store 307 313
+                                  Store 309 313
                                   Branch 311
              314:                 Label
              316:     57(ptr)     AccessChain 68(i2) 315
              317:      9(int)     Load 316
              318:   16(float)     ConvertSToF 317
-                                  Store 307 318
+                                  Store 309 318
                                   Branch 311
              311:               Label
-             319:   16(float)   Load 307
+             319:   16(float)   Load 309
              320:   16(float)   FAdd 306 319
                                 Store 106(f) 320
                                 Branch 296
              296:             Label
-             324:     6(bool) Load 8(b)
-             325:   23(bvec2) Load 25(b2)
-             326:     6(bool) CompositeExtract 325 0
-             327:     6(bool) LogicalOr 324 326
-             328:   23(bvec2) Load 25(b2)
-             329:     6(bool) CompositeExtract 328 1
-             330:     6(bool) LogicalOr 327 329
-             331:   31(bvec3) Load 33(b3)
-             332:     6(bool) CompositeExtract 331 0
-             333:     6(bool) LogicalOr 330 332
-             334:   31(bvec3) Load 33(b3)
-             335:     6(bool) CompositeExtract 334 1
-             336:     6(bool) LogicalOr 333 335
-             337:   31(bvec3) Load 33(b3)
-             338:     6(bool) CompositeExtract 337 2
-             339:     6(bool) LogicalOr 336 338
-             340:   43(bvec4) Load 45(b4)
-             341:     6(bool) CompositeExtract 340 0
+             323:     6(bool) Load 8(b)
+             324:      7(ptr) AccessChain 25(b2) 14
+             325:     6(bool) Load 324
+             326:     6(bool) LogicalOr 323 325
+             327:      7(ptr) AccessChain 25(b2) 315
+             328:     6(bool) Load 327
+             329:     6(bool) LogicalOr 326 328
+             330:      7(ptr) AccessChain 33(b3) 14
+             331:     6(bool) Load 330
+             332:     6(bool) LogicalOr 329 331
+             333:      7(ptr) AccessChain 33(b3) 315
+             334:     6(bool) Load 333
+             335:     6(bool) LogicalOr 332 334
+             337:      7(ptr) AccessChain 33(b3) 336
+             338:     6(bool) Load 337
+             339:     6(bool) LogicalOr 335 338
+             340:      7(ptr) AccessChain 45(b4) 14
+             341:     6(bool) Load 340
              342:     6(bool) LogicalOr 339 341
-             343:   43(bvec4) Load 45(b4)
-             344:     6(bool) CompositeExtract 343 1
+             343:      7(ptr) AccessChain 45(b4) 315
+             344:     6(bool) Load 343
              345:     6(bool) LogicalOr 342 344
-             346:   43(bvec4) Load 45(b4)
-             347:     6(bool) CompositeExtract 346 2
+             346:      7(ptr) AccessChain 45(b4) 336
+             347:     6(bool) Load 346
              348:     6(bool) LogicalOr 345 347
-             349:   43(bvec4) Load 45(b4)
-             350:     6(bool) CompositeExtract 349 3
-             351:     6(bool) LogicalOr 348 350
-                              SelectionMerge 353 None
-                              BranchConditional 351 352 415
-             352:               Label
-             354:      9(int)   Load 58(i)
-             355:     57(ptr)   AccessChain 68(i2) 14
-             356:      9(int)   Load 355
-             357:      9(int)   IAdd 354 356
-             358:     57(ptr)   AccessChain 68(i2) 315
-             359:      9(int)   Load 358
-             360:      9(int)   IAdd 357 359
-             361:     57(ptr)   AccessChain 81(i3) 14
-             362:      9(int)   Load 361
-             363:      9(int)   IAdd 360 362
-             364:     57(ptr)   AccessChain 81(i3) 315
-             365:      9(int)   Load 364
-             366:      9(int)   IAdd 363 365
-             368:     57(ptr)   AccessChain 81(i3) 367
-             369:      9(int)   Load 368
-             370:      9(int)   IAdd 366 369
-             371:     57(ptr)   AccessChain 94(i4) 14
-             372:      9(int)   Load 371
-             373:      9(int)   IAdd 370 372
-             374:     57(ptr)   AccessChain 94(i4) 315
-             375:      9(int)   Load 374
-             376:      9(int)   IAdd 373 375
-             377:     57(ptr)   AccessChain 94(i4) 367
-             378:      9(int)   Load 377
-             379:      9(int)   IAdd 376 378
-             381:     57(ptr)   AccessChain 94(i4) 380
+             350:      7(ptr) AccessChain 45(b4) 349
+             351:     6(bool) Load 350
+             352:     6(bool) LogicalOr 348 351
+                              SelectionMerge 355 None
+                              BranchConditional 352 354 415
+             354:               Label
+             356:      9(int)   Load 58(i)
+             357:     57(ptr)   AccessChain 68(i2) 14
+             358:      9(int)   Load 357
+             359:      9(int)   IAdd 356 358
+             360:     57(ptr)   AccessChain 68(i2) 315
+             361:      9(int)   Load 360
+             362:      9(int)   IAdd 359 361
+             363:     57(ptr)   AccessChain 81(i3) 14
+             364:      9(int)   Load 363
+             365:      9(int)   IAdd 362 364
+             366:     57(ptr)   AccessChain 81(i3) 315
+             367:      9(int)   Load 366
+             368:      9(int)   IAdd 365 367
+             369:     57(ptr)   AccessChain 81(i3) 336
+             370:      9(int)   Load 369
+             371:      9(int)   IAdd 368 370
+             372:     57(ptr)   AccessChain 94(i4) 14
+             373:      9(int)   Load 372
+             374:      9(int)   IAdd 371 373
+             375:     57(ptr)   AccessChain 94(i4) 315
+             376:      9(int)   Load 375
+             377:      9(int)   IAdd 374 376
+             378:     57(ptr)   AccessChain 94(i4) 336
+             379:      9(int)   Load 378
+             380:      9(int)   IAdd 377 379
+             381:     57(ptr)   AccessChain 94(i4) 349
              382:      9(int)   Load 381
-             383:      9(int)   IAdd 379 382
+             383:      9(int)   IAdd 380 382
              384:   16(float)   ConvertSToF 383
              385:   16(float)   Load 106(f)
              386:   16(float)   FAdd 384 385
@@ -535,7 +535,7 @@
              396:    105(ptr)   AccessChain 114(f3) 315
              397:   16(float)   Load 396
              398:   16(float)   FAdd 395 397
-             399:    105(ptr)   AccessChain 114(f3) 367
+             399:    105(ptr)   AccessChain 114(f3) 336
              400:   16(float)   Load 399
              401:   16(float)   FAdd 398 400
              402:    105(ptr)   AccessChain 118(f4) 14
@@ -544,20 +544,20 @@
              405:    105(ptr)   AccessChain 118(f4) 315
              406:   16(float)   Load 405
              407:   16(float)   FAdd 404 406
-             408:    105(ptr)   AccessChain 118(f4) 367
+             408:    105(ptr)   AccessChain 118(f4) 336
              409:   16(float)   Load 408
              410:   16(float)   FAdd 407 409
-             411:    105(ptr)   AccessChain 118(f4) 380
+             411:    105(ptr)   AccessChain 118(f4) 349
              412:   16(float)   Load 411
              413:   16(float)   FAdd 410 412
              414:   95(fvec4)   CompositeConstruct 413 413 413 413
-                                Store 323 414
-                                Branch 353
+                                Store 353 414
+                                Branch 355
              415:               Label
-                                Store 323 151
-                                Branch 353
-             353:             Label
-             416:   95(fvec4) Load 323
+                                Store 353 151
+                                Branch 355
+             355:             Label
+             416:   95(fvec4) Load 353
                               Store 322(gl_FragColor) 416
                               Store 417(cv2) 102
              419:   92(ivec4) Load 417(cv2)
diff --git a/Test/baseResults/spv.dataOut.frag.out b/Test/baseResults/spv.dataOut.frag.out
index 6b99064..19cd836 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): 80002
+// Generated by (magic number): 80006
 // 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 520d9a8..8e87c00 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): 80002
+// Generated by (magic number): 80006
 // 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 764cec1..b36f825 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): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 38
 
                               Capability Shader
diff --git a/Test/baseResults/spv.debugInfo.1.1.frag.out b/Test/baseResults/spv.debugInfo.1.1.frag.out
new file mode 100644
index 0000000..9bd1491
--- /dev/null
+++ b/Test/baseResults/spv.debugInfo.1.1.frag.out
@@ -0,0 +1,280 @@
+spv.debugInfo.frag
+// Module Version 10300
+// Generated by (magic number): 80006
+// Id's are bound by 126
+
+                              Capability Shader
+               2:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 5  "main" 24 52
+                              ExecutionMode 5 OriginLowerLeft
+               1:             String  "spv.debugInfo.frag"
+                              Source GLSL 450 1  "#version 450
+
+struct S {
+    int a;
+};
+
+uniform ubuf {
+    S s;
+};
+
+uniform sampler2D s2d;
+
+layout(location = 0) in vec4 inv;
+layout(location = 0) out vec4 outv;
+
+vec4 foo(S s)
+{
+    vec4 r = s.a * inv;
+    ++r;
+    if (r.x > 3.0)
+        --r;
+    else
+        r *= 2;
+
+    return r;
+}
+
+void main()
+{
+    outv = foo(s);
+    outv += texture(s2d, vec2(0.5));
+
+    switch (s.a) {
+    case 10:
+        ++outv;
+        break;
+    case 20:
+        outv = 2 * outv;
+        ++outv;
+        break;
+    default:
+        --outv;
+        break;
+    }
+
+    for (int i = 0; i < 10; ++i)
+        outv *= 3.0;
+
+    outv.x < 10.0 ?
+        outv = sin(outv) :
+        outv = cos(outv);
+}"
+                              Name 5  "main"
+                              Name 8  "S"
+                              MemberName 8(S) 0  "a"
+                              Name 14  "foo(struct-S-i11;"
+                              Name 13  "s"
+                              Name 17  "r"
+                              Name 24  "inv"
+                              Name 52  "outv"
+                              Name 53  "S"
+                              MemberName 53(S) 0  "a"
+                              Name 54  "ubuf"
+                              MemberName 54(ubuf) 0  "s"
+                              Name 56  ""
+                              Name 57  "S"
+                              MemberName 57(S) 0  "a"
+                              Name 59  "param"
+                              Name 69  "s2d"
+                              Name 99  "i"
+                              ModuleProcessed  "no-storage-format"
+                              ModuleProcessed  "resource-set-binding 3"
+                              ModuleProcessed  "auto-map-locations"
+                              ModuleProcessed  "client opengl100"
+                              ModuleProcessed  "target-env opengl"
+                              ModuleProcessed  "relaxed-errors"
+                              ModuleProcessed  "suppress-warnings"
+                              ModuleProcessed  "hlsl-offsets"
+                              ModuleProcessed  "entry-point main"
+                              Decorate 24(inv) Location 0
+                              Decorate 52(outv) Location 0
+                              MemberDecorate 53(S) 0 Offset 0
+                              MemberDecorate 54(ubuf) 0 Offset 0
+                              Decorate 54(ubuf) Block
+                              Decorate 56 DescriptorSet 3
+                              Decorate 69(s2d) Location 0
+                              Decorate 69(s2d) DescriptorSet 3
+               3:             TypeVoid
+               4:             TypeFunction 3
+               7:             TypeInt 32 1
+            8(S):             TypeStruct 7(int)
+               9:             TypePointer Function 8(S)
+              10:             TypeFloat 32
+              11:             TypeVector 10(float) 4
+              12:             TypeFunction 11(fvec4) 9(ptr)
+              16:             TypePointer Function 11(fvec4)
+              18:      7(int) Constant 0
+              19:             TypePointer Function 7(int)
+              23:             TypePointer Input 11(fvec4)
+         24(inv):     23(ptr) Variable Input
+              28:   10(float) Constant 1065353216
+              31:             TypeInt 32 0
+              32:     31(int) Constant 0
+              33:             TypePointer Function 10(float)
+              36:   10(float) Constant 1077936128
+              37:             TypeBool
+              45:   10(float) Constant 1073741824
+              51:             TypePointer Output 11(fvec4)
+        52(outv):     51(ptr) Variable Output
+           53(S):             TypeStruct 7(int)
+        54(ubuf):             TypeStruct 53(S)
+              55:             TypePointer Uniform 54(ubuf)
+              56:     55(ptr) Variable Uniform
+           57(S):             TypeStruct 7(int)
+              58:             TypePointer Function 57(S)
+              60:             TypePointer Uniform 53(S)
+              66:             TypeImage 10(float) 2D sampled format:Unknown
+              67:             TypeSampledImage 66
+              68:             TypePointer UniformConstant 67
+         69(s2d):     68(ptr) Variable UniformConstant
+              71:             TypeVector 10(float) 2
+              72:   10(float) Constant 1056964608
+              73:   71(fvec2) ConstantComposite 72 72
+              77:             TypePointer Uniform 7(int)
+             106:      7(int) Constant 10
+             111:      7(int) Constant 1
+             113:             TypePointer Output 10(float)
+             116:   10(float) Constant 1092616192
+         5(main):           3 Function None 4
+               6:             Label
+       59(param):     58(ptr) Variable Function
+           99(i):     19(ptr) Variable Function
+             118:     16(ptr) Variable Function
+                              Line 1 30 0
+              61:     60(ptr) AccessChain 56 18
+              62:       53(S) Load 61
+              63:      7(int) CompositeExtract 62 0
+              64:     19(ptr) AccessChain 59(param) 18
+                              Store 64 63
+              65:   11(fvec4) FunctionCall 14(foo(struct-S-i11;) 59(param)
+                              Store 52(outv) 65
+                              Line 1 31 0
+              70:          67 Load 69(s2d)
+              74:   11(fvec4) ImageSampleImplicitLod 70 73
+              75:   11(fvec4) Load 52(outv)
+              76:   11(fvec4) FAdd 75 74
+                              Store 52(outv) 76
+                              Line 1 33 0
+              78:     77(ptr) AccessChain 56 18 18
+              79:      7(int) Load 78
+                              SelectionMerge 83 None
+                              Switch 79 82 
+                                     case 10: 80
+                                     case 20: 81
+              82:               Label
+                                Line 1 42 0
+              94:   11(fvec4)   Load 52(outv)
+              95:   11(fvec4)   CompositeConstruct 28 28 28 28
+              96:   11(fvec4)   FSub 94 95
+                                Store 52(outv) 96
+                                Line 1 43 0
+                                Branch 83
+              80:               Label
+                                Line 1 35 0
+              84:   11(fvec4)   Load 52(outv)
+              85:   11(fvec4)   CompositeConstruct 28 28 28 28
+              86:   11(fvec4)   FAdd 84 85
+                                Store 52(outv) 86
+                                Line 1 36 0
+                                Branch 83
+              81:               Label
+                                Line 1 38 0
+              88:   11(fvec4)   Load 52(outv)
+              89:   11(fvec4)   VectorTimesScalar 88 45
+                                Store 52(outv) 89
+                                Line 1 39 0
+              90:   11(fvec4)   Load 52(outv)
+              91:   11(fvec4)   CompositeConstruct 28 28 28 28
+              92:   11(fvec4)   FAdd 90 91
+                                Store 52(outv) 92
+                                Line 1 40 0
+                                Branch 83
+              83:             Label
+                              Line 1 46 0
+                              Store 99(i) 18
+                              Branch 100
+             100:             Label
+                              LoopMerge 102 103 None
+                              Branch 104
+             104:             Label
+             105:      7(int) Load 99(i)
+             107:    37(bool) SLessThan 105 106
+                              BranchConditional 107 101 102
+             101:               Label
+                                Line 1 47 0
+             108:   11(fvec4)   Load 52(outv)
+             109:   11(fvec4)   VectorTimesScalar 108 36
+                                Store 52(outv) 109
+                                Branch 103
+             103:               Label
+                                Line 1 46 0
+             110:      7(int)   Load 99(i)
+             112:      7(int)   IAdd 110 111
+                                Store 99(i) 112
+                                Branch 100
+             102:             Label
+                              Line 1 49 0
+             114:    113(ptr) AccessChain 52(outv) 32
+             115:   10(float) Load 114
+             117:    37(bool) FOrdLessThan 115 116
+                              SelectionMerge 120 None
+                              BranchConditional 117 119 123
+             119:               Label
+                                Line 1 50 0
+             121:   11(fvec4)   Load 52(outv)
+             122:   11(fvec4)   ExtInst 2(GLSL.std.450) 13(Sin) 121
+                                Store 52(outv) 122
+                                Store 118 122
+                                Branch 120
+             123:               Label
+                                Line 1 51 0
+             124:   11(fvec4)   Load 52(outv)
+             125:   11(fvec4)   ExtInst 2(GLSL.std.450) 14(Cos) 124
+                                Store 52(outv) 125
+                                Store 118 125
+                                Branch 120
+             120:             Label
+                              Return
+                              FunctionEnd
+14(foo(struct-S-i11;):   11(fvec4) Function None 12
+           13(s):      9(ptr) FunctionParameter
+              15:             Label
+           17(r):     16(ptr) Variable Function
+                              Line 1 18 0
+              20:     19(ptr) AccessChain 13(s) 18
+              21:      7(int) Load 20
+              22:   10(float) ConvertSToF 21
+              25:   11(fvec4) Load 24(inv)
+              26:   11(fvec4) VectorTimesScalar 25 22
+                              Store 17(r) 26
+                              Line 1 19 0
+              27:   11(fvec4) Load 17(r)
+              29:   11(fvec4) CompositeConstruct 28 28 28 28
+              30:   11(fvec4) FAdd 27 29
+                              Store 17(r) 30
+                              Line 1 20 0
+              34:     33(ptr) AccessChain 17(r) 32
+              35:   10(float) Load 34
+              38:    37(bool) FOrdGreaterThan 35 36
+                              SelectionMerge 40 None
+                              BranchConditional 38 39 44
+              39:               Label
+                                Line 1 21 0
+              41:   11(fvec4)   Load 17(r)
+              42:   11(fvec4)   CompositeConstruct 28 28 28 28
+              43:   11(fvec4)   FSub 41 42
+                                Store 17(r) 43
+                                Branch 40
+              44:               Label
+                                Line 1 23 0
+              46:   11(fvec4)   Load 17(r)
+              47:   11(fvec4)   VectorTimesScalar 46 45
+                                Store 17(r) 47
+                                Branch 40
+              40:             Label
+                              Line 1 25 0
+              48:   11(fvec4) Load 17(r)
+                              ReturnValue 48
+                              FunctionEnd
diff --git a/Test/baseResults/spv.debugInfo.frag.out b/Test/baseResults/spv.debugInfo.frag.out
index 706f068..0bb266b 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): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 126
 
                               Capability Shader
@@ -11,6 +11,7 @@
                1:             String  "spv.debugInfo.frag"
                               Source GLSL 450 1  "// OpModuleProcessed no-storage-format
 // OpModuleProcessed resource-set-binding 3
+// OpModuleProcessed auto-map-bindings
 // OpModuleProcessed auto-map-locations
 // OpModuleProcessed client opengl100
 // OpModuleProcessed target-env opengl
@@ -95,7 +96,10 @@
                               MemberDecorate 54(ubuf) 0 Offset 0
                               Decorate 54(ubuf) Block
                               Decorate 56 DescriptorSet 3
+                              Decorate 56 Binding 0
+                              Decorate 69(s2d) Location 0
                               Decorate 69(s2d) DescriptorSet 3
+                              Decorate 69(s2d) Binding 1
                3:             TypeVoid
                4:             TypeFunction 3
                7:             TypeInt 32 1
@@ -135,13 +139,13 @@
               77:             TypePointer Uniform 7(int)
              106:      7(int) Constant 10
              111:      7(int) Constant 1
-             114:             TypePointer Output 10(float)
-             117:   10(float) Constant 1092616192
+             113:             TypePointer Output 10(float)
+             116:   10(float) Constant 1092616192
          5(main):           3 Function None 4
                6:             Label
        59(param):     58(ptr) Variable Function
            99(i):     19(ptr) Variable Function
-             113:     16(ptr) Variable Function
+             118:     16(ptr) Variable Function
                               Line 1 30 0
               61:     60(ptr) AccessChain 56 18
               62:       53(S) Load 61
@@ -216,24 +220,24 @@
                                 Branch 100
              102:             Label
                               Line 1 49 0
-             115:    114(ptr) AccessChain 52(outv) 32
-             116:   10(float) Load 115
-             118:    37(bool) FOrdLessThan 116 117
+             114:    113(ptr) AccessChain 52(outv) 32
+             115:   10(float) Load 114
+             117:    37(bool) FOrdLessThan 115 116
                               SelectionMerge 120 None
-                              BranchConditional 118 119 123
+                              BranchConditional 117 119 123
              119:               Label
                                 Line 1 50 0
              121:   11(fvec4)   Load 52(outv)
              122:   11(fvec4)   ExtInst 2(GLSL.std.450) 13(Sin) 121
                                 Store 52(outv) 122
-                                Store 113 122
+                                Store 118 122
                                 Branch 120
              123:               Label
                                 Line 1 51 0
              124:   11(fvec4)   Load 52(outv)
              125:   11(fvec4)   ExtInst 2(GLSL.std.450) 14(Cos) 124
                                 Store 52(outv) 125
-                                Store 113 125
+                                Store 118 125
                                 Branch 120
              120:             Label
                               Return
diff --git a/Test/baseResults/spv.deepRvalue.frag.out b/Test/baseResults/spv.deepRvalue.frag.out
index 4561f02..296fa7d 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): 80002
+// Generated by (magic number): 80006
 // 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 12ac32c..6d3f023 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): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 15
 
                               Capability Shader
diff --git a/Test/baseResults/spv.deviceGroup.frag.out b/Test/baseResults/spv.deviceGroup.frag.out
old mode 100755
new mode 100644
index 1761c92..92767aa
--- a/Test/baseResults/spv.deviceGroup.frag.out
+++ b/Test/baseResults/spv.deviceGroup.frag.out
@@ -1,11 +1,10 @@
 spv.deviceGroup.frag
-// Module Version 10000
-// Generated by (magic number): 80002
+// Module Version 10300
+// Generated by (magic number): 80006
 // Id's are bound by 17
 
                               Capability Shader
                               Capability DeviceGroup
-                              Extension  "SPV_KHR_device_group"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
                               EntryPoint Fragment 4  "main" 9 12
diff --git a/Test/baseResults/spv.discard-dce.frag.out b/Test/baseResults/spv.discard-dce.frag.out
index 770199b..e48aff2 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): 80002
+// Generated by (magic number): 80006
 // 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 f503be0..0117c8f 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): 80002
+// Generated by (magic number): 80006
 // 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 c6a8b86..2fceb4c 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): 80002
+// Generated by (magic number): 80006
 // 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 4cf8f09..dc8c0be 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): 80002
+// Generated by (magic number): 80006
 // 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 52410d8..d4525cd 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): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 60
 
                               Capability Shader
diff --git a/Test/baseResults/spv.drawParams.vert.out b/Test/baseResults/spv.drawParams.vert.out
old mode 100755
new mode 100644
index c5b29a3..af7519b
--- a/Test/baseResults/spv.drawParams.vert.out
+++ b/Test/baseResults/spv.drawParams.vert.out
@@ -1,11 +1,10 @@
 spv.drawParams.vert
-// Module Version 10000
-// Generated by (magic number): 80002
+// Module Version 10300
+// Generated by (magic number): 80006
 // Id's are bound by 29
 
                               Capability Shader
                               Capability DrawParameters
-                              Extension  "SPV_KHR_shader_draw_parameters"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
                               EntryPoint Vertex 4  "main" 10 13 16 21
diff --git a/Test/baseResults/spv.earlyReturnDiscard.frag.out b/Test/baseResults/spv.earlyReturnDiscard.frag.out
index 61788aa..c854a7b 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): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 110
 
                               Capability Shader
diff --git a/Test/baseResults/spv.explicittypes.frag.out b/Test/baseResults/spv.explicittypes.frag.out
new file mode 100755
index 0000000..b6fcb85
--- /dev/null
+++ b/Test/baseResults/spv.explicittypes.frag.out
@@ -0,0 +1,882 @@
+spv.explicittypes.frag
+// Module Version 10300
+// Generated by (magic number): 80006
+// Id's are bound by 576
+
+                              Capability Shader
+                              Capability Float16
+                              Capability Float64
+                              Capability Int64
+                              Capability Int16
+                              Capability Int8
+                              Capability StorageUniform16
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main"
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_float16"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_float32"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_float64"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_int16"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_int32"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_int64"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_int8"
+                              Name 4  "main"
+                              Name 6  "literal("
+                              Name 8  "typeCast8("
+                              Name 10  "typeCast16("
+                              Name 12  "typeCast32("
+                              Name 14  "typeCast64("
+                              Name 18  "i64"
+                              Name 26  "Uniforms"
+                              MemberName 26(Uniforms) 0  "index"
+                              Name 28  ""
+                              Name 35  "indexable"
+                              Name 40  "u64"
+                              Name 49  "indexable"
+                              Name 53  "i32"
+                              Name 62  "indexable"
+                              Name 66  "u32"
+                              Name 74  "indexable"
+                              Name 79  "i16"
+                              Name 88  "indexable"
+                              Name 93  "u16"
+                              Name 101  "indexable"
+                              Name 106  "i8"
+                              Name 115  "indexable"
+                              Name 120  "u8"
+                              Name 128  "indexable"
+                              Name 133  "u8v"
+                              Name 136  "i8v"
+                              Name 141  "i16v"
+                              Name 149  "i32v"
+                              Name 157  "u32v"
+                              Name 163  "i64v"
+                              Name 168  "u64v"
+                              Name 182  "f16v"
+                              Name 188  "f32v"
+                              Name 194  "f64v"
+                              Name 222  "u16v"
+                              Name 252  "bv"
+                              Name 268  "i32v"
+                              Name 269  "i16v"
+                              Name 272  "u16v"
+                              Name 278  "u32v"
+                              Name 282  "i64v"
+                              Name 285  "u64v"
+                              Name 296  "f16v"
+                              Name 299  "f32v"
+                              Name 302  "f64v"
+                              Name 347  "i8v"
+                              Name 353  "u8v"
+                              Name 363  "bv"
+                              Name 380  "u32v"
+                              Name 381  "i32v"
+                              Name 384  "i64v"
+                              Name 387  "u64v"
+                              Name 396  "f32v"
+                              Name 399  "f64v"
+                              Name 406  "i8v"
+                              Name 412  "i16v"
+                              Name 429  "u8v"
+                              Name 435  "u16v"
+                              Name 452  "f16v"
+                              Name 465  "bv"
+                              Name 481  "u64v"
+                              Name 482  "i64v"
+                              Name 485  "f64v"
+                              Name 490  "i8v"
+                              Name 496  "i16v"
+                              Name 502  "i32v"
+                              Name 510  "u8v"
+                              Name 516  "u16v"
+                              Name 522  "u32v"
+                              Name 534  "f16v"
+                              Name 537  "f32v"
+                              Name 548  "bv"
+                              Name 573  "Block"
+                              MemberName 573(Block) 0  "i16"
+                              MemberName 573(Block) 1  "i16v2"
+                              MemberName 573(Block) 2  "i16v3"
+                              MemberName 573(Block) 3  "i16v4"
+                              MemberName 573(Block) 4  "u16"
+                              MemberName 573(Block) 5  "u16v2"
+                              MemberName 573(Block) 6  "u16v3"
+                              MemberName 573(Block) 7  "u16v4"
+                              MemberName 573(Block) 8  "i32"
+                              MemberName 573(Block) 9  "i32v2"
+                              MemberName 573(Block) 10  "i32v3"
+                              MemberName 573(Block) 11  "i32v4"
+                              MemberName 573(Block) 12  "u32"
+                              MemberName 573(Block) 13  "u32v2"
+                              MemberName 573(Block) 14  "u32v3"
+                              MemberName 573(Block) 15  "u32v4"
+                              Name 575  "block"
+                              MemberDecorate 26(Uniforms) 0 Offset 0
+                              Decorate 26(Uniforms) Block
+                              Decorate 28 DescriptorSet 0
+                              Decorate 28 Binding 0
+                              MemberDecorate 573(Block) 0 Offset 0
+                              MemberDecorate 573(Block) 1 Offset 4
+                              MemberDecorate 573(Block) 2 Offset 8
+                              MemberDecorate 573(Block) 3 Offset 16
+                              MemberDecorate 573(Block) 4 Offset 24
+                              MemberDecorate 573(Block) 5 Offset 28
+                              MemberDecorate 573(Block) 6 Offset 32
+                              MemberDecorate 573(Block) 7 Offset 40
+                              MemberDecorate 573(Block) 8 Offset 48
+                              MemberDecorate 573(Block) 9 Offset 56
+                              MemberDecorate 573(Block) 10 Offset 64
+                              MemberDecorate 573(Block) 11 Offset 80
+                              MemberDecorate 573(Block) 12 Offset 96
+                              MemberDecorate 573(Block) 13 Offset 104
+                              MemberDecorate 573(Block) 14 Offset 112
+                              MemberDecorate 573(Block) 15 Offset 128
+                              Decorate 573(Block) Block
+                              Decorate 575(block) DescriptorSet 0
+                              Decorate 575(block) Binding 1
+               2:             TypeVoid
+               3:             TypeFunction 2
+              16:             TypeInt 64 1
+              17:             TypePointer Function 16(int)
+              19:             TypeInt 32 0
+              20:     19(int) Constant 3
+              21:             TypeArray 16(int) 20
+              22:     16(int) Constant 4008636143 4008636142
+              23:     16(int) Constant 4294967295 4294967295
+              24:     16(int) Constant 0 1
+              25:          21 ConstantComposite 22 23 24
+    26(Uniforms):             TypeStruct 19(int)
+              27:             TypePointer Uniform 26(Uniforms)
+              28:     27(ptr) Variable Uniform
+              29:             TypeInt 32 1
+              30:     29(int) Constant 0
+              31:             TypePointer Uniform 19(int)
+              34:             TypePointer Function 21
+              38:             TypeInt 64 0
+              39:             TypePointer Function 38(int)
+              41:             TypeArray 38(int) 20
+              42:     38(int) Constant 4294967295 4294967295
+              43:     38(int) Constant 0 1
+              44:     38(int) Constant 4294967295 1
+              45:          41 ConstantComposite 42 43 44
+              48:             TypePointer Function 41
+              52:             TypePointer Function 29(int)
+              54:             TypeArray 29(int) 20
+              55:     29(int) Constant 4008636143
+              56:     29(int) Constant 4294967295
+              57:     29(int) Constant 536870912
+              58:          54 ConstantComposite 55 56 57
+              61:             TypePointer Function 54
+              65:             TypePointer Function 19(int)
+              67:             TypeArray 19(int) 20
+              68:     19(int) Constant 4294967295
+              69:     19(int) Constant 2147483647
+              70:          67 ConstantComposite 68 68 69
+              73:             TypePointer Function 67
+              77:             TypeInt 16 1
+              78:             TypePointer Function 77(int)
+              80:             TypeArray 77(int) 20
+              81:     77(int) Constant 4294962927
+              82:     77(int) Constant 4294967295
+              83:     77(int) Constant 16384
+              84:          80 ConstantComposite 81 82 83
+              87:             TypePointer Function 80
+              91:             TypeInt 16 0
+              92:             TypePointer Function 91(int)
+              94:             TypeArray 91(int) 20
+              95:     91(int) Constant 65535
+              96:     91(int) Constant 32767
+              97:          94 ConstantComposite 95 95 96
+             100:             TypePointer Function 94
+             104:             TypeInt 8 1
+             105:             TypePointer Function 104(int)
+             107:             TypeArray 104(int) 20
+             108:    104(int) Constant 4294967279
+             109:    104(int) Constant 4294967295
+             110:    104(int) Constant 0
+             111:         107 ConstantComposite 108 109 110
+             114:             TypePointer Function 107
+             118:             TypeInt 8 0
+             119:             TypePointer Function 118(int)
+             121:             TypeArray 118(int) 20
+             122:    118(int) Constant 255
+             123:    118(int) Constant 127
+             124:         121 ConstantComposite 122 122 123
+             127:             TypePointer Function 121
+             131:             TypeVector 118(int) 2
+             132:             TypePointer Function 131(ivec2)
+             134:             TypeVector 104(int) 2
+             135:             TypePointer Function 134(ivec2)
+             139:             TypeVector 77(int) 2
+             140:             TypePointer Function 139(ivec2)
+             147:             TypeVector 29(int) 2
+             148:             TypePointer Function 147(ivec2)
+             155:             TypeVector 19(int) 2
+             156:             TypePointer Function 155(ivec2)
+             161:             TypeVector 16(int) 2
+             162:             TypePointer Function 161(ivec2)
+             166:             TypeVector 38(int) 2
+             167:             TypePointer Function 166(ivec2)
+             179:             TypeFloat 16
+             180:             TypeVector 179(float) 2
+             181:             TypePointer Function 180(fvec2)
+             185:             TypeFloat 32
+             186:             TypeVector 185(float) 2
+             187:             TypePointer Function 186(fvec2)
+             191:             TypeFloat 64
+             192:             TypeVector 191(float) 2
+             193:             TypePointer Function 192(fvec2)
+             220:             TypeVector 91(int) 2
+             221:             TypePointer Function 220(ivec2)
+             249:             TypeBool
+             250:             TypeVector 249(bool) 2
+             251:             TypePointer Function 250(bvec2)
+             254:    104(int) Constant 1
+             255:  134(ivec2) ConstantComposite 110 110
+             256:  134(ivec2) ConstantComposite 254 254
+             259:    118(int) Constant 0
+             260:    118(int) Constant 1
+             261:  131(ivec2) ConstantComposite 259 259
+             262:  131(ivec2) ConstantComposite 260 260
+             365:     77(int) Constant 0
+             366:     77(int) Constant 1
+             367:  139(ivec2) ConstantComposite 365 365
+             368:  139(ivec2) ConstantComposite 366 366
+             371:     91(int) Constant 0
+             372:     91(int) Constant 1
+             373:  220(ivec2) ConstantComposite 371 371
+             374:  220(ivec2) ConstantComposite 372 372
+             467:     29(int) Constant 1
+             468:  147(ivec2) ConstantComposite 30 30
+             469:  147(ivec2) ConstantComposite 467 467
+             472:     19(int) Constant 0
+             473:     19(int) Constant 1
+             474:  155(ivec2) ConstantComposite 472 472
+             475:  155(ivec2) ConstantComposite 473 473
+             550:     16(int) Constant 0 0
+             551:     16(int) Constant 1 0
+             552:  161(ivec2) ConstantComposite 550 550
+             553:  161(ivec2) ConstantComposite 551 551
+             556:     38(int) Constant 0 0
+             557:     38(int) Constant 1 0
+             558:  166(ivec2) ConstantComposite 556 556
+             559:  166(ivec2) ConstantComposite 557 557
+             565:             TypeVector 77(int) 3
+             566:             TypeVector 77(int) 4
+             567:             TypeVector 91(int) 3
+             568:             TypeVector 91(int) 4
+             569:             TypeVector 29(int) 3
+             570:             TypeVector 29(int) 4
+             571:             TypeVector 19(int) 3
+             572:             TypeVector 19(int) 4
+      573(Block):             TypeStruct 77(int) 139(ivec2) 565(ivec3) 566(ivec4) 91(int) 220(ivec2) 567(ivec3) 568(ivec4) 29(int) 147(ivec2) 569(ivec3) 570(ivec4) 19(int) 155(ivec2) 571(ivec3) 572(ivec4)
+             574:             TypePointer Uniform 573(Block)
+      575(block):    574(ptr) Variable Uniform
+         4(main):           2 Function None 3
+               5:             Label
+                              Return
+                              FunctionEnd
+     6(literal():           2 Function None 3
+               7:             Label
+         18(i64):     17(ptr) Variable Function
+   35(indexable):     34(ptr) Variable Function
+         40(u64):     39(ptr) Variable Function
+   49(indexable):     48(ptr) Variable Function
+         53(i32):     52(ptr) Variable Function
+   62(indexable):     61(ptr) Variable Function
+         66(u32):     65(ptr) Variable Function
+   74(indexable):     73(ptr) Variable Function
+         79(i16):     78(ptr) Variable Function
+   88(indexable):     87(ptr) Variable Function
+         93(u16):     92(ptr) Variable Function
+  101(indexable):    100(ptr) Variable Function
+         106(i8):    105(ptr) Variable Function
+  115(indexable):    114(ptr) Variable Function
+         120(u8):    119(ptr) Variable Function
+  128(indexable):    127(ptr) Variable Function
+              32:     31(ptr) AccessChain 28 30
+              33:     19(int) Load 32
+                              Store 35(indexable) 25
+              36:     17(ptr) AccessChain 35(indexable) 33
+              37:     16(int) Load 36
+                              Store 18(i64) 37
+              46:     31(ptr) AccessChain 28 30
+              47:     19(int) Load 46
+                              Store 49(indexable) 45
+              50:     39(ptr) AccessChain 49(indexable) 47
+              51:     38(int) Load 50
+                              Store 40(u64) 51
+              59:     31(ptr) AccessChain 28 30
+              60:     19(int) Load 59
+                              Store 62(indexable) 58
+              63:     52(ptr) AccessChain 62(indexable) 60
+              64:     29(int) Load 63
+                              Store 53(i32) 64
+              71:     31(ptr) AccessChain 28 30
+              72:     19(int) Load 71
+                              Store 74(indexable) 70
+              75:     65(ptr) AccessChain 74(indexable) 72
+              76:     19(int) Load 75
+                              Store 66(u32) 76
+              85:     31(ptr) AccessChain 28 30
+              86:     19(int) Load 85
+                              Store 88(indexable) 84
+              89:     78(ptr) AccessChain 88(indexable) 86
+              90:     77(int) Load 89
+                              Store 79(i16) 90
+              98:     31(ptr) AccessChain 28 30
+              99:     19(int) Load 98
+                              Store 101(indexable) 97
+             102:     92(ptr) AccessChain 101(indexable) 99
+             103:     91(int) Load 102
+                              Store 93(u16) 103
+             112:     31(ptr) AccessChain 28 30
+             113:     19(int) Load 112
+                              Store 115(indexable) 111
+             116:    105(ptr) AccessChain 115(indexable) 113
+             117:    104(int) Load 116
+                              Store 106(i8) 117
+             125:     31(ptr) AccessChain 28 30
+             126:     19(int) Load 125
+                              Store 128(indexable) 124
+             129:    119(ptr) AccessChain 128(indexable) 126
+             130:    118(int) Load 129
+                              Store 120(u8) 130
+                              Return
+                              FunctionEnd
+   8(typeCast8():           2 Function None 3
+               9:             Label
+        133(u8v):    132(ptr) Variable Function
+        136(i8v):    135(ptr) Variable Function
+       141(i16v):    140(ptr) Variable Function
+       149(i32v):    148(ptr) Variable Function
+       157(u32v):    156(ptr) Variable Function
+       163(i64v):    162(ptr) Variable Function
+       168(u64v):    167(ptr) Variable Function
+       182(f16v):    181(ptr) Variable Function
+       188(f32v):    187(ptr) Variable Function
+       194(f64v):    193(ptr) Variable Function
+       222(u16v):    221(ptr) Variable Function
+         252(bv):    251(ptr) Variable Function
+             137:  134(ivec2) Load 136(i8v)
+             138:  131(ivec2) Bitcast 137
+                              Store 133(u8v) 138
+             142:  134(ivec2) Load 136(i8v)
+             143:  139(ivec2) SConvert 142
+                              Store 141(i16v) 143
+             144:  131(ivec2) Load 133(u8v)
+             145:  139(ivec2) UConvert 144
+             146:  139(ivec2) Bitcast 145
+                              Store 141(i16v) 146
+             150:  134(ivec2) Load 136(i8v)
+             151:  147(ivec2) SConvert 150
+                              Store 149(i32v) 151
+             152:  131(ivec2) Load 133(u8v)
+             153:  147(ivec2) UConvert 152
+             154:  147(ivec2) Bitcast 153
+                              Store 149(i32v) 154
+             158:  134(ivec2) Load 136(i8v)
+             159:  147(ivec2) SConvert 158
+             160:  155(ivec2) Bitcast 159
+                              Store 157(u32v) 160
+             164:  134(ivec2) Load 136(i8v)
+             165:  161(ivec2) SConvert 164
+                              Store 163(i64v) 165
+             169:  134(ivec2) Load 136(i8v)
+             170:  161(ivec2) SConvert 169
+             171:  166(ivec2) Bitcast 170
+                              Store 168(u64v) 171
+             172:  131(ivec2) Load 133(u8v)
+             173:  155(ivec2) UConvert 172
+                              Store 157(u32v) 173
+             174:  131(ivec2) Load 133(u8v)
+             175:  161(ivec2) UConvert 174
+             176:  161(ivec2) Bitcast 175
+                              Store 163(i64v) 176
+             177:  131(ivec2) Load 133(u8v)
+             178:  166(ivec2) UConvert 177
+                              Store 168(u64v) 178
+             183:  134(ivec2) Load 136(i8v)
+             184:  180(fvec2) ConvertSToF 183
+                              Store 182(f16v) 184
+             189:  134(ivec2) Load 136(i8v)
+             190:  186(fvec2) ConvertSToF 189
+                              Store 188(f32v) 190
+             195:  134(ivec2) Load 136(i8v)
+             196:  192(fvec2) ConvertSToF 195
+                              Store 194(f64v) 196
+             197:  131(ivec2) Load 133(u8v)
+             198:  180(fvec2) ConvertUToF 197
+                              Store 182(f16v) 198
+             199:  131(ivec2) Load 133(u8v)
+             200:  186(fvec2) ConvertUToF 199
+                              Store 188(f32v) 200
+             201:  131(ivec2) Load 133(u8v)
+             202:  192(fvec2) ConvertUToF 201
+                              Store 194(f64v) 202
+             203:  131(ivec2) Load 133(u8v)
+             204:  134(ivec2) Bitcast 203
+                              Store 136(i8v) 204
+             205:  134(ivec2) Load 136(i8v)
+             206:  139(ivec2) SConvert 205
+                              Store 141(i16v) 206
+             207:  131(ivec2) Load 133(u8v)
+             208:  139(ivec2) UConvert 207
+             209:  139(ivec2) Bitcast 208
+                              Store 141(i16v) 209
+             210:  134(ivec2) Load 136(i8v)
+             211:  147(ivec2) SConvert 210
+                              Store 149(i32v) 211
+             212:  131(ivec2) Load 133(u8v)
+             213:  147(ivec2) UConvert 212
+             214:  147(ivec2) Bitcast 213
+                              Store 149(i32v) 214
+             215:  134(ivec2) Load 136(i8v)
+             216:  161(ivec2) SConvert 215
+                              Store 163(i64v) 216
+             217:  134(ivec2) Load 136(i8v)
+             218:  161(ivec2) SConvert 217
+             219:  166(ivec2) Bitcast 218
+                              Store 168(u64v) 219
+             223:  134(ivec2) Load 136(i8v)
+             224:  139(ivec2) SConvert 223
+             225:  220(ivec2) Bitcast 224
+                              Store 222(u16v) 225
+             226:  131(ivec2) Load 133(u8v)
+             227:  220(ivec2) UConvert 226
+                              Store 222(u16v) 227
+             228:  131(ivec2) Load 133(u8v)
+             229:  155(ivec2) UConvert 228
+                              Store 157(u32v) 229
+             230:  131(ivec2) Load 133(u8v)
+             231:  161(ivec2) UConvert 230
+             232:  161(ivec2) Bitcast 231
+                              Store 163(i64v) 232
+             233:  131(ivec2) Load 133(u8v)
+             234:  161(ivec2) UConvert 233
+             235:  161(ivec2) Bitcast 234
+             236:  166(ivec2) Bitcast 235
+                              Store 168(u64v) 236
+             237:  134(ivec2) Load 136(i8v)
+             238:  180(fvec2) ConvertSToF 237
+                              Store 182(f16v) 238
+             239:  134(ivec2) Load 136(i8v)
+             240:  186(fvec2) ConvertSToF 239
+                              Store 188(f32v) 240
+             241:  134(ivec2) Load 136(i8v)
+             242:  192(fvec2) ConvertSToF 241
+                              Store 194(f64v) 242
+             243:  131(ivec2) Load 133(u8v)
+             244:  180(fvec2) ConvertUToF 243
+                              Store 182(f16v) 244
+             245:  131(ivec2) Load 133(u8v)
+             246:  186(fvec2) ConvertUToF 245
+                              Store 188(f32v) 246
+             247:  131(ivec2) Load 133(u8v)
+             248:  192(fvec2) ConvertUToF 247
+                              Store 194(f64v) 248
+             253:  250(bvec2) Load 252(bv)
+             257:  134(ivec2) Select 253 256 255
+                              Store 136(i8v) 257
+             258:  250(bvec2) Load 252(bv)
+             263:  131(ivec2) Select 258 262 261
+                              Store 133(u8v) 263
+             264:  134(ivec2) Load 136(i8v)
+             265:  250(bvec2) INotEqual 264 261
+                              Store 252(bv) 265
+             266:  131(ivec2) Load 133(u8v)
+             267:  250(bvec2) INotEqual 266 261
+                              Store 252(bv) 267
+                              Return
+                              FunctionEnd
+ 10(typeCast16():           2 Function None 3
+              11:             Label
+       268(i32v):    148(ptr) Variable Function
+       269(i16v):    140(ptr) Variable Function
+       272(u16v):    221(ptr) Variable Function
+       278(u32v):    156(ptr) Variable Function
+       282(i64v):    162(ptr) Variable Function
+       285(u64v):    167(ptr) Variable Function
+       296(f16v):    181(ptr) Variable Function
+       299(f32v):    187(ptr) Variable Function
+       302(f64v):    193(ptr) Variable Function
+        347(i8v):    135(ptr) Variable Function
+        353(u8v):    132(ptr) Variable Function
+         363(bv):    251(ptr) Variable Function
+             270:  139(ivec2) Load 269(i16v)
+             271:  147(ivec2) SConvert 270
+                              Store 268(i32v) 271
+             273:  220(ivec2) Load 272(u16v)
+             274:  147(ivec2) UConvert 273
+             275:  147(ivec2) Bitcast 274
+                              Store 268(i32v) 275
+             276:  139(ivec2) Load 269(i16v)
+             277:  220(ivec2) Bitcast 276
+                              Store 272(u16v) 277
+             279:  139(ivec2) Load 269(i16v)
+             280:  147(ivec2) SConvert 279
+             281:  155(ivec2) Bitcast 280
+                              Store 278(u32v) 281
+             283:  139(ivec2) Load 269(i16v)
+             284:  161(ivec2) SConvert 283
+                              Store 282(i64v) 284
+             286:  139(ivec2) Load 269(i16v)
+             287:  161(ivec2) SConvert 286
+             288:  166(ivec2) Bitcast 287
+                              Store 285(u64v) 288
+             289:  220(ivec2) Load 272(u16v)
+             290:  155(ivec2) UConvert 289
+                              Store 278(u32v) 290
+             291:  220(ivec2) Load 272(u16v)
+             292:  161(ivec2) UConvert 291
+             293:  161(ivec2) Bitcast 292
+                              Store 282(i64v) 293
+             294:  220(ivec2) Load 272(u16v)
+             295:  166(ivec2) UConvert 294
+                              Store 285(u64v) 295
+             297:  139(ivec2) Load 269(i16v)
+             298:  180(fvec2) ConvertSToF 297
+                              Store 296(f16v) 298
+             300:  139(ivec2) Load 269(i16v)
+             301:  186(fvec2) ConvertSToF 300
+                              Store 299(f32v) 301
+             303:  139(ivec2) Load 269(i16v)
+             304:  192(fvec2) ConvertSToF 303
+                              Store 302(f64v) 304
+             305:  220(ivec2) Load 272(u16v)
+             306:  180(fvec2) ConvertUToF 305
+                              Store 296(f16v) 306
+             307:  220(ivec2) Load 272(u16v)
+             308:  186(fvec2) ConvertUToF 307
+                              Store 299(f32v) 308
+             309:  220(ivec2) Load 272(u16v)
+             310:  192(fvec2) ConvertUToF 309
+                              Store 302(f64v) 310
+             311:  139(ivec2) Load 269(i16v)
+             312:  147(ivec2) SConvert 311
+                              Store 268(i32v) 312
+             313:  220(ivec2) Load 272(u16v)
+             314:  147(ivec2) UConvert 313
+             315:  147(ivec2) Bitcast 314
+                              Store 268(i32v) 315
+             316:  139(ivec2) Load 269(i16v)
+             317:  220(ivec2) Bitcast 316
+                              Store 272(u16v) 317
+             318:  139(ivec2) Load 269(i16v)
+             319:  147(ivec2) SConvert 318
+             320:  155(ivec2) Bitcast 319
+                              Store 278(u32v) 320
+             321:  139(ivec2) Load 269(i16v)
+             322:  161(ivec2) SConvert 321
+                              Store 282(i64v) 322
+             323:  139(ivec2) Load 269(i16v)
+             324:  161(ivec2) SConvert 323
+             325:  166(ivec2) Bitcast 324
+                              Store 285(u64v) 325
+             326:  220(ivec2) Load 272(u16v)
+             327:  155(ivec2) UConvert 326
+                              Store 278(u32v) 327
+             328:  220(ivec2) Load 272(u16v)
+             329:  161(ivec2) UConvert 328
+             330:  161(ivec2) Bitcast 329
+                              Store 282(i64v) 330
+             331:  220(ivec2) Load 272(u16v)
+             332:  161(ivec2) UConvert 331
+             333:  161(ivec2) Bitcast 332
+             334:  166(ivec2) Bitcast 333
+                              Store 285(u64v) 334
+             335:  139(ivec2) Load 269(i16v)
+             336:  180(fvec2) ConvertSToF 335
+                              Store 296(f16v) 336
+             337:  139(ivec2) Load 269(i16v)
+             338:  186(fvec2) ConvertSToF 337
+                              Store 299(f32v) 338
+             339:  139(ivec2) Load 269(i16v)
+             340:  192(fvec2) ConvertSToF 339
+                              Store 302(f64v) 340
+             341:  220(ivec2) Load 272(u16v)
+             342:  180(fvec2) ConvertUToF 341
+                              Store 296(f16v) 342
+             343:  220(ivec2) Load 272(u16v)
+             344:  186(fvec2) ConvertUToF 343
+                              Store 299(f32v) 344
+             345:  220(ivec2) Load 272(u16v)
+             346:  192(fvec2) ConvertUToF 345
+                              Store 302(f64v) 346
+             348:  139(ivec2) Load 269(i16v)
+             349:  134(ivec2) SConvert 348
+                              Store 347(i8v) 349
+             350:  220(ivec2) Load 272(u16v)
+             351:  134(ivec2) UConvert 350
+             352:  134(ivec2) Bitcast 351
+                              Store 347(i8v) 352
+             354:  139(ivec2) Load 269(i16v)
+             355:  134(ivec2) SConvert 354
+             356:  131(ivec2) Bitcast 355
+                              Store 353(u8v) 356
+             357:  220(ivec2) Load 272(u16v)
+             358:  131(ivec2) UConvert 357
+                              Store 353(u8v) 358
+             359:  220(ivec2) Load 272(u16v)
+             360:  131(ivec2) UConvert 359
+             361:  139(ivec2) UConvert 360
+             362:  139(ivec2) Bitcast 361
+                              Store 269(i16v) 362
+             364:  250(bvec2) Load 363(bv)
+             369:  139(ivec2) Select 364 368 367
+                              Store 269(i16v) 369
+             370:  250(bvec2) Load 363(bv)
+             375:  220(ivec2) Select 370 374 373
+                              Store 272(u16v) 375
+             376:  139(ivec2) Load 269(i16v)
+             377:  250(bvec2) INotEqual 376 373
+                              Store 363(bv) 377
+             378:  220(ivec2) Load 272(u16v)
+             379:  250(bvec2) INotEqual 378 373
+                              Store 363(bv) 379
+                              Return
+                              FunctionEnd
+ 12(typeCast32():           2 Function None 3
+              13:             Label
+       380(u32v):    156(ptr) Variable Function
+       381(i32v):    148(ptr) Variable Function
+       384(i64v):    162(ptr) Variable Function
+       387(u64v):    167(ptr) Variable Function
+       396(f32v):    187(ptr) Variable Function
+       399(f64v):    193(ptr) Variable Function
+        406(i8v):    135(ptr) Variable Function
+       412(i16v):    140(ptr) Variable Function
+        429(u8v):    132(ptr) Variable Function
+       435(u16v):    221(ptr) Variable Function
+       452(f16v):    181(ptr) Variable Function
+         465(bv):    251(ptr) Variable Function
+             382:  147(ivec2) Load 381(i32v)
+             383:  155(ivec2) Bitcast 382
+                              Store 380(u32v) 383
+             385:  147(ivec2) Load 381(i32v)
+             386:  161(ivec2) SConvert 385
+                              Store 384(i64v) 386
+             388:  147(ivec2) Load 381(i32v)
+             389:  161(ivec2) SConvert 388
+             390:  166(ivec2) Bitcast 389
+                              Store 387(u64v) 390
+             391:  155(ivec2) Load 380(u32v)
+             392:  161(ivec2) UConvert 391
+             393:  161(ivec2) Bitcast 392
+                              Store 384(i64v) 393
+             394:  155(ivec2) Load 380(u32v)
+             395:  166(ivec2) UConvert 394
+                              Store 387(u64v) 395
+             397:  147(ivec2) Load 381(i32v)
+             398:  186(fvec2) ConvertSToF 397
+                              Store 396(f32v) 398
+             400:  147(ivec2) Load 381(i32v)
+             401:  192(fvec2) ConvertSToF 400
+                              Store 399(f64v) 401
+             402:  155(ivec2) Load 380(u32v)
+             403:  186(fvec2) ConvertUToF 402
+                              Store 396(f32v) 403
+             404:  155(ivec2) Load 380(u32v)
+             405:  192(fvec2) ConvertUToF 404
+                              Store 399(f64v) 405
+             407:  147(ivec2) Load 381(i32v)
+             408:  134(ivec2) SConvert 407
+                              Store 406(i8v) 408
+             409:  155(ivec2) Load 380(u32v)
+             410:  134(ivec2) UConvert 409
+             411:  134(ivec2) Bitcast 410
+                              Store 406(i8v) 411
+             413:  147(ivec2) Load 381(i32v)
+             414:  139(ivec2) SConvert 413
+                              Store 412(i16v) 414
+             415:  155(ivec2) Load 380(u32v)
+             416:  139(ivec2) UConvert 415
+             417:  139(ivec2) Bitcast 416
+                              Store 412(i16v) 417
+             418:  147(ivec2) Load 381(i32v)
+             419:     29(int) CompositeExtract 418 0
+             420:     29(int) CompositeExtract 418 1
+             421:  147(ivec2) CompositeConstruct 419 420
+                              Store 381(i32v) 421
+             422:  155(ivec2) Load 380(u32v)
+             423:  147(ivec2) Bitcast 422
+                              Store 381(i32v) 423
+             424:  147(ivec2) Load 381(i32v)
+             425:  161(ivec2) SConvert 424
+                              Store 384(i64v) 425
+             426:  155(ivec2) Load 380(u32v)
+             427:  161(ivec2) UConvert 426
+             428:  161(ivec2) Bitcast 427
+                              Store 384(i64v) 428
+             430:  147(ivec2) Load 381(i32v)
+             431:  134(ivec2) SConvert 430
+             432:  131(ivec2) Bitcast 431
+                              Store 429(u8v) 432
+             433:  155(ivec2) Load 380(u32v)
+             434:  131(ivec2) UConvert 433
+                              Store 429(u8v) 434
+             436:  147(ivec2) Load 381(i32v)
+             437:  139(ivec2) SConvert 436
+             438:  220(ivec2) Bitcast 437
+                              Store 435(u16v) 438
+             439:  155(ivec2) Load 380(u32v)
+             440:  220(ivec2) UConvert 439
+                              Store 435(u16v) 440
+             441:  147(ivec2) Load 381(i32v)
+             442:  155(ivec2) Bitcast 441
+                              Store 380(u32v) 442
+             443:  155(ivec2) Load 380(u32v)
+             444:     19(int) CompositeExtract 443 0
+             445:     19(int) CompositeExtract 443 1
+             446:  155(ivec2) CompositeConstruct 444 445
+                              Store 380(u32v) 446
+             447:  147(ivec2) Load 381(i32v)
+             448:  161(ivec2) SConvert 447
+             449:  166(ivec2) Bitcast 448
+                              Store 387(u64v) 449
+             450:  155(ivec2) Load 380(u32v)
+             451:  166(ivec2) UConvert 450
+                              Store 387(u64v) 451
+             453:  147(ivec2) Load 381(i32v)
+             454:  180(fvec2) ConvertSToF 453
+                              Store 452(f16v) 454
+             455:  147(ivec2) Load 381(i32v)
+             456:  186(fvec2) ConvertSToF 455
+                              Store 396(f32v) 456
+             457:  147(ivec2) Load 381(i32v)
+             458:  192(fvec2) ConvertSToF 457
+                              Store 399(f64v) 458
+             459:  155(ivec2) Load 380(u32v)
+             460:  180(fvec2) ConvertUToF 459
+                              Store 452(f16v) 460
+             461:  155(ivec2) Load 380(u32v)
+             462:  186(fvec2) ConvertUToF 461
+                              Store 396(f32v) 462
+             463:  155(ivec2) Load 380(u32v)
+             464:  192(fvec2) ConvertUToF 463
+                              Store 399(f64v) 464
+             466:  250(bvec2) Load 465(bv)
+             470:  147(ivec2) Select 466 469 468
+                              Store 381(i32v) 470
+             471:  250(bvec2) Load 465(bv)
+             476:  155(ivec2) Select 471 475 474
+                              Store 380(u32v) 476
+             477:  147(ivec2) Load 381(i32v)
+             478:  250(bvec2) INotEqual 477 474
+                              Store 465(bv) 478
+             479:  155(ivec2) Load 380(u32v)
+             480:  250(bvec2) INotEqual 479 474
+                              Store 465(bv) 480
+                              Return
+                              FunctionEnd
+ 14(typeCast64():           2 Function None 3
+              15:             Label
+       481(u64v):    167(ptr) Variable Function
+       482(i64v):    162(ptr) Variable Function
+       485(f64v):    193(ptr) Variable Function
+        490(i8v):    135(ptr) Variable Function
+       496(i16v):    140(ptr) Variable Function
+       502(i32v):    148(ptr) Variable Function
+        510(u8v):    132(ptr) Variable Function
+       516(u16v):    221(ptr) Variable Function
+       522(u32v):    156(ptr) Variable Function
+       534(f16v):    181(ptr) Variable Function
+       537(f32v):    187(ptr) Variable Function
+         548(bv):    251(ptr) Variable Function
+             483:  161(ivec2) Load 482(i64v)
+             484:  166(ivec2) Bitcast 483
+                              Store 481(u64v) 484
+             486:  161(ivec2) Load 482(i64v)
+             487:  192(fvec2) ConvertSToF 486
+                              Store 485(f64v) 487
+             488:  166(ivec2) Load 481(u64v)
+             489:  192(fvec2) ConvertUToF 488
+                              Store 485(f64v) 489
+             491:  161(ivec2) Load 482(i64v)
+             492:  134(ivec2) SConvert 491
+                              Store 490(i8v) 492
+             493:  166(ivec2) Load 481(u64v)
+             494:  134(ivec2) UConvert 493
+             495:  134(ivec2) Bitcast 494
+                              Store 490(i8v) 495
+             497:  161(ivec2) Load 482(i64v)
+             498:  139(ivec2) SConvert 497
+                              Store 496(i16v) 498
+             499:  166(ivec2) Load 481(u64v)
+             500:  139(ivec2) UConvert 499
+             501:  139(ivec2) Bitcast 500
+                              Store 496(i16v) 501
+             503:  161(ivec2) Load 482(i64v)
+             504:  147(ivec2) SConvert 503
+                              Store 502(i32v) 504
+             505:  166(ivec2) Load 481(u64v)
+             506:  147(ivec2) UConvert 505
+             507:  147(ivec2) Bitcast 506
+                              Store 502(i32v) 507
+             508:  166(ivec2) Load 481(u64v)
+             509:  161(ivec2) Bitcast 508
+                              Store 482(i64v) 509
+             511:  161(ivec2) Load 482(i64v)
+             512:  134(ivec2) SConvert 511
+             513:  131(ivec2) Bitcast 512
+                              Store 510(u8v) 513
+             514:  166(ivec2) Load 481(u64v)
+             515:  131(ivec2) UConvert 514
+                              Store 510(u8v) 515
+             517:  161(ivec2) Load 482(i64v)
+             518:  139(ivec2) SConvert 517
+             519:  220(ivec2) Bitcast 518
+                              Store 516(u16v) 519
+             520:  166(ivec2) Load 481(u64v)
+             521:  220(ivec2) UConvert 520
+                              Store 516(u16v) 521
+             523:  161(ivec2) Load 482(i64v)
+             524:  147(ivec2) SConvert 523
+             525:  155(ivec2) Bitcast 524
+                              Store 522(u32v) 525
+             526:  166(ivec2) Load 481(u64v)
+             527:  155(ivec2) UConvert 526
+                              Store 522(u32v) 527
+             528:  161(ivec2) Load 482(i64v)
+             529:  166(ivec2) Bitcast 528
+                              Store 481(u64v) 529
+             530:  166(ivec2) Load 481(u64v)
+             531:     38(int) CompositeExtract 530 0
+             532:     38(int) CompositeExtract 530 1
+             533:  166(ivec2) CompositeConstruct 531 532
+                              Store 481(u64v) 533
+             535:  161(ivec2) Load 482(i64v)
+             536:  180(fvec2) ConvertSToF 535
+                              Store 534(f16v) 536
+             538:  161(ivec2) Load 482(i64v)
+             539:  186(fvec2) ConvertSToF 538
+                              Store 537(f32v) 539
+             540:  161(ivec2) Load 482(i64v)
+             541:  192(fvec2) ConvertSToF 540
+                              Store 485(f64v) 541
+             542:  166(ivec2) Load 481(u64v)
+             543:  180(fvec2) ConvertUToF 542
+                              Store 534(f16v) 543
+             544:  166(ivec2) Load 481(u64v)
+             545:  186(fvec2) ConvertUToF 544
+                              Store 537(f32v) 545
+             546:  166(ivec2) Load 481(u64v)
+             547:  192(fvec2) ConvertUToF 546
+                              Store 485(f64v) 547
+             549:  250(bvec2) Load 548(bv)
+             554:  161(ivec2) Select 549 553 552
+                              Store 482(i64v) 554
+             555:  250(bvec2) Load 548(bv)
+             560:  166(ivec2) Select 555 559 558
+                              Store 481(u64v) 560
+             561:  161(ivec2) Load 482(i64v)
+             562:  250(bvec2) INotEqual 561 558
+                              Store 548(bv) 562
+             563:  166(ivec2) Load 481(u64v)
+             564:  250(bvec2) INotEqual 563 558
+                              Store 548(bv) 564
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.extPostDepthCoverage.frag.out b/Test/baseResults/spv.extPostDepthCoverage.frag.out
index ca777e0..0cb29f5 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): 80002
+// Generated by (magic number): 80006
 // 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 004ba52..cc7b33d 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): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 534
 
                               Capability Shader
diff --git a/Test/baseResults/spv.float16Fetch.frag.out b/Test/baseResults/spv.float16Fetch.frag.out
new file mode 100644
index 0000000..94125da
--- /dev/null
+++ b/Test/baseResults/spv.float16Fetch.frag.out
@@ -0,0 +1,7070 @@
+spv.float16Fetch.frag
+// Module Version 10000
+// Generated by (magic number): 80006
+// Id's are bound by 5923
+
+                              Capability Shader
+                              Capability Float16
+                              Capability StorageImageMultisample
+                              Capability ImageCubeArray
+                              Capability ImageRect
+                              Capability SampledRect
+                              Capability InputAttachment
+                              Capability SparseResidency
+                              Capability MinLod
+                              Capability Sampled1D
+                              Capability Image1D
+                              Capability SampledCubeArray
+                              Capability SampledBuffer
+                              Capability ImageBuffer
+                              Capability ImageMSArray
+                              Capability ImageQuery
+                              Capability StorageInputOutput16
+                              Capability Float16ImageAMD
+                              Capability ImageGatherBiasLodAMD
+                              Extension  "SPV_AMD_gpu_shader_half_float"
+                              Extension  "SPV_AMD_gpu_shader_half_float_fetch"
+                              Extension  "SPV_AMD_texture_gather_bias_lod"
+                              Extension  "SPV_KHR_16bit_storage"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 128 135 137 148 156 169 177 215 251 309 565 572 1393 1401 1409 1417 1425 1433 4257 4264 5913 5922
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              SourceExtension  "GL_AMD_gpu_shader_half_float"
+                              SourceExtension  "GL_AMD_gpu_shader_half_float_fetch"
+                              SourceExtension  "GL_AMD_texture_gather_bias_lod"
+                              SourceExtension  "GL_ARB_sparse_texture2"
+                              SourceExtension  "GL_ARB_sparse_texture_clamp"
+                              Name 4  "main"
+                              Name 9  "testTexture("
+                              Name 11  "testTextureProj("
+                              Name 13  "testTextureLod("
+                              Name 15  "testTextureOffset("
+                              Name 17  "testTextureProjOffset("
+                              Name 19  "testTextureLodOffset("
+                              Name 21  "testTextureProjLodOffset("
+                              Name 23  "testTexelFetch("
+                              Name 25  "testTexelFetchOffset("
+                              Name 27  "testTextureGrad("
+                              Name 29  "testTextureGradOffset("
+                              Name 31  "testTextureProjGrad("
+                              Name 33  "testTextureProjGradoffset("
+                              Name 35  "testTextureGather("
+                              Name 37  "testTextureGatherOffset("
+                              Name 39  "testTextureGatherOffsets("
+                              Name 41  "testTextureGatherLod("
+                              Name 43  "testTextureGatherLodOffset("
+                              Name 45  "testTextureGatherLodOffsets("
+                              Name 50  "testTextureSize("
+                              Name 55  "testTextureQueryLod("
+                              Name 58  "testTextureQueryLevels("
+                              Name 60  "testTextureSamples("
+                              Name 62  "testImageLoad("
+                              Name 67  "testImageStore(vf164;"
+                              Name 66  "data"
+                              Name 69  "testSparseTexture("
+                              Name 71  "testSparseTextureLod("
+                              Name 73  "testSparseTextureOffset("
+                              Name 75  "testSparseTextureLodOffset("
+                              Name 77  "testSparseTextureGrad("
+                              Name 79  "testSparseTextureGradOffset("
+                              Name 81  "testSparseTexelFetch("
+                              Name 83  "testSparseTexelFetchOffset("
+                              Name 85  "testSparseTextureGather("
+                              Name 87  "testSparseTextureGatherOffset("
+                              Name 89  "testSparseTextureGatherOffsets("
+                              Name 91  "testSparseTextureGatherLod("
+                              Name 93  "testSparseTextureGatherLodOffset("
+                              Name 95  "testSparseTextureGatherLodOffsets("
+                              Name 97  "testSparseImageLoad("
+                              Name 99  "testSparseTextureClamp("
+                              Name 101  "testTextureClamp("
+                              Name 103  "testSparseTextureOffsetClamp("
+                              Name 105  "testTextureOffsetClamp("
+                              Name 107  "testSparseTextureGradClamp("
+                              Name 109  "testTextureGradClamp("
+                              Name 111  "testSparseTextureGradOffsetClamp("
+                              Name 113  "testTextureGradOffsetClamp("
+                              Name 115  "testCombinedTextureSampler("
+                              Name 117  "testSubpassLoad("
+                              Name 119  "texel"
+                              Name 125  "s1D"
+                              Name 128  "c1"
+                              Name 135  "f16c1"
+                              Name 137  "f16bias"
+                              Name 145  "s2D"
+                              Name 148  "c2"
+                              Name 156  "f16c2"
+                              Name 165  "s3D"
+                              Name 169  "c3"
+                              Name 177  "f16c3"
+                              Name 186  "sCube"
+                              Name 201  "s1DShadow"
+                              Name 215  "compare"
+                              Name 226  "s2DShadow"
+                              Name 247  "sCubeShadow"
+                              Name 251  "c4"
+                              Name 271  "s1DArray"
+                              Name 286  "s2DArray"
+                              Name 301  "sCubeArray"
+                              Name 309  "f16c4"
+                              Name 318  "s1DArrayShadow"
+                              Name 339  "s2DArrayShadow"
+                              Name 359  "s2DRect"
+                              Name 373  "s2DRectShadow"
+                              Name 393  "sCubeArrayShadow"
+                              Name 413  "texel"
+                              Name 562  "texel"
+                              Name 565  "lod"
+                              Name 572  "f16lod"
+                              Name 706  "texel"
+                              Name 863  "texel"
+                              Name 1012  "texel"
+                              Name 1130  "texel"
+                              Name 1244  "texel"
+                              Name 1300  "sBuffer"
+                              Name 1311  "s2DMS"
+                              Name 1322  "s2DMSArray"
+                              Name 1334  "texel"
+                              Name 1390  "texel"
+                              Name 1393  "dPdxy1"
+                              Name 1401  "f16dPdxy1"
+                              Name 1409  "dPdxy2"
+                              Name 1417  "f16dPdxy2"
+                              Name 1425  "dPdxy3"
+                              Name 1433  "f16dPdxy3"
+                              Name 1632  "texel"
+                              Name 1820  "texel"
+                              Name 2002  "texel"
+                              Name 2184  "texel"
+                              Name 2303  "texel"
+                              Name 2375  "texel"
+                              Name 2450  "texel"
+                              Name 2502  "texel"
+                              Name 2530  "texel"
+                              Name 2559  "size"
+                              Name 2733  "lod"
+                              Name 2869  "levels"
+                              Name 2938  "samples"
+                              Name 2952  "texel"
+                              Name 2955  "i1D"
+                              Name 2964  "i2D"
+                              Name 2973  "i3D"
+                              Name 2982  "i2DRect"
+                              Name 2991  "iCube"
+                              Name 3000  "iBuffer"
+                              Name 3009  "i1DArray"
+                              Name 3018  "i2DArray"
+                              Name 3027  "iCubeArray"
+                              Name 3036  "i2DMS"
+                              Name 3045  "i2DMSArray"
+                              Name 3099  "texel"
+                              Name 3102  "ResType"
+                              Name 3138  "ResType"
+                              Name 3242  "texel"
+                              Name 3322  "texel"
+                              Name 3412  "texel"
+                              Name 3468  "texel"
+                              Name 3628  "texel"
+                              Name 3742  "texel"
+                              Name 3794  "texel"
+                              Name 3832  "texel"
+                              Name 3950  "texel"
+                              Name 4022  "texel"
+                              Name 4094  "texel"
+                              Name 4146  "texel"
+                              Name 4174  "texel"
+                              Name 4202  "texel"
+                              Name 4254  "texel"
+                              Name 4257  "lodClamp"
+                              Name 4264  "f16lodClamp"
+                              Name 4391  "texel"
+                              Name 4598  "texel"
+                              Name 4674  "texel"
+                              Name 4818  "texel"
+                              Name 4962  "texel"
+                              Name 5188  "texel"
+                              Name 5280  "texel"
+                              Name 5452  "texel"
+                              Name 5454  "t1D"
+                              Name 5458  "s"
+                              Name 5474  "t2D"
+                              Name 5491  "t3D"
+                              Name 5508  "tCube"
+                              Name 5525  "sShadow"
+                              Name 5589  "t1DArray"
+                              Name 5606  "t2DArray"
+                              Name 5623  "tCubeArray"
+                              Name 5681  "t2DRect"
+                              Name 5741  "subpass"
+                              Name 5747  "subpassMS"
+                              Name 5753  "result"
+                              Name 5834  "param"
+                              Name 5913  "fragColor"
+                              Name 5917  "tBuffer"
+                              Name 5919  "t2DMS"
+                              Name 5921  "t2DMSArray"
+                              Name 5922  "bias"
+                              Decorate 125(s1D) DescriptorSet 0
+                              Decorate 125(s1D) Binding 0
+                              Decorate 128(c1) Location 0
+                              Decorate 135(f16c1) Location 11
+                              Decorate 137(f16bias) Location 16
+                              Decorate 145(s2D) DescriptorSet 0
+                              Decorate 145(s2D) Binding 1
+                              Decorate 148(c2) Location 1
+                              Decorate 156(f16c2) Location 12
+                              Decorate 165(s3D) DescriptorSet 0
+                              Decorate 165(s3D) Binding 2
+                              Decorate 169(c3) Location 2
+                              Decorate 177(f16c3) Location 13
+                              Decorate 186(sCube) DescriptorSet 0
+                              Decorate 186(sCube) Binding 4
+                              Decorate 201(s1DShadow) DescriptorSet 0
+                              Decorate 201(s1DShadow) Binding 11
+                              Decorate 215(compare) Location 4
+                              Decorate 226(s2DShadow) DescriptorSet 0
+                              Decorate 226(s2DShadow) Binding 12
+                              Decorate 247(sCubeShadow) DescriptorSet 0
+                              Decorate 247(sCubeShadow) Binding 14
+                              Decorate 251(c4) Location 3
+                              Decorate 271(s1DArray) DescriptorSet 0
+                              Decorate 271(s1DArray) Binding 7
+                              Decorate 286(s2DArray) DescriptorSet 0
+                              Decorate 286(s2DArray) Binding 8
+                              Decorate 301(sCubeArray) DescriptorSet 0
+                              Decorate 301(sCubeArray) Binding 9
+                              Decorate 309(f16c4) Location 14
+                              Decorate 318(s1DArrayShadow) DescriptorSet 0
+                              Decorate 318(s1DArrayShadow) Binding 15
+                              Decorate 339(s2DArrayShadow) DescriptorSet 0
+                              Decorate 339(s2DArrayShadow) Binding 16
+                              Decorate 359(s2DRect) DescriptorSet 0
+                              Decorate 359(s2DRect) Binding 3
+                              Decorate 373(s2DRectShadow) DescriptorSet 0
+                              Decorate 373(s2DRectShadow) Binding 13
+                              Decorate 393(sCubeArrayShadow) DescriptorSet 0
+                              Decorate 393(sCubeArrayShadow) Binding 17
+                              Decorate 565(lod) Location 5
+                              Decorate 572(f16lod) Location 15
+                              Decorate 1300(sBuffer) DescriptorSet 0
+                              Decorate 1300(sBuffer) Binding 5
+                              Decorate 1311(s2DMS) DescriptorSet 0
+                              Decorate 1311(s2DMS) Binding 6
+                              Decorate 1322(s2DMSArray) DescriptorSet 0
+                              Decorate 1322(s2DMSArray) Binding 10
+                              Decorate 1393(dPdxy1) Location 8
+                              Decorate 1401(f16dPdxy1) Location 18
+                              Decorate 1409(dPdxy2) Location 9
+                              Decorate 1417(f16dPdxy2) Location 19
+                              Decorate 1425(dPdxy3) Location 10
+                              Decorate 1433(f16dPdxy3) Location 20
+                              Decorate 2955(i1D) DescriptorSet 1
+                              Decorate 2955(i1D) Binding 0
+                              Decorate 2964(i2D) DescriptorSet 1
+                              Decorate 2964(i2D) Binding 1
+                              Decorate 2973(i3D) DescriptorSet 1
+                              Decorate 2973(i3D) Binding 2
+                              Decorate 2982(i2DRect) DescriptorSet 1
+                              Decorate 2982(i2DRect) Binding 3
+                              Decorate 2991(iCube) DescriptorSet 1
+                              Decorate 2991(iCube) Binding 4
+                              Decorate 3000(iBuffer) DescriptorSet 1
+                              Decorate 3000(iBuffer) Binding 8
+                              Decorate 3009(i1DArray) DescriptorSet 1
+                              Decorate 3009(i1DArray) Binding 5
+                              Decorate 3018(i2DArray) DescriptorSet 1
+                              Decorate 3018(i2DArray) Binding 6
+                              Decorate 3027(iCubeArray) DescriptorSet 1
+                              Decorate 3027(iCubeArray) Binding 7
+                              Decorate 3036(i2DMS) DescriptorSet 1
+                              Decorate 3036(i2DMS) Binding 9
+                              Decorate 3045(i2DMSArray) DescriptorSet 1
+                              Decorate 3045(i2DMSArray) Binding 10
+                              Decorate 4257(lodClamp) Location 7
+                              Decorate 4264(f16lodClamp) Location 17
+                              Decorate 5454(t1D) DescriptorSet 2
+                              Decorate 5454(t1D) Binding 0
+                              Decorate 5458(s) DescriptorSet 2
+                              Decorate 5458(s) Binding 11
+                              Decorate 5474(t2D) DescriptorSet 2
+                              Decorate 5474(t2D) Binding 1
+                              Decorate 5491(t3D) DescriptorSet 2
+                              Decorate 5491(t3D) Binding 2
+                              Decorate 5508(tCube) DescriptorSet 2
+                              Decorate 5508(tCube) Binding 4
+                              Decorate 5525(sShadow) DescriptorSet 2
+                              Decorate 5525(sShadow) Binding 12
+                              Decorate 5589(t1DArray) DescriptorSet 2
+                              Decorate 5589(t1DArray) Binding 5
+                              Decorate 5606(t2DArray) DescriptorSet 2
+                              Decorate 5606(t2DArray) Binding 6
+                              Decorate 5623(tCubeArray) DescriptorSet 2
+                              Decorate 5623(tCubeArray) Binding 7
+                              Decorate 5681(t2DRect) DescriptorSet 2
+                              Decorate 5681(t2DRect) Binding 3
+                              Decorate 5741(subpass) DescriptorSet 3
+                              Decorate 5741(subpass) Binding 0
+                              Decorate 5741(subpass) InputAttachmentIndex 0
+                              Decorate 5747(subpassMS) DescriptorSet 3
+                              Decorate 5747(subpassMS) Binding 1
+                              Decorate 5747(subpassMS) InputAttachmentIndex 0
+                              Decorate 5913(fragColor) Location 0
+                              Decorate 5917(tBuffer) DescriptorSet 2
+                              Decorate 5917(tBuffer) Binding 8
+                              Decorate 5919(t2DMS) DescriptorSet 2
+                              Decorate 5919(t2DMS) Binding 9
+                              Decorate 5921(t2DMSArray) DescriptorSet 2
+                              Decorate 5921(t2DMSArray) Binding 10
+                              Decorate 5922(bias) Location 6
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 16
+               7:             TypeVector 6(float) 4
+               8:             TypeFunction 7(fvec4)
+              47:             TypeInt 32 1
+              48:             TypeVector 47(int) 4
+              49:             TypeFunction 48(ivec4)
+              52:             TypeFloat 32
+              53:             TypeVector 52(float) 2
+              54:             TypeFunction 53(fvec2)
+              57:             TypeFunction 47(int)
+              64:             TypePointer Function 7(fvec4)
+              65:             TypeFunction 2 64(ptr)
+             120:    6(float) Constant 0
+             121:    7(fvec4) ConstantComposite 120 120 120 120
+             122:             TypeImage 6(float) 1D sampled format:Unknown
+             123:             TypeSampledImage 122
+             124:             TypePointer UniformConstant 123
+        125(s1D):    124(ptr) Variable UniformConstant
+             127:             TypePointer Input 52(float)
+         128(c1):    127(ptr) Variable Input
+             134:             TypePointer Input 6(float)
+      135(f16c1):    134(ptr) Variable Input
+    137(f16bias):    134(ptr) Variable Input
+             142:             TypeImage 6(float) 2D sampled format:Unknown
+             143:             TypeSampledImage 142
+             144:             TypePointer UniformConstant 143
+        145(s2D):    144(ptr) Variable UniformConstant
+             147:             TypePointer Input 53(fvec2)
+         148(c2):    147(ptr) Variable Input
+             154:             TypeVector 6(float) 2
+             155:             TypePointer Input 154(fvec2)
+      156(f16c2):    155(ptr) Variable Input
+             162:             TypeImage 6(float) 3D sampled format:Unknown
+             163:             TypeSampledImage 162
+             164:             TypePointer UniformConstant 163
+        165(s3D):    164(ptr) Variable UniformConstant
+             167:             TypeVector 52(float) 3
+             168:             TypePointer Input 167(fvec3)
+         169(c3):    168(ptr) Variable Input
+             175:             TypeVector 6(float) 3
+             176:             TypePointer Input 175(fvec3)
+      177(f16c3):    176(ptr) Variable Input
+             183:             TypeImage 6(float) Cube sampled format:Unknown
+             184:             TypeSampledImage 183
+             185:             TypePointer UniformConstant 184
+      186(sCube):    185(ptr) Variable UniformConstant
+             198:             TypeImage 6(float) 1D depth sampled format:Unknown
+             199:             TypeSampledImage 198
+             200:             TypePointer UniformConstant 199
+  201(s1DShadow):    200(ptr) Variable UniformConstant
+             206:             TypeInt 32 0
+             207:    206(int) Constant 0
+             208:             TypePointer Function 6(float)
+    215(compare):    127(ptr) Variable Input
+             223:             TypeImage 6(float) 2D depth sampled format:Unknown
+             224:             TypeSampledImage 223
+             225:             TypePointer UniformConstant 224
+  226(s2DShadow):    225(ptr) Variable UniformConstant
+             244:             TypeImage 6(float) Cube depth sampled format:Unknown
+             245:             TypeSampledImage 244
+             246:             TypePointer UniformConstant 245
+247(sCubeShadow):    246(ptr) Variable UniformConstant
+             249:             TypeVector 52(float) 4
+             250:             TypePointer Input 249(fvec4)
+         251(c4):    250(ptr) Variable Input
+             268:             TypeImage 6(float) 1D array sampled format:Unknown
+             269:             TypeSampledImage 268
+             270:             TypePointer UniformConstant 269
+   271(s1DArray):    270(ptr) Variable UniformConstant
+             283:             TypeImage 6(float) 2D array sampled format:Unknown
+             284:             TypeSampledImage 283
+             285:             TypePointer UniformConstant 284
+   286(s2DArray):    285(ptr) Variable UniformConstant
+             298:             TypeImage 6(float) Cube array sampled format:Unknown
+             299:             TypeSampledImage 298
+             300:             TypePointer UniformConstant 299
+ 301(sCubeArray):    300(ptr) Variable UniformConstant
+             308:             TypePointer Input 7(fvec4)
+      309(f16c4):    308(ptr) Variable Input
+             315:             TypeImage 6(float) 1D depth array sampled format:Unknown
+             316:             TypeSampledImage 315
+             317:             TypePointer UniformConstant 316
+318(s1DArrayShadow):    317(ptr) Variable UniformConstant
+             336:             TypeImage 6(float) 2D depth array sampled format:Unknown
+             337:             TypeSampledImage 336
+             338:             TypePointer UniformConstant 337
+339(s2DArrayShadow):    338(ptr) Variable UniformConstant
+             356:             TypeImage 6(float) Rect sampled format:Unknown
+             357:             TypeSampledImage 356
+             358:             TypePointer UniformConstant 357
+    359(s2DRect):    358(ptr) Variable UniformConstant
+             370:             TypeImage 6(float) Rect depth sampled format:Unknown
+             371:             TypeSampledImage 370
+             372:             TypePointer UniformConstant 371
+373(s2DRectShadow):    372(ptr) Variable UniformConstant
+             390:             TypeImage 6(float) Cube depth array sampled format:Unknown
+             391:             TypeSampledImage 390
+             392:             TypePointer UniformConstant 391
+393(sCubeArrayShadow):    392(ptr) Variable UniformConstant
+        565(lod):    127(ptr) Variable Input
+     572(f16lod):    134(ptr) Variable Input
+             709:     47(int) Constant 1
+             721:             TypeVector 47(int) 2
+             722:  721(ivec2) ConstantComposite 709 709
+             734:             TypeVector 47(int) 3
+             735:  734(ivec3) ConstantComposite 709 709 709
+            1297:             TypeImage 6(float) Buffer sampled format:Unknown
+            1298:             TypeSampledImage 1297
+            1299:             TypePointer UniformConstant 1298
+   1300(sBuffer):   1299(ptr) Variable UniformConstant
+            1308:             TypeImage 6(float) 2D multi-sampled sampled format:Unknown
+            1309:             TypeSampledImage 1308
+            1310:             TypePointer UniformConstant 1309
+     1311(s2DMS):   1310(ptr) Variable UniformConstant
+            1319:             TypeImage 6(float) 2D array multi-sampled sampled format:Unknown
+            1320:             TypeSampledImage 1319
+            1321:             TypePointer UniformConstant 1320
+1322(s2DMSArray):   1321(ptr) Variable UniformConstant
+            1326:     47(int) Constant 2
+    1393(dPdxy1):    127(ptr) Variable Input
+ 1401(f16dPdxy1):    134(ptr) Variable Input
+    1409(dPdxy2):    147(ptr) Variable Input
+ 1417(f16dPdxy2):    155(ptr) Variable Input
+    1425(dPdxy3):    168(ptr) Variable Input
+ 1433(f16dPdxy3):    176(ptr) Variable Input
+            2187:     47(int) Constant 0
+            2378:    206(int) Constant 4
+            2379:             TypeArray 721(ivec2) 2378
+            2380:        2379 ConstantComposite 722 722 722 722
+            2558:             TypePointer Function 48(ivec4)
+            2560:   48(ivec4) ConstantComposite 2187 2187 2187 2187
+            2566:             TypePointer Function 47(int)
+            2732:             TypePointer Function 53(fvec2)
+            2734:   52(float) Constant 0
+            2735:   53(fvec2) ConstantComposite 2734 2734
+            2953:             TypeImage 6(float) 1D nonsampled format:Rgba16f
+            2954:             TypePointer UniformConstant 2953
+       2955(i1D):   2954(ptr) Variable UniformConstant
+            2962:             TypeImage 6(float) 2D nonsampled format:Rgba16f
+            2963:             TypePointer UniformConstant 2962
+       2964(i2D):   2963(ptr) Variable UniformConstant
+            2971:             TypeImage 6(float) 3D nonsampled format:Rgba16f
+            2972:             TypePointer UniformConstant 2971
+       2973(i3D):   2972(ptr) Variable UniformConstant
+            2980:             TypeImage 6(float) Rect nonsampled format:Rgba16f
+            2981:             TypePointer UniformConstant 2980
+   2982(i2DRect):   2981(ptr) Variable UniformConstant
+            2989:             TypeImage 6(float) Cube nonsampled format:Rgba16f
+            2990:             TypePointer UniformConstant 2989
+     2991(iCube):   2990(ptr) Variable UniformConstant
+            2998:             TypeImage 6(float) Buffer nonsampled format:Rgba16f
+            2999:             TypePointer UniformConstant 2998
+   3000(iBuffer):   2999(ptr) Variable UniformConstant
+            3007:             TypeImage 6(float) 1D array nonsampled format:Rgba16f
+            3008:             TypePointer UniformConstant 3007
+  3009(i1DArray):   3008(ptr) Variable UniformConstant
+            3016:             TypeImage 6(float) 2D array nonsampled format:Rgba16f
+            3017:             TypePointer UniformConstant 3016
+  3018(i2DArray):   3017(ptr) Variable UniformConstant
+            3025:             TypeImage 6(float) Cube array nonsampled format:Rgba16f
+            3026:             TypePointer UniformConstant 3025
+3027(iCubeArray):   3026(ptr) Variable UniformConstant
+            3034:             TypeImage 6(float) 2D multi-sampled nonsampled format:Rgba16f
+            3035:             TypePointer UniformConstant 3034
+     3036(i2DMS):   3035(ptr) Variable UniformConstant
+            3043:             TypeImage 6(float) 2D array multi-sampled nonsampled format:Rgba16f
+            3044:             TypePointer UniformConstant 3043
+3045(i2DMSArray):   3044(ptr) Variable UniformConstant
+   3102(ResType):             TypeStruct 47(int) 7(fvec4)
+   3138(ResType):             TypeStruct 47(int) 6(float)
+  4257(lodClamp):    127(ptr) Variable Input
+4264(f16lodClamp):    134(ptr) Variable Input
+            5453:             TypePointer UniformConstant 122
+       5454(t1D):   5453(ptr) Variable UniformConstant
+            5456:             TypeSampler
+            5457:             TypePointer UniformConstant 5456
+         5458(s):   5457(ptr) Variable UniformConstant
+            5473:             TypePointer UniformConstant 142
+       5474(t2D):   5473(ptr) Variable UniformConstant
+            5490:             TypePointer UniformConstant 162
+       5491(t3D):   5490(ptr) Variable UniformConstant
+            5507:             TypePointer UniformConstant 183
+     5508(tCube):   5507(ptr) Variable UniformConstant
+   5525(sShadow):   5457(ptr) Variable UniformConstant
+            5588:             TypePointer UniformConstant 268
+  5589(t1DArray):   5588(ptr) Variable UniformConstant
+            5605:             TypePointer UniformConstant 283
+  5606(t2DArray):   5605(ptr) Variable UniformConstant
+            5622:             TypePointer UniformConstant 298
+5623(tCubeArray):   5622(ptr) Variable UniformConstant
+            5680:             TypePointer UniformConstant 356
+   5681(t2DRect):   5680(ptr) Variable UniformConstant
+            5739:             TypeImage 6(float) SubpassData nonsampled format:Unknown
+            5740:             TypePointer UniformConstant 5739
+   5741(subpass):   5740(ptr) Variable UniformConstant
+            5743:  721(ivec2) ConstantComposite 2187 2187
+            5745:             TypeImage 6(float) SubpassData multi-sampled nonsampled format:Unknown
+            5746:             TypePointer UniformConstant 5745
+ 5747(subpassMS):   5746(ptr) Variable UniformConstant
+            5912:             TypePointer Output 249(fvec4)
+ 5913(fragColor):   5912(ptr) Variable Output
+            5916:             TypePointer UniformConstant 1297
+   5917(tBuffer):   5916(ptr) Variable UniformConstant
+            5918:             TypePointer UniformConstant 1308
+     5919(t2DMS):   5918(ptr) Variable UniformConstant
+            5920:             TypePointer UniformConstant 1319
+5921(t2DMSArray):   5920(ptr) Variable UniformConstant
+      5922(bias):    127(ptr) Variable Input
+         4(main):           2 Function None 3
+               5:             Label
+    5753(result):     64(ptr) Variable Function
+     5834(param):     64(ptr) Variable Function
+                              Store 5753(result) 121
+            5754:    7(fvec4) FunctionCall 9(testTexture()
+            5755:    7(fvec4) Load 5753(result)
+            5756:    7(fvec4) FAdd 5755 5754
+                              Store 5753(result) 5756
+            5757:    7(fvec4) FunctionCall 11(testTextureProj()
+            5758:    7(fvec4) Load 5753(result)
+            5759:    7(fvec4) FAdd 5758 5757
+                              Store 5753(result) 5759
+            5760:    7(fvec4) FunctionCall 13(testTextureLod()
+            5761:    7(fvec4) Load 5753(result)
+            5762:    7(fvec4) FAdd 5761 5760
+                              Store 5753(result) 5762
+            5763:    7(fvec4) FunctionCall 15(testTextureOffset()
+            5764:    7(fvec4) Load 5753(result)
+            5765:    7(fvec4) FAdd 5764 5763
+                              Store 5753(result) 5765
+            5766:    7(fvec4) FunctionCall 19(testTextureLodOffset()
+            5767:    7(fvec4) Load 5753(result)
+            5768:    7(fvec4) FAdd 5767 5766
+                              Store 5753(result) 5768
+            5769:    7(fvec4) FunctionCall 21(testTextureProjLodOffset()
+            5770:    7(fvec4) Load 5753(result)
+            5771:    7(fvec4) FAdd 5770 5769
+                              Store 5753(result) 5771
+            5772:    7(fvec4) FunctionCall 23(testTexelFetch()
+            5773:    7(fvec4) Load 5753(result)
+            5774:    7(fvec4) FAdd 5773 5772
+                              Store 5753(result) 5774
+            5775:    7(fvec4) FunctionCall 25(testTexelFetchOffset()
+            5776:    7(fvec4) Load 5753(result)
+            5777:    7(fvec4) FAdd 5776 5775
+                              Store 5753(result) 5777
+            5778:    7(fvec4) FunctionCall 27(testTextureGrad()
+            5779:    7(fvec4) Load 5753(result)
+            5780:    7(fvec4) FAdd 5779 5778
+                              Store 5753(result) 5780
+            5781:    7(fvec4) FunctionCall 29(testTextureGradOffset()
+            5782:    7(fvec4) Load 5753(result)
+            5783:    7(fvec4) FAdd 5782 5781
+                              Store 5753(result) 5783
+            5784:    7(fvec4) FunctionCall 31(testTextureProjGrad()
+            5785:    7(fvec4) Load 5753(result)
+            5786:    7(fvec4) FAdd 5785 5784
+                              Store 5753(result) 5786
+            5787:    7(fvec4) FunctionCall 33(testTextureProjGradoffset()
+            5788:    7(fvec4) Load 5753(result)
+            5789:    7(fvec4) FAdd 5788 5787
+                              Store 5753(result) 5789
+            5790:    7(fvec4) FunctionCall 35(testTextureGather()
+            5791:    7(fvec4) Load 5753(result)
+            5792:    7(fvec4) FAdd 5791 5790
+                              Store 5753(result) 5792
+            5793:    7(fvec4) FunctionCall 37(testTextureGatherOffset()
+            5794:    7(fvec4) Load 5753(result)
+            5795:    7(fvec4) FAdd 5794 5793
+                              Store 5753(result) 5795
+            5796:    7(fvec4) FunctionCall 39(testTextureGatherOffsets()
+            5797:    7(fvec4) Load 5753(result)
+            5798:    7(fvec4) FAdd 5797 5796
+                              Store 5753(result) 5798
+            5799:    7(fvec4) FunctionCall 41(testTextureGatherLod()
+            5800:    7(fvec4) Load 5753(result)
+            5801:    7(fvec4) FAdd 5800 5799
+                              Store 5753(result) 5801
+            5802:    7(fvec4) FunctionCall 43(testTextureGatherLodOffset()
+            5803:    7(fvec4) Load 5753(result)
+            5804:    7(fvec4) FAdd 5803 5802
+                              Store 5753(result) 5804
+            5805:    7(fvec4) FunctionCall 45(testTextureGatherLodOffsets()
+            5806:    7(fvec4) Load 5753(result)
+            5807:    7(fvec4) FAdd 5806 5805
+                              Store 5753(result) 5807
+            5808:   48(ivec4) FunctionCall 50(testTextureSize()
+            5809:    7(fvec4) ConvertSToF 5808
+            5810:    7(fvec4) Load 5753(result)
+            5811:    7(fvec4) FAdd 5810 5809
+                              Store 5753(result) 5811
+            5812:   53(fvec2) FunctionCall 55(testTextureQueryLod()
+            5813:  154(fvec2) FConvert 5812
+            5814:    7(fvec4) Load 5753(result)
+            5815:  154(fvec2) VectorShuffle 5814 5814 0 1
+            5816:  154(fvec2) FAdd 5815 5813
+            5817:    7(fvec4) Load 5753(result)
+            5818:    7(fvec4) VectorShuffle 5817 5816 4 5 2 3
+                              Store 5753(result) 5818
+            5819:     47(int) FunctionCall 58(testTextureQueryLevels()
+            5820:    6(float) ConvertSToF 5819
+            5821:    208(ptr) AccessChain 5753(result) 207
+            5822:    6(float) Load 5821
+            5823:    6(float) FAdd 5822 5820
+            5824:    208(ptr) AccessChain 5753(result) 207
+                              Store 5824 5823
+            5825:     47(int) FunctionCall 60(testTextureSamples()
+            5826:    6(float) ConvertSToF 5825
+            5827:    208(ptr) AccessChain 5753(result) 207
+            5828:    6(float) Load 5827
+            5829:    6(float) FAdd 5828 5826
+            5830:    208(ptr) AccessChain 5753(result) 207
+                              Store 5830 5829
+            5831:    7(fvec4) FunctionCall 62(testImageLoad()
+            5832:    7(fvec4) Load 5753(result)
+            5833:    7(fvec4) FAdd 5832 5831
+                              Store 5753(result) 5833
+            5835:    7(fvec4) Load 5753(result)
+                              Store 5834(param) 5835
+            5836:           2 FunctionCall 67(testImageStore(vf164;) 5834(param)
+            5837:    7(fvec4) FunctionCall 69(testSparseTexture()
+            5838:    7(fvec4) Load 5753(result)
+            5839:    7(fvec4) FAdd 5838 5837
+                              Store 5753(result) 5839
+            5840:    7(fvec4) FunctionCall 71(testSparseTextureLod()
+            5841:    7(fvec4) Load 5753(result)
+            5842:    7(fvec4) FAdd 5841 5840
+                              Store 5753(result) 5842
+            5843:    7(fvec4) FunctionCall 73(testSparseTextureOffset()
+            5844:    7(fvec4) Load 5753(result)
+            5845:    7(fvec4) FAdd 5844 5843
+                              Store 5753(result) 5845
+            5846:    7(fvec4) FunctionCall 75(testSparseTextureLodOffset()
+            5847:    7(fvec4) Load 5753(result)
+            5848:    7(fvec4) FAdd 5847 5846
+                              Store 5753(result) 5848
+            5849:    7(fvec4) FunctionCall 77(testSparseTextureGrad()
+            5850:    7(fvec4) Load 5753(result)
+            5851:    7(fvec4) FAdd 5850 5849
+                              Store 5753(result) 5851
+            5852:    7(fvec4) FunctionCall 79(testSparseTextureGradOffset()
+            5853:    7(fvec4) Load 5753(result)
+            5854:    7(fvec4) FAdd 5853 5852
+                              Store 5753(result) 5854
+            5855:    7(fvec4) FunctionCall 81(testSparseTexelFetch()
+            5856:    7(fvec4) Load 5753(result)
+            5857:    7(fvec4) FAdd 5856 5855
+                              Store 5753(result) 5857
+            5858:    7(fvec4) FunctionCall 83(testSparseTexelFetchOffset()
+            5859:    7(fvec4) Load 5753(result)
+            5860:    7(fvec4) FAdd 5859 5858
+                              Store 5753(result) 5860
+            5861:    7(fvec4) FunctionCall 85(testSparseTextureGather()
+            5862:    7(fvec4) Load 5753(result)
+            5863:    7(fvec4) FAdd 5862 5861
+                              Store 5753(result) 5863
+            5864:    7(fvec4) FunctionCall 87(testSparseTextureGatherOffset()
+            5865:    7(fvec4) Load 5753(result)
+            5866:    7(fvec4) FAdd 5865 5864
+                              Store 5753(result) 5866
+            5867:    7(fvec4) FunctionCall 89(testSparseTextureGatherOffsets()
+            5868:    7(fvec4) Load 5753(result)
+            5869:    7(fvec4) FAdd 5868 5867
+                              Store 5753(result) 5869
+            5870:    7(fvec4) FunctionCall 91(testSparseTextureGatherLod()
+            5871:    7(fvec4) Load 5753(result)
+            5872:    7(fvec4) FAdd 5871 5870
+                              Store 5753(result) 5872
+            5873:    7(fvec4) FunctionCall 93(testSparseTextureGatherLodOffset()
+            5874:    7(fvec4) Load 5753(result)
+            5875:    7(fvec4) FAdd 5874 5873
+                              Store 5753(result) 5875
+            5876:    7(fvec4) FunctionCall 95(testSparseTextureGatherLodOffsets()
+            5877:    7(fvec4) Load 5753(result)
+            5878:    7(fvec4) FAdd 5877 5876
+                              Store 5753(result) 5878
+            5879:    7(fvec4) FunctionCall 97(testSparseImageLoad()
+            5880:    7(fvec4) Load 5753(result)
+            5881:    7(fvec4) FAdd 5880 5879
+                              Store 5753(result) 5881
+            5882:    7(fvec4) FunctionCall 99(testSparseTextureClamp()
+            5883:    7(fvec4) Load 5753(result)
+            5884:    7(fvec4) FAdd 5883 5882
+                              Store 5753(result) 5884
+            5885:    7(fvec4) FunctionCall 101(testTextureClamp()
+            5886:    7(fvec4) Load 5753(result)
+            5887:    7(fvec4) FAdd 5886 5885
+                              Store 5753(result) 5887
+            5888:    7(fvec4) FunctionCall 103(testSparseTextureOffsetClamp()
+            5889:    7(fvec4) Load 5753(result)
+            5890:    7(fvec4) FAdd 5889 5888
+                              Store 5753(result) 5890
+            5891:    7(fvec4) FunctionCall 105(testTextureOffsetClamp()
+            5892:    7(fvec4) Load 5753(result)
+            5893:    7(fvec4) FAdd 5892 5891
+                              Store 5753(result) 5893
+            5894:    7(fvec4) FunctionCall 77(testSparseTextureGrad()
+            5895:    7(fvec4) Load 5753(result)
+            5896:    7(fvec4) FAdd 5895 5894
+                              Store 5753(result) 5896
+            5897:    7(fvec4) FunctionCall 27(testTextureGrad()
+            5898:    7(fvec4) Load 5753(result)
+            5899:    7(fvec4) FAdd 5898 5897
+                              Store 5753(result) 5899
+            5900:    7(fvec4) FunctionCall 111(testSparseTextureGradOffsetClamp()
+            5901:    7(fvec4) Load 5753(result)
+            5902:    7(fvec4) FAdd 5901 5900
+                              Store 5753(result) 5902
+            5903:    7(fvec4) FunctionCall 113(testTextureGradOffsetClamp()
+            5904:    7(fvec4) Load 5753(result)
+            5905:    7(fvec4) FAdd 5904 5903
+                              Store 5753(result) 5905
+            5906:    7(fvec4) FunctionCall 115(testCombinedTextureSampler()
+            5907:    7(fvec4) Load 5753(result)
+            5908:    7(fvec4) FAdd 5907 5906
+                              Store 5753(result) 5908
+            5909:    7(fvec4) FunctionCall 117(testSubpassLoad()
+            5910:    7(fvec4) Load 5753(result)
+            5911:    7(fvec4) FAdd 5910 5909
+                              Store 5753(result) 5911
+            5914:    7(fvec4) Load 5753(result)
+            5915:  249(fvec4) FConvert 5914
+                              Store 5913(fragColor) 5915
+                              Return
+                              FunctionEnd
+ 9(testTexture():    7(fvec4) Function None 8
+              10:             Label
+      119(texel):     64(ptr) Variable Function
+                              Store 119(texel) 121
+             126:         123 Load 125(s1D)
+             129:   52(float) Load 128(c1)
+             130:    7(fvec4) ImageSampleImplicitLod 126 129
+             131:    7(fvec4) Load 119(texel)
+             132:    7(fvec4) FAdd 131 130
+                              Store 119(texel) 132
+             133:         123 Load 125(s1D)
+             136:    6(float) Load 135(f16c1)
+             138:    6(float) Load 137(f16bias)
+             139:    7(fvec4) ImageSampleImplicitLod 133 136 Bias 138
+             140:    7(fvec4) Load 119(texel)
+             141:    7(fvec4) FAdd 140 139
+                              Store 119(texel) 141
+             146:         143 Load 145(s2D)
+             149:   53(fvec2) Load 148(c2)
+             150:    7(fvec4) ImageSampleImplicitLod 146 149
+             151:    7(fvec4) Load 119(texel)
+             152:    7(fvec4) FAdd 151 150
+                              Store 119(texel) 152
+             153:         143 Load 145(s2D)
+             157:  154(fvec2) Load 156(f16c2)
+             158:    6(float) Load 137(f16bias)
+             159:    7(fvec4) ImageSampleImplicitLod 153 157 Bias 158
+             160:    7(fvec4) Load 119(texel)
+             161:    7(fvec4) FAdd 160 159
+                              Store 119(texel) 161
+             166:         163 Load 165(s3D)
+             170:  167(fvec3) Load 169(c3)
+             171:    7(fvec4) ImageSampleImplicitLod 166 170
+             172:    7(fvec4) Load 119(texel)
+             173:    7(fvec4) FAdd 172 171
+                              Store 119(texel) 173
+             174:         163 Load 165(s3D)
+             178:  175(fvec3) Load 177(f16c3)
+             179:    6(float) Load 137(f16bias)
+             180:    7(fvec4) ImageSampleImplicitLod 174 178 Bias 179
+             181:    7(fvec4) Load 119(texel)
+             182:    7(fvec4) FAdd 181 180
+                              Store 119(texel) 182
+             187:         184 Load 186(sCube)
+             188:  167(fvec3) Load 169(c3)
+             189:    7(fvec4) ImageSampleImplicitLod 187 188
+             190:    7(fvec4) Load 119(texel)
+             191:    7(fvec4) FAdd 190 189
+                              Store 119(texel) 191
+             192:         184 Load 186(sCube)
+             193:  175(fvec3) Load 177(f16c3)
+             194:    6(float) Load 137(f16bias)
+             195:    7(fvec4) ImageSampleImplicitLod 192 193 Bias 194
+             196:    7(fvec4) Load 119(texel)
+             197:    7(fvec4) FAdd 196 195
+                              Store 119(texel) 197
+             202:         199 Load 201(s1DShadow)
+             203:  167(fvec3) Load 169(c3)
+             204:   52(float) CompositeExtract 203 2
+             205:    6(float) ImageSampleDrefImplicitLod 202 203 204
+             209:    208(ptr) AccessChain 119(texel) 207
+             210:    6(float) Load 209
+             211:    6(float) FAdd 210 205
+             212:    208(ptr) AccessChain 119(texel) 207
+                              Store 212 211
+             213:         199 Load 201(s1DShadow)
+             214:  154(fvec2) Load 156(f16c2)
+             216:   52(float) Load 215(compare)
+             217:    6(float) Load 137(f16bias)
+             218:    6(float) ImageSampleDrefImplicitLod 213 214 216 Bias 217
+             219:    208(ptr) AccessChain 119(texel) 207
+             220:    6(float) Load 219
+             221:    6(float) FAdd 220 218
+             222:    208(ptr) AccessChain 119(texel) 207
+                              Store 222 221
+             227:         224 Load 226(s2DShadow)
+             228:  167(fvec3) Load 169(c3)
+             229:   52(float) CompositeExtract 228 2
+             230:    6(float) ImageSampleDrefImplicitLod 227 228 229
+             231:    208(ptr) AccessChain 119(texel) 207
+             232:    6(float) Load 231
+             233:    6(float) FAdd 232 230
+             234:    208(ptr) AccessChain 119(texel) 207
+                              Store 234 233
+             235:         224 Load 226(s2DShadow)
+             236:  154(fvec2) Load 156(f16c2)
+             237:   52(float) Load 215(compare)
+             238:    6(float) Load 137(f16bias)
+             239:    6(float) ImageSampleDrefImplicitLod 235 236 237 Bias 238
+             240:    208(ptr) AccessChain 119(texel) 207
+             241:    6(float) Load 240
+             242:    6(float) FAdd 241 239
+             243:    208(ptr) AccessChain 119(texel) 207
+                              Store 243 242
+             248:         245 Load 247(sCubeShadow)
+             252:  249(fvec4) Load 251(c4)
+             253:   52(float) CompositeExtract 252 3
+             254:    6(float) ImageSampleDrefImplicitLod 248 252 253
+             255:    208(ptr) AccessChain 119(texel) 207
+             256:    6(float) Load 255
+             257:    6(float) FAdd 256 254
+             258:    208(ptr) AccessChain 119(texel) 207
+                              Store 258 257
+             259:         245 Load 247(sCubeShadow)
+             260:  175(fvec3) Load 177(f16c3)
+             261:   52(float) Load 215(compare)
+             262:    6(float) Load 137(f16bias)
+             263:    6(float) ImageSampleDrefImplicitLod 259 260 261 Bias 262
+             264:    208(ptr) AccessChain 119(texel) 207
+             265:    6(float) Load 264
+             266:    6(float) FAdd 265 263
+             267:    208(ptr) AccessChain 119(texel) 207
+                              Store 267 266
+             272:         269 Load 271(s1DArray)
+             273:   53(fvec2) Load 148(c2)
+             274:    7(fvec4) ImageSampleImplicitLod 272 273
+             275:    7(fvec4) Load 119(texel)
+             276:    7(fvec4) FAdd 275 274
+                              Store 119(texel) 276
+             277:         269 Load 271(s1DArray)
+             278:  154(fvec2) Load 156(f16c2)
+             279:    6(float) Load 137(f16bias)
+             280:    7(fvec4) ImageSampleImplicitLod 277 278 Bias 279
+             281:    7(fvec4) Load 119(texel)
+             282:    7(fvec4) FAdd 281 280
+                              Store 119(texel) 282
+             287:         284 Load 286(s2DArray)
+             288:  167(fvec3) Load 169(c3)
+             289:    7(fvec4) ImageSampleImplicitLod 287 288
+             290:    7(fvec4) Load 119(texel)
+             291:    7(fvec4) FAdd 290 289
+                              Store 119(texel) 291
+             292:         284 Load 286(s2DArray)
+             293:  175(fvec3) Load 177(f16c3)
+             294:    6(float) Load 137(f16bias)
+             295:    7(fvec4) ImageSampleImplicitLod 292 293 Bias 294
+             296:    7(fvec4) Load 119(texel)
+             297:    7(fvec4) FAdd 296 295
+                              Store 119(texel) 297
+             302:         299 Load 301(sCubeArray)
+             303:  249(fvec4) Load 251(c4)
+             304:    7(fvec4) ImageSampleImplicitLod 302 303
+             305:    7(fvec4) Load 119(texel)
+             306:    7(fvec4) FAdd 305 304
+                              Store 119(texel) 306
+             307:         299 Load 301(sCubeArray)
+             310:    7(fvec4) Load 309(f16c4)
+             311:    6(float) Load 137(f16bias)
+             312:    7(fvec4) ImageSampleImplicitLod 307 310 Bias 311
+             313:    7(fvec4) Load 119(texel)
+             314:    7(fvec4) FAdd 313 312
+                              Store 119(texel) 314
+             319:         316 Load 318(s1DArrayShadow)
+             320:  167(fvec3) Load 169(c3)
+             321:   52(float) CompositeExtract 320 2
+             322:    6(float) ImageSampleDrefImplicitLod 319 320 321
+             323:    208(ptr) AccessChain 119(texel) 207
+             324:    6(float) Load 323
+             325:    6(float) FAdd 324 322
+             326:    208(ptr) AccessChain 119(texel) 207
+                              Store 326 325
+             327:         316 Load 318(s1DArrayShadow)
+             328:  154(fvec2) Load 156(f16c2)
+             329:   52(float) Load 215(compare)
+             330:    6(float) Load 137(f16bias)
+             331:    6(float) ImageSampleDrefImplicitLod 327 328 329 Bias 330
+             332:    208(ptr) AccessChain 119(texel) 207
+             333:    6(float) Load 332
+             334:    6(float) FAdd 333 331
+             335:    208(ptr) AccessChain 119(texel) 207
+                              Store 335 334
+             340:         337 Load 339(s2DArrayShadow)
+             341:  249(fvec4) Load 251(c4)
+             342:   52(float) CompositeExtract 341 3
+             343:    6(float) ImageSampleDrefImplicitLod 340 341 342
+             344:    208(ptr) AccessChain 119(texel) 207
+             345:    6(float) Load 344
+             346:    6(float) FAdd 345 343
+             347:    208(ptr) AccessChain 119(texel) 207
+                              Store 347 346
+             348:         337 Load 339(s2DArrayShadow)
+             349:  175(fvec3) Load 177(f16c3)
+             350:   52(float) Load 215(compare)
+             351:    6(float) ImageSampleDrefImplicitLod 348 349 350
+             352:    208(ptr) AccessChain 119(texel) 207
+             353:    6(float) Load 352
+             354:    6(float) FAdd 353 351
+             355:    208(ptr) AccessChain 119(texel) 207
+                              Store 355 354
+             360:         357 Load 359(s2DRect)
+             361:   53(fvec2) Load 148(c2)
+             362:    7(fvec4) ImageSampleImplicitLod 360 361
+             363:    7(fvec4) Load 119(texel)
+             364:    7(fvec4) FAdd 363 362
+                              Store 119(texel) 364
+             365:         357 Load 359(s2DRect)
+             366:  154(fvec2) Load 156(f16c2)
+             367:    7(fvec4) ImageSampleImplicitLod 365 366
+             368:    7(fvec4) Load 119(texel)
+             369:    7(fvec4) FAdd 368 367
+                              Store 119(texel) 369
+             374:         371 Load 373(s2DRectShadow)
+             375:  167(fvec3) Load 169(c3)
+             376:   52(float) CompositeExtract 375 2
+             377:    6(float) ImageSampleDrefImplicitLod 374 375 376
+             378:    208(ptr) AccessChain 119(texel) 207
+             379:    6(float) Load 378
+             380:    6(float) FAdd 379 377
+             381:    208(ptr) AccessChain 119(texel) 207
+                              Store 381 380
+             382:         371 Load 373(s2DRectShadow)
+             383:  154(fvec2) Load 156(f16c2)
+             384:   52(float) Load 215(compare)
+             385:    6(float) ImageSampleDrefImplicitLod 382 383 384
+             386:    208(ptr) AccessChain 119(texel) 207
+             387:    6(float) Load 386
+             388:    6(float) FAdd 387 385
+             389:    208(ptr) AccessChain 119(texel) 207
+                              Store 389 388
+             394:         391 Load 393(sCubeArrayShadow)
+             395:  249(fvec4) Load 251(c4)
+             396:   52(float) Load 215(compare)
+             397:    6(float) ImageSampleDrefImplicitLod 394 395 396
+             398:    208(ptr) AccessChain 119(texel) 207
+             399:    6(float) Load 398
+             400:    6(float) FAdd 399 397
+             401:    208(ptr) AccessChain 119(texel) 207
+                              Store 401 400
+             402:         391 Load 393(sCubeArrayShadow)
+             403:    7(fvec4) Load 309(f16c4)
+             404:   52(float) Load 215(compare)
+             405:    6(float) ImageSampleDrefImplicitLod 402 403 404
+             406:    208(ptr) AccessChain 119(texel) 207
+             407:    6(float) Load 406
+             408:    6(float) FAdd 407 405
+             409:    208(ptr) AccessChain 119(texel) 207
+                              Store 409 408
+             410:    7(fvec4) Load 119(texel)
+                              ReturnValue 410
+                              FunctionEnd
+11(testTextureProj():    7(fvec4) Function None 8
+              12:             Label
+      413(texel):     64(ptr) Variable Function
+                              Store 413(texel) 121
+             414:         123 Load 125(s1D)
+             415:   53(fvec2) Load 148(c2)
+             416:    7(fvec4) ImageSampleProjImplicitLod 414 415
+             417:    7(fvec4) Load 413(texel)
+             418:    7(fvec4) FAdd 417 416
+                              Store 413(texel) 418
+             419:         123 Load 125(s1D)
+             420:  154(fvec2) Load 156(f16c2)
+             421:    6(float) Load 137(f16bias)
+             422:    7(fvec4) ImageSampleProjImplicitLod 419 420 Bias 421
+             423:    7(fvec4) Load 413(texel)
+             424:    7(fvec4) FAdd 423 422
+                              Store 413(texel) 424
+             425:         123 Load 125(s1D)
+             426:  249(fvec4) Load 251(c4)
+             427:   52(float) CompositeExtract 426 3
+             428:  249(fvec4) CompositeInsert 427 426 1
+             429:    7(fvec4) ImageSampleProjImplicitLod 425 428
+             430:    7(fvec4) Load 413(texel)
+             431:    7(fvec4) FAdd 430 429
+                              Store 413(texel) 431
+             432:         123 Load 125(s1D)
+             433:    7(fvec4) Load 309(f16c4)
+             434:    6(float) Load 137(f16bias)
+             435:    6(float) CompositeExtract 433 3
+             436:    7(fvec4) CompositeInsert 435 433 1
+             437:    7(fvec4) ImageSampleProjImplicitLod 432 436 Bias 434
+             438:    7(fvec4) Load 413(texel)
+             439:    7(fvec4) FAdd 438 437
+                              Store 413(texel) 439
+             440:         143 Load 145(s2D)
+             441:  167(fvec3) Load 169(c3)
+             442:    7(fvec4) ImageSampleProjImplicitLod 440 441
+             443:    7(fvec4) Load 413(texel)
+             444:    7(fvec4) FAdd 443 442
+                              Store 413(texel) 444
+             445:         143 Load 145(s2D)
+             446:  175(fvec3) Load 177(f16c3)
+             447:    6(float) Load 137(f16bias)
+             448:    7(fvec4) ImageSampleProjImplicitLod 445 446 Bias 447
+             449:    7(fvec4) Load 413(texel)
+             450:    7(fvec4) FAdd 449 448
+                              Store 413(texel) 450
+             451:         143 Load 145(s2D)
+             452:  249(fvec4) Load 251(c4)
+             453:   52(float) CompositeExtract 452 3
+             454:  249(fvec4) CompositeInsert 453 452 2
+             455:    7(fvec4) ImageSampleProjImplicitLod 451 454
+             456:    7(fvec4) Load 413(texel)
+             457:    7(fvec4) FAdd 456 455
+                              Store 413(texel) 457
+             458:         143 Load 145(s2D)
+             459:    7(fvec4) Load 309(f16c4)
+             460:    6(float) Load 137(f16bias)
+             461:    6(float) CompositeExtract 459 3
+             462:    7(fvec4) CompositeInsert 461 459 2
+             463:    7(fvec4) ImageSampleProjImplicitLod 458 462 Bias 460
+             464:    7(fvec4) Load 413(texel)
+             465:    7(fvec4) FAdd 464 463
+                              Store 413(texel) 465
+             466:         163 Load 165(s3D)
+             467:  249(fvec4) Load 251(c4)
+             468:    7(fvec4) ImageSampleProjImplicitLod 466 467
+             469:    7(fvec4) Load 413(texel)
+             470:    7(fvec4) FAdd 469 468
+                              Store 413(texel) 470
+             471:         163 Load 165(s3D)
+             472:    7(fvec4) Load 309(f16c4)
+             473:    6(float) Load 137(f16bias)
+             474:    7(fvec4) ImageSampleProjImplicitLod 471 472 Bias 473
+             475:    7(fvec4) Load 413(texel)
+             476:    7(fvec4) FAdd 475 474
+                              Store 413(texel) 476
+             477:         199 Load 201(s1DShadow)
+             478:  249(fvec4) Load 251(c4)
+             479:   52(float) CompositeExtract 478 2
+             480:   52(float) CompositeExtract 478 3
+             481:  249(fvec4) CompositeInsert 480 478 1
+             482:    6(float) ImageSampleProjDrefImplicitLod 477 481 479
+             483:    208(ptr) AccessChain 413(texel) 207
+             484:    6(float) Load 483
+             485:    6(float) FAdd 484 482
+             486:    208(ptr) AccessChain 413(texel) 207
+                              Store 486 485
+             487:         199 Load 201(s1DShadow)
+             488:  175(fvec3) Load 177(f16c3)
+             489:   52(float) Load 215(compare)
+             490:    6(float) Load 137(f16bias)
+             491:    6(float) CompositeExtract 488 2
+             492:  175(fvec3) CompositeInsert 491 488 1
+             493:    6(float) ImageSampleProjDrefImplicitLod 487 492 489 Bias 490
+             494:    208(ptr) AccessChain 413(texel) 207
+             495:    6(float) Load 494
+             496:    6(float) FAdd 495 493
+             497:    208(ptr) AccessChain 413(texel) 207
+                              Store 497 496
+             498:         224 Load 226(s2DShadow)
+             499:  249(fvec4) Load 251(c4)
+             500:   52(float) CompositeExtract 499 2
+             501:   52(float) CompositeExtract 499 3
+             502:  249(fvec4) CompositeInsert 501 499 2
+             503:    6(float) ImageSampleProjDrefImplicitLod 498 502 500
+             504:    208(ptr) AccessChain 413(texel) 207
+             505:    6(float) Load 504
+             506:    6(float) FAdd 505 503
+             507:    208(ptr) AccessChain 413(texel) 207
+                              Store 507 506
+             508:         224 Load 226(s2DShadow)
+             509:  175(fvec3) Load 177(f16c3)
+             510:   52(float) Load 215(compare)
+             511:    6(float) Load 137(f16bias)
+             512:    6(float) ImageSampleProjDrefImplicitLod 508 509 510 Bias 511
+             513:    208(ptr) AccessChain 413(texel) 207
+             514:    6(float) Load 513
+             515:    6(float) FAdd 514 512
+             516:    208(ptr) AccessChain 413(texel) 207
+                              Store 516 515
+             517:         357 Load 359(s2DRect)
+             518:  167(fvec3) Load 169(c3)
+             519:    7(fvec4) ImageSampleProjImplicitLod 517 518
+             520:    7(fvec4) Load 413(texel)
+             521:    7(fvec4) FAdd 520 519
+                              Store 413(texel) 521
+             522:         357 Load 359(s2DRect)
+             523:  175(fvec3) Load 177(f16c3)
+             524:    7(fvec4) ImageSampleProjImplicitLod 522 523
+             525:    7(fvec4) Load 413(texel)
+             526:    7(fvec4) FAdd 525 524
+                              Store 413(texel) 526
+             527:         357 Load 359(s2DRect)
+             528:  249(fvec4) Load 251(c4)
+             529:   52(float) CompositeExtract 528 3
+             530:  249(fvec4) CompositeInsert 529 528 2
+             531:    7(fvec4) ImageSampleProjImplicitLod 527 530
+             532:    7(fvec4) Load 413(texel)
+             533:    7(fvec4) FAdd 532 531
+                              Store 413(texel) 533
+             534:         357 Load 359(s2DRect)
+             535:    7(fvec4) Load 309(f16c4)
+             536:    6(float) CompositeExtract 535 3
+             537:    7(fvec4) CompositeInsert 536 535 2
+             538:    7(fvec4) ImageSampleProjImplicitLod 534 537
+             539:    7(fvec4) Load 413(texel)
+             540:    7(fvec4) FAdd 539 538
+                              Store 413(texel) 540
+             541:         371 Load 373(s2DRectShadow)
+             542:  249(fvec4) Load 251(c4)
+             543:   52(float) CompositeExtract 542 2
+             544:   52(float) CompositeExtract 542 3
+             545:  249(fvec4) CompositeInsert 544 542 2
+             546:    6(float) ImageSampleProjDrefImplicitLod 541 545 543
+             547:    208(ptr) AccessChain 413(texel) 207
+             548:    6(float) Load 547
+             549:    6(float) FAdd 548 546
+             550:    208(ptr) AccessChain 413(texel) 207
+                              Store 550 549
+             551:         371 Load 373(s2DRectShadow)
+             552:  175(fvec3) Load 177(f16c3)
+             553:   52(float) Load 215(compare)
+             554:    6(float) ImageSampleProjDrefImplicitLod 551 552 553
+             555:    208(ptr) AccessChain 413(texel) 207
+             556:    6(float) Load 555
+             557:    6(float) FAdd 556 554
+             558:    208(ptr) AccessChain 413(texel) 207
+                              Store 558 557
+             559:    7(fvec4) Load 413(texel)
+                              ReturnValue 559
+                              FunctionEnd
+13(testTextureLod():    7(fvec4) Function None 8
+              14:             Label
+      562(texel):     64(ptr) Variable Function
+                              Store 562(texel) 121
+             563:         123 Load 125(s1D)
+             564:   52(float) Load 128(c1)
+             566:   52(float) Load 565(lod)
+             567:    7(fvec4) ImageSampleExplicitLod 563 564 Lod 566
+             568:    7(fvec4) Load 562(texel)
+             569:    7(fvec4) FAdd 568 567
+                              Store 562(texel) 569
+             570:         123 Load 125(s1D)
+             571:    6(float) Load 135(f16c1)
+             573:    6(float) Load 572(f16lod)
+             574:    7(fvec4) ImageSampleExplicitLod 570 571 Lod 573
+             575:    7(fvec4) Load 562(texel)
+             576:    7(fvec4) FAdd 575 574
+                              Store 562(texel) 576
+             577:         143 Load 145(s2D)
+             578:   53(fvec2) Load 148(c2)
+             579:   52(float) Load 565(lod)
+             580:    7(fvec4) ImageSampleExplicitLod 577 578 Lod 579
+             581:    7(fvec4) Load 562(texel)
+             582:    7(fvec4) FAdd 581 580
+                              Store 562(texel) 582
+             583:         143 Load 145(s2D)
+             584:  154(fvec2) Load 156(f16c2)
+             585:    6(float) Load 572(f16lod)
+             586:    7(fvec4) ImageSampleExplicitLod 583 584 Lod 585
+             587:    7(fvec4) Load 562(texel)
+             588:    7(fvec4) FAdd 587 586
+                              Store 562(texel) 588
+             589:         163 Load 165(s3D)
+             590:  167(fvec3) Load 169(c3)
+             591:   52(float) Load 565(lod)
+             592:    7(fvec4) ImageSampleExplicitLod 589 590 Lod 591
+             593:    7(fvec4) Load 562(texel)
+             594:    7(fvec4) FAdd 593 592
+                              Store 562(texel) 594
+             595:         163 Load 165(s3D)
+             596:  175(fvec3) Load 177(f16c3)
+             597:    6(float) Load 572(f16lod)
+             598:    7(fvec4) ImageSampleExplicitLod 595 596 Lod 597
+             599:    7(fvec4) Load 562(texel)
+             600:    7(fvec4) FAdd 599 598
+                              Store 562(texel) 600
+             601:         184 Load 186(sCube)
+             602:  167(fvec3) Load 169(c3)
+             603:   52(float) Load 565(lod)
+             604:    7(fvec4) ImageSampleExplicitLod 601 602 Lod 603
+             605:    7(fvec4) Load 562(texel)
+             606:    7(fvec4) FAdd 605 604
+                              Store 562(texel) 606
+             607:         184 Load 186(sCube)
+             608:  175(fvec3) Load 177(f16c3)
+             609:    6(float) Load 572(f16lod)
+             610:    7(fvec4) ImageSampleExplicitLod 607 608 Lod 609
+             611:    7(fvec4) Load 562(texel)
+             612:    7(fvec4) FAdd 611 610
+                              Store 562(texel) 612
+             613:         199 Load 201(s1DShadow)
+             614:  167(fvec3) Load 169(c3)
+             615:   52(float) Load 565(lod)
+             616:   52(float) CompositeExtract 614 2
+             617:    6(float) ImageSampleDrefExplicitLod 613 614 616 Lod 615
+             618:    208(ptr) AccessChain 562(texel) 207
+             619:    6(float) Load 618
+             620:    6(float) FAdd 619 617
+             621:    208(ptr) AccessChain 562(texel) 207
+                              Store 621 620
+             622:         199 Load 201(s1DShadow)
+             623:  154(fvec2) Load 156(f16c2)
+             624:   52(float) Load 215(compare)
+             625:    6(float) Load 572(f16lod)
+             626:    6(float) ImageSampleDrefExplicitLod 622 623 624 Lod 625
+             627:    208(ptr) AccessChain 562(texel) 207
+             628:    6(float) Load 627
+             629:    6(float) FAdd 628 626
+             630:    208(ptr) AccessChain 562(texel) 207
+                              Store 630 629
+             631:         224 Load 226(s2DShadow)
+             632:  167(fvec3) Load 169(c3)
+             633:   52(float) Load 565(lod)
+             634:   52(float) CompositeExtract 632 2
+             635:    6(float) ImageSampleDrefExplicitLod 631 632 634 Lod 633
+             636:    208(ptr) AccessChain 562(texel) 207
+             637:    6(float) Load 636
+             638:    6(float) FAdd 637 635
+             639:    208(ptr) AccessChain 562(texel) 207
+                              Store 639 638
+             640:         224 Load 226(s2DShadow)
+             641:  154(fvec2) Load 156(f16c2)
+             642:   52(float) Load 215(compare)
+             643:    6(float) Load 572(f16lod)
+             644:    6(float) ImageSampleDrefExplicitLod 640 641 642 Lod 643
+             645:    208(ptr) AccessChain 562(texel) 207
+             646:    6(float) Load 645
+             647:    6(float) FAdd 646 644
+             648:    208(ptr) AccessChain 562(texel) 207
+                              Store 648 647
+             649:         269 Load 271(s1DArray)
+             650:   53(fvec2) Load 148(c2)
+             651:   52(float) Load 565(lod)
+             652:    7(fvec4) ImageSampleExplicitLod 649 650 Lod 651
+             653:    7(fvec4) Load 562(texel)
+             654:    7(fvec4) FAdd 653 652
+                              Store 562(texel) 654
+             655:         269 Load 271(s1DArray)
+             656:  154(fvec2) Load 156(f16c2)
+             657:    6(float) Load 572(f16lod)
+             658:    7(fvec4) ImageSampleExplicitLod 655 656 Lod 657
+             659:    7(fvec4) Load 562(texel)
+             660:    7(fvec4) FAdd 659 658
+                              Store 562(texel) 660
+             661:         284 Load 286(s2DArray)
+             662:  167(fvec3) Load 169(c3)
+             663:   52(float) Load 565(lod)
+             664:    7(fvec4) ImageSampleExplicitLod 661 662 Lod 663
+             665:    7(fvec4) Load 562(texel)
+             666:    7(fvec4) FAdd 665 664
+                              Store 562(texel) 666
+             667:         284 Load 286(s2DArray)
+             668:  175(fvec3) Load 177(f16c3)
+             669:    6(float) Load 572(f16lod)
+             670:    7(fvec4) ImageSampleExplicitLod 667 668 Lod 669
+             671:    7(fvec4) Load 562(texel)
+             672:    7(fvec4) FAdd 671 670
+                              Store 562(texel) 672
+             673:         316 Load 318(s1DArrayShadow)
+             674:  167(fvec3) Load 169(c3)
+             675:   52(float) Load 565(lod)
+             676:   52(float) CompositeExtract 674 2
+             677:    6(float) ImageSampleDrefExplicitLod 673 674 676 Lod 675
+             678:    208(ptr) AccessChain 562(texel) 207
+             679:    6(float) Load 678
+             680:    6(float) FAdd 679 677
+             681:    208(ptr) AccessChain 562(texel) 207
+                              Store 681 680
+             682:         316 Load 318(s1DArrayShadow)
+             683:  154(fvec2) Load 156(f16c2)
+             684:   52(float) Load 215(compare)
+             685:    6(float) Load 572(f16lod)
+             686:    6(float) ImageSampleDrefExplicitLod 682 683 684 Lod 685
+             687:    208(ptr) AccessChain 562(texel) 207
+             688:    6(float) Load 687
+             689:    6(float) FAdd 688 686
+             690:    208(ptr) AccessChain 562(texel) 207
+                              Store 690 689
+             691:         299 Load 301(sCubeArray)
+             692:  249(fvec4) Load 251(c4)
+             693:   52(float) Load 565(lod)
+             694:    7(fvec4) ImageSampleExplicitLod 691 692 Lod 693
+             695:    7(fvec4) Load 562(texel)
+             696:    7(fvec4) FAdd 695 694
+                              Store 562(texel) 696
+             697:         299 Load 301(sCubeArray)
+             698:    7(fvec4) Load 309(f16c4)
+             699:    6(float) Load 572(f16lod)
+             700:    7(fvec4) ImageSampleExplicitLod 697 698 Lod 699
+             701:    7(fvec4) Load 562(texel)
+             702:    7(fvec4) FAdd 701 700
+                              Store 562(texel) 702
+             703:    7(fvec4) Load 562(texel)
+                              ReturnValue 703
+                              FunctionEnd
+15(testTextureOffset():    7(fvec4) Function None 8
+              16:             Label
+      706(texel):     64(ptr) Variable Function
+                              Store 706(texel) 121
+             707:         123 Load 125(s1D)
+             708:   52(float) Load 128(c1)
+             710:    7(fvec4) ImageSampleImplicitLod 707 708 ConstOffset 709
+             711:    7(fvec4) Load 706(texel)
+             712:    7(fvec4) FAdd 711 710
+                              Store 706(texel) 712
+             713:         123 Load 125(s1D)
+             714:    6(float) Load 135(f16c1)
+             715:    6(float) Load 137(f16bias)
+             716:    7(fvec4) ImageSampleImplicitLod 713 714 Bias ConstOffset 715 709
+             717:    7(fvec4) Load 706(texel)
+             718:    7(fvec4) FAdd 717 716
+                              Store 706(texel) 718
+             719:         143 Load 145(s2D)
+             720:   53(fvec2) Load 148(c2)
+             723:    7(fvec4) ImageSampleImplicitLod 719 720 ConstOffset 722
+             724:    7(fvec4) Load 706(texel)
+             725:    7(fvec4) FAdd 724 723
+                              Store 706(texel) 725
+             726:         143 Load 145(s2D)
+             727:  154(fvec2) Load 156(f16c2)
+             728:    6(float) Load 137(f16bias)
+             729:    7(fvec4) ImageSampleImplicitLod 726 727 Bias ConstOffset 728 722
+             730:    7(fvec4) Load 706(texel)
+             731:    7(fvec4) FAdd 730 729
+                              Store 706(texel) 731
+             732:         163 Load 165(s3D)
+             733:  167(fvec3) Load 169(c3)
+             736:    7(fvec4) ImageSampleImplicitLod 732 733 ConstOffset 735
+             737:    7(fvec4) Load 706(texel)
+             738:    7(fvec4) FAdd 737 736
+                              Store 706(texel) 738
+             739:         163 Load 165(s3D)
+             740:  175(fvec3) Load 177(f16c3)
+             741:    6(float) Load 137(f16bias)
+             742:    7(fvec4) ImageSampleImplicitLod 739 740 Bias ConstOffset 741 735
+             743:    7(fvec4) Load 706(texel)
+             744:    7(fvec4) FAdd 743 742
+                              Store 706(texel) 744
+             745:         357 Load 359(s2DRect)
+             746:   53(fvec2) Load 148(c2)
+             747:    7(fvec4) ImageSampleImplicitLod 745 746 ConstOffset 722
+             748:    7(fvec4) Load 706(texel)
+             749:    7(fvec4) FAdd 748 747
+                              Store 706(texel) 749
+             750:         357 Load 359(s2DRect)
+             751:  154(fvec2) Load 156(f16c2)
+             752:    7(fvec4) ImageSampleImplicitLod 750 751 ConstOffset 722
+             753:    7(fvec4) Load 706(texel)
+             754:    7(fvec4) FAdd 753 752
+                              Store 706(texel) 754
+             755:         371 Load 373(s2DRectShadow)
+             756:  167(fvec3) Load 169(c3)
+             757:   52(float) CompositeExtract 756 2
+             758:    6(float) ImageSampleDrefImplicitLod 755 756 757 ConstOffset 722
+             759:    208(ptr) AccessChain 706(texel) 207
+             760:    6(float) Load 759
+             761:    6(float) FAdd 760 758
+             762:    208(ptr) AccessChain 706(texel) 207
+                              Store 762 761
+             763:         371 Load 373(s2DRectShadow)
+             764:  154(fvec2) Load 156(f16c2)
+             765:   52(float) Load 215(compare)
+             766:    6(float) ImageSampleDrefImplicitLod 763 764 765 ConstOffset 722
+             767:    208(ptr) AccessChain 706(texel) 207
+             768:    6(float) Load 767
+             769:    6(float) FAdd 768 766
+             770:    208(ptr) AccessChain 706(texel) 207
+                              Store 770 769
+             771:         199 Load 201(s1DShadow)
+             772:  167(fvec3) Load 169(c3)
+             773:   52(float) CompositeExtract 772 2
+             774:    6(float) ImageSampleDrefImplicitLod 771 772 773 ConstOffset 709
+             775:    208(ptr) AccessChain 706(texel) 207
+             776:    6(float) Load 775
+             777:    6(float) FAdd 776 774
+             778:    208(ptr) AccessChain 706(texel) 207
+                              Store 778 777
+             779:         199 Load 201(s1DShadow)
+             780:  154(fvec2) Load 156(f16c2)
+             781:   52(float) Load 215(compare)
+             782:    6(float) Load 137(f16bias)
+             783:    6(float) ImageSampleDrefImplicitLod 779 780 781 Bias ConstOffset 782 709
+             784:    208(ptr) AccessChain 706(texel) 207
+             785:    6(float) Load 784
+             786:    6(float) FAdd 785 783
+             787:    208(ptr) AccessChain 706(texel) 207
+                              Store 787 786
+             788:         224 Load 226(s2DShadow)
+             789:  167(fvec3) Load 169(c3)
+             790:   52(float) CompositeExtract 789 2
+             791:    6(float) ImageSampleDrefImplicitLod 788 789 790 ConstOffset 722
+             792:    208(ptr) AccessChain 706(texel) 207
+             793:    6(float) Load 792
+             794:    6(float) FAdd 793 791
+             795:    208(ptr) AccessChain 706(texel) 207
+                              Store 795 794
+             796:         224 Load 226(s2DShadow)
+             797:  154(fvec2) Load 156(f16c2)
+             798:   52(float) Load 215(compare)
+             799:    6(float) Load 137(f16bias)
+             800:    6(float) ImageSampleDrefImplicitLod 796 797 798 Bias ConstOffset 799 722
+             801:    208(ptr) AccessChain 706(texel) 207
+             802:    6(float) Load 801
+             803:    6(float) FAdd 802 800
+             804:    208(ptr) AccessChain 706(texel) 207
+                              Store 804 803
+             805:         269 Load 271(s1DArray)
+             806:   53(fvec2) Load 148(c2)
+             807:    7(fvec4) ImageSampleImplicitLod 805 806 ConstOffset 709
+             808:    7(fvec4) Load 706(texel)
+             809:    7(fvec4) FAdd 808 807
+                              Store 706(texel) 809
+             810:         269 Load 271(s1DArray)
+             811:  154(fvec2) Load 156(f16c2)
+             812:    6(float) Load 137(f16bias)
+             813:    7(fvec4) ImageSampleImplicitLod 810 811 Bias ConstOffset 812 709
+             814:    7(fvec4) Load 706(texel)
+             815:    7(fvec4) FAdd 814 813
+                              Store 706(texel) 815
+             816:         284 Load 286(s2DArray)
+             817:  167(fvec3) Load 169(c3)
+             818:    7(fvec4) ImageSampleImplicitLod 816 817 ConstOffset 722
+             819:    7(fvec4) Load 706(texel)
+             820:    7(fvec4) FAdd 819 818
+                              Store 706(texel) 820
+             821:         284 Load 286(s2DArray)
+             822:  175(fvec3) Load 177(f16c3)
+             823:    6(float) Load 137(f16bias)
+             824:    7(fvec4) ImageSampleImplicitLod 821 822 Bias ConstOffset 823 722
+             825:    7(fvec4) Load 706(texel)
+             826:    7(fvec4) FAdd 825 824
+                              Store 706(texel) 826
+             827:         316 Load 318(s1DArrayShadow)
+             828:  167(fvec3) Load 169(c3)
+             829:   52(float) CompositeExtract 828 2
+             830:    6(float) ImageSampleDrefImplicitLod 827 828 829 ConstOffset 709
+             831:    208(ptr) AccessChain 706(texel) 207
+             832:    6(float) Load 831
+             833:    6(float) FAdd 832 830
+             834:    208(ptr) AccessChain 706(texel) 207
+                              Store 834 833
+             835:         316 Load 318(s1DArrayShadow)
+             836:  154(fvec2) Load 156(f16c2)
+             837:   52(float) Load 215(compare)
+             838:    6(float) Load 137(f16bias)
+             839:    6(float) ImageSampleDrefImplicitLod 835 836 837 Bias ConstOffset 838 709
+             840:    208(ptr) AccessChain 706(texel) 207
+             841:    6(float) Load 840
+             842:    6(float) FAdd 841 839
+             843:    208(ptr) AccessChain 706(texel) 207
+                              Store 843 842
+             844:         337 Load 339(s2DArrayShadow)
+             845:  249(fvec4) Load 251(c4)
+             846:   52(float) CompositeExtract 845 3
+             847:    6(float) ImageSampleDrefImplicitLod 844 845 846 ConstOffset 722
+             848:    208(ptr) AccessChain 706(texel) 207
+             849:    6(float) Load 848
+             850:    6(float) FAdd 849 847
+             851:    208(ptr) AccessChain 706(texel) 207
+                              Store 851 850
+             852:         337 Load 339(s2DArrayShadow)
+             853:  175(fvec3) Load 177(f16c3)
+             854:   52(float) Load 215(compare)
+             855:    6(float) ImageSampleDrefImplicitLod 852 853 854 ConstOffset 722
+             856:    208(ptr) AccessChain 706(texel) 207
+             857:    6(float) Load 856
+             858:    6(float) FAdd 857 855
+             859:    208(ptr) AccessChain 706(texel) 207
+                              Store 859 858
+             860:    7(fvec4) Load 706(texel)
+                              ReturnValue 860
+                              FunctionEnd
+17(testTextureProjOffset():    7(fvec4) Function None 8
+              18:             Label
+      863(texel):     64(ptr) Variable Function
+                              Store 863(texel) 121
+             864:         123 Load 125(s1D)
+             865:   53(fvec2) Load 148(c2)
+             866:    7(fvec4) ImageSampleProjImplicitLod 864 865 ConstOffset 709
+             867:    7(fvec4) Load 863(texel)
+             868:    7(fvec4) FAdd 867 866
+                              Store 863(texel) 868
+             869:         123 Load 125(s1D)
+             870:  154(fvec2) Load 156(f16c2)
+             871:    6(float) Load 137(f16bias)
+             872:    7(fvec4) ImageSampleProjImplicitLod 869 870 Bias ConstOffset 871 709
+             873:    7(fvec4) Load 863(texel)
+             874:    7(fvec4) FAdd 873 872
+                              Store 863(texel) 874
+             875:         123 Load 125(s1D)
+             876:  249(fvec4) Load 251(c4)
+             877:   52(float) CompositeExtract 876 3
+             878:  249(fvec4) CompositeInsert 877 876 1
+             879:    7(fvec4) ImageSampleProjImplicitLod 875 878 ConstOffset 709
+             880:    7(fvec4) Load 863(texel)
+             881:    7(fvec4) FAdd 880 879
+                              Store 863(texel) 881
+             882:         123 Load 125(s1D)
+             883:    7(fvec4) Load 309(f16c4)
+             884:    6(float) Load 137(f16bias)
+             885:    6(float) CompositeExtract 883 3
+             886:    7(fvec4) CompositeInsert 885 883 1
+             887:    7(fvec4) ImageSampleProjImplicitLod 882 886 Bias ConstOffset 884 709
+             888:    7(fvec4) Load 863(texel)
+             889:    7(fvec4) FAdd 888 887
+                              Store 863(texel) 889
+             890:         143 Load 145(s2D)
+             891:  167(fvec3) Load 169(c3)
+             892:    7(fvec4) ImageSampleProjImplicitLod 890 891 ConstOffset 722
+             893:    7(fvec4) Load 863(texel)
+             894:    7(fvec4) FAdd 893 892
+                              Store 863(texel) 894
+             895:         143 Load 145(s2D)
+             896:  175(fvec3) Load 177(f16c3)
+             897:    6(float) Load 137(f16bias)
+             898:    7(fvec4) ImageSampleProjImplicitLod 895 896 Bias ConstOffset 897 722
+             899:    7(fvec4) Load 863(texel)
+             900:    7(fvec4) FAdd 899 898
+                              Store 863(texel) 900
+             901:         143 Load 145(s2D)
+             902:  249(fvec4) Load 251(c4)
+             903:   52(float) CompositeExtract 902 3
+             904:  249(fvec4) CompositeInsert 903 902 2
+             905:    7(fvec4) ImageSampleProjImplicitLod 901 904 ConstOffset 722
+             906:    7(fvec4) Load 863(texel)
+             907:    7(fvec4) FAdd 906 905
+                              Store 863(texel) 907
+             908:         143 Load 145(s2D)
+             909:    7(fvec4) Load 309(f16c4)
+             910:    6(float) Load 137(f16bias)
+             911:    6(float) CompositeExtract 909 3
+             912:    7(fvec4) CompositeInsert 911 909 2
+             913:    7(fvec4) ImageSampleProjImplicitLod 908 912 Bias ConstOffset 910 722
+             914:    7(fvec4) Load 863(texel)
+             915:    7(fvec4) FAdd 914 913
+                              Store 863(texel) 915
+             916:         163 Load 165(s3D)
+             917:  249(fvec4) Load 251(c4)
+             918:    7(fvec4) ImageSampleProjImplicitLod 916 917 ConstOffset 735
+             919:    7(fvec4) Load 863(texel)
+             920:    7(fvec4) FAdd 919 918
+                              Store 863(texel) 920
+             921:         163 Load 165(s3D)
+             922:    7(fvec4) Load 309(f16c4)
+             923:    6(float) Load 137(f16bias)
+             924:    7(fvec4) ImageSampleProjImplicitLod 921 922 Bias ConstOffset 923 735
+             925:    7(fvec4) Load 863(texel)
+             926:    7(fvec4) FAdd 925 924
+                              Store 863(texel) 926
+             927:         357 Load 359(s2DRect)
+             928:  167(fvec3) Load 169(c3)
+             929:    7(fvec4) ImageSampleProjImplicitLod 927 928 ConstOffset 722
+             930:    7(fvec4) Load 863(texel)
+             931:    7(fvec4) FAdd 930 929
+                              Store 863(texel) 931
+             932:         357 Load 359(s2DRect)
+             933:  175(fvec3) Load 177(f16c3)
+             934:    7(fvec4) ImageSampleProjImplicitLod 932 933 ConstOffset 722
+             935:    7(fvec4) Load 863(texel)
+             936:    7(fvec4) FAdd 935 934
+                              Store 863(texel) 936
+             937:         357 Load 359(s2DRect)
+             938:  249(fvec4) Load 251(c4)
+             939:   52(float) CompositeExtract 938 3
+             940:  249(fvec4) CompositeInsert 939 938 2
+             941:    7(fvec4) ImageSampleProjImplicitLod 937 940 ConstOffset 722
+             942:    7(fvec4) Load 863(texel)
+             943:    7(fvec4) FAdd 942 941
+                              Store 863(texel) 943
+             944:         357 Load 359(s2DRect)
+             945:    7(fvec4) Load 309(f16c4)
+             946:    6(float) CompositeExtract 945 3
+             947:    7(fvec4) CompositeInsert 946 945 2
+             948:    7(fvec4) ImageSampleProjImplicitLod 944 947 ConstOffset 722
+             949:    7(fvec4) Load 863(texel)
+             950:    7(fvec4) FAdd 949 948
+                              Store 863(texel) 950
+             951:         371 Load 373(s2DRectShadow)
+             952:  249(fvec4) Load 251(c4)
+             953:   52(float) CompositeExtract 952 2
+             954:   52(float) CompositeExtract 952 3
+             955:  249(fvec4) CompositeInsert 954 952 2
+             956:    6(float) ImageSampleProjDrefImplicitLod 951 955 953 ConstOffset 722
+             957:    208(ptr) AccessChain 863(texel) 207
+             958:    6(float) Load 957
+             959:    6(float) FAdd 958 956
+             960:    208(ptr) AccessChain 863(texel) 207
+                              Store 960 959
+             961:         371 Load 373(s2DRectShadow)
+             962:  175(fvec3) Load 177(f16c3)
+             963:   52(float) Load 215(compare)
+             964:    6(float) ImageSampleProjDrefImplicitLod 961 962 963 ConstOffset 722
+             965:    208(ptr) AccessChain 863(texel) 207
+             966:    6(float) Load 965
+             967:    6(float) FAdd 966 964
+             968:    208(ptr) AccessChain 863(texel) 207
+                              Store 968 967
+             969:         199 Load 201(s1DShadow)
+             970:  249(fvec4) Load 251(c4)
+             971:   52(float) CompositeExtract 970 2
+             972:   52(float) CompositeExtract 970 3
+             973:  249(fvec4) CompositeInsert 972 970 1
+             974:    6(float) ImageSampleProjDrefImplicitLod 969 973 971 ConstOffset 709
+             975:    208(ptr) AccessChain 863(texel) 207
+             976:    6(float) Load 975
+             977:    6(float) FAdd 976 974
+             978:    208(ptr) AccessChain 863(texel) 207
+                              Store 978 977
+             979:         199 Load 201(s1DShadow)
+             980:  175(fvec3) Load 177(f16c3)
+             981:   52(float) Load 215(compare)
+             982:    6(float) Load 137(f16bias)
+             983:    6(float) CompositeExtract 980 2
+             984:  175(fvec3) CompositeInsert 983 980 1
+             985:    6(float) ImageSampleProjDrefImplicitLod 979 984 981 Bias ConstOffset 982 709
+             986:    208(ptr) AccessChain 863(texel) 207
+             987:    6(float) Load 986
+             988:    6(float) FAdd 987 985
+             989:    208(ptr) AccessChain 863(texel) 207
+                              Store 989 988
+             990:         224 Load 226(s2DShadow)
+             991:  249(fvec4) Load 251(c4)
+             992:   52(float) CompositeExtract 991 2
+             993:   52(float) CompositeExtract 991 3
+             994:  249(fvec4) CompositeInsert 993 991 2
+             995:    6(float) ImageSampleProjDrefImplicitLod 990 994 992 ConstOffset 722
+             996:    208(ptr) AccessChain 863(texel) 207
+             997:    6(float) Load 996
+             998:    6(float) FAdd 997 995
+             999:    208(ptr) AccessChain 863(texel) 207
+                              Store 999 998
+            1000:         224 Load 226(s2DShadow)
+            1001:  175(fvec3) Load 177(f16c3)
+            1002:   52(float) Load 215(compare)
+            1003:    6(float) Load 137(f16bias)
+            1004:    6(float) ImageSampleProjDrefImplicitLod 1000 1001 1002 Bias ConstOffset 1003 722
+            1005:    208(ptr) AccessChain 863(texel) 207
+            1006:    6(float) Load 1005
+            1007:    6(float) FAdd 1006 1004
+            1008:    208(ptr) AccessChain 863(texel) 207
+                              Store 1008 1007
+            1009:    7(fvec4) Load 863(texel)
+                              ReturnValue 1009
+                              FunctionEnd
+19(testTextureLodOffset():    7(fvec4) Function None 8
+              20:             Label
+     1012(texel):     64(ptr) Variable Function
+                              Store 1012(texel) 121
+            1013:         123 Load 125(s1D)
+            1014:   52(float) Load 128(c1)
+            1015:   52(float) Load 565(lod)
+            1016:    7(fvec4) ImageSampleExplicitLod 1013 1014 Lod ConstOffset 1015 709
+            1017:    7(fvec4) Load 1012(texel)
+            1018:    7(fvec4) FAdd 1017 1016
+                              Store 1012(texel) 1018
+            1019:         123 Load 125(s1D)
+            1020:    6(float) Load 135(f16c1)
+            1021:    6(float) Load 572(f16lod)
+            1022:    7(fvec4) ImageSampleExplicitLod 1019 1020 Lod ConstOffset 1021 709
+            1023:    7(fvec4) Load 1012(texel)
+            1024:    7(fvec4) FAdd 1023 1022
+                              Store 1012(texel) 1024
+            1025:         143 Load 145(s2D)
+            1026:   53(fvec2) Load 148(c2)
+            1027:   52(float) Load 565(lod)
+            1028:    7(fvec4) ImageSampleExplicitLod 1025 1026 Lod ConstOffset 1027 722
+            1029:    7(fvec4) Load 1012(texel)
+            1030:    7(fvec4) FAdd 1029 1028
+                              Store 1012(texel) 1030
+            1031:         143 Load 145(s2D)
+            1032:  154(fvec2) Load 156(f16c2)
+            1033:    6(float) Load 572(f16lod)
+            1034:    7(fvec4) ImageSampleExplicitLod 1031 1032 Lod ConstOffset 1033 722
+            1035:    7(fvec4) Load 1012(texel)
+            1036:    7(fvec4) FAdd 1035 1034
+                              Store 1012(texel) 1036
+            1037:         163 Load 165(s3D)
+            1038:  167(fvec3) Load 169(c3)
+            1039:   52(float) Load 565(lod)
+            1040:    7(fvec4) ImageSampleExplicitLod 1037 1038 Lod ConstOffset 1039 735
+            1041:    7(fvec4) Load 1012(texel)
+            1042:    7(fvec4) FAdd 1041 1040
+                              Store 1012(texel) 1042
+            1043:         163 Load 165(s3D)
+            1044:  175(fvec3) Load 177(f16c3)
+            1045:    6(float) Load 572(f16lod)
+            1046:    7(fvec4) ImageSampleExplicitLod 1043 1044 Lod ConstOffset 1045 735
+            1047:    7(fvec4) Load 1012(texel)
+            1048:    7(fvec4) FAdd 1047 1046
+                              Store 1012(texel) 1048
+            1049:         199 Load 201(s1DShadow)
+            1050:  167(fvec3) Load 169(c3)
+            1051:   52(float) Load 565(lod)
+            1052:   52(float) CompositeExtract 1050 2
+            1053:    6(float) ImageSampleDrefExplicitLod 1049 1050 1052 Lod ConstOffset 1051 709
+            1054:    208(ptr) AccessChain 1012(texel) 207
+            1055:    6(float) Load 1054
+            1056:    6(float) FAdd 1055 1053
+            1057:    208(ptr) AccessChain 1012(texel) 207
+                              Store 1057 1056
+            1058:         199 Load 201(s1DShadow)
+            1059:  154(fvec2) Load 156(f16c2)
+            1060:   52(float) Load 215(compare)
+            1061:    6(float) Load 572(f16lod)
+            1062:    6(float) ImageSampleDrefExplicitLod 1058 1059 1060 Lod ConstOffset 1061 709
+            1063:    208(ptr) AccessChain 1012(texel) 207
+            1064:    6(float) Load 1063
+            1065:    6(float) FAdd 1064 1062
+            1066:    208(ptr) AccessChain 1012(texel) 207
+                              Store 1066 1065
+            1067:         224 Load 226(s2DShadow)
+            1068:  167(fvec3) Load 169(c3)
+            1069:   52(float) Load 565(lod)
+            1070:   52(float) CompositeExtract 1068 2
+            1071:    6(float) ImageSampleDrefExplicitLod 1067 1068 1070 Lod ConstOffset 1069 722
+            1072:    208(ptr) AccessChain 1012(texel) 207
+            1073:    6(float) Load 1072
+            1074:    6(float) FAdd 1073 1071
+            1075:    208(ptr) AccessChain 1012(texel) 207
+                              Store 1075 1074
+            1076:         224 Load 226(s2DShadow)
+            1077:  154(fvec2) Load 156(f16c2)
+            1078:   52(float) Load 215(compare)
+            1079:    6(float) Load 572(f16lod)
+            1080:    6(float) ImageSampleDrefExplicitLod 1076 1077 1078 Lod ConstOffset 1079 722
+            1081:    208(ptr) AccessChain 1012(texel) 207
+            1082:    6(float) Load 1081
+            1083:    6(float) FAdd 1082 1080
+            1084:    208(ptr) AccessChain 1012(texel) 207
+                              Store 1084 1083
+            1085:         269 Load 271(s1DArray)
+            1086:   53(fvec2) Load 148(c2)
+            1087:   52(float) Load 565(lod)
+            1088:    7(fvec4) ImageSampleExplicitLod 1085 1086 Lod ConstOffset 1087 709
+            1089:    7(fvec4) Load 1012(texel)
+            1090:    7(fvec4) FAdd 1089 1088
+                              Store 1012(texel) 1090
+            1091:         269 Load 271(s1DArray)
+            1092:  154(fvec2) Load 156(f16c2)
+            1093:    6(float) Load 572(f16lod)
+            1094:    7(fvec4) ImageSampleExplicitLod 1091 1092 Lod ConstOffset 1093 709
+            1095:    7(fvec4) Load 1012(texel)
+            1096:    7(fvec4) FAdd 1095 1094
+                              Store 1012(texel) 1096
+            1097:         284 Load 286(s2DArray)
+            1098:  167(fvec3) Load 169(c3)
+            1099:   52(float) Load 565(lod)
+            1100:    7(fvec4) ImageSampleExplicitLod 1097 1098 Lod ConstOffset 1099 722
+            1101:    7(fvec4) Load 1012(texel)
+            1102:    7(fvec4) FAdd 1101 1100
+                              Store 1012(texel) 1102
+            1103:         284 Load 286(s2DArray)
+            1104:  175(fvec3) Load 177(f16c3)
+            1105:    6(float) Load 572(f16lod)
+            1106:    7(fvec4) ImageSampleExplicitLod 1103 1104 Lod ConstOffset 1105 722
+            1107:    7(fvec4) Load 1012(texel)
+            1108:    7(fvec4) FAdd 1107 1106
+                              Store 1012(texel) 1108
+            1109:         316 Load 318(s1DArrayShadow)
+            1110:  167(fvec3) Load 169(c3)
+            1111:   52(float) Load 565(lod)
+            1112:   52(float) CompositeExtract 1110 2
+            1113:    6(float) ImageSampleDrefExplicitLod 1109 1110 1112 Lod ConstOffset 1111 709
+            1114:    208(ptr) AccessChain 1012(texel) 207
+            1115:    6(float) Load 1114
+            1116:    6(float) FAdd 1115 1113
+            1117:    208(ptr) AccessChain 1012(texel) 207
+                              Store 1117 1116
+            1118:         316 Load 318(s1DArrayShadow)
+            1119:  154(fvec2) Load 156(f16c2)
+            1120:   52(float) Load 215(compare)
+            1121:    6(float) Load 572(f16lod)
+            1122:    6(float) ImageSampleDrefExplicitLod 1118 1119 1120 Lod ConstOffset 1121 709
+            1123:    208(ptr) AccessChain 1012(texel) 207
+            1124:    6(float) Load 1123
+            1125:    6(float) FAdd 1124 1122
+            1126:    208(ptr) AccessChain 1012(texel) 207
+                              Store 1126 1125
+            1127:    7(fvec4) Load 1012(texel)
+                              ReturnValue 1127
+                              FunctionEnd
+21(testTextureProjLodOffset():    7(fvec4) Function None 8
+              22:             Label
+     1130(texel):     64(ptr) Variable Function
+                              Store 1130(texel) 121
+            1131:         123 Load 125(s1D)
+            1132:   53(fvec2) Load 148(c2)
+            1133:   52(float) Load 565(lod)
+            1134:    7(fvec4) ImageSampleProjExplicitLod 1131 1132 Lod ConstOffset 1133 709
+            1135:    7(fvec4) Load 1130(texel)
+            1136:    7(fvec4) FAdd 1135 1134
+                              Store 1130(texel) 1136
+            1137:         123 Load 125(s1D)
+            1138:  154(fvec2) Load 156(f16c2)
+            1139:    6(float) Load 572(f16lod)
+            1140:    7(fvec4) ImageSampleProjExplicitLod 1137 1138 Lod ConstOffset 1139 709
+            1141:    7(fvec4) Load 1130(texel)
+            1142:    7(fvec4) FAdd 1141 1140
+                              Store 1130(texel) 1142
+            1143:         123 Load 125(s1D)
+            1144:  249(fvec4) Load 251(c4)
+            1145:   52(float) Load 565(lod)
+            1146:   52(float) CompositeExtract 1144 3
+            1147:  249(fvec4) CompositeInsert 1146 1144 1
+            1148:    7(fvec4) ImageSampleProjExplicitLod 1143 1147 Lod ConstOffset 1145 709
+            1149:    7(fvec4) Load 1130(texel)
+            1150:    7(fvec4) FAdd 1149 1148
+                              Store 1130(texel) 1150
+            1151:         123 Load 125(s1D)
+            1152:    7(fvec4) Load 309(f16c4)
+            1153:    6(float) Load 572(f16lod)
+            1154:    6(float) CompositeExtract 1152 3
+            1155:    7(fvec4) CompositeInsert 1154 1152 1
+            1156:    7(fvec4) ImageSampleProjExplicitLod 1151 1155 Lod ConstOffset 1153 709
+            1157:    7(fvec4) Load 1130(texel)
+            1158:    7(fvec4) FAdd 1157 1156
+                              Store 1130(texel) 1158
+            1159:         143 Load 145(s2D)
+            1160:  167(fvec3) Load 169(c3)
+            1161:   52(float) Load 565(lod)
+            1162:    7(fvec4) ImageSampleProjExplicitLod 1159 1160 Lod ConstOffset 1161 722
+            1163:    7(fvec4) Load 1130(texel)
+            1164:    7(fvec4) FAdd 1163 1162
+                              Store 1130(texel) 1164
+            1165:         143 Load 145(s2D)
+            1166:  175(fvec3) Load 177(f16c3)
+            1167:    6(float) Load 572(f16lod)
+            1168:    7(fvec4) ImageSampleProjExplicitLod 1165 1166 Lod ConstOffset 1167 722
+            1169:    7(fvec4) Load 1130(texel)
+            1170:    7(fvec4) FAdd 1169 1168
+                              Store 1130(texel) 1170
+            1171:         143 Load 145(s2D)
+            1172:  249(fvec4) Load 251(c4)
+            1173:   52(float) Load 565(lod)
+            1174:   52(float) CompositeExtract 1172 3
+            1175:  249(fvec4) CompositeInsert 1174 1172 2
+            1176:    7(fvec4) ImageSampleProjExplicitLod 1171 1175 Lod ConstOffset 1173 722
+            1177:    7(fvec4) Load 1130(texel)
+            1178:    7(fvec4) FAdd 1177 1176
+                              Store 1130(texel) 1178
+            1179:         143 Load 145(s2D)
+            1180:    7(fvec4) Load 309(f16c4)
+            1181:    6(float) Load 572(f16lod)
+            1182:    6(float) CompositeExtract 1180 3
+            1183:    7(fvec4) CompositeInsert 1182 1180 2
+            1184:    7(fvec4) ImageSampleProjExplicitLod 1179 1183 Lod ConstOffset 1181 722
+            1185:    7(fvec4) Load 1130(texel)
+            1186:    7(fvec4) FAdd 1185 1184
+                              Store 1130(texel) 1186
+            1187:         163 Load 165(s3D)
+            1188:  249(fvec4) Load 251(c4)
+            1189:   52(float) Load 565(lod)
+            1190:    7(fvec4) ImageSampleProjExplicitLod 1187 1188 Lod ConstOffset 1189 735
+            1191:    7(fvec4) Load 1130(texel)
+            1192:    7(fvec4) FAdd 1191 1190
+                              Store 1130(texel) 1192
+            1193:         163 Load 165(s3D)
+            1194:    7(fvec4) Load 309(f16c4)
+            1195:    6(float) Load 572(f16lod)
+            1196:    7(fvec4) ImageSampleProjExplicitLod 1193 1194 Lod ConstOffset 1195 735
+            1197:    7(fvec4) Load 1130(texel)
+            1198:    7(fvec4) FAdd 1197 1196
+                              Store 1130(texel) 1198
+            1199:         199 Load 201(s1DShadow)
+            1200:  249(fvec4) Load 251(c4)
+            1201:   52(float) Load 565(lod)
+            1202:   52(float) CompositeExtract 1200 2
+            1203:   52(float) CompositeExtract 1200 3
+            1204:  249(fvec4) CompositeInsert 1203 1200 1
+            1205:    6(float) ImageSampleProjDrefExplicitLod 1199 1204 1202 Lod ConstOffset 1201 709
+            1206:    208(ptr) AccessChain 1130(texel) 207
+            1207:    6(float) Load 1206
+            1208:    6(float) FAdd 1207 1205
+            1209:    208(ptr) AccessChain 1130(texel) 207
+                              Store 1209 1208
+            1210:         199 Load 201(s1DShadow)
+            1211:  175(fvec3) Load 177(f16c3)
+            1212:   52(float) Load 215(compare)
+            1213:    6(float) Load 572(f16lod)
+            1214:    6(float) CompositeExtract 1211 2
+            1215:  175(fvec3) CompositeInsert 1214 1211 1
+            1216:    6(float) ImageSampleProjDrefExplicitLod 1210 1215 1212 Lod ConstOffset 1213 709
+            1217:    208(ptr) AccessChain 1130(texel) 207
+            1218:    6(float) Load 1217
+            1219:    6(float) FAdd 1218 1216
+            1220:    208(ptr) AccessChain 1130(texel) 207
+                              Store 1220 1219
+            1221:         224 Load 226(s2DShadow)
+            1222:  249(fvec4) Load 251(c4)
+            1223:   52(float) Load 565(lod)
+            1224:   52(float) CompositeExtract 1222 2
+            1225:   52(float) CompositeExtract 1222 3
+            1226:  249(fvec4) CompositeInsert 1225 1222 2
+            1227:    6(float) ImageSampleProjDrefExplicitLod 1221 1226 1224 Lod ConstOffset 1223 722
+            1228:    208(ptr) AccessChain 1130(texel) 207
+            1229:    6(float) Load 1228
+            1230:    6(float) FAdd 1229 1227
+            1231:    208(ptr) AccessChain 1130(texel) 207
+                              Store 1231 1230
+            1232:         224 Load 226(s2DShadow)
+            1233:  175(fvec3) Load 177(f16c3)
+            1234:   52(float) Load 215(compare)
+            1235:    6(float) Load 572(f16lod)
+            1236:    6(float) ImageSampleProjDrefExplicitLod 1232 1233 1234 Lod ConstOffset 1235 722
+            1237:    208(ptr) AccessChain 1130(texel) 207
+            1238:    6(float) Load 1237
+            1239:    6(float) FAdd 1238 1236
+            1240:    208(ptr) AccessChain 1130(texel) 207
+                              Store 1240 1239
+            1241:    7(fvec4) Load 1130(texel)
+                              ReturnValue 1241
+                              FunctionEnd
+23(testTexelFetch():    7(fvec4) Function None 8
+              24:             Label
+     1244(texel):     64(ptr) Variable Function
+                              Store 1244(texel) 121
+            1245:         123 Load 125(s1D)
+            1246:   52(float) Load 128(c1)
+            1247:     47(int) ConvertFToS 1246
+            1248:   52(float) Load 565(lod)
+            1249:     47(int) ConvertFToS 1248
+            1250:         122 Image 1245
+            1251:    7(fvec4) ImageFetch 1250 1247 Lod 1249
+            1252:    7(fvec4) Load 1244(texel)
+            1253:    7(fvec4) FAdd 1252 1251
+                              Store 1244(texel) 1253
+            1254:         143 Load 145(s2D)
+            1255:   53(fvec2) Load 148(c2)
+            1256:  721(ivec2) ConvertFToS 1255
+            1257:   52(float) Load 565(lod)
+            1258:     47(int) ConvertFToS 1257
+            1259:         142 Image 1254
+            1260:    7(fvec4) ImageFetch 1259 1256 Lod 1258
+            1261:    7(fvec4) Load 1244(texel)
+            1262:    7(fvec4) FAdd 1261 1260
+                              Store 1244(texel) 1262
+            1263:         163 Load 165(s3D)
+            1264:  167(fvec3) Load 169(c3)
+            1265:  734(ivec3) ConvertFToS 1264
+            1266:   52(float) Load 565(lod)
+            1267:     47(int) ConvertFToS 1266
+            1268:         162 Image 1263
+            1269:    7(fvec4) ImageFetch 1268 1265 Lod 1267
+            1270:    7(fvec4) Load 1244(texel)
+            1271:    7(fvec4) FAdd 1270 1269
+                              Store 1244(texel) 1271
+            1272:         357 Load 359(s2DRect)
+            1273:   53(fvec2) Load 148(c2)
+            1274:  721(ivec2) ConvertFToS 1273
+            1275:         356 Image 1272
+            1276:    7(fvec4) ImageFetch 1275 1274
+            1277:    7(fvec4) Load 1244(texel)
+            1278:    7(fvec4) FAdd 1277 1276
+                              Store 1244(texel) 1278
+            1279:         269 Load 271(s1DArray)
+            1280:   53(fvec2) Load 148(c2)
+            1281:  721(ivec2) ConvertFToS 1280
+            1282:   52(float) Load 565(lod)
+            1283:     47(int) ConvertFToS 1282
+            1284:         268 Image 1279
+            1285:    7(fvec4) ImageFetch 1284 1281 Lod 1283
+            1286:    7(fvec4) Load 1244(texel)
+            1287:    7(fvec4) FAdd 1286 1285
+                              Store 1244(texel) 1287
+            1288:         284 Load 286(s2DArray)
+            1289:  167(fvec3) Load 169(c3)
+            1290:  734(ivec3) ConvertFToS 1289
+            1291:   52(float) Load 565(lod)
+            1292:     47(int) ConvertFToS 1291
+            1293:         283 Image 1288
+            1294:    7(fvec4) ImageFetch 1293 1290 Lod 1292
+            1295:    7(fvec4) Load 1244(texel)
+            1296:    7(fvec4) FAdd 1295 1294
+                              Store 1244(texel) 1296
+            1301:        1298 Load 1300(sBuffer)
+            1302:   52(float) Load 128(c1)
+            1303:     47(int) ConvertFToS 1302
+            1304:        1297 Image 1301
+            1305:    7(fvec4) ImageFetch 1304 1303
+            1306:    7(fvec4) Load 1244(texel)
+            1307:    7(fvec4) FAdd 1306 1305
+                              Store 1244(texel) 1307
+            1312:        1309 Load 1311(s2DMS)
+            1313:   53(fvec2) Load 148(c2)
+            1314:  721(ivec2) ConvertFToS 1313
+            1315:        1308 Image 1312
+            1316:    7(fvec4) ImageFetch 1315 1314 Sample 709
+            1317:    7(fvec4) Load 1244(texel)
+            1318:    7(fvec4) FAdd 1317 1316
+                              Store 1244(texel) 1318
+            1323:        1320 Load 1322(s2DMSArray)
+            1324:  167(fvec3) Load 169(c3)
+            1325:  734(ivec3) ConvertFToS 1324
+            1327:        1319 Image 1323
+            1328:    7(fvec4) ImageFetch 1327 1325 Sample 1326
+            1329:    7(fvec4) Load 1244(texel)
+            1330:    7(fvec4) FAdd 1329 1328
+                              Store 1244(texel) 1330
+            1331:    7(fvec4) Load 1244(texel)
+                              ReturnValue 1331
+                              FunctionEnd
+25(testTexelFetchOffset():    7(fvec4) Function None 8
+              26:             Label
+     1334(texel):     64(ptr) Variable Function
+                              Store 1334(texel) 121
+            1335:         123 Load 125(s1D)
+            1336:   52(float) Load 128(c1)
+            1337:     47(int) ConvertFToS 1336
+            1338:   52(float) Load 565(lod)
+            1339:     47(int) ConvertFToS 1338
+            1340:         122 Image 1335
+            1341:    7(fvec4) ImageFetch 1340 1337 Lod ConstOffset 1339 709
+            1342:    7(fvec4) Load 1334(texel)
+            1343:    7(fvec4) FAdd 1342 1341
+                              Store 1334(texel) 1343
+            1344:         143 Load 145(s2D)
+            1345:   53(fvec2) Load 148(c2)
+            1346:  721(ivec2) ConvertFToS 1345
+            1347:   52(float) Load 565(lod)
+            1348:     47(int) ConvertFToS 1347
+            1349:         142 Image 1344
+            1350:    7(fvec4) ImageFetch 1349 1346 Lod ConstOffset 1348 722
+            1351:    7(fvec4) Load 1334(texel)
+            1352:    7(fvec4) FAdd 1351 1350
+                              Store 1334(texel) 1352
+            1353:         163 Load 165(s3D)
+            1354:  167(fvec3) Load 169(c3)
+            1355:  734(ivec3) ConvertFToS 1354
+            1356:   52(float) Load 565(lod)
+            1357:     47(int) ConvertFToS 1356
+            1358:         162 Image 1353
+            1359:    7(fvec4) ImageFetch 1358 1355 Lod ConstOffset 1357 735
+            1360:    7(fvec4) Load 1334(texel)
+            1361:    7(fvec4) FAdd 1360 1359
+                              Store 1334(texel) 1361
+            1362:         357 Load 359(s2DRect)
+            1363:   53(fvec2) Load 148(c2)
+            1364:  721(ivec2) ConvertFToS 1363
+            1365:         356 Image 1362
+            1366:    7(fvec4) ImageFetch 1365 1364 ConstOffset 722
+            1367:    7(fvec4) Load 1334(texel)
+            1368:    7(fvec4) FAdd 1367 1366
+                              Store 1334(texel) 1368
+            1369:         269 Load 271(s1DArray)
+            1370:   53(fvec2) Load 148(c2)
+            1371:  721(ivec2) ConvertFToS 1370
+            1372:   52(float) Load 565(lod)
+            1373:     47(int) ConvertFToS 1372
+            1374:         268 Image 1369
+            1375:    7(fvec4) ImageFetch 1374 1371 Lod ConstOffset 1373 709
+            1376:    7(fvec4) Load 1334(texel)
+            1377:    7(fvec4) FAdd 1376 1375
+                              Store 1334(texel) 1377
+            1378:         284 Load 286(s2DArray)
+            1379:  167(fvec3) Load 169(c3)
+            1380:  734(ivec3) ConvertFToS 1379
+            1381:   52(float) Load 565(lod)
+            1382:     47(int) ConvertFToS 1381
+            1383:         283 Image 1378
+            1384:    7(fvec4) ImageFetch 1383 1380 Lod ConstOffset 1382 722
+            1385:    7(fvec4) Load 1334(texel)
+            1386:    7(fvec4) FAdd 1385 1384
+                              Store 1334(texel) 1386
+            1387:    7(fvec4) Load 1334(texel)
+                              ReturnValue 1387
+                              FunctionEnd
+27(testTextureGrad():    7(fvec4) Function None 8
+              28:             Label
+     1390(texel):     64(ptr) Variable Function
+                              Store 1390(texel) 121
+            1391:         123 Load 125(s1D)
+            1392:   52(float) Load 128(c1)
+            1394:   52(float) Load 1393(dPdxy1)
+            1395:   52(float) Load 1393(dPdxy1)
+            1396:    7(fvec4) ImageSampleExplicitLod 1391 1392 Grad 1394 1395
+            1397:    7(fvec4) Load 1390(texel)
+            1398:    7(fvec4) FAdd 1397 1396
+                              Store 1390(texel) 1398
+            1399:         123 Load 125(s1D)
+            1400:    6(float) Load 135(f16c1)
+            1402:    6(float) Load 1401(f16dPdxy1)
+            1403:    6(float) Load 1401(f16dPdxy1)
+            1404:    7(fvec4) ImageSampleExplicitLod 1399 1400 Grad 1402 1403
+            1405:    7(fvec4) Load 1390(texel)
+            1406:    7(fvec4) FAdd 1405 1404
+                              Store 1390(texel) 1406
+            1407:         143 Load 145(s2D)
+            1408:   53(fvec2) Load 148(c2)
+            1410:   53(fvec2) Load 1409(dPdxy2)
+            1411:   53(fvec2) Load 1409(dPdxy2)
+            1412:    7(fvec4) ImageSampleExplicitLod 1407 1408 Grad 1410 1411
+            1413:    7(fvec4) Load 1390(texel)
+            1414:    7(fvec4) FAdd 1413 1412
+                              Store 1390(texel) 1414
+            1415:         143 Load 145(s2D)
+            1416:  154(fvec2) Load 156(f16c2)
+            1418:  154(fvec2) Load 1417(f16dPdxy2)
+            1419:  154(fvec2) Load 1417(f16dPdxy2)
+            1420:    7(fvec4) ImageSampleExplicitLod 1415 1416 Grad 1418 1419
+            1421:    7(fvec4) Load 1390(texel)
+            1422:    7(fvec4) FAdd 1421 1420
+                              Store 1390(texel) 1422
+            1423:         163 Load 165(s3D)
+            1424:  167(fvec3) Load 169(c3)
+            1426:  167(fvec3) Load 1425(dPdxy3)
+            1427:  167(fvec3) Load 1425(dPdxy3)
+            1428:    7(fvec4) ImageSampleExplicitLod 1423 1424 Grad 1426 1427
+            1429:    7(fvec4) Load 1390(texel)
+            1430:    7(fvec4) FAdd 1429 1428
+                              Store 1390(texel) 1430
+            1431:         163 Load 165(s3D)
+            1432:  175(fvec3) Load 177(f16c3)
+            1434:  175(fvec3) Load 1433(f16dPdxy3)
+            1435:  175(fvec3) Load 1433(f16dPdxy3)
+            1436:    7(fvec4) ImageSampleExplicitLod 1431 1432 Grad 1434 1435
+            1437:    7(fvec4) Load 1390(texel)
+            1438:    7(fvec4) FAdd 1437 1436
+                              Store 1390(texel) 1438
+            1439:         184 Load 186(sCube)
+            1440:  167(fvec3) Load 169(c3)
+            1441:  167(fvec3) Load 1425(dPdxy3)
+            1442:  167(fvec3) Load 1425(dPdxy3)
+            1443:    7(fvec4) ImageSampleExplicitLod 1439 1440 Grad 1441 1442
+            1444:    7(fvec4) Load 1390(texel)
+            1445:    7(fvec4) FAdd 1444 1443
+                              Store 1390(texel) 1445
+            1446:         184 Load 186(sCube)
+            1447:  175(fvec3) Load 177(f16c3)
+            1448:  175(fvec3) Load 1433(f16dPdxy3)
+            1449:  175(fvec3) Load 1433(f16dPdxy3)
+            1450:    7(fvec4) ImageSampleExplicitLod 1446 1447 Grad 1448 1449
+            1451:    7(fvec4) Load 1390(texel)
+            1452:    7(fvec4) FAdd 1451 1450
+                              Store 1390(texel) 1452
+            1453:         357 Load 359(s2DRect)
+            1454:   53(fvec2) Load 148(c2)
+            1455:   53(fvec2) Load 1409(dPdxy2)
+            1456:   53(fvec2) Load 1409(dPdxy2)
+            1457:    7(fvec4) ImageSampleExplicitLod 1453 1454 Grad 1455 1456
+            1458:    7(fvec4) Load 1390(texel)
+            1459:    7(fvec4) FAdd 1458 1457
+                              Store 1390(texel) 1459
+            1460:         357 Load 359(s2DRect)
+            1461:  154(fvec2) Load 156(f16c2)
+            1462:  154(fvec2) Load 1417(f16dPdxy2)
+            1463:  154(fvec2) Load 1417(f16dPdxy2)
+            1464:    7(fvec4) ImageSampleExplicitLod 1460 1461 Grad 1462 1463
+            1465:    7(fvec4) Load 1390(texel)
+            1466:    7(fvec4) FAdd 1465 1464
+                              Store 1390(texel) 1466
+            1467:         371 Load 373(s2DRectShadow)
+            1468:  167(fvec3) Load 169(c3)
+            1469:   53(fvec2) Load 1409(dPdxy2)
+            1470:   53(fvec2) Load 1409(dPdxy2)
+            1471:   52(float) CompositeExtract 1468 2
+            1472:    6(float) ImageSampleDrefExplicitLod 1467 1468 1471 Grad 1469 1470
+            1473:    208(ptr) AccessChain 1390(texel) 207
+            1474:    6(float) Load 1473
+            1475:    6(float) FAdd 1474 1472
+            1476:    208(ptr) AccessChain 1390(texel) 207
+                              Store 1476 1475
+            1477:         371 Load 373(s2DRectShadow)
+            1478:  154(fvec2) Load 156(f16c2)
+            1479:   52(float) Load 215(compare)
+            1480:  154(fvec2) Load 1417(f16dPdxy2)
+            1481:  154(fvec2) Load 1417(f16dPdxy2)
+            1482:    6(float) ImageSampleDrefExplicitLod 1477 1478 1479 Grad 1480 1481
+            1483:    208(ptr) AccessChain 1390(texel) 207
+            1484:    6(float) Load 1483
+            1485:    6(float) FAdd 1484 1482
+            1486:    208(ptr) AccessChain 1390(texel) 207
+                              Store 1486 1485
+            1487:         199 Load 201(s1DShadow)
+            1488:  167(fvec3) Load 169(c3)
+            1489:   52(float) Load 1393(dPdxy1)
+            1490:   52(float) Load 1393(dPdxy1)
+            1491:   52(float) CompositeExtract 1488 2
+            1492:    6(float) ImageSampleDrefExplicitLod 1487 1488 1491 Grad 1489 1490
+            1493:    208(ptr) AccessChain 1390(texel) 207
+            1494:    6(float) Load 1493
+            1495:    6(float) FAdd 1494 1492
+            1496:    208(ptr) AccessChain 1390(texel) 207
+                              Store 1496 1495
+            1497:         199 Load 201(s1DShadow)
+            1498:  154(fvec2) Load 156(f16c2)
+            1499:   52(float) Load 215(compare)
+            1500:    6(float) Load 1401(f16dPdxy1)
+            1501:    6(float) Load 1401(f16dPdxy1)
+            1502:    6(float) ImageSampleDrefExplicitLod 1497 1498 1499 Grad 1500 1501
+            1503:    208(ptr) AccessChain 1390(texel) 207
+            1504:    6(float) Load 1503
+            1505:    6(float) FAdd 1504 1502
+            1506:    208(ptr) AccessChain 1390(texel) 207
+                              Store 1506 1505
+            1507:         224 Load 226(s2DShadow)
+            1508:  167(fvec3) Load 169(c3)
+            1509:   53(fvec2) Load 1409(dPdxy2)
+            1510:   53(fvec2) Load 1409(dPdxy2)
+            1511:   52(float) CompositeExtract 1508 2
+            1512:    6(float) ImageSampleDrefExplicitLod 1507 1508 1511 Grad 1509 1510
+            1513:    208(ptr) AccessChain 1390(texel) 207
+            1514:    6(float) Load 1513
+            1515:    6(float) FAdd 1514 1512
+            1516:    208(ptr) AccessChain 1390(texel) 207
+                              Store 1516 1515
+            1517:         224 Load 226(s2DShadow)
+            1518:  154(fvec2) Load 156(f16c2)
+            1519:   52(float) Load 215(compare)
+            1520:  154(fvec2) Load 1417(f16dPdxy2)
+            1521:  154(fvec2) Load 1417(f16dPdxy2)
+            1522:    6(float) ImageSampleDrefExplicitLod 1517 1518 1519 Grad 1520 1521
+            1523:    208(ptr) AccessChain 1390(texel) 207
+            1524:    6(float) Load 1523
+            1525:    6(float) FAdd 1524 1522
+            1526:    208(ptr) AccessChain 1390(texel) 207
+                              Store 1526 1525
+            1527:         245 Load 247(sCubeShadow)
+            1528:  249(fvec4) Load 251(c4)
+            1529:  167(fvec3) Load 1425(dPdxy3)
+            1530:  167(fvec3) Load 1425(dPdxy3)
+            1531:   52(float) CompositeExtract 1528 3
+            1532:    6(float) ImageSampleDrefExplicitLod 1527 1528 1531 Grad 1529 1530
+            1533:    208(ptr) AccessChain 1390(texel) 207
+            1534:    6(float) Load 1533
+            1535:    6(float) FAdd 1534 1532
+            1536:    208(ptr) AccessChain 1390(texel) 207
+                              Store 1536 1535
+            1537:         245 Load 247(sCubeShadow)
+            1538:  175(fvec3) Load 177(f16c3)
+            1539:   52(float) Load 215(compare)
+            1540:  175(fvec3) Load 1433(f16dPdxy3)
+            1541:  175(fvec3) Load 1433(f16dPdxy3)
+            1542:    6(float) ImageSampleDrefExplicitLod 1537 1538 1539 Grad 1540 1541
+            1543:    208(ptr) AccessChain 1390(texel) 207
+            1544:    6(float) Load 1543
+            1545:    6(float) FAdd 1544 1542
+            1546:    208(ptr) AccessChain 1390(texel) 207
+                              Store 1546 1545
+            1547:         269 Load 271(s1DArray)
+            1548:   53(fvec2) Load 148(c2)
+            1549:   52(float) Load 1393(dPdxy1)
+            1550:   52(float) Load 1393(dPdxy1)
+            1551:    7(fvec4) ImageSampleExplicitLod 1547 1548 Grad 1549 1550
+            1552:    7(fvec4) Load 1390(texel)
+            1553:    7(fvec4) FAdd 1552 1551
+                              Store 1390(texel) 1553
+            1554:         269 Load 271(s1DArray)
+            1555:  154(fvec2) Load 156(f16c2)
+            1556:    6(float) Load 1401(f16dPdxy1)
+            1557:    6(float) Load 1401(f16dPdxy1)
+            1558:    7(fvec4) ImageSampleExplicitLod 1554 1555 Grad 1556 1557
+            1559:    7(fvec4) Load 1390(texel)
+            1560:    7(fvec4) FAdd 1559 1558
+                              Store 1390(texel) 1560
+            1561:         284 Load 286(s2DArray)
+            1562:  167(fvec3) Load 169(c3)
+            1563:   53(fvec2) Load 1409(dPdxy2)
+            1564:   53(fvec2) Load 1409(dPdxy2)
+            1565:    7(fvec4) ImageSampleExplicitLod 1561 1562 Grad 1563 1564
+            1566:    7(fvec4) Load 1390(texel)
+            1567:    7(fvec4) FAdd 1566 1565
+                              Store 1390(texel) 1567
+            1568:         284 Load 286(s2DArray)
+            1569:  175(fvec3) Load 177(f16c3)
+            1570:  154(fvec2) Load 1417(f16dPdxy2)
+            1571:  154(fvec2) Load 1417(f16dPdxy2)
+            1572:    7(fvec4) ImageSampleExplicitLod 1568 1569 Grad 1570 1571
+            1573:    7(fvec4) Load 1390(texel)
+            1574:    7(fvec4) FAdd 1573 1572
+                              Store 1390(texel) 1574
+            1575:         316 Load 318(s1DArrayShadow)
+            1576:  167(fvec3) Load 169(c3)
+            1577:   52(float) Load 1393(dPdxy1)
+            1578:   52(float) Load 1393(dPdxy1)
+            1579:   52(float) CompositeExtract 1576 2
+            1580:    6(float) ImageSampleDrefExplicitLod 1575 1576 1579 Grad 1577 1578
+            1581:    208(ptr) AccessChain 1390(texel) 207
+            1582:    6(float) Load 1581
+            1583:    6(float) FAdd 1582 1580
+            1584:    208(ptr) AccessChain 1390(texel) 207
+                              Store 1584 1583
+            1585:         316 Load 318(s1DArrayShadow)
+            1586:  154(fvec2) Load 156(f16c2)
+            1587:   52(float) Load 215(compare)
+            1588:    6(float) Load 1401(f16dPdxy1)
+            1589:    6(float) Load 1401(f16dPdxy1)
+            1590:    6(float) ImageSampleDrefExplicitLod 1585 1586 1587 Grad 1588 1589
+            1591:    208(ptr) AccessChain 1390(texel) 207
+            1592:    6(float) Load 1591
+            1593:    6(float) FAdd 1592 1590
+            1594:    208(ptr) AccessChain 1390(texel) 207
+                              Store 1594 1593
+            1595:         337 Load 339(s2DArrayShadow)
+            1596:  249(fvec4) Load 251(c4)
+            1597:   53(fvec2) Load 1409(dPdxy2)
+            1598:   53(fvec2) Load 1409(dPdxy2)
+            1599:   52(float) CompositeExtract 1596 3
+            1600:    6(float) ImageSampleDrefExplicitLod 1595 1596 1599 Grad 1597 1598
+            1601:    208(ptr) AccessChain 1390(texel) 207
+            1602:    6(float) Load 1601
+            1603:    6(float) FAdd 1602 1600
+            1604:    208(ptr) AccessChain 1390(texel) 207
+                              Store 1604 1603
+            1605:         337 Load 339(s2DArrayShadow)
+            1606:  175(fvec3) Load 177(f16c3)
+            1607:   52(float) Load 215(compare)
+            1608:  154(fvec2) Load 1417(f16dPdxy2)
+            1609:  154(fvec2) Load 1417(f16dPdxy2)
+            1610:    6(float) ImageSampleDrefExplicitLod 1605 1606 1607 Grad 1608 1609
+            1611:    208(ptr) AccessChain 1390(texel) 207
+            1612:    6(float) Load 1611
+            1613:    6(float) FAdd 1612 1610
+            1614:    208(ptr) AccessChain 1390(texel) 207
+                              Store 1614 1613
+            1615:         299 Load 301(sCubeArray)
+            1616:  249(fvec4) Load 251(c4)
+            1617:  167(fvec3) Load 1425(dPdxy3)
+            1618:  167(fvec3) Load 1425(dPdxy3)
+            1619:    7(fvec4) ImageSampleExplicitLod 1615 1616 Grad 1617 1618
+            1620:    7(fvec4) Load 1390(texel)
+            1621:    7(fvec4) FAdd 1620 1619
+                              Store 1390(texel) 1621
+            1622:         299 Load 301(sCubeArray)
+            1623:    7(fvec4) Load 309(f16c4)
+            1624:  175(fvec3) Load 1433(f16dPdxy3)
+            1625:  175(fvec3) Load 1433(f16dPdxy3)
+            1626:    7(fvec4) ImageSampleExplicitLod 1622 1623 Grad 1624 1625
+            1627:    7(fvec4) Load 1390(texel)
+            1628:    7(fvec4) FAdd 1627 1626
+                              Store 1390(texel) 1628
+            1629:    7(fvec4) Load 1390(texel)
+                              ReturnValue 1629
+                              FunctionEnd
+29(testTextureGradOffset():    7(fvec4) Function None 8
+              30:             Label
+     1632(texel):     64(ptr) Variable Function
+                              Store 1632(texel) 121
+            1633:         123 Load 125(s1D)
+            1634:   52(float) Load 128(c1)
+            1635:   52(float) Load 1393(dPdxy1)
+            1636:   52(float) Load 1393(dPdxy1)
+            1637:    7(fvec4) ImageSampleExplicitLod 1633 1634 Grad ConstOffset 1635 1636 709
+            1638:    7(fvec4) Load 1632(texel)
+            1639:    7(fvec4) FAdd 1638 1637
+                              Store 1632(texel) 1639
+            1640:         123 Load 125(s1D)
+            1641:    6(float) Load 135(f16c1)
+            1642:    6(float) Load 1401(f16dPdxy1)
+            1643:    6(float) Load 1401(f16dPdxy1)
+            1644:    7(fvec4) ImageSampleExplicitLod 1640 1641 Grad ConstOffset 1642 1643 709
+            1645:    7(fvec4) Load 1632(texel)
+            1646:    7(fvec4) FAdd 1645 1644
+                              Store 1632(texel) 1646
+            1647:         143 Load 145(s2D)
+            1648:   53(fvec2) Load 148(c2)
+            1649:   53(fvec2) Load 1409(dPdxy2)
+            1650:   53(fvec2) Load 1409(dPdxy2)
+            1651:    7(fvec4) ImageSampleExplicitLod 1647 1648 Grad ConstOffset 1649 1650 722
+            1652:    7(fvec4) Load 1632(texel)
+            1653:    7(fvec4) FAdd 1652 1651
+                              Store 1632(texel) 1653
+            1654:         143 Load 145(s2D)
+            1655:  154(fvec2) Load 156(f16c2)
+            1656:  154(fvec2) Load 1417(f16dPdxy2)
+            1657:  154(fvec2) Load 1417(f16dPdxy2)
+            1658:    7(fvec4) ImageSampleExplicitLod 1654 1655 Grad ConstOffset 1656 1657 722
+            1659:    7(fvec4) Load 1632(texel)
+            1660:    7(fvec4) FAdd 1659 1658
+                              Store 1632(texel) 1660
+            1661:         163 Load 165(s3D)
+            1662:  167(fvec3) Load 169(c3)
+            1663:  167(fvec3) Load 1425(dPdxy3)
+            1664:  167(fvec3) Load 1425(dPdxy3)
+            1665:    7(fvec4) ImageSampleExplicitLod 1661 1662 Grad ConstOffset 1663 1664 735
+            1666:    7(fvec4) Load 1632(texel)
+            1667:    7(fvec4) FAdd 1666 1665
+                              Store 1632(texel) 1667
+            1668:         163 Load 165(s3D)
+            1669:  175(fvec3) Load 177(f16c3)
+            1670:  175(fvec3) Load 1433(f16dPdxy3)
+            1671:  175(fvec3) Load 1433(f16dPdxy3)
+            1672:    7(fvec4) ImageSampleExplicitLod 1668 1669 Grad ConstOffset 1670 1671 735
+            1673:    7(fvec4) Load 1632(texel)
+            1674:    7(fvec4) FAdd 1673 1672
+                              Store 1632(texel) 1674
+            1675:         357 Load 359(s2DRect)
+            1676:   53(fvec2) Load 148(c2)
+            1677:   53(fvec2) Load 1409(dPdxy2)
+            1678:   53(fvec2) Load 1409(dPdxy2)
+            1679:    7(fvec4) ImageSampleExplicitLod 1675 1676 Grad ConstOffset 1677 1678 722
+            1680:    7(fvec4) Load 1632(texel)
+            1681:    7(fvec4) FAdd 1680 1679
+                              Store 1632(texel) 1681
+            1682:         357 Load 359(s2DRect)
+            1683:  154(fvec2) Load 156(f16c2)
+            1684:  154(fvec2) Load 1417(f16dPdxy2)
+            1685:  154(fvec2) Load 1417(f16dPdxy2)
+            1686:    7(fvec4) ImageSampleExplicitLod 1682 1683 Grad ConstOffset 1684 1685 722
+            1687:    7(fvec4) Load 1632(texel)
+            1688:    7(fvec4) FAdd 1687 1686
+                              Store 1632(texel) 1688
+            1689:         371 Load 373(s2DRectShadow)
+            1690:  167(fvec3) Load 169(c3)
+            1691:   53(fvec2) Load 1409(dPdxy2)
+            1692:   53(fvec2) Load 1409(dPdxy2)
+            1693:   52(float) CompositeExtract 1690 2
+            1694:    6(float) ImageSampleDrefExplicitLod 1689 1690 1693 Grad ConstOffset 1691 1692 722
+            1695:    208(ptr) AccessChain 1632(texel) 207
+            1696:    6(float) Load 1695
+            1697:    6(float) FAdd 1696 1694
+            1698:    208(ptr) AccessChain 1632(texel) 207
+                              Store 1698 1697
+            1699:         371 Load 373(s2DRectShadow)
+            1700:  154(fvec2) Load 156(f16c2)
+            1701:   52(float) Load 215(compare)
+            1702:  154(fvec2) Load 1417(f16dPdxy2)
+            1703:  154(fvec2) Load 1417(f16dPdxy2)
+            1704:    6(float) ImageSampleDrefExplicitLod 1699 1700 1701 Grad ConstOffset 1702 1703 722
+            1705:    208(ptr) AccessChain 1632(texel) 207
+            1706:    6(float) Load 1705
+            1707:    6(float) FAdd 1706 1704
+            1708:    208(ptr) AccessChain 1632(texel) 207
+                              Store 1708 1707
+            1709:         199 Load 201(s1DShadow)
+            1710:  167(fvec3) Load 169(c3)
+            1711:   52(float) Load 1393(dPdxy1)
+            1712:   52(float) Load 1393(dPdxy1)
+            1713:   52(float) CompositeExtract 1710 2
+            1714:    6(float) ImageSampleDrefExplicitLod 1709 1710 1713 Grad ConstOffset 1711 1712 709
+            1715:    208(ptr) AccessChain 1632(texel) 207
+            1716:    6(float) Load 1715
+            1717:    6(float) FAdd 1716 1714
+            1718:    208(ptr) AccessChain 1632(texel) 207
+                              Store 1718 1717
+            1719:         199 Load 201(s1DShadow)
+            1720:  154(fvec2) Load 156(f16c2)
+            1721:   52(float) Load 215(compare)
+            1722:    6(float) Load 1401(f16dPdxy1)
+            1723:    6(float) Load 1401(f16dPdxy1)
+            1724:    6(float) ImageSampleDrefExplicitLod 1719 1720 1721 Grad ConstOffset 1722 1723 709
+            1725:    208(ptr) AccessChain 1632(texel) 207
+            1726:    6(float) Load 1725
+            1727:    6(float) FAdd 1726 1724
+            1728:    208(ptr) AccessChain 1632(texel) 207
+                              Store 1728 1727
+            1729:         224 Load 226(s2DShadow)
+            1730:  167(fvec3) Load 169(c3)
+            1731:   53(fvec2) Load 1409(dPdxy2)
+            1732:   53(fvec2) Load 1409(dPdxy2)
+            1733:   52(float) CompositeExtract 1730 2
+            1734:    6(float) ImageSampleDrefExplicitLod 1729 1730 1733 Grad ConstOffset 1731 1732 722
+            1735:    208(ptr) AccessChain 1632(texel) 207
+            1736:    6(float) Load 1735
+            1737:    6(float) FAdd 1736 1734
+            1738:    208(ptr) AccessChain 1632(texel) 207
+                              Store 1738 1737
+            1739:         224 Load 226(s2DShadow)
+            1740:  154(fvec2) Load 156(f16c2)
+            1741:   52(float) Load 215(compare)
+            1742:  154(fvec2) Load 1417(f16dPdxy2)
+            1743:  154(fvec2) Load 1417(f16dPdxy2)
+            1744:    6(float) ImageSampleDrefExplicitLod 1739 1740 1741 Grad ConstOffset 1742 1743 722
+            1745:    208(ptr) AccessChain 1632(texel) 207
+            1746:    6(float) Load 1745
+            1747:    6(float) FAdd 1746 1744
+            1748:    208(ptr) AccessChain 1632(texel) 207
+                              Store 1748 1747
+            1749:         269 Load 271(s1DArray)
+            1750:   53(fvec2) Load 148(c2)
+            1751:   52(float) Load 1393(dPdxy1)
+            1752:   52(float) Load 1393(dPdxy1)
+            1753:    7(fvec4) ImageSampleExplicitLod 1749 1750 Grad ConstOffset 1751 1752 709
+            1754:    7(fvec4) Load 1632(texel)
+            1755:    7(fvec4) FAdd 1754 1753
+                              Store 1632(texel) 1755
+            1756:         269 Load 271(s1DArray)
+            1757:  154(fvec2) Load 156(f16c2)
+            1758:    6(float) Load 1401(f16dPdxy1)
+            1759:    6(float) Load 1401(f16dPdxy1)
+            1760:    7(fvec4) ImageSampleExplicitLod 1756 1757 Grad ConstOffset 1758 1759 709
+            1761:    7(fvec4) Load 1632(texel)
+            1762:    7(fvec4) FAdd 1761 1760
+                              Store 1632(texel) 1762
+            1763:         284 Load 286(s2DArray)
+            1764:  167(fvec3) Load 169(c3)
+            1765:   53(fvec2) Load 1409(dPdxy2)
+            1766:   53(fvec2) Load 1409(dPdxy2)
+            1767:    7(fvec4) ImageSampleExplicitLod 1763 1764 Grad ConstOffset 1765 1766 722
+            1768:    7(fvec4) Load 1632(texel)
+            1769:    7(fvec4) FAdd 1768 1767
+                              Store 1632(texel) 1769
+            1770:         284 Load 286(s2DArray)
+            1771:  175(fvec3) Load 177(f16c3)
+            1772:  154(fvec2) Load 1417(f16dPdxy2)
+            1773:  154(fvec2) Load 1417(f16dPdxy2)
+            1774:    7(fvec4) ImageSampleExplicitLod 1770 1771 Grad ConstOffset 1772 1773 722
+            1775:    7(fvec4) Load 1632(texel)
+            1776:    7(fvec4) FAdd 1775 1774
+                              Store 1632(texel) 1776
+            1777:         316 Load 318(s1DArrayShadow)
+            1778:  167(fvec3) Load 169(c3)
+            1779:   52(float) Load 1393(dPdxy1)
+            1780:   52(float) Load 1393(dPdxy1)
+            1781:   52(float) CompositeExtract 1778 2
+            1782:    6(float) ImageSampleDrefExplicitLod 1777 1778 1781 Grad ConstOffset 1779 1780 709
+            1783:    208(ptr) AccessChain 1632(texel) 207
+            1784:    6(float) Load 1783
+            1785:    6(float) FAdd 1784 1782
+            1786:    208(ptr) AccessChain 1632(texel) 207
+                              Store 1786 1785
+            1787:         316 Load 318(s1DArrayShadow)
+            1788:  154(fvec2) Load 156(f16c2)
+            1789:   52(float) Load 215(compare)
+            1790:    6(float) Load 1401(f16dPdxy1)
+            1791:    6(float) Load 1401(f16dPdxy1)
+            1792:    6(float) ImageSampleDrefExplicitLod 1787 1788 1789 Grad ConstOffset 1790 1791 709
+            1793:    208(ptr) AccessChain 1632(texel) 207
+            1794:    6(float) Load 1793
+            1795:    6(float) FAdd 1794 1792
+            1796:    208(ptr) AccessChain 1632(texel) 207
+                              Store 1796 1795
+            1797:         337 Load 339(s2DArrayShadow)
+            1798:  249(fvec4) Load 251(c4)
+            1799:   53(fvec2) Load 1409(dPdxy2)
+            1800:   53(fvec2) Load 1409(dPdxy2)
+            1801:   52(float) CompositeExtract 1798 3
+            1802:    6(float) ImageSampleDrefExplicitLod 1797 1798 1801 Grad ConstOffset 1799 1800 722
+            1803:    208(ptr) AccessChain 1632(texel) 207
+            1804:    6(float) Load 1803
+            1805:    6(float) FAdd 1804 1802
+            1806:    208(ptr) AccessChain 1632(texel) 207
+                              Store 1806 1805
+            1807:         337 Load 339(s2DArrayShadow)
+            1808:  175(fvec3) Load 177(f16c3)
+            1809:   52(float) Load 215(compare)
+            1810:  154(fvec2) Load 1417(f16dPdxy2)
+            1811:  154(fvec2) Load 1417(f16dPdxy2)
+            1812:    6(float) ImageSampleDrefExplicitLod 1807 1808 1809 Grad ConstOffset 1810 1811 722
+            1813:    208(ptr) AccessChain 1632(texel) 207
+            1814:    6(float) Load 1813
+            1815:    6(float) FAdd 1814 1812
+            1816:    208(ptr) AccessChain 1632(texel) 207
+                              Store 1816 1815
+            1817:    7(fvec4) Load 1632(texel)
+                              ReturnValue 1817
+                              FunctionEnd
+31(testTextureProjGrad():    7(fvec4) Function None 8
+              32:             Label
+     1820(texel):     64(ptr) Variable Function
+                              Store 1820(texel) 121
+            1821:         123 Load 125(s1D)
+            1822:   53(fvec2) Load 148(c2)
+            1823:   52(float) Load 1393(dPdxy1)
+            1824:   52(float) Load 1393(dPdxy1)
+            1825:    7(fvec4) ImageSampleProjExplicitLod 1821 1822 Grad 1823 1824
+            1826:    7(fvec4) Load 1820(texel)
+            1827:    7(fvec4) FAdd 1826 1825
+                              Store 1820(texel) 1827
+            1828:         123 Load 125(s1D)
+            1829:  154(fvec2) Load 156(f16c2)
+            1830:    6(float) Load 1401(f16dPdxy1)
+            1831:    6(float) Load 1401(f16dPdxy1)
+            1832:    7(fvec4) ImageSampleProjExplicitLod 1828 1829 Grad 1830 1831
+            1833:    7(fvec4) Load 1820(texel)
+            1834:    7(fvec4) FAdd 1833 1832
+                              Store 1820(texel) 1834
+            1835:         123 Load 125(s1D)
+            1836:  249(fvec4) Load 251(c4)
+            1837:   52(float) Load 1393(dPdxy1)
+            1838:   52(float) Load 1393(dPdxy1)
+            1839:   52(float) CompositeExtract 1836 3
+            1840:  249(fvec4) CompositeInsert 1839 1836 1
+            1841:    7(fvec4) ImageSampleProjExplicitLod 1835 1840 Grad 1837 1838
+            1842:    7(fvec4) Load 1820(texel)
+            1843:    7(fvec4) FAdd 1842 1841
+                              Store 1820(texel) 1843
+            1844:         123 Load 125(s1D)
+            1845:    7(fvec4) Load 309(f16c4)
+            1846:    6(float) Load 1401(f16dPdxy1)
+            1847:    6(float) Load 1401(f16dPdxy1)
+            1848:    6(float) CompositeExtract 1845 3
+            1849:    7(fvec4) CompositeInsert 1848 1845 1
+            1850:    7(fvec4) ImageSampleProjExplicitLod 1844 1849 Grad 1846 1847
+            1851:    7(fvec4) Load 1820(texel)
+            1852:    7(fvec4) FAdd 1851 1850
+                              Store 1820(texel) 1852
+            1853:         143 Load 145(s2D)
+            1854:  167(fvec3) Load 169(c3)
+            1855:   53(fvec2) Load 1409(dPdxy2)
+            1856:   53(fvec2) Load 1409(dPdxy2)
+            1857:    7(fvec4) ImageSampleProjExplicitLod 1853 1854 Grad 1855 1856
+            1858:    7(fvec4) Load 1820(texel)
+            1859:    7(fvec4) FAdd 1858 1857
+                              Store 1820(texel) 1859
+            1860:         143 Load 145(s2D)
+            1861:  175(fvec3) Load 177(f16c3)
+            1862:  154(fvec2) Load 1417(f16dPdxy2)
+            1863:  154(fvec2) Load 1417(f16dPdxy2)
+            1864:    7(fvec4) ImageSampleProjExplicitLod 1860 1861 Grad 1862 1863
+            1865:    7(fvec4) Load 1820(texel)
+            1866:    7(fvec4) FAdd 1865 1864
+                              Store 1820(texel) 1866
+            1867:         143 Load 145(s2D)
+            1868:  249(fvec4) Load 251(c4)
+            1869:   53(fvec2) Load 1409(dPdxy2)
+            1870:   53(fvec2) Load 1409(dPdxy2)
+            1871:   52(float) CompositeExtract 1868 3
+            1872:  249(fvec4) CompositeInsert 1871 1868 2
+            1873:    7(fvec4) ImageSampleProjExplicitLod 1867 1872 Grad 1869 1870
+            1874:    7(fvec4) Load 1820(texel)
+            1875:    7(fvec4) FAdd 1874 1873
+                              Store 1820(texel) 1875
+            1876:         143 Load 145(s2D)
+            1877:    7(fvec4) Load 309(f16c4)
+            1878:  154(fvec2) Load 1417(f16dPdxy2)
+            1879:  154(fvec2) Load 1417(f16dPdxy2)
+            1880:    6(float) CompositeExtract 1877 3
+            1881:    7(fvec4) CompositeInsert 1880 1877 2
+            1882:    7(fvec4) ImageSampleProjExplicitLod 1876 1881 Grad 1878 1879
+            1883:    7(fvec4) Load 1820(texel)
+            1884:    7(fvec4) FAdd 1883 1882
+                              Store 1820(texel) 1884
+            1885:         163 Load 165(s3D)
+            1886:  249(fvec4) Load 251(c4)
+            1887:  167(fvec3) Load 1425(dPdxy3)
+            1888:  167(fvec3) Load 1425(dPdxy3)
+            1889:    7(fvec4) ImageSampleProjExplicitLod 1885 1886 Grad 1887 1888
+            1890:    7(fvec4) Load 1820(texel)
+            1891:    7(fvec4) FAdd 1890 1889
+                              Store 1820(texel) 1891
+            1892:         163 Load 165(s3D)
+            1893:    7(fvec4) Load 309(f16c4)
+            1894:  175(fvec3) Load 1433(f16dPdxy3)
+            1895:  175(fvec3) Load 1433(f16dPdxy3)
+            1896:    7(fvec4) ImageSampleProjExplicitLod 1892 1893 Grad 1894 1895
+            1897:    7(fvec4) Load 1820(texel)
+            1898:    7(fvec4) FAdd 1897 1896
+                              Store 1820(texel) 1898
+            1899:         357 Load 359(s2DRect)
+            1900:  167(fvec3) Load 169(c3)
+            1901:   53(fvec2) Load 1409(dPdxy2)
+            1902:   53(fvec2) Load 1409(dPdxy2)
+            1903:    7(fvec4) ImageSampleProjExplicitLod 1899 1900 Grad 1901 1902
+            1904:    7(fvec4) Load 1820(texel)
+            1905:    7(fvec4) FAdd 1904 1903
+                              Store 1820(texel) 1905
+            1906:         357 Load 359(s2DRect)
+            1907:  175(fvec3) Load 177(f16c3)
+            1908:  154(fvec2) Load 1417(f16dPdxy2)
+            1909:  154(fvec2) Load 1417(f16dPdxy2)
+            1910:    7(fvec4) ImageSampleProjExplicitLod 1906 1907 Grad 1908 1909
+            1911:    7(fvec4) Load 1820(texel)
+            1912:    7(fvec4) FAdd 1911 1910
+                              Store 1820(texel) 1912
+            1913:         357 Load 359(s2DRect)
+            1914:  249(fvec4) Load 251(c4)
+            1915:   53(fvec2) Load 1409(dPdxy2)
+            1916:   53(fvec2) Load 1409(dPdxy2)
+            1917:   52(float) CompositeExtract 1914 3
+            1918:  249(fvec4) CompositeInsert 1917 1914 2
+            1919:    7(fvec4) ImageSampleProjExplicitLod 1913 1918 Grad 1915 1916
+            1920:    7(fvec4) Load 1820(texel)
+            1921:    7(fvec4) FAdd 1920 1919
+                              Store 1820(texel) 1921
+            1922:         357 Load 359(s2DRect)
+            1923:    7(fvec4) Load 309(f16c4)
+            1924:  154(fvec2) Load 1417(f16dPdxy2)
+            1925:  154(fvec2) Load 1417(f16dPdxy2)
+            1926:    6(float) CompositeExtract 1923 3
+            1927:    7(fvec4) CompositeInsert 1926 1923 2
+            1928:    7(fvec4) ImageSampleProjExplicitLod 1922 1927 Grad 1924 1925
+            1929:    7(fvec4) Load 1820(texel)
+            1930:    7(fvec4) FAdd 1929 1928
+                              Store 1820(texel) 1930
+            1931:         371 Load 373(s2DRectShadow)
+            1932:  249(fvec4) Load 251(c4)
+            1933:   53(fvec2) Load 1409(dPdxy2)
+            1934:   53(fvec2) Load 1409(dPdxy2)
+            1935:   52(float) CompositeExtract 1932 2
+            1936:   52(float) CompositeExtract 1932 3
+            1937:  249(fvec4) CompositeInsert 1936 1932 2
+            1938:    6(float) ImageSampleProjDrefExplicitLod 1931 1937 1935 Grad 1933 1934
+            1939:    208(ptr) AccessChain 1820(texel) 207
+            1940:    6(float) Load 1939
+            1941:    6(float) FAdd 1940 1938
+            1942:    208(ptr) AccessChain 1820(texel) 207
+                              Store 1942 1941
+            1943:         371 Load 373(s2DRectShadow)
+            1944:  175(fvec3) Load 177(f16c3)
+            1945:   52(float) Load 215(compare)
+            1946:  154(fvec2) Load 1417(f16dPdxy2)
+            1947:  154(fvec2) Load 1417(f16dPdxy2)
+            1948:    6(float) ImageSampleProjDrefExplicitLod 1943 1944 1945 Grad 1946 1947
+            1949:    208(ptr) AccessChain 1820(texel) 207
+            1950:    6(float) Load 1949
+            1951:    6(float) FAdd 1950 1948
+            1952:    208(ptr) AccessChain 1820(texel) 207
+                              Store 1952 1951
+            1953:         199 Load 201(s1DShadow)
+            1954:  249(fvec4) Load 251(c4)
+            1955:   52(float) Load 1393(dPdxy1)
+            1956:   52(float) Load 1393(dPdxy1)
+            1957:   52(float) CompositeExtract 1954 2
+            1958:   52(float) CompositeExtract 1954 3
+            1959:  249(fvec4) CompositeInsert 1958 1954 1
+            1960:    6(float) ImageSampleProjDrefExplicitLod 1953 1959 1957 Grad 1955 1956
+            1961:    208(ptr) AccessChain 1820(texel) 207
+            1962:    6(float) Load 1961
+            1963:    6(float) FAdd 1962 1960
+            1964:    208(ptr) AccessChain 1820(texel) 207
+                              Store 1964 1963
+            1965:         199 Load 201(s1DShadow)
+            1966:  175(fvec3) Load 177(f16c3)
+            1967:   52(float) Load 215(compare)
+            1968:    6(float) Load 1401(f16dPdxy1)
+            1969:    6(float) Load 1401(f16dPdxy1)
+            1970:    6(float) CompositeExtract 1966 2
+            1971:  175(fvec3) CompositeInsert 1970 1966 1
+            1972:    6(float) ImageSampleProjDrefExplicitLod 1965 1971 1967 Grad 1968 1969
+            1973:    208(ptr) AccessChain 1820(texel) 207
+            1974:    6(float) Load 1973
+            1975:    6(float) FAdd 1974 1972
+            1976:    208(ptr) AccessChain 1820(texel) 207
+                              Store 1976 1975
+            1977:         224 Load 226(s2DShadow)
+            1978:  249(fvec4) Load 251(c4)
+            1979:   53(fvec2) Load 1409(dPdxy2)
+            1980:   53(fvec2) Load 1409(dPdxy2)
+            1981:   52(float) CompositeExtract 1978 2
+            1982:   52(float) CompositeExtract 1978 3
+            1983:  249(fvec4) CompositeInsert 1982 1978 2
+            1984:    6(float) ImageSampleProjDrefExplicitLod 1977 1983 1981 Grad 1979 1980
+            1985:    208(ptr) AccessChain 1820(texel) 207
+            1986:    6(float) Load 1985
+            1987:    6(float) FAdd 1986 1984
+            1988:    208(ptr) AccessChain 1820(texel) 207
+                              Store 1988 1987
+            1989:         224 Load 226(s2DShadow)
+            1990:  175(fvec3) Load 177(f16c3)
+            1991:   52(float) Load 215(compare)
+            1992:  154(fvec2) Load 1417(f16dPdxy2)
+            1993:  154(fvec2) Load 1417(f16dPdxy2)
+            1994:    6(float) ImageSampleProjDrefExplicitLod 1989 1990 1991 Grad 1992 1993
+            1995:    208(ptr) AccessChain 1820(texel) 207
+            1996:    6(float) Load 1995
+            1997:    6(float) FAdd 1996 1994
+            1998:    208(ptr) AccessChain 1820(texel) 207
+                              Store 1998 1997
+            1999:    7(fvec4) Load 1820(texel)
+                              ReturnValue 1999
+                              FunctionEnd
+33(testTextureProjGradoffset():    7(fvec4) Function None 8
+              34:             Label
+     2002(texel):     64(ptr) Variable Function
+                              Store 2002(texel) 121
+            2003:         123 Load 125(s1D)
+            2004:   53(fvec2) Load 148(c2)
+            2005:   52(float) Load 1393(dPdxy1)
+            2006:   52(float) Load 1393(dPdxy1)
+            2007:    7(fvec4) ImageSampleProjExplicitLod 2003 2004 Grad ConstOffset 2005 2006 709
+            2008:    7(fvec4) Load 2002(texel)
+            2009:    7(fvec4) FAdd 2008 2007
+                              Store 2002(texel) 2009
+            2010:         123 Load 125(s1D)
+            2011:  154(fvec2) Load 156(f16c2)
+            2012:    6(float) Load 1401(f16dPdxy1)
+            2013:    6(float) Load 1401(f16dPdxy1)
+            2014:    7(fvec4) ImageSampleProjExplicitLod 2010 2011 Grad ConstOffset 2012 2013 709
+            2015:    7(fvec4) Load 2002(texel)
+            2016:    7(fvec4) FAdd 2015 2014
+                              Store 2002(texel) 2016
+            2017:         123 Load 125(s1D)
+            2018:  249(fvec4) Load 251(c4)
+            2019:   52(float) Load 1393(dPdxy1)
+            2020:   52(float) Load 1393(dPdxy1)
+            2021:   52(float) CompositeExtract 2018 3
+            2022:  249(fvec4) CompositeInsert 2021 2018 1
+            2023:    7(fvec4) ImageSampleProjExplicitLod 2017 2022 Grad ConstOffset 2019 2020 709
+            2024:    7(fvec4) Load 2002(texel)
+            2025:    7(fvec4) FAdd 2024 2023
+                              Store 2002(texel) 2025
+            2026:         123 Load 125(s1D)
+            2027:    7(fvec4) Load 309(f16c4)
+            2028:    6(float) Load 1401(f16dPdxy1)
+            2029:    6(float) Load 1401(f16dPdxy1)
+            2030:    6(float) CompositeExtract 2027 3
+            2031:    7(fvec4) CompositeInsert 2030 2027 1
+            2032:    7(fvec4) ImageSampleProjExplicitLod 2026 2031 Grad ConstOffset 2028 2029 709
+            2033:    7(fvec4) Load 2002(texel)
+            2034:    7(fvec4) FAdd 2033 2032
+                              Store 2002(texel) 2034
+            2035:         143 Load 145(s2D)
+            2036:  167(fvec3) Load 169(c3)
+            2037:   53(fvec2) Load 1409(dPdxy2)
+            2038:   53(fvec2) Load 1409(dPdxy2)
+            2039:    7(fvec4) ImageSampleProjExplicitLod 2035 2036 Grad ConstOffset 2037 2038 722
+            2040:    7(fvec4) Load 2002(texel)
+            2041:    7(fvec4) FAdd 2040 2039
+                              Store 2002(texel) 2041
+            2042:         143 Load 145(s2D)
+            2043:  175(fvec3) Load 177(f16c3)
+            2044:  154(fvec2) Load 1417(f16dPdxy2)
+            2045:  154(fvec2) Load 1417(f16dPdxy2)
+            2046:    7(fvec4) ImageSampleProjExplicitLod 2042 2043 Grad ConstOffset 2044 2045 722
+            2047:    7(fvec4) Load 2002(texel)
+            2048:    7(fvec4) FAdd 2047 2046
+                              Store 2002(texel) 2048
+            2049:         143 Load 145(s2D)
+            2050:  249(fvec4) Load 251(c4)
+            2051:   53(fvec2) Load 1409(dPdxy2)
+            2052:   53(fvec2) Load 1409(dPdxy2)
+            2053:   52(float) CompositeExtract 2050 3
+            2054:  249(fvec4) CompositeInsert 2053 2050 2
+            2055:    7(fvec4) ImageSampleProjExplicitLod 2049 2054 Grad ConstOffset 2051 2052 722
+            2056:    7(fvec4) Load 2002(texel)
+            2057:    7(fvec4) FAdd 2056 2055
+                              Store 2002(texel) 2057
+            2058:         143 Load 145(s2D)
+            2059:    7(fvec4) Load 309(f16c4)
+            2060:  154(fvec2) Load 1417(f16dPdxy2)
+            2061:  154(fvec2) Load 1417(f16dPdxy2)
+            2062:    6(float) CompositeExtract 2059 3
+            2063:    7(fvec4) CompositeInsert 2062 2059 2
+            2064:    7(fvec4) ImageSampleProjExplicitLod 2058 2063 Grad ConstOffset 2060 2061 722
+            2065:    7(fvec4) Load 2002(texel)
+            2066:    7(fvec4) FAdd 2065 2064
+                              Store 2002(texel) 2066
+            2067:         357 Load 359(s2DRect)
+            2068:  167(fvec3) Load 169(c3)
+            2069:   53(fvec2) Load 1409(dPdxy2)
+            2070:   53(fvec2) Load 1409(dPdxy2)
+            2071:    7(fvec4) ImageSampleProjExplicitLod 2067 2068 Grad ConstOffset 2069 2070 722
+            2072:    7(fvec4) Load 2002(texel)
+            2073:    7(fvec4) FAdd 2072 2071
+                              Store 2002(texel) 2073
+            2074:         357 Load 359(s2DRect)
+            2075:  175(fvec3) Load 177(f16c3)
+            2076:  154(fvec2) Load 1417(f16dPdxy2)
+            2077:  154(fvec2) Load 1417(f16dPdxy2)
+            2078:    7(fvec4) ImageSampleProjExplicitLod 2074 2075 Grad ConstOffset 2076 2077 722
+            2079:    7(fvec4) Load 2002(texel)
+            2080:    7(fvec4) FAdd 2079 2078
+                              Store 2002(texel) 2080
+            2081:         357 Load 359(s2DRect)
+            2082:  249(fvec4) Load 251(c4)
+            2083:   53(fvec2) Load 1409(dPdxy2)
+            2084:   53(fvec2) Load 1409(dPdxy2)
+            2085:   52(float) CompositeExtract 2082 3
+            2086:  249(fvec4) CompositeInsert 2085 2082 2
+            2087:    7(fvec4) ImageSampleProjExplicitLod 2081 2086 Grad ConstOffset 2083 2084 722
+            2088:    7(fvec4) Load 2002(texel)
+            2089:    7(fvec4) FAdd 2088 2087
+                              Store 2002(texel) 2089
+            2090:         357 Load 359(s2DRect)
+            2091:    7(fvec4) Load 309(f16c4)
+            2092:  154(fvec2) Load 1417(f16dPdxy2)
+            2093:  154(fvec2) Load 1417(f16dPdxy2)
+            2094:    6(float) CompositeExtract 2091 3
+            2095:    7(fvec4) CompositeInsert 2094 2091 2
+            2096:    7(fvec4) ImageSampleProjExplicitLod 2090 2095 Grad ConstOffset 2092 2093 722
+            2097:    7(fvec4) Load 2002(texel)
+            2098:    7(fvec4) FAdd 2097 2096
+                              Store 2002(texel) 2098
+            2099:         371 Load 373(s2DRectShadow)
+            2100:  249(fvec4) Load 251(c4)
+            2101:   53(fvec2) Load 1409(dPdxy2)
+            2102:   53(fvec2) Load 1409(dPdxy2)
+            2103:   52(float) CompositeExtract 2100 2
+            2104:   52(float) CompositeExtract 2100 3
+            2105:  249(fvec4) CompositeInsert 2104 2100 2
+            2106:    6(float) ImageSampleProjDrefExplicitLod 2099 2105 2103 Grad ConstOffset 2101 2102 722
+            2107:    208(ptr) AccessChain 2002(texel) 207
+            2108:    6(float) Load 2107
+            2109:    6(float) FAdd 2108 2106
+            2110:    208(ptr) AccessChain 2002(texel) 207
+                              Store 2110 2109
+            2111:         371 Load 373(s2DRectShadow)
+            2112:  175(fvec3) Load 177(f16c3)
+            2113:   52(float) Load 215(compare)
+            2114:  154(fvec2) Load 1417(f16dPdxy2)
+            2115:  154(fvec2) Load 1417(f16dPdxy2)
+            2116:    6(float) ImageSampleProjDrefExplicitLod 2111 2112 2113 Grad ConstOffset 2114 2115 722
+            2117:    208(ptr) AccessChain 2002(texel) 207
+            2118:    6(float) Load 2117
+            2119:    6(float) FAdd 2118 2116
+            2120:    208(ptr) AccessChain 2002(texel) 207
+                              Store 2120 2119
+            2121:         163 Load 165(s3D)
+            2122:  249(fvec4) Load 251(c4)
+            2123:  167(fvec3) Load 1425(dPdxy3)
+            2124:  167(fvec3) Load 1425(dPdxy3)
+            2125:    7(fvec4) ImageSampleProjExplicitLod 2121 2122 Grad ConstOffset 2123 2124 735
+            2126:    7(fvec4) Load 2002(texel)
+            2127:    7(fvec4) FAdd 2126 2125
+                              Store 2002(texel) 2127
+            2128:         163 Load 165(s3D)
+            2129:    7(fvec4) Load 309(f16c4)
+            2130:  175(fvec3) Load 1433(f16dPdxy3)
+            2131:  175(fvec3) Load 1433(f16dPdxy3)
+            2132:    7(fvec4) ImageSampleProjExplicitLod 2128 2129 Grad ConstOffset 2130 2131 735
+            2133:    7(fvec4) Load 2002(texel)
+            2134:    7(fvec4) FAdd 2133 2132
+                              Store 2002(texel) 2134
+            2135:         199 Load 201(s1DShadow)
+            2136:  249(fvec4) Load 251(c4)
+            2137:   52(float) Load 1393(dPdxy1)
+            2138:   52(float) Load 1393(dPdxy1)
+            2139:   52(float) CompositeExtract 2136 2
+            2140:   52(float) CompositeExtract 2136 3
+            2141:  249(fvec4) CompositeInsert 2140 2136 1
+            2142:    6(float) ImageSampleProjDrefExplicitLod 2135 2141 2139 Grad ConstOffset 2137 2138 709
+            2143:    208(ptr) AccessChain 2002(texel) 207
+            2144:    6(float) Load 2143
+            2145:    6(float) FAdd 2144 2142
+            2146:    208(ptr) AccessChain 2002(texel) 207
+                              Store 2146 2145
+            2147:         199 Load 201(s1DShadow)
+            2148:  175(fvec3) Load 177(f16c3)
+            2149:   52(float) Load 215(compare)
+            2150:    6(float) Load 1401(f16dPdxy1)
+            2151:    6(float) Load 1401(f16dPdxy1)
+            2152:    6(float) CompositeExtract 2148 2
+            2153:  175(fvec3) CompositeInsert 2152 2148 1
+            2154:    6(float) ImageSampleProjDrefExplicitLod 2147 2153 2149 Grad ConstOffset 2150 2151 709
+            2155:    208(ptr) AccessChain 2002(texel) 207
+            2156:    6(float) Load 2155
+            2157:    6(float) FAdd 2156 2154
+            2158:    208(ptr) AccessChain 2002(texel) 207
+                              Store 2158 2157
+            2159:         224 Load 226(s2DShadow)
+            2160:  249(fvec4) Load 251(c4)
+            2161:   53(fvec2) Load 1409(dPdxy2)
+            2162:   53(fvec2) Load 1409(dPdxy2)
+            2163:   52(float) CompositeExtract 2160 2
+            2164:   52(float) CompositeExtract 2160 3
+            2165:  249(fvec4) CompositeInsert 2164 2160 2
+            2166:    6(float) ImageSampleProjDrefExplicitLod 2159 2165 2163 Grad ConstOffset 2161 2162 722
+            2167:    208(ptr) AccessChain 2002(texel) 207
+            2168:    6(float) Load 2167
+            2169:    6(float) FAdd 2168 2166
+            2170:    208(ptr) AccessChain 2002(texel) 207
+                              Store 2170 2169
+            2171:         224 Load 226(s2DShadow)
+            2172:  175(fvec3) Load 177(f16c3)
+            2173:   52(float) Load 215(compare)
+            2174:  154(fvec2) Load 1417(f16dPdxy2)
+            2175:  154(fvec2) Load 1417(f16dPdxy2)
+            2176:    6(float) ImageSampleProjDrefExplicitLod 2171 2172 2173 Grad ConstOffset 2174 2175 722
+            2177:    208(ptr) AccessChain 2002(texel) 207
+            2178:    6(float) Load 2177
+            2179:    6(float) FAdd 2178 2176
+            2180:    208(ptr) AccessChain 2002(texel) 207
+                              Store 2180 2179
+            2181:    7(fvec4) Load 2002(texel)
+                              ReturnValue 2181
+                              FunctionEnd
+35(testTextureGather():    7(fvec4) Function None 8
+              36:             Label
+     2184(texel):     64(ptr) Variable Function
+                              Store 2184(texel) 121
+            2185:         143 Load 145(s2D)
+            2186:   53(fvec2) Load 148(c2)
+            2188:    7(fvec4) ImageGather 2185 2186 2187
+            2189:    7(fvec4) Load 2184(texel)
+            2190:    7(fvec4) FAdd 2189 2188
+                              Store 2184(texel) 2190
+            2191:         143 Load 145(s2D)
+            2192:  154(fvec2) Load 156(f16c2)
+            2193:    6(float) Load 137(f16bias)
+            2194:    7(fvec4) ImageGather 2191 2192 2187 Bias 2193
+            2195:    7(fvec4) Load 2184(texel)
+            2196:    7(fvec4) FAdd 2195 2194
+                              Store 2184(texel) 2196
+            2197:         284 Load 286(s2DArray)
+            2198:  167(fvec3) Load 169(c3)
+            2199:    7(fvec4) ImageGather 2197 2198 2187
+            2200:    7(fvec4) Load 2184(texel)
+            2201:    7(fvec4) FAdd 2200 2199
+                              Store 2184(texel) 2201
+            2202:         284 Load 286(s2DArray)
+            2203:  175(fvec3) Load 177(f16c3)
+            2204:    6(float) Load 137(f16bias)
+            2205:    7(fvec4) ImageGather 2202 2203 2187 Bias 2204
+            2206:    7(fvec4) Load 2184(texel)
+            2207:    7(fvec4) FAdd 2206 2205
+                              Store 2184(texel) 2207
+            2208:         184 Load 186(sCube)
+            2209:  167(fvec3) Load 169(c3)
+            2210:    7(fvec4) ImageGather 2208 2209 2187
+            2211:    7(fvec4) Load 2184(texel)
+            2212:    7(fvec4) FAdd 2211 2210
+                              Store 2184(texel) 2212
+            2213:         184 Load 186(sCube)
+            2214:  175(fvec3) Load 177(f16c3)
+            2215:    6(float) Load 137(f16bias)
+            2216:    7(fvec4) ImageGather 2213 2214 2187 Bias 2215
+            2217:    7(fvec4) Load 2184(texel)
+            2218:    7(fvec4) FAdd 2217 2216
+                              Store 2184(texel) 2218
+            2219:         299 Load 301(sCubeArray)
+            2220:  249(fvec4) Load 251(c4)
+            2221:    7(fvec4) ImageGather 2219 2220 2187
+            2222:    7(fvec4) Load 2184(texel)
+            2223:    7(fvec4) FAdd 2222 2221
+                              Store 2184(texel) 2223
+            2224:         299 Load 301(sCubeArray)
+            2225:    7(fvec4) Load 309(f16c4)
+            2226:    6(float) Load 137(f16bias)
+            2227:    7(fvec4) ImageGather 2224 2225 2187 Bias 2226
+            2228:    7(fvec4) Load 2184(texel)
+            2229:    7(fvec4) FAdd 2228 2227
+                              Store 2184(texel) 2229
+            2230:         357 Load 359(s2DRect)
+            2231:   53(fvec2) Load 148(c2)
+            2232:    7(fvec4) ImageGather 2230 2231 2187
+            2233:    7(fvec4) Load 2184(texel)
+            2234:    7(fvec4) FAdd 2233 2232
+                              Store 2184(texel) 2234
+            2235:         357 Load 359(s2DRect)
+            2236:  154(fvec2) Load 156(f16c2)
+            2237:    7(fvec4) ImageGather 2235 2236 2187
+            2238:    7(fvec4) Load 2184(texel)
+            2239:    7(fvec4) FAdd 2238 2237
+                              Store 2184(texel) 2239
+            2240:         224 Load 226(s2DShadow)
+            2241:   53(fvec2) Load 148(c2)
+            2242:   52(float) Load 215(compare)
+            2243:    7(fvec4) ImageDrefGather 2240 2241 2242
+            2244:    7(fvec4) Load 2184(texel)
+            2245:    7(fvec4) FAdd 2244 2243
+                              Store 2184(texel) 2245
+            2246:         224 Load 226(s2DShadow)
+            2247:  154(fvec2) Load 156(f16c2)
+            2248:   52(float) Load 215(compare)
+            2249:    7(fvec4) ImageDrefGather 2246 2247 2248
+            2250:    7(fvec4) Load 2184(texel)
+            2251:    7(fvec4) FAdd 2250 2249
+                              Store 2184(texel) 2251
+            2252:         337 Load 339(s2DArrayShadow)
+            2253:  167(fvec3) Load 169(c3)
+            2254:   52(float) Load 215(compare)
+            2255:    7(fvec4) ImageDrefGather 2252 2253 2254
+            2256:    7(fvec4) Load 2184(texel)
+            2257:    7(fvec4) FAdd 2256 2255
+                              Store 2184(texel) 2257
+            2258:         337 Load 339(s2DArrayShadow)
+            2259:  175(fvec3) Load 177(f16c3)
+            2260:   52(float) Load 215(compare)
+            2261:    7(fvec4) ImageDrefGather 2258 2259 2260
+            2262:    7(fvec4) Load 2184(texel)
+            2263:    7(fvec4) FAdd 2262 2261
+                              Store 2184(texel) 2263
+            2264:         245 Load 247(sCubeShadow)
+            2265:  167(fvec3) Load 169(c3)
+            2266:   52(float) Load 215(compare)
+            2267:    7(fvec4) ImageDrefGather 2264 2265 2266
+            2268:    7(fvec4) Load 2184(texel)
+            2269:    7(fvec4) FAdd 2268 2267
+                              Store 2184(texel) 2269
+            2270:         245 Load 247(sCubeShadow)
+            2271:  175(fvec3) Load 177(f16c3)
+            2272:   52(float) Load 215(compare)
+            2273:    7(fvec4) ImageDrefGather 2270 2271 2272
+            2274:    7(fvec4) Load 2184(texel)
+            2275:    7(fvec4) FAdd 2274 2273
+                              Store 2184(texel) 2275
+            2276:         391 Load 393(sCubeArrayShadow)
+            2277:  249(fvec4) Load 251(c4)
+            2278:   52(float) Load 215(compare)
+            2279:    7(fvec4) ImageDrefGather 2276 2277 2278
+            2280:    7(fvec4) Load 2184(texel)
+            2281:    7(fvec4) FAdd 2280 2279
+                              Store 2184(texel) 2281
+            2282:         391 Load 393(sCubeArrayShadow)
+            2283:    7(fvec4) Load 309(f16c4)
+            2284:   52(float) Load 215(compare)
+            2285:    7(fvec4) ImageDrefGather 2282 2283 2284
+            2286:    7(fvec4) Load 2184(texel)
+            2287:    7(fvec4) FAdd 2286 2285
+                              Store 2184(texel) 2287
+            2288:         371 Load 373(s2DRectShadow)
+            2289:   53(fvec2) Load 148(c2)
+            2290:   52(float) Load 215(compare)
+            2291:    7(fvec4) ImageDrefGather 2288 2289 2290
+            2292:    7(fvec4) Load 2184(texel)
+            2293:    7(fvec4) FAdd 2292 2291
+                              Store 2184(texel) 2293
+            2294:         371 Load 373(s2DRectShadow)
+            2295:  154(fvec2) Load 156(f16c2)
+            2296:   52(float) Load 215(compare)
+            2297:    7(fvec4) ImageDrefGather 2294 2295 2296
+            2298:    7(fvec4) Load 2184(texel)
+            2299:    7(fvec4) FAdd 2298 2297
+                              Store 2184(texel) 2299
+            2300:    7(fvec4) Load 2184(texel)
+                              ReturnValue 2300
+                              FunctionEnd
+37(testTextureGatherOffset():    7(fvec4) Function None 8
+              38:             Label
+     2303(texel):     64(ptr) Variable Function
+                              Store 2303(texel) 121
+            2304:         143 Load 145(s2D)
+            2305:   53(fvec2) Load 148(c2)
+            2306:    7(fvec4) ImageGather 2304 2305 2187 ConstOffset 722
+            2307:    7(fvec4) Load 2303(texel)
+            2308:    7(fvec4) FAdd 2307 2306
+                              Store 2303(texel) 2308
+            2309:         143 Load 145(s2D)
+            2310:  154(fvec2) Load 156(f16c2)
+            2311:    6(float) Load 137(f16bias)
+            2312:    7(fvec4) ImageGather 2309 2310 2187 Bias ConstOffset 2311 722
+            2313:    7(fvec4) Load 2303(texel)
+            2314:    7(fvec4) FAdd 2313 2312
+                              Store 2303(texel) 2314
+            2315:         284 Load 286(s2DArray)
+            2316:  167(fvec3) Load 169(c3)
+            2317:    7(fvec4) ImageGather 2315 2316 2187 ConstOffset 722
+            2318:    7(fvec4) Load 2303(texel)
+            2319:    7(fvec4) FAdd 2318 2317
+                              Store 2303(texel) 2319
+            2320:         284 Load 286(s2DArray)
+            2321:  175(fvec3) Load 177(f16c3)
+            2322:    6(float) Load 137(f16bias)
+            2323:    7(fvec4) ImageGather 2320 2321 2187 Bias ConstOffset 2322 722
+            2324:    7(fvec4) Load 2303(texel)
+            2325:    7(fvec4) FAdd 2324 2323
+                              Store 2303(texel) 2325
+            2326:         357 Load 359(s2DRect)
+            2327:   53(fvec2) Load 148(c2)
+            2328:    7(fvec4) ImageGather 2326 2327 2187 ConstOffset 722
+            2329:    7(fvec4) Load 2303(texel)
+            2330:    7(fvec4) FAdd 2329 2328
+                              Store 2303(texel) 2330
+            2331:         357 Load 359(s2DRect)
+            2332:  154(fvec2) Load 156(f16c2)
+            2333:    7(fvec4) ImageGather 2331 2332 2187 ConstOffset 722
+            2334:    7(fvec4) Load 2303(texel)
+            2335:    7(fvec4) FAdd 2334 2333
+                              Store 2303(texel) 2335
+            2336:         224 Load 226(s2DShadow)
+            2337:   53(fvec2) Load 148(c2)
+            2338:   52(float) Load 215(compare)
+            2339:    7(fvec4) ImageDrefGather 2336 2337 2338 ConstOffset 722
+            2340:    7(fvec4) Load 2303(texel)
+            2341:    7(fvec4) FAdd 2340 2339
+                              Store 2303(texel) 2341
+            2342:         224 Load 226(s2DShadow)
+            2343:  154(fvec2) Load 156(f16c2)
+            2344:   52(float) Load 215(compare)
+            2345:    7(fvec4) ImageDrefGather 2342 2343 2344 ConstOffset 722
+            2346:    7(fvec4) Load 2303(texel)
+            2347:    7(fvec4) FAdd 2346 2345
+                              Store 2303(texel) 2347
+            2348:         337 Load 339(s2DArrayShadow)
+            2349:  167(fvec3) Load 169(c3)
+            2350:   52(float) Load 215(compare)
+            2351:    7(fvec4) ImageDrefGather 2348 2349 2350 ConstOffset 722
+            2352:    7(fvec4) Load 2303(texel)
+            2353:    7(fvec4) FAdd 2352 2351
+                              Store 2303(texel) 2353
+            2354:         337 Load 339(s2DArrayShadow)
+            2355:  175(fvec3) Load 177(f16c3)
+            2356:   52(float) Load 215(compare)
+            2357:    7(fvec4) ImageDrefGather 2354 2355 2356 ConstOffset 722
+            2358:    7(fvec4) Load 2303(texel)
+            2359:    7(fvec4) FAdd 2358 2357
+                              Store 2303(texel) 2359
+            2360:         371 Load 373(s2DRectShadow)
+            2361:   53(fvec2) Load 148(c2)
+            2362:   52(float) Load 215(compare)
+            2363:    7(fvec4) ImageDrefGather 2360 2361 2362 ConstOffset 722
+            2364:    7(fvec4) Load 2303(texel)
+            2365:    7(fvec4) FAdd 2364 2363
+                              Store 2303(texel) 2365
+            2366:         371 Load 373(s2DRectShadow)
+            2367:  154(fvec2) Load 156(f16c2)
+            2368:   52(float) Load 215(compare)
+            2369:    7(fvec4) ImageDrefGather 2366 2367 2368 ConstOffset 722
+            2370:    7(fvec4) Load 2303(texel)
+            2371:    7(fvec4) FAdd 2370 2369
+                              Store 2303(texel) 2371
+            2372:    7(fvec4) Load 2303(texel)
+                              ReturnValue 2372
+                              FunctionEnd
+39(testTextureGatherOffsets():    7(fvec4) Function None 8
+              40:             Label
+     2375(texel):     64(ptr) Variable Function
+                              Store 2375(texel) 121
+            2376:         143 Load 145(s2D)
+            2377:   53(fvec2) Load 148(c2)
+            2381:    7(fvec4) ImageGather 2376 2377 2187 ConstOffsets 2380
+            2382:    7(fvec4) Load 2375(texel)
+            2383:    7(fvec4) FAdd 2382 2381
+                              Store 2375(texel) 2383
+            2384:         143 Load 145(s2D)
+            2385:  154(fvec2) Load 156(f16c2)
+            2386:    6(float) Load 137(f16bias)
+            2387:    7(fvec4) ImageGather 2384 2385 2187 Bias ConstOffsets 2386 2380
+            2388:    7(fvec4) Load 2375(texel)
+            2389:    7(fvec4) FAdd 2388 2387
+                              Store 2375(texel) 2389
+            2390:         284 Load 286(s2DArray)
+            2391:  167(fvec3) Load 169(c3)
+            2392:    7(fvec4) ImageGather 2390 2391 2187 ConstOffsets 2380
+            2393:    7(fvec4) Load 2375(texel)
+            2394:    7(fvec4) FAdd 2393 2392
+                              Store 2375(texel) 2394
+            2395:         284 Load 286(s2DArray)
+            2396:  175(fvec3) Load 177(f16c3)
+            2397:    6(float) Load 137(f16bias)
+            2398:    7(fvec4) ImageGather 2395 2396 2187 Bias ConstOffsets 2397 2380
+            2399:    7(fvec4) Load 2375(texel)
+            2400:    7(fvec4) FAdd 2399 2398
+                              Store 2375(texel) 2400
+            2401:         357 Load 359(s2DRect)
+            2402:   53(fvec2) Load 148(c2)
+            2403:    7(fvec4) ImageGather 2401 2402 2187 ConstOffsets 2380
+            2404:    7(fvec4) Load 2375(texel)
+            2405:    7(fvec4) FAdd 2404 2403
+                              Store 2375(texel) 2405
+            2406:         357 Load 359(s2DRect)
+            2407:  154(fvec2) Load 156(f16c2)
+            2408:    7(fvec4) ImageGather 2406 2407 2187 ConstOffsets 2380
+            2409:    7(fvec4) Load 2375(texel)
+            2410:    7(fvec4) FAdd 2409 2408
+                              Store 2375(texel) 2410
+            2411:         224 Load 226(s2DShadow)
+            2412:   53(fvec2) Load 148(c2)
+            2413:   52(float) Load 215(compare)
+            2414:    7(fvec4) ImageDrefGather 2411 2412 2413 ConstOffsets 2380
+            2415:    7(fvec4) Load 2375(texel)
+            2416:    7(fvec4) FAdd 2415 2414
+                              Store 2375(texel) 2416
+            2417:         224 Load 226(s2DShadow)
+            2418:  154(fvec2) Load 156(f16c2)
+            2419:   52(float) Load 215(compare)
+            2420:    7(fvec4) ImageDrefGather 2417 2418 2419 ConstOffsets 2380
+            2421:    7(fvec4) Load 2375(texel)
+            2422:    7(fvec4) FAdd 2421 2420
+                              Store 2375(texel) 2422
+            2423:         337 Load 339(s2DArrayShadow)
+            2424:  167(fvec3) Load 169(c3)
+            2425:   52(float) Load 215(compare)
+            2426:    7(fvec4) ImageDrefGather 2423 2424 2425 ConstOffsets 2380
+            2427:    7(fvec4) Load 2375(texel)
+            2428:    7(fvec4) FAdd 2427 2426
+                              Store 2375(texel) 2428
+            2429:         337 Load 339(s2DArrayShadow)
+            2430:  175(fvec3) Load 177(f16c3)
+            2431:   52(float) Load 215(compare)
+            2432:    7(fvec4) ImageDrefGather 2429 2430 2431 ConstOffsets 2380
+            2433:    7(fvec4) Load 2375(texel)
+            2434:    7(fvec4) FAdd 2433 2432
+                              Store 2375(texel) 2434
+            2435:         371 Load 373(s2DRectShadow)
+            2436:   53(fvec2) Load 148(c2)
+            2437:   52(float) Load 215(compare)
+            2438:    7(fvec4) ImageDrefGather 2435 2436 2437 ConstOffsets 2380
+            2439:    7(fvec4) Load 2375(texel)
+            2440:    7(fvec4) FAdd 2439 2438
+                              Store 2375(texel) 2440
+            2441:         371 Load 373(s2DRectShadow)
+            2442:  154(fvec2) Load 156(f16c2)
+            2443:   52(float) Load 215(compare)
+            2444:    7(fvec4) ImageDrefGather 2441 2442 2443 ConstOffsets 2380
+            2445:    7(fvec4) Load 2375(texel)
+            2446:    7(fvec4) FAdd 2445 2444
+                              Store 2375(texel) 2446
+            2447:    7(fvec4) Load 2375(texel)
+                              ReturnValue 2447
+                              FunctionEnd
+41(testTextureGatherLod():    7(fvec4) Function None 8
+              42:             Label
+     2450(texel):     64(ptr) Variable Function
+                              Store 2450(texel) 121
+            2451:         143 Load 145(s2D)
+            2452:   53(fvec2) Load 148(c2)
+            2453:   52(float) Load 565(lod)
+            2454:    7(fvec4) ImageGather 2451 2452 2187 Lod 2453
+            2455:    7(fvec4) Load 2450(texel)
+            2456:    7(fvec4) FAdd 2455 2454
+                              Store 2450(texel) 2456
+            2457:         143 Load 145(s2D)
+            2458:  154(fvec2) Load 156(f16c2)
+            2459:    6(float) Load 572(f16lod)
+            2460:    7(fvec4) ImageGather 2457 2458 2187 Lod 2459
+            2461:    7(fvec4) Load 2450(texel)
+            2462:    7(fvec4) FAdd 2461 2460
+                              Store 2450(texel) 2462
+            2463:         284 Load 286(s2DArray)
+            2464:  167(fvec3) Load 169(c3)
+            2465:   52(float) Load 565(lod)
+            2466:    7(fvec4) ImageGather 2463 2464 2187 Lod 2465
+            2467:    7(fvec4) Load 2450(texel)
+            2468:    7(fvec4) FAdd 2467 2466
+                              Store 2450(texel) 2468
+            2469:         284 Load 286(s2DArray)
+            2470:  175(fvec3) Load 177(f16c3)
+            2471:    6(float) Load 572(f16lod)
+            2472:    7(fvec4) ImageGather 2469 2470 2187 Lod 2471
+            2473:    7(fvec4) Load 2450(texel)
+            2474:    7(fvec4) FAdd 2473 2472
+                              Store 2450(texel) 2474
+            2475:         184 Load 186(sCube)
+            2476:  167(fvec3) Load 169(c3)
+            2477:   52(float) Load 565(lod)
+            2478:    7(fvec4) ImageGather 2475 2476 2187 Lod 2477
+            2479:    7(fvec4) Load 2450(texel)
+            2480:    7(fvec4) FAdd 2479 2478
+                              Store 2450(texel) 2480
+            2481:         184 Load 186(sCube)
+            2482:  175(fvec3) Load 177(f16c3)
+            2483:    6(float) Load 572(f16lod)
+            2484:    7(fvec4) ImageGather 2481 2482 2187 Lod 2483
+            2485:    7(fvec4) Load 2450(texel)
+            2486:    7(fvec4) FAdd 2485 2484
+                              Store 2450(texel) 2486
+            2487:         299 Load 301(sCubeArray)
+            2488:  249(fvec4) Load 251(c4)
+            2489:   52(float) Load 565(lod)
+            2490:    7(fvec4) ImageGather 2487 2488 2187 Lod 2489
+            2491:    7(fvec4) Load 2450(texel)
+            2492:    7(fvec4) FAdd 2491 2490
+                              Store 2450(texel) 2492
+            2493:         299 Load 301(sCubeArray)
+            2494:    7(fvec4) Load 309(f16c4)
+            2495:    6(float) Load 572(f16lod)
+            2496:    7(fvec4) ImageGather 2493 2494 2187 Lod 2495
+            2497:    7(fvec4) Load 2450(texel)
+            2498:    7(fvec4) FAdd 2497 2496
+                              Store 2450(texel) 2498
+            2499:    7(fvec4) Load 2450(texel)
+                              ReturnValue 2499
+                              FunctionEnd
+43(testTextureGatherLodOffset():    7(fvec4) Function None 8
+              44:             Label
+     2502(texel):     64(ptr) Variable Function
+                              Store 2502(texel) 121
+            2503:         143 Load 145(s2D)
+            2504:   53(fvec2) Load 148(c2)
+            2505:   52(float) Load 565(lod)
+            2506:    7(fvec4) ImageGather 2503 2504 2187 Lod ConstOffset 2505 722
+            2507:    7(fvec4) Load 2502(texel)
+            2508:    7(fvec4) FAdd 2507 2506
+                              Store 2502(texel) 2508
+            2509:         143 Load 145(s2D)
+            2510:  154(fvec2) Load 156(f16c2)
+            2511:    6(float) Load 572(f16lod)
+            2512:    7(fvec4) ImageGather 2509 2510 2187 Lod ConstOffset 2511 722
+            2513:    7(fvec4) Load 2502(texel)
+            2514:    7(fvec4) FAdd 2513 2512
+                              Store 2502(texel) 2514
+            2515:         284 Load 286(s2DArray)
+            2516:  167(fvec3) Load 169(c3)
+            2517:   52(float) Load 565(lod)
+            2518:    7(fvec4) ImageGather 2515 2516 2187 Lod ConstOffset 2517 722
+            2519:    7(fvec4) Load 2502(texel)
+            2520:    7(fvec4) FAdd 2519 2518
+                              Store 2502(texel) 2520
+            2521:         284 Load 286(s2DArray)
+            2522:  175(fvec3) Load 177(f16c3)
+            2523:    6(float) Load 572(f16lod)
+            2524:    7(fvec4) ImageGather 2521 2522 2187 Lod ConstOffset 2523 722
+            2525:    7(fvec4) Load 2502(texel)
+            2526:    7(fvec4) FAdd 2525 2524
+                              Store 2502(texel) 2526
+            2527:    7(fvec4) Load 2502(texel)
+                              ReturnValue 2527
+                              FunctionEnd
+45(testTextureGatherLodOffsets():    7(fvec4) Function None 8
+              46:             Label
+     2530(texel):     64(ptr) Variable Function
+                              Store 2530(texel) 121
+            2531:         143 Load 145(s2D)
+            2532:   53(fvec2) Load 148(c2)
+            2533:   52(float) Load 565(lod)
+            2534:    7(fvec4) ImageGather 2531 2532 2187 Lod ConstOffsets 2533 2380
+            2535:    7(fvec4) Load 2530(texel)
+            2536:    7(fvec4) FAdd 2535 2534
+                              Store 2530(texel) 2536
+            2537:         143 Load 145(s2D)
+            2538:  154(fvec2) Load 156(f16c2)
+            2539:    6(float) Load 572(f16lod)
+            2540:    7(fvec4) ImageGather 2537 2538 2187 Lod ConstOffsets 2539 2380
+            2541:    7(fvec4) Load 2530(texel)
+            2542:    7(fvec4) FAdd 2541 2540
+                              Store 2530(texel) 2542
+            2543:         284 Load 286(s2DArray)
+            2544:  167(fvec3) Load 169(c3)
+            2545:   52(float) Load 565(lod)
+            2546:    7(fvec4) ImageGather 2543 2544 2187 Lod ConstOffsets 2545 2380
+            2547:    7(fvec4) Load 2530(texel)
+            2548:    7(fvec4) FAdd 2547 2546
+                              Store 2530(texel) 2548
+            2549:         284 Load 286(s2DArray)
+            2550:  175(fvec3) Load 177(f16c3)
+            2551:    6(float) Load 572(f16lod)
+            2552:    7(fvec4) ImageGather 2549 2550 2187 Lod ConstOffsets 2551 2380
+            2553:    7(fvec4) Load 2530(texel)
+            2554:    7(fvec4) FAdd 2553 2552
+                              Store 2530(texel) 2554
+            2555:    7(fvec4) Load 2530(texel)
+                              ReturnValue 2555
+                              FunctionEnd
+50(testTextureSize():   48(ivec4) Function None 49
+              51:             Label
+      2559(size):   2558(ptr) Variable Function
+                              Store 2559(size) 2560
+            2561:         123 Load 125(s1D)
+            2562:   52(float) Load 565(lod)
+            2563:     47(int) ConvertFToS 2562
+            2564:         122 Image 2561
+            2565:     47(int) ImageQuerySizeLod 2564 2563
+            2567:   2566(ptr) AccessChain 2559(size) 207
+            2568:     47(int) Load 2567
+            2569:     47(int) IAdd 2568 2565
+            2570:   2566(ptr) AccessChain 2559(size) 207
+                              Store 2570 2569
+            2571:         143 Load 145(s2D)
+            2572:   52(float) Load 565(lod)
+            2573:     47(int) ConvertFToS 2572
+            2574:         142 Image 2571
+            2575:  721(ivec2) ImageQuerySizeLod 2574 2573
+            2576:   48(ivec4) Load 2559(size)
+            2577:  721(ivec2) VectorShuffle 2576 2576 0 1
+            2578:  721(ivec2) IAdd 2577 2575
+            2579:   48(ivec4) Load 2559(size)
+            2580:   48(ivec4) VectorShuffle 2579 2578 4 5 2 3
+                              Store 2559(size) 2580
+            2581:         163 Load 165(s3D)
+            2582:   52(float) Load 565(lod)
+            2583:     47(int) ConvertFToS 2582
+            2584:         162 Image 2581
+            2585:  734(ivec3) ImageQuerySizeLod 2584 2583
+            2586:   48(ivec4) Load 2559(size)
+            2587:  734(ivec3) VectorShuffle 2586 2586 0 1 2
+            2588:  734(ivec3) IAdd 2587 2585
+            2589:   48(ivec4) Load 2559(size)
+            2590:   48(ivec4) VectorShuffle 2589 2588 4 5 6 3
+                              Store 2559(size) 2590
+            2591:         184 Load 186(sCube)
+            2592:   52(float) Load 565(lod)
+            2593:     47(int) ConvertFToS 2592
+            2594:         183 Image 2591
+            2595:  721(ivec2) ImageQuerySizeLod 2594 2593
+            2596:   48(ivec4) Load 2559(size)
+            2597:  721(ivec2) VectorShuffle 2596 2596 0 1
+            2598:  721(ivec2) IAdd 2597 2595
+            2599:   48(ivec4) Load 2559(size)
+            2600:   48(ivec4) VectorShuffle 2599 2598 4 5 2 3
+                              Store 2559(size) 2600
+            2601:         199 Load 201(s1DShadow)
+            2602:   52(float) Load 565(lod)
+            2603:     47(int) ConvertFToS 2602
+            2604:         198 Image 2601
+            2605:     47(int) ImageQuerySizeLod 2604 2603
+            2606:   2566(ptr) AccessChain 2559(size) 207
+            2607:     47(int) Load 2606
+            2608:     47(int) IAdd 2607 2605
+            2609:   2566(ptr) AccessChain 2559(size) 207
+                              Store 2609 2608
+            2610:         224 Load 226(s2DShadow)
+            2611:   52(float) Load 565(lod)
+            2612:     47(int) ConvertFToS 2611
+            2613:         223 Image 2610
+            2614:  721(ivec2) ImageQuerySizeLod 2613 2612
+            2615:   48(ivec4) Load 2559(size)
+            2616:  721(ivec2) VectorShuffle 2615 2615 0 1
+            2617:  721(ivec2) IAdd 2616 2614
+            2618:   48(ivec4) Load 2559(size)
+            2619:   48(ivec4) VectorShuffle 2618 2617 4 5 2 3
+                              Store 2559(size) 2619
+            2620:         245 Load 247(sCubeShadow)
+            2621:   52(float) Load 565(lod)
+            2622:     47(int) ConvertFToS 2621
+            2623:         244 Image 2620
+            2624:  721(ivec2) ImageQuerySizeLod 2623 2622
+            2625:   48(ivec4) Load 2559(size)
+            2626:  721(ivec2) VectorShuffle 2625 2625 0 1
+            2627:  721(ivec2) IAdd 2626 2624
+            2628:   48(ivec4) Load 2559(size)
+            2629:   48(ivec4) VectorShuffle 2628 2627 4 5 2 3
+                              Store 2559(size) 2629
+            2630:         299 Load 301(sCubeArray)
+            2631:   52(float) Load 565(lod)
+            2632:     47(int) ConvertFToS 2631
+            2633:         298 Image 2630
+            2634:  734(ivec3) ImageQuerySizeLod 2633 2632
+            2635:   48(ivec4) Load 2559(size)
+            2636:  734(ivec3) VectorShuffle 2635 2635 0 1 2
+            2637:  734(ivec3) IAdd 2636 2634
+            2638:   48(ivec4) Load 2559(size)
+            2639:   48(ivec4) VectorShuffle 2638 2637 4 5 6 3
+                              Store 2559(size) 2639
+            2640:         391 Load 393(sCubeArrayShadow)
+            2641:   52(float) Load 565(lod)
+            2642:     47(int) ConvertFToS 2641
+            2643:         390 Image 2640
+            2644:  734(ivec3) ImageQuerySizeLod 2643 2642
+            2645:   48(ivec4) Load 2559(size)
+            2646:  734(ivec3) VectorShuffle 2645 2645 0 1 2
+            2647:  734(ivec3) IAdd 2646 2644
+            2648:   48(ivec4) Load 2559(size)
+            2649:   48(ivec4) VectorShuffle 2648 2647 4 5 6 3
+                              Store 2559(size) 2649
+            2650:         357 Load 359(s2DRect)
+            2651:         356 Image 2650
+            2652:  721(ivec2) ImageQuerySize 2651
+            2653:   48(ivec4) Load 2559(size)
+            2654:  721(ivec2) VectorShuffle 2653 2653 0 1
+            2655:  721(ivec2) IAdd 2654 2652
+            2656:   48(ivec4) Load 2559(size)
+            2657:   48(ivec4) VectorShuffle 2656 2655 4 5 2 3
+                              Store 2559(size) 2657
+            2658:         371 Load 373(s2DRectShadow)
+            2659:         370 Image 2658
+            2660:  721(ivec2) ImageQuerySize 2659
+            2661:   48(ivec4) Load 2559(size)
+            2662:  721(ivec2) VectorShuffle 2661 2661 0 1
+            2663:  721(ivec2) IAdd 2662 2660
+            2664:   48(ivec4) Load 2559(size)
+            2665:   48(ivec4) VectorShuffle 2664 2663 4 5 2 3
+                              Store 2559(size) 2665
+            2666:         269 Load 271(s1DArray)
+            2667:   52(float) Load 565(lod)
+            2668:     47(int) ConvertFToS 2667
+            2669:         268 Image 2666
+            2670:  721(ivec2) ImageQuerySizeLod 2669 2668
+            2671:   48(ivec4) Load 2559(size)
+            2672:  721(ivec2) VectorShuffle 2671 2671 0 1
+            2673:  721(ivec2) IAdd 2672 2670
+            2674:   48(ivec4) Load 2559(size)
+            2675:   48(ivec4) VectorShuffle 2674 2673 4 5 2 3
+                              Store 2559(size) 2675
+            2676:         284 Load 286(s2DArray)
+            2677:   52(float) Load 565(lod)
+            2678:     47(int) ConvertFToS 2677
+            2679:         283 Image 2676
+            2680:  734(ivec3) ImageQuerySizeLod 2679 2678
+            2681:   48(ivec4) Load 2559(size)
+            2682:  734(ivec3) VectorShuffle 2681 2681 0 1 2
+            2683:  734(ivec3) IAdd 2682 2680
+            2684:   48(ivec4) Load 2559(size)
+            2685:   48(ivec4) VectorShuffle 2684 2683 4 5 6 3
+                              Store 2559(size) 2685
+            2686:         316 Load 318(s1DArrayShadow)
+            2687:   52(float) Load 565(lod)
+            2688:     47(int) ConvertFToS 2687
+            2689:         315 Image 2686
+            2690:  721(ivec2) ImageQuerySizeLod 2689 2688
+            2691:   48(ivec4) Load 2559(size)
+            2692:  721(ivec2) VectorShuffle 2691 2691 0 1
+            2693:  721(ivec2) IAdd 2692 2690
+            2694:   48(ivec4) Load 2559(size)
+            2695:   48(ivec4) VectorShuffle 2694 2693 4 5 2 3
+                              Store 2559(size) 2695
+            2696:         337 Load 339(s2DArrayShadow)
+            2697:   52(float) Load 565(lod)
+            2698:     47(int) ConvertFToS 2697
+            2699:         336 Image 2696
+            2700:  734(ivec3) ImageQuerySizeLod 2699 2698
+            2701:   48(ivec4) Load 2559(size)
+            2702:  734(ivec3) VectorShuffle 2701 2701 0 1 2
+            2703:  734(ivec3) IAdd 2702 2700
+            2704:   48(ivec4) Load 2559(size)
+            2705:   48(ivec4) VectorShuffle 2704 2703 4 5 6 3
+                              Store 2559(size) 2705
+            2706:        1298 Load 1300(sBuffer)
+            2707:        1297 Image 2706
+            2708:     47(int) ImageQuerySize 2707
+            2709:   2566(ptr) AccessChain 2559(size) 207
+            2710:     47(int) Load 2709
+            2711:     47(int) IAdd 2710 2708
+            2712:   2566(ptr) AccessChain 2559(size) 207
+                              Store 2712 2711
+            2713:        1309 Load 1311(s2DMS)
+            2714:        1308 Image 2713
+            2715:  721(ivec2) ImageQuerySize 2714
+            2716:   48(ivec4) Load 2559(size)
+            2717:  721(ivec2) VectorShuffle 2716 2716 0 1
+            2718:  721(ivec2) IAdd 2717 2715
+            2719:   48(ivec4) Load 2559(size)
+            2720:   48(ivec4) VectorShuffle 2719 2718 4 5 2 3
+                              Store 2559(size) 2720
+            2721:        1320 Load 1322(s2DMSArray)
+            2722:        1319 Image 2721
+            2723:  734(ivec3) ImageQuerySize 2722
+            2724:   48(ivec4) Load 2559(size)
+            2725:  734(ivec3) VectorShuffle 2724 2724 0 1 2
+            2726:  734(ivec3) IAdd 2725 2723
+            2727:   48(ivec4) Load 2559(size)
+            2728:   48(ivec4) VectorShuffle 2727 2726 4 5 6 3
+                              Store 2559(size) 2728
+            2729:   48(ivec4) Load 2559(size)
+                              ReturnValue 2729
+                              FunctionEnd
+55(testTextureQueryLod():   53(fvec2) Function None 54
+              56:             Label
+       2733(lod):   2732(ptr) Variable Function
+                              Store 2733(lod) 2735
+            2736:         123 Load 125(s1D)
+            2737:   52(float) Load 128(c1)
+            2738:   53(fvec2) ImageQueryLod 2736 2737
+            2739:   53(fvec2) Load 2733(lod)
+            2740:   53(fvec2) FAdd 2739 2738
+                              Store 2733(lod) 2740
+            2741:         123 Load 125(s1D)
+            2742:    6(float) Load 135(f16c1)
+            2743:  154(fvec2) ImageQueryLod 2741 2742
+            2744:   53(fvec2) Load 2733(lod)
+            2745:   53(fvec2) FAdd 2744 2743
+                              Store 2733(lod) 2745
+            2746:         143 Load 145(s2D)
+            2747:   53(fvec2) Load 148(c2)
+            2748:   53(fvec2) ImageQueryLod 2746 2747
+            2749:   53(fvec2) Load 2733(lod)
+            2750:   53(fvec2) FAdd 2749 2748
+                              Store 2733(lod) 2750
+            2751:         143 Load 145(s2D)
+            2752:  154(fvec2) Load 156(f16c2)
+            2753:  154(fvec2) ImageQueryLod 2751 2752
+            2754:   53(fvec2) Load 2733(lod)
+            2755:   53(fvec2) FAdd 2754 2753
+                              Store 2733(lod) 2755
+            2756:         163 Load 165(s3D)
+            2757:  167(fvec3) Load 169(c3)
+            2758:   53(fvec2) ImageQueryLod 2756 2757
+            2759:   53(fvec2) Load 2733(lod)
+            2760:   53(fvec2) FAdd 2759 2758
+                              Store 2733(lod) 2760
+            2761:         163 Load 165(s3D)
+            2762:  175(fvec3) Load 177(f16c3)
+            2763:  154(fvec2) ImageQueryLod 2761 2762
+            2764:   53(fvec2) Load 2733(lod)
+            2765:   53(fvec2) FAdd 2764 2763
+                              Store 2733(lod) 2765
+            2766:         184 Load 186(sCube)
+            2767:  167(fvec3) Load 169(c3)
+            2768:   53(fvec2) ImageQueryLod 2766 2767
+            2769:   53(fvec2) Load 2733(lod)
+            2770:   53(fvec2) FAdd 2769 2768
+                              Store 2733(lod) 2770
+            2771:         184 Load 186(sCube)
+            2772:  175(fvec3) Load 177(f16c3)
+            2773:  154(fvec2) ImageQueryLod 2771 2772
+            2774:   53(fvec2) Load 2733(lod)
+            2775:   53(fvec2) FAdd 2774 2773
+                              Store 2733(lod) 2775
+            2776:         269 Load 271(s1DArray)
+            2777:   52(float) Load 128(c1)
+            2778:   53(fvec2) ImageQueryLod 2776 2777
+            2779:   53(fvec2) Load 2733(lod)
+            2780:   53(fvec2) FAdd 2779 2778
+                              Store 2733(lod) 2780
+            2781:         269 Load 271(s1DArray)
+            2782:    6(float) Load 135(f16c1)
+            2783:  154(fvec2) ImageQueryLod 2781 2782
+            2784:   53(fvec2) Load 2733(lod)
+            2785:   53(fvec2) FAdd 2784 2783
+                              Store 2733(lod) 2785
+            2786:         284 Load 286(s2DArray)
+            2787:   53(fvec2) Load 148(c2)
+            2788:   53(fvec2) ImageQueryLod 2786 2787
+            2789:   53(fvec2) Load 2733(lod)
+            2790:   53(fvec2) FAdd 2789 2788
+                              Store 2733(lod) 2790
+            2791:         284 Load 286(s2DArray)
+            2792:  154(fvec2) Load 156(f16c2)
+            2793:  154(fvec2) ImageQueryLod 2791 2792
+            2794:   53(fvec2) Load 2733(lod)
+            2795:   53(fvec2) FAdd 2794 2793
+                              Store 2733(lod) 2795
+            2796:         299 Load 301(sCubeArray)
+            2797:  167(fvec3) Load 169(c3)
+            2798:   53(fvec2) ImageQueryLod 2796 2797
+            2799:   53(fvec2) Load 2733(lod)
+            2800:   53(fvec2) FAdd 2799 2798
+                              Store 2733(lod) 2800
+            2801:         299 Load 301(sCubeArray)
+            2802:  175(fvec3) Load 177(f16c3)
+            2803:  154(fvec2) ImageQueryLod 2801 2802
+            2804:   53(fvec2) Load 2733(lod)
+            2805:   53(fvec2) FAdd 2804 2803
+                              Store 2733(lod) 2805
+            2806:         199 Load 201(s1DShadow)
+            2807:   52(float) Load 128(c1)
+            2808:   53(fvec2) ImageQueryLod 2806 2807
+            2809:   53(fvec2) Load 2733(lod)
+            2810:   53(fvec2) FAdd 2809 2808
+                              Store 2733(lod) 2810
+            2811:         199 Load 201(s1DShadow)
+            2812:    6(float) Load 135(f16c1)
+            2813:  154(fvec2) ImageQueryLod 2811 2812
+            2814:   53(fvec2) Load 2733(lod)
+            2815:   53(fvec2) FAdd 2814 2813
+                              Store 2733(lod) 2815
+            2816:         224 Load 226(s2DShadow)
+            2817:   53(fvec2) Load 148(c2)
+            2818:   53(fvec2) ImageQueryLod 2816 2817
+            2819:   53(fvec2) Load 2733(lod)
+            2820:   53(fvec2) FAdd 2819 2818
+                              Store 2733(lod) 2820
+            2821:         224 Load 226(s2DShadow)
+            2822:  154(fvec2) Load 156(f16c2)
+            2823:  154(fvec2) ImageQueryLod 2821 2822
+            2824:   53(fvec2) Load 2733(lod)
+            2825:   53(fvec2) FAdd 2824 2823
+                              Store 2733(lod) 2825
+            2826:         391 Load 393(sCubeArrayShadow)
+            2827:  167(fvec3) Load 169(c3)
+            2828:   53(fvec2) ImageQueryLod 2826 2827
+            2829:   53(fvec2) Load 2733(lod)
+            2830:   53(fvec2) FAdd 2829 2828
+                              Store 2733(lod) 2830
+            2831:         391 Load 393(sCubeArrayShadow)
+            2832:  175(fvec3) Load 177(f16c3)
+            2833:  154(fvec2) ImageQueryLod 2831 2832
+            2834:   53(fvec2) Load 2733(lod)
+            2835:   53(fvec2) FAdd 2834 2833
+                              Store 2733(lod) 2835
+            2836:         316 Load 318(s1DArrayShadow)
+            2837:   52(float) Load 128(c1)
+            2838:   53(fvec2) ImageQueryLod 2836 2837
+            2839:   53(fvec2) Load 2733(lod)
+            2840:   53(fvec2) FAdd 2839 2838
+                              Store 2733(lod) 2840
+            2841:         316 Load 318(s1DArrayShadow)
+            2842:    6(float) Load 135(f16c1)
+            2843:  154(fvec2) ImageQueryLod 2841 2842
+            2844:   53(fvec2) Load 2733(lod)
+            2845:   53(fvec2) FAdd 2844 2843
+                              Store 2733(lod) 2845
+            2846:         337 Load 339(s2DArrayShadow)
+            2847:   53(fvec2) Load 148(c2)
+            2848:   53(fvec2) ImageQueryLod 2846 2847
+            2849:   53(fvec2) Load 2733(lod)
+            2850:   53(fvec2) FAdd 2849 2848
+                              Store 2733(lod) 2850
+            2851:         337 Load 339(s2DArrayShadow)
+            2852:  154(fvec2) Load 156(f16c2)
+            2853:  154(fvec2) ImageQueryLod 2851 2852
+            2854:   53(fvec2) Load 2733(lod)
+            2855:   53(fvec2) FAdd 2854 2853
+                              Store 2733(lod) 2855
+            2856:         391 Load 393(sCubeArrayShadow)
+            2857:  167(fvec3) Load 169(c3)
+            2858:   53(fvec2) ImageQueryLod 2856 2857
+            2859:   53(fvec2) Load 2733(lod)
+            2860:   53(fvec2) FAdd 2859 2858
+                              Store 2733(lod) 2860
+            2861:         391 Load 393(sCubeArrayShadow)
+            2862:  175(fvec3) Load 177(f16c3)
+            2863:  154(fvec2) ImageQueryLod 2861 2862
+            2864:   53(fvec2) Load 2733(lod)
+            2865:   53(fvec2) FAdd 2864 2863
+                              Store 2733(lod) 2865
+            2866:   53(fvec2) Load 2733(lod)
+                              ReturnValue 2866
+                              FunctionEnd
+58(testTextureQueryLevels():     47(int) Function None 57
+              59:             Label
+    2869(levels):   2566(ptr) Variable Function
+                              Store 2869(levels) 2187
+            2870:         123 Load 125(s1D)
+            2871:         122 Image 2870
+            2872:     47(int) ImageQueryLevels 2871
+            2873:     47(int) Load 2869(levels)
+            2874:     47(int) IAdd 2873 2872
+                              Store 2869(levels) 2874
+            2875:         143 Load 145(s2D)
+            2876:         142 Image 2875
+            2877:     47(int) ImageQueryLevels 2876
+            2878:     47(int) Load 2869(levels)
+            2879:     47(int) IAdd 2878 2877
+                              Store 2869(levels) 2879
+            2880:         163 Load 165(s3D)
+            2881:         162 Image 2880
+            2882:     47(int) ImageQueryLevels 2881
+            2883:     47(int) Load 2869(levels)
+            2884:     47(int) IAdd 2883 2882
+                              Store 2869(levels) 2884
+            2885:         184 Load 186(sCube)
+            2886:         183 Image 2885
+            2887:     47(int) ImageQueryLevels 2886
+            2888:     47(int) Load 2869(levels)
+            2889:     47(int) IAdd 2888 2887
+                              Store 2869(levels) 2889
+            2890:         199 Load 201(s1DShadow)
+            2891:         198 Image 2890
+            2892:     47(int) ImageQueryLevels 2891
+            2893:     47(int) Load 2869(levels)
+            2894:     47(int) IAdd 2893 2892
+                              Store 2869(levels) 2894
+            2895:         224 Load 226(s2DShadow)
+            2896:         223 Image 2895
+            2897:     47(int) ImageQueryLevels 2896
+            2898:     47(int) Load 2869(levels)
+            2899:     47(int) IAdd 2898 2897
+                              Store 2869(levels) 2899
+            2900:         245 Load 247(sCubeShadow)
+            2901:         244 Image 2900
+            2902:     47(int) ImageQueryLevels 2901
+            2903:     47(int) Load 2869(levels)
+            2904:     47(int) IAdd 2903 2902
+                              Store 2869(levels) 2904
+            2905:         299 Load 301(sCubeArray)
+            2906:         298 Image 2905
+            2907:     47(int) ImageQueryLevels 2906
+            2908:     47(int) Load 2869(levels)
+            2909:     47(int) IAdd 2908 2907
+                              Store 2869(levels) 2909
+            2910:         391 Load 393(sCubeArrayShadow)
+            2911:         390 Image 2910
+            2912:     47(int) ImageQueryLevels 2911
+            2913:     47(int) Load 2869(levels)
+            2914:     47(int) IAdd 2913 2912
+                              Store 2869(levels) 2914
+            2915:         269 Load 271(s1DArray)
+            2916:         268 Image 2915
+            2917:     47(int) ImageQueryLevels 2916
+            2918:     47(int) Load 2869(levels)
+            2919:     47(int) IAdd 2918 2917
+                              Store 2869(levels) 2919
+            2920:         284 Load 286(s2DArray)
+            2921:         283 Image 2920
+            2922:     47(int) ImageQueryLevels 2921
+            2923:     47(int) Load 2869(levels)
+            2924:     47(int) IAdd 2923 2922
+                              Store 2869(levels) 2924
+            2925:         316 Load 318(s1DArrayShadow)
+            2926:         315 Image 2925
+            2927:     47(int) ImageQueryLevels 2926
+            2928:     47(int) Load 2869(levels)
+            2929:     47(int) IAdd 2928 2927
+                              Store 2869(levels) 2929
+            2930:         337 Load 339(s2DArrayShadow)
+            2931:         336 Image 2930
+            2932:     47(int) ImageQueryLevels 2931
+            2933:     47(int) Load 2869(levels)
+            2934:     47(int) IAdd 2933 2932
+                              Store 2869(levels) 2934
+            2935:     47(int) Load 2869(levels)
+                              ReturnValue 2935
+                              FunctionEnd
+60(testTextureSamples():     47(int) Function None 57
+              61:             Label
+   2938(samples):   2566(ptr) Variable Function
+                              Store 2938(samples) 2187
+            2939:        1309 Load 1311(s2DMS)
+            2940:        1308 Image 2939
+            2941:     47(int) ImageQuerySamples 2940
+            2942:     47(int) Load 2938(samples)
+            2943:     47(int) IAdd 2942 2941
+                              Store 2938(samples) 2943
+            2944:        1320 Load 1322(s2DMSArray)
+            2945:        1319 Image 2944
+            2946:     47(int) ImageQuerySamples 2945
+            2947:     47(int) Load 2938(samples)
+            2948:     47(int) IAdd 2947 2946
+                              Store 2938(samples) 2948
+            2949:     47(int) Load 2938(samples)
+                              ReturnValue 2949
+                              FunctionEnd
+62(testImageLoad():    7(fvec4) Function None 8
+              63:             Label
+     2952(texel):     64(ptr) Variable Function
+                              Store 2952(texel) 121
+            2956:        2953 Load 2955(i1D)
+            2957:   52(float) Load 128(c1)
+            2958:     47(int) ConvertFToS 2957
+            2959:    7(fvec4) ImageRead 2956 2958
+            2960:    7(fvec4) Load 2952(texel)
+            2961:    7(fvec4) FAdd 2960 2959
+                              Store 2952(texel) 2961
+            2965:        2962 Load 2964(i2D)
+            2966:   53(fvec2) Load 148(c2)
+            2967:  721(ivec2) ConvertFToS 2966
+            2968:    7(fvec4) ImageRead 2965 2967
+            2969:    7(fvec4) Load 2952(texel)
+            2970:    7(fvec4) FAdd 2969 2968
+                              Store 2952(texel) 2970
+            2974:        2971 Load 2973(i3D)
+            2975:  167(fvec3) Load 169(c3)
+            2976:  734(ivec3) ConvertFToS 2975
+            2977:    7(fvec4) ImageRead 2974 2976
+            2978:    7(fvec4) Load 2952(texel)
+            2979:    7(fvec4) FAdd 2978 2977
+                              Store 2952(texel) 2979
+            2983:        2980 Load 2982(i2DRect)
+            2984:   53(fvec2) Load 148(c2)
+            2985:  721(ivec2) ConvertFToS 2984
+            2986:    7(fvec4) ImageRead 2983 2985
+            2987:    7(fvec4) Load 2952(texel)
+            2988:    7(fvec4) FAdd 2987 2986
+                              Store 2952(texel) 2988
+            2992:        2989 Load 2991(iCube)
+            2993:  167(fvec3) Load 169(c3)
+            2994:  734(ivec3) ConvertFToS 2993
+            2995:    7(fvec4) ImageRead 2992 2994
+            2996:    7(fvec4) Load 2952(texel)
+            2997:    7(fvec4) FAdd 2996 2995
+                              Store 2952(texel) 2997
+            3001:        2998 Load 3000(iBuffer)
+            3002:   52(float) Load 128(c1)
+            3003:     47(int) ConvertFToS 3002
+            3004:    7(fvec4) ImageRead 3001 3003
+            3005:    7(fvec4) Load 2952(texel)
+            3006:    7(fvec4) FAdd 3005 3004
+                              Store 2952(texel) 3006
+            3010:        3007 Load 3009(i1DArray)
+            3011:   53(fvec2) Load 148(c2)
+            3012:  721(ivec2) ConvertFToS 3011
+            3013:    7(fvec4) ImageRead 3010 3012
+            3014:    7(fvec4) Load 2952(texel)
+            3015:    7(fvec4) FAdd 3014 3013
+                              Store 2952(texel) 3015
+            3019:        3016 Load 3018(i2DArray)
+            3020:  167(fvec3) Load 169(c3)
+            3021:  734(ivec3) ConvertFToS 3020
+            3022:    7(fvec4) ImageRead 3019 3021
+            3023:    7(fvec4) Load 2952(texel)
+            3024:    7(fvec4) FAdd 3023 3022
+                              Store 2952(texel) 3024
+            3028:        3025 Load 3027(iCubeArray)
+            3029:  167(fvec3) Load 169(c3)
+            3030:  734(ivec3) ConvertFToS 3029
+            3031:    7(fvec4) ImageRead 3028 3030
+            3032:    7(fvec4) Load 2952(texel)
+            3033:    7(fvec4) FAdd 3032 3031
+                              Store 2952(texel) 3033
+            3037:        3034 Load 3036(i2DMS)
+            3038:   53(fvec2) Load 148(c2)
+            3039:  721(ivec2) ConvertFToS 3038
+            3040:    7(fvec4) ImageRead 3037 3039 Sample 709
+            3041:    7(fvec4) Load 2952(texel)
+            3042:    7(fvec4) FAdd 3041 3040
+                              Store 2952(texel) 3042
+            3046:        3043 Load 3045(i2DMSArray)
+            3047:  167(fvec3) Load 169(c3)
+            3048:  734(ivec3) ConvertFToS 3047
+            3049:    7(fvec4) ImageRead 3046 3048 Sample 709
+            3050:    7(fvec4) Load 2952(texel)
+            3051:    7(fvec4) FAdd 3050 3049
+                              Store 2952(texel) 3051
+            3052:    7(fvec4) Load 2952(texel)
+                              ReturnValue 3052
+                              FunctionEnd
+67(testImageStore(vf164;):           2 Function None 65
+        66(data):     64(ptr) FunctionParameter
+              68:             Label
+            3055:        2953 Load 2955(i1D)
+            3056:   52(float) Load 128(c1)
+            3057:     47(int) ConvertFToS 3056
+            3058:    7(fvec4) Load 66(data)
+                              ImageWrite 3055 3057 3058
+            3059:        2962 Load 2964(i2D)
+            3060:   53(fvec2) Load 148(c2)
+            3061:  721(ivec2) ConvertFToS 3060
+            3062:    7(fvec4) Load 66(data)
+                              ImageWrite 3059 3061 3062
+            3063:        2971 Load 2973(i3D)
+            3064:  167(fvec3) Load 169(c3)
+            3065:  734(ivec3) ConvertFToS 3064
+            3066:    7(fvec4) Load 66(data)
+                              ImageWrite 3063 3065 3066
+            3067:        2980 Load 2982(i2DRect)
+            3068:   53(fvec2) Load 148(c2)
+            3069:  721(ivec2) ConvertFToS 3068
+            3070:    7(fvec4) Load 66(data)
+                              ImageWrite 3067 3069 3070
+            3071:        2989 Load 2991(iCube)
+            3072:  167(fvec3) Load 169(c3)
+            3073:  734(ivec3) ConvertFToS 3072
+            3074:    7(fvec4) Load 66(data)
+                              ImageWrite 3071 3073 3074
+            3075:        2998 Load 3000(iBuffer)
+            3076:   52(float) Load 128(c1)
+            3077:     47(int) ConvertFToS 3076
+            3078:    7(fvec4) Load 66(data)
+                              ImageWrite 3075 3077 3078
+            3079:        3007 Load 3009(i1DArray)
+            3080:   53(fvec2) Load 148(c2)
+            3081:  721(ivec2) ConvertFToS 3080
+            3082:    7(fvec4) Load 66(data)
+                              ImageWrite 3079 3081 3082
+            3083:        3016 Load 3018(i2DArray)
+            3084:  167(fvec3) Load 169(c3)
+            3085:  734(ivec3) ConvertFToS 3084
+            3086:    7(fvec4) Load 66(data)
+                              ImageWrite 3083 3085 3086
+            3087:        3025 Load 3027(iCubeArray)
+            3088:  167(fvec3) Load 169(c3)
+            3089:  734(ivec3) ConvertFToS 3088
+            3090:    7(fvec4) Load 66(data)
+                              ImageWrite 3087 3089 3090
+            3091:        3034 Load 3036(i2DMS)
+            3092:   53(fvec2) Load 148(c2)
+            3093:  721(ivec2) ConvertFToS 3092
+            3094:    7(fvec4) Load 66(data)
+                              ImageWrite 3091 3093 3094 Sample 709
+            3095:        3043 Load 3045(i2DMSArray)
+            3096:  167(fvec3) Load 169(c3)
+            3097:  734(ivec3) ConvertFToS 3096
+            3098:    7(fvec4) Load 66(data)
+                              ImageWrite 3095 3097 3098 Sample 709
+                              Return
+                              FunctionEnd
+69(testSparseTexture():    7(fvec4) Function None 8
+              70:             Label
+     3099(texel):     64(ptr) Variable Function
+                              Store 3099(texel) 121
+            3100:         143 Load 145(s2D)
+            3101:   53(fvec2) Load 148(c2)
+            3103:3102(ResType) ImageSparseSampleImplicitLod 3100 3101
+            3104:    7(fvec4) CompositeExtract 3103 1
+                              Store 3099(texel) 3104
+            3105:     47(int) CompositeExtract 3103 0
+            3106:         143 Load 145(s2D)
+            3107:  154(fvec2) Load 156(f16c2)
+            3108:    6(float) Load 137(f16bias)
+            3109:3102(ResType) ImageSparseSampleImplicitLod 3106 3107 Bias 3108
+            3110:    7(fvec4) CompositeExtract 3109 1
+                              Store 3099(texel) 3110
+            3111:     47(int) CompositeExtract 3109 0
+            3112:         163 Load 165(s3D)
+            3113:  167(fvec3) Load 169(c3)
+            3114:3102(ResType) ImageSparseSampleImplicitLod 3112 3113
+            3115:    7(fvec4) CompositeExtract 3114 1
+                              Store 3099(texel) 3115
+            3116:     47(int) CompositeExtract 3114 0
+            3117:         163 Load 165(s3D)
+            3118:  175(fvec3) Load 177(f16c3)
+            3119:    6(float) Load 137(f16bias)
+            3120:3102(ResType) ImageSparseSampleImplicitLod 3117 3118 Bias 3119
+            3121:    7(fvec4) CompositeExtract 3120 1
+                              Store 3099(texel) 3121
+            3122:     47(int) CompositeExtract 3120 0
+            3123:         184 Load 186(sCube)
+            3124:  167(fvec3) Load 169(c3)
+            3125:3102(ResType) ImageSparseSampleImplicitLod 3123 3124
+            3126:    7(fvec4) CompositeExtract 3125 1
+                              Store 3099(texel) 3126
+            3127:     47(int) CompositeExtract 3125 0
+            3128:         184 Load 186(sCube)
+            3129:  175(fvec3) Load 177(f16c3)
+            3130:    6(float) Load 137(f16bias)
+            3131:3102(ResType) ImageSparseSampleImplicitLod 3128 3129 Bias 3130
+            3132:    7(fvec4) CompositeExtract 3131 1
+                              Store 3099(texel) 3132
+            3133:     47(int) CompositeExtract 3131 0
+            3134:         224 Load 226(s2DShadow)
+            3135:  167(fvec3) Load 169(c3)
+            3136:    208(ptr) AccessChain 3099(texel) 207
+            3137:   52(float) CompositeExtract 3135 2
+            3139:3138(ResType) ImageSparseSampleDrefImplicitLod 3134 3135 3137
+            3140:    6(float) CompositeExtract 3139 1
+                              Store 3136 3140
+            3141:     47(int) CompositeExtract 3139 0
+            3142:         224 Load 226(s2DShadow)
+            3143:  154(fvec2) Load 156(f16c2)
+            3144:   52(float) Load 215(compare)
+            3145:    208(ptr) AccessChain 3099(texel) 207
+            3146:    6(float) Load 137(f16bias)
+            3147:3138(ResType) ImageSparseSampleDrefImplicitLod 3142 3143 3144 Bias 3146
+            3148:    6(float) CompositeExtract 3147 1
+                              Store 3145 3148
+            3149:     47(int) CompositeExtract 3147 0
+            3150:         245 Load 247(sCubeShadow)
+            3151:  249(fvec4) Load 251(c4)
+            3152:    208(ptr) AccessChain 3099(texel) 207
+            3153:   52(float) CompositeExtract 3151 3
+            3154:3138(ResType) ImageSparseSampleDrefImplicitLod 3150 3151 3153
+            3155:    6(float) CompositeExtract 3154 1
+                              Store 3152 3155
+            3156:     47(int) CompositeExtract 3154 0
+            3157:         245 Load 247(sCubeShadow)
+            3158:  175(fvec3) Load 177(f16c3)
+            3159:   52(float) Load 215(compare)
+            3160:    208(ptr) AccessChain 3099(texel) 207
+            3161:    6(float) Load 137(f16bias)
+            3162:3138(ResType) ImageSparseSampleDrefImplicitLod 3157 3158 3159 Bias 3161
+            3163:    6(float) CompositeExtract 3162 1
+                              Store 3160 3163
+            3164:     47(int) CompositeExtract 3162 0
+            3165:         284 Load 286(s2DArray)
+            3166:  167(fvec3) Load 169(c3)
+            3167:3102(ResType) ImageSparseSampleImplicitLod 3165 3166
+            3168:    7(fvec4) CompositeExtract 3167 1
+                              Store 3099(texel) 3168
+            3169:     47(int) CompositeExtract 3167 0
+            3170:         284 Load 286(s2DArray)
+            3171:  175(fvec3) Load 177(f16c3)
+            3172:    6(float) Load 137(f16bias)
+            3173:3102(ResType) ImageSparseSampleImplicitLod 3170 3171 Bias 3172
+            3174:    7(fvec4) CompositeExtract 3173 1
+                              Store 3099(texel) 3174
+            3175:     47(int) CompositeExtract 3173 0
+            3176:         299 Load 301(sCubeArray)
+            3177:  249(fvec4) Load 251(c4)
+            3178:3102(ResType) ImageSparseSampleImplicitLod 3176 3177
+            3179:    7(fvec4) CompositeExtract 3178 1
+                              Store 3099(texel) 3179
+            3180:     47(int) CompositeExtract 3178 0
+            3181:         299 Load 301(sCubeArray)
+            3182:    7(fvec4) Load 309(f16c4)
+            3183:    6(float) Load 137(f16bias)
+            3184:3102(ResType) ImageSparseSampleImplicitLod 3181 3182 Bias 3183
+            3185:    7(fvec4) CompositeExtract 3184 1
+                              Store 3099(texel) 3185
+            3186:     47(int) CompositeExtract 3184 0
+            3187:         337 Load 339(s2DArrayShadow)
+            3188:  249(fvec4) Load 251(c4)
+            3189:    208(ptr) AccessChain 3099(texel) 207
+            3190:   52(float) CompositeExtract 3188 3
+            3191:3138(ResType) ImageSparseSampleDrefImplicitLod 3187 3188 3190
+            3192:    6(float) CompositeExtract 3191 1
+                              Store 3189 3192
+            3193:     47(int) CompositeExtract 3191 0
+            3194:         337 Load 339(s2DArrayShadow)
+            3195:  175(fvec3) Load 177(f16c3)
+            3196:   52(float) Load 215(compare)
+            3197:    208(ptr) AccessChain 3099(texel) 207
+            3198:3138(ResType) ImageSparseSampleDrefImplicitLod 3194 3195 3196
+            3199:    6(float) CompositeExtract 3198 1
+                              Store 3197 3199
+            3200:     47(int) CompositeExtract 3198 0
+            3201:         357 Load 359(s2DRect)
+            3202:   53(fvec2) Load 148(c2)
+            3203:3102(ResType) ImageSparseSampleImplicitLod 3201 3202
+            3204:    7(fvec4) CompositeExtract 3203 1
+                              Store 3099(texel) 3204
+            3205:     47(int) CompositeExtract 3203 0
+            3206:         357 Load 359(s2DRect)
+            3207:  154(fvec2) Load 156(f16c2)
+            3208:3102(ResType) ImageSparseSampleImplicitLod 3206 3207
+            3209:    7(fvec4) CompositeExtract 3208 1
+                              Store 3099(texel) 3209
+            3210:     47(int) CompositeExtract 3208 0
+            3211:         371 Load 373(s2DRectShadow)
+            3212:  167(fvec3) Load 169(c3)
+            3213:    208(ptr) AccessChain 3099(texel) 207
+            3214:   52(float) CompositeExtract 3212 2
+            3215:3138(ResType) ImageSparseSampleDrefImplicitLod 3211 3212 3214
+            3216:    6(float) CompositeExtract 3215 1
+                              Store 3213 3216
+            3217:     47(int) CompositeExtract 3215 0
+            3218:         371 Load 373(s2DRectShadow)
+            3219:  154(fvec2) Load 156(f16c2)
+            3220:   52(float) Load 215(compare)
+            3221:    208(ptr) AccessChain 3099(texel) 207
+            3222:3138(ResType) ImageSparseSampleDrefImplicitLod 3218 3219 3220
+            3223:    6(float) CompositeExtract 3222 1
+                              Store 3221 3223
+            3224:     47(int) CompositeExtract 3222 0
+            3225:         391 Load 393(sCubeArrayShadow)
+            3226:  249(fvec4) Load 251(c4)
+            3227:   52(float) Load 215(compare)
+            3228:    208(ptr) AccessChain 3099(texel) 207
+            3229:3138(ResType) ImageSparseSampleDrefImplicitLod 3225 3226 3227
+            3230:    6(float) CompositeExtract 3229 1
+                              Store 3228 3230
+            3231:     47(int) CompositeExtract 3229 0
+            3232:         391 Load 393(sCubeArrayShadow)
+            3233:    7(fvec4) Load 309(f16c4)
+            3234:   52(float) Load 215(compare)
+            3235:    208(ptr) AccessChain 3099(texel) 207
+            3236:3138(ResType) ImageSparseSampleDrefImplicitLod 3232 3233 3234
+            3237:    6(float) CompositeExtract 3236 1
+                              Store 3235 3237
+            3238:     47(int) CompositeExtract 3236 0
+            3239:    7(fvec4) Load 3099(texel)
+                              ReturnValue 3239
+                              FunctionEnd
+71(testSparseTextureLod():    7(fvec4) Function None 8
+              72:             Label
+     3242(texel):     64(ptr) Variable Function
+                              Store 3242(texel) 121
+            3243:         143 Load 145(s2D)
+            3244:   53(fvec2) Load 148(c2)
+            3245:   52(float) Load 565(lod)
+            3246:3102(ResType) ImageSparseSampleExplicitLod 3243 3244 Lod 3245
+            3247:    7(fvec4) CompositeExtract 3246 1
+                              Store 3242(texel) 3247
+            3248:     47(int) CompositeExtract 3246 0
+            3249:         143 Load 145(s2D)
+            3250:  154(fvec2) Load 156(f16c2)
+            3251:    6(float) Load 572(f16lod)
+            3252:3102(ResType) ImageSparseSampleExplicitLod 3249 3250 Lod 3251
+            3253:    7(fvec4) CompositeExtract 3252 1
+                              Store 3242(texel) 3253
+            3254:     47(int) CompositeExtract 3252 0
+            3255:         163 Load 165(s3D)
+            3256:  167(fvec3) Load 169(c3)
+            3257:   52(float) Load 565(lod)
+            3258:3102(ResType) ImageSparseSampleExplicitLod 3255 3256 Lod 3257
+            3259:    7(fvec4) CompositeExtract 3258 1
+                              Store 3242(texel) 3259
+            3260:     47(int) CompositeExtract 3258 0
+            3261:         163 Load 165(s3D)
+            3262:  175(fvec3) Load 177(f16c3)
+            3263:    6(float) Load 572(f16lod)
+            3264:3102(ResType) ImageSparseSampleExplicitLod 3261 3262 Lod 3263
+            3265:    7(fvec4) CompositeExtract 3264 1
+                              Store 3242(texel) 3265
+            3266:     47(int) CompositeExtract 3264 0
+            3267:         184 Load 186(sCube)
+            3268:  167(fvec3) Load 169(c3)
+            3269:   52(float) Load 565(lod)
+            3270:3102(ResType) ImageSparseSampleExplicitLod 3267 3268 Lod 3269
+            3271:    7(fvec4) CompositeExtract 3270 1
+                              Store 3242(texel) 3271
+            3272:     47(int) CompositeExtract 3270 0
+            3273:         184 Load 186(sCube)
+            3274:  175(fvec3) Load 177(f16c3)
+            3275:    6(float) Load 572(f16lod)
+            3276:3102(ResType) ImageSparseSampleExplicitLod 3273 3274 Lod 3275
+            3277:    7(fvec4) CompositeExtract 3276 1
+                              Store 3242(texel) 3277
+            3278:     47(int) CompositeExtract 3276 0
+            3279:         224 Load 226(s2DShadow)
+            3280:  167(fvec3) Load 169(c3)
+            3281:   52(float) Load 565(lod)
+            3282:    208(ptr) AccessChain 3242(texel) 207
+            3283:   52(float) CompositeExtract 3280 2
+            3284:3138(ResType) ImageSparseSampleDrefExplicitLod 3279 3280 3283 Lod 3281
+            3285:    6(float) CompositeExtract 3284 1
+                              Store 3282 3285
+            3286:     47(int) CompositeExtract 3284 0
+            3287:         224 Load 226(s2DShadow)
+            3288:  154(fvec2) Load 156(f16c2)
+            3289:   52(float) Load 215(compare)
+            3290:    6(float) Load 572(f16lod)
+            3291:    208(ptr) AccessChain 3242(texel) 207
+            3292:3138(ResType) ImageSparseSampleDrefExplicitLod 3287 3288 3289 Lod 3290
+            3293:    6(float) CompositeExtract 3292 1
+                              Store 3291 3293
+            3294:     47(int) CompositeExtract 3292 0
+            3295:         284 Load 286(s2DArray)
+            3296:  167(fvec3) Load 169(c3)
+            3297:   52(float) Load 565(lod)
+            3298:3102(ResType) ImageSparseSampleExplicitLod 3295 3296 Lod 3297
+            3299:    7(fvec4) CompositeExtract 3298 1
+                              Store 3242(texel) 3299
+            3300:     47(int) CompositeExtract 3298 0
+            3301:         284 Load 286(s2DArray)
+            3302:  175(fvec3) Load 177(f16c3)
+            3303:    6(float) Load 572(f16lod)
+            3304:3102(ResType) ImageSparseSampleExplicitLod 3301 3302 Lod 3303
+            3305:    7(fvec4) CompositeExtract 3304 1
+                              Store 3242(texel) 3305
+            3306:     47(int) CompositeExtract 3304 0
+            3307:         299 Load 301(sCubeArray)
+            3308:  249(fvec4) Load 251(c4)
+            3309:   52(float) Load 565(lod)
+            3310:3102(ResType) ImageSparseSampleExplicitLod 3307 3308 Lod 3309
+            3311:    7(fvec4) CompositeExtract 3310 1
+                              Store 3242(texel) 3311
+            3312:     47(int) CompositeExtract 3310 0
+            3313:         299 Load 301(sCubeArray)
+            3314:    7(fvec4) Load 309(f16c4)
+            3315:    6(float) Load 572(f16lod)
+            3316:3102(ResType) ImageSparseSampleExplicitLod 3313 3314 Lod 3315
+            3317:    7(fvec4) CompositeExtract 3316 1
+                              Store 3242(texel) 3317
+            3318:     47(int) CompositeExtract 3316 0
+            3319:    7(fvec4) Load 3242(texel)
+                              ReturnValue 3319
+                              FunctionEnd
+73(testSparseTextureOffset():    7(fvec4) Function None 8
+              74:             Label
+     3322(texel):     64(ptr) Variable Function
+                              Store 3322(texel) 121
+            3323:         143 Load 145(s2D)
+            3324:   53(fvec2) Load 148(c2)
+            3325:3102(ResType) ImageSparseSampleImplicitLod 3323 3324 ConstOffset 722
+            3326:    7(fvec4) CompositeExtract 3325 1
+                              Store 3322(texel) 3326
+            3327:     47(int) CompositeExtract 3325 0
+            3328:         143 Load 145(s2D)
+            3329:  154(fvec2) Load 156(f16c2)
+            3330:    6(float) Load 137(f16bias)
+            3331:3102(ResType) ImageSparseSampleImplicitLod 3328 3329 Bias ConstOffset 3330 722
+            3332:    7(fvec4) CompositeExtract 3331 1
+                              Store 3322(texel) 3332
+            3333:     47(int) CompositeExtract 3331 0
+            3334:         163 Load 165(s3D)
+            3335:  167(fvec3) Load 169(c3)
+            3336:3102(ResType) ImageSparseSampleImplicitLod 3334 3335 ConstOffset 735
+            3337:    7(fvec4) CompositeExtract 3336 1
+                              Store 3322(texel) 3337
+            3338:     47(int) CompositeExtract 3336 0
+            3339:         163 Load 165(s3D)
+            3340:  175(fvec3) Load 177(f16c3)
+            3341:    6(float) Load 137(f16bias)
+            3342:3102(ResType) ImageSparseSampleImplicitLod 3339 3340 Bias ConstOffset 3341 735
+            3343:    7(fvec4) CompositeExtract 3342 1
+                              Store 3322(texel) 3343
+            3344:     47(int) CompositeExtract 3342 0
+            3345:         357 Load 359(s2DRect)
+            3346:   53(fvec2) Load 148(c2)
+            3347:3102(ResType) ImageSparseSampleImplicitLod 3345 3346 ConstOffset 722
+            3348:    7(fvec4) CompositeExtract 3347 1
+                              Store 3322(texel) 3348
+            3349:     47(int) CompositeExtract 3347 0
+            3350:         357 Load 359(s2DRect)
+            3351:  154(fvec2) Load 156(f16c2)
+            3352:3102(ResType) ImageSparseSampleImplicitLod 3350 3351 ConstOffset 722
+            3353:    7(fvec4) CompositeExtract 3352 1
+                              Store 3322(texel) 3353
+            3354:     47(int) CompositeExtract 3352 0
+            3355:         371 Load 373(s2DRectShadow)
+            3356:  167(fvec3) Load 169(c3)
+            3357:    208(ptr) AccessChain 3322(texel) 207
+            3358:   52(float) CompositeExtract 3356 2
+            3359:3138(ResType) ImageSparseSampleDrefImplicitLod 3355 3356 3358 ConstOffset 722
+            3360:    6(float) CompositeExtract 3359 1
+                              Store 3357 3360
+            3361:     47(int) CompositeExtract 3359 0
+            3362:         371 Load 373(s2DRectShadow)
+            3363:  154(fvec2) Load 156(f16c2)
+            3364:   52(float) Load 215(compare)
+            3365:    208(ptr) AccessChain 3322(texel) 207
+            3366:3138(ResType) ImageSparseSampleDrefImplicitLod 3362 3363 3364 ConstOffset 722
+            3367:    6(float) CompositeExtract 3366 1
+                              Store 3365 3367
+            3368:     47(int) CompositeExtract 3366 0
+            3369:         224 Load 226(s2DShadow)
+            3370:  167(fvec3) Load 169(c3)
+            3371:    208(ptr) AccessChain 3322(texel) 207
+            3372:   52(float) CompositeExtract 3370 2
+            3373:3138(ResType) ImageSparseSampleDrefImplicitLod 3369 3370 3372 ConstOffset 722
+            3374:    6(float) CompositeExtract 3373 1
+                              Store 3371 3374
+            3375:     47(int) CompositeExtract 3373 0
+            3376:         224 Load 226(s2DShadow)
+            3377:  154(fvec2) Load 156(f16c2)
+            3378:   52(float) Load 215(compare)
+            3379:    208(ptr) AccessChain 3322(texel) 207
+            3380:    6(float) Load 137(f16bias)
+            3381:3138(ResType) ImageSparseSampleDrefImplicitLod 3376 3377 3378 Bias ConstOffset 3380 722
+            3382:    6(float) CompositeExtract 3381 1
+                              Store 3379 3382
+            3383:     47(int) CompositeExtract 3381 0
+            3384:         284 Load 286(s2DArray)
+            3385:  167(fvec3) Load 169(c3)
+            3386:3102(ResType) ImageSparseSampleImplicitLod 3384 3385 ConstOffset 722
+            3387:    7(fvec4) CompositeExtract 3386 1
+                              Store 3322(texel) 3387
+            3388:     47(int) CompositeExtract 3386 0
+            3389:         284 Load 286(s2DArray)
+            3390:  175(fvec3) Load 177(f16c3)
+            3391:    6(float) Load 137(f16bias)
+            3392:3102(ResType) ImageSparseSampleImplicitLod 3389 3390 Bias ConstOffset 3391 722
+            3393:    7(fvec4) CompositeExtract 3392 1
+                              Store 3322(texel) 3393
+            3394:     47(int) CompositeExtract 3392 0
+            3395:         337 Load 339(s2DArrayShadow)
+            3396:  249(fvec4) Load 251(c4)
+            3397:    208(ptr) AccessChain 3322(texel) 207
+            3398:   52(float) CompositeExtract 3396 3
+            3399:3138(ResType) ImageSparseSampleDrefImplicitLod 3395 3396 3398 ConstOffset 722
+            3400:    6(float) CompositeExtract 3399 1
+                              Store 3397 3400
+            3401:     47(int) CompositeExtract 3399 0
+            3402:         337 Load 339(s2DArrayShadow)
+            3403:  175(fvec3) Load 177(f16c3)
+            3404:   52(float) Load 215(compare)
+            3405:    208(ptr) AccessChain 3322(texel) 207
+            3406:3138(ResType) ImageSparseSampleDrefImplicitLod 3402 3403 3404 ConstOffset 722
+            3407:    6(float) CompositeExtract 3406 1
+                              Store 3405 3407
+            3408:     47(int) CompositeExtract 3406 0
+            3409:    7(fvec4) Load 3322(texel)
+                              ReturnValue 3409
+                              FunctionEnd
+75(testSparseTextureLodOffset():    7(fvec4) Function None 8
+              76:             Label
+     3412(texel):     64(ptr) Variable Function
+                              Store 3412(texel) 121
+            3413:         143 Load 145(s2D)
+            3414:   53(fvec2) Load 148(c2)
+            3415:   52(float) Load 565(lod)
+            3416:3102(ResType) ImageSparseSampleExplicitLod 3413 3414 Lod ConstOffset 3415 722
+            3417:    7(fvec4) CompositeExtract 3416 1
+                              Store 3412(texel) 3417
+            3418:     47(int) CompositeExtract 3416 0
+            3419:         143 Load 145(s2D)
+            3420:  154(fvec2) Load 156(f16c2)
+            3421:    6(float) Load 572(f16lod)
+            3422:3102(ResType) ImageSparseSampleExplicitLod 3419 3420 Lod ConstOffset 3421 722
+            3423:    7(fvec4) CompositeExtract 3422 1
+                              Store 3412(texel) 3423
+            3424:     47(int) CompositeExtract 3422 0
+            3425:         163 Load 165(s3D)
+            3426:  167(fvec3) Load 169(c3)
+            3427:   52(float) Load 565(lod)
+            3428:3102(ResType) ImageSparseSampleExplicitLod 3425 3426 Lod ConstOffset 3427 735
+            3429:    7(fvec4) CompositeExtract 3428 1
+                              Store 3412(texel) 3429
+            3430:     47(int) CompositeExtract 3428 0
+            3431:         163 Load 165(s3D)
+            3432:  175(fvec3) Load 177(f16c3)
+            3433:    6(float) Load 572(f16lod)
+            3434:3102(ResType) ImageSparseSampleExplicitLod 3431 3432 Lod ConstOffset 3433 735
+            3435:    7(fvec4) CompositeExtract 3434 1
+                              Store 3412(texel) 3435
+            3436:     47(int) CompositeExtract 3434 0
+            3437:         224 Load 226(s2DShadow)
+            3438:  167(fvec3) Load 169(c3)
+            3439:   52(float) Load 565(lod)
+            3440:    208(ptr) AccessChain 3412(texel) 207
+            3441:   52(float) CompositeExtract 3438 2
+            3442:3138(ResType) ImageSparseSampleDrefExplicitLod 3437 3438 3441 Lod ConstOffset 3439 722
+            3443:    6(float) CompositeExtract 3442 1
+                              Store 3440 3443
+            3444:     47(int) CompositeExtract 3442 0
+            3445:         224 Load 226(s2DShadow)
+            3446:  154(fvec2) Load 156(f16c2)
+            3447:   52(float) Load 215(compare)
+            3448:    6(float) Load 572(f16lod)
+            3449:    208(ptr) AccessChain 3412(texel) 207
+            3450:3138(ResType) ImageSparseSampleDrefExplicitLod 3445 3446 3447 Lod ConstOffset 3448 722
+            3451:    6(float) CompositeExtract 3450 1
+                              Store 3449 3451
+            3452:     47(int) CompositeExtract 3450 0
+            3453:         284 Load 286(s2DArray)
+            3454:  167(fvec3) Load 169(c3)
+            3455:   52(float) Load 565(lod)
+            3456:3102(ResType) ImageSparseSampleExplicitLod 3453 3454 Lod ConstOffset 3455 722
+            3457:    7(fvec4) CompositeExtract 3456 1
+                              Store 3412(texel) 3457
+            3458:     47(int) CompositeExtract 3456 0
+            3459:         284 Load 286(s2DArray)
+            3460:  175(fvec3) Load 177(f16c3)
+            3461:    6(float) Load 572(f16lod)
+            3462:3102(ResType) ImageSparseSampleExplicitLod 3459 3460 Lod ConstOffset 3461 722
+            3463:    7(fvec4) CompositeExtract 3462 1
+                              Store 3412(texel) 3463
+            3464:     47(int) CompositeExtract 3462 0
+            3465:    7(fvec4) Load 3412(texel)
+                              ReturnValue 3465
+                              FunctionEnd
+77(testSparseTextureGrad():    7(fvec4) Function None 8
+              78:             Label
+     3468(texel):     64(ptr) Variable Function
+                              Store 3468(texel) 121
+            3469:         143 Load 145(s2D)
+            3470:   53(fvec2) Load 148(c2)
+            3471:   53(fvec2) Load 1409(dPdxy2)
+            3472:   53(fvec2) Load 1409(dPdxy2)
+            3473:3102(ResType) ImageSparseSampleExplicitLod 3469 3470 Grad 3471 3472
+            3474:    7(fvec4) CompositeExtract 3473 1
+                              Store 3468(texel) 3474
+            3475:     47(int) CompositeExtract 3473 0
+            3476:         143 Load 145(s2D)
+            3477:  154(fvec2) Load 156(f16c2)
+            3478:  154(fvec2) Load 1417(f16dPdxy2)
+            3479:  154(fvec2) Load 1417(f16dPdxy2)
+            3480:3102(ResType) ImageSparseSampleExplicitLod 3476 3477 Grad 3478 3479
+            3481:    7(fvec4) CompositeExtract 3480 1
+                              Store 3468(texel) 3481
+            3482:     47(int) CompositeExtract 3480 0
+            3483:         163 Load 165(s3D)
+            3484:  167(fvec3) Load 169(c3)
+            3485:  167(fvec3) Load 1425(dPdxy3)
+            3486:  167(fvec3) Load 1425(dPdxy3)
+            3487:3102(ResType) ImageSparseSampleExplicitLod 3483 3484 Grad 3485 3486
+            3488:    7(fvec4) CompositeExtract 3487 1
+                              Store 3468(texel) 3488
+            3489:     47(int) CompositeExtract 3487 0
+            3490:         163 Load 165(s3D)
+            3491:  175(fvec3) Load 177(f16c3)
+            3492:  175(fvec3) Load 1433(f16dPdxy3)
+            3493:  175(fvec3) Load 1433(f16dPdxy3)
+            3494:3102(ResType) ImageSparseSampleExplicitLod 3490 3491 Grad 3492 3493
+            3495:    7(fvec4) CompositeExtract 3494 1
+                              Store 3468(texel) 3495
+            3496:     47(int) CompositeExtract 3494 0
+            3497:         184 Load 186(sCube)
+            3498:  167(fvec3) Load 169(c3)
+            3499:  167(fvec3) Load 1425(dPdxy3)
+            3500:  167(fvec3) Load 1425(dPdxy3)
+            3501:3102(ResType) ImageSparseSampleExplicitLod 3497 3498 Grad 3499 3500
+            3502:    7(fvec4) CompositeExtract 3501 1
+                              Store 3468(texel) 3502
+            3503:     47(int) CompositeExtract 3501 0
+            3504:         184 Load 186(sCube)
+            3505:  175(fvec3) Load 177(f16c3)
+            3506:  175(fvec3) Load 1433(f16dPdxy3)
+            3507:  175(fvec3) Load 1433(f16dPdxy3)
+            3508:3102(ResType) ImageSparseSampleExplicitLod 3504 3505 Grad 3506 3507
+            3509:    7(fvec4) CompositeExtract 3508 1
+                              Store 3468(texel) 3509
+            3510:     47(int) CompositeExtract 3508 0
+            3511:         357 Load 359(s2DRect)
+            3512:   53(fvec2) Load 148(c2)
+            3513:   53(fvec2) Load 1409(dPdxy2)
+            3514:   53(fvec2) Load 1409(dPdxy2)
+            3515:3102(ResType) ImageSparseSampleExplicitLod 3511 3512 Grad 3513 3514
+            3516:    7(fvec4) CompositeExtract 3515 1
+                              Store 3468(texel) 3516
+            3517:     47(int) CompositeExtract 3515 0
+            3518:         357 Load 359(s2DRect)
+            3519:  154(fvec2) Load 156(f16c2)
+            3520:  154(fvec2) Load 1417(f16dPdxy2)
+            3521:  154(fvec2) Load 1417(f16dPdxy2)
+            3522:3102(ResType) ImageSparseSampleExplicitLod 3518 3519 Grad 3520 3521
+            3523:    7(fvec4) CompositeExtract 3522 1
+                              Store 3468(texel) 3523
+            3524:     47(int) CompositeExtract 3522 0
+            3525:         371 Load 373(s2DRectShadow)
+            3526:  167(fvec3) Load 169(c3)
+            3527:   53(fvec2) Load 1409(dPdxy2)
+            3528:   53(fvec2) Load 1409(dPdxy2)
+            3529:    208(ptr) AccessChain 3468(texel) 207
+            3530:   52(float) CompositeExtract 3526 2
+            3531:3138(ResType) ImageSparseSampleDrefExplicitLod 3525 3526 3530 Grad 3527 3528
+            3532:    6(float) CompositeExtract 3531 1
+                              Store 3529 3532
+            3533:     47(int) CompositeExtract 3531 0
+            3534:         371 Load 373(s2DRectShadow)
+            3535:  154(fvec2) Load 156(f16c2)
+            3536:   52(float) Load 215(compare)
+            3537:  154(fvec2) Load 1417(f16dPdxy2)
+            3538:  154(fvec2) Load 1417(f16dPdxy2)
+            3539:    208(ptr) AccessChain 3468(texel) 207
+            3540:3138(ResType) ImageSparseSampleDrefExplicitLod 3534 3535 3536 Grad 3537 3538
+            3541:    6(float) CompositeExtract 3540 1
+                              Store 3539 3541
+            3542:     47(int) CompositeExtract 3540 0
+            3543:         224 Load 226(s2DShadow)
+            3544:  167(fvec3) Load 169(c3)
+            3545:   53(fvec2) Load 1409(dPdxy2)
+            3546:   53(fvec2) Load 1409(dPdxy2)
+            3547:    208(ptr) AccessChain 3468(texel) 207
+            3548:   52(float) CompositeExtract 3544 2
+            3549:3138(ResType) ImageSparseSampleDrefExplicitLod 3543 3544 3548 Grad 3545 3546
+            3550:    6(float) CompositeExtract 3549 1
+                              Store 3547 3550
+            3551:     47(int) CompositeExtract 3549 0
+            3552:         224 Load 226(s2DShadow)
+            3553:  154(fvec2) Load 156(f16c2)
+            3554:   52(float) Load 215(compare)
+            3555:  154(fvec2) Load 1417(f16dPdxy2)
+            3556:  154(fvec2) Load 1417(f16dPdxy2)
+            3557:    208(ptr) AccessChain 3468(texel) 207
+            3558:3138(ResType) ImageSparseSampleDrefExplicitLod 3552 3553 3554 Grad 3555 3556
+            3559:    6(float) CompositeExtract 3558 1
+                              Store 3557 3559
+            3560:     47(int) CompositeExtract 3558 0
+            3561:         245 Load 247(sCubeShadow)
+            3562:  249(fvec4) Load 251(c4)
+            3563:  167(fvec3) Load 1425(dPdxy3)
+            3564:  167(fvec3) Load 1425(dPdxy3)
+            3565:    208(ptr) AccessChain 3468(texel) 207
+            3566:   52(float) CompositeExtract 3562 3
+            3567:3138(ResType) ImageSparseSampleDrefExplicitLod 3561 3562 3566 Grad 3563 3564
+            3568:    6(float) CompositeExtract 3567 1
+                              Store 3565 3568
+            3569:     47(int) CompositeExtract 3567 0
+            3570:         245 Load 247(sCubeShadow)
+            3571:  175(fvec3) Load 177(f16c3)
+            3572:   52(float) Load 215(compare)
+            3573:  175(fvec3) Load 1433(f16dPdxy3)
+            3574:  175(fvec3) Load 1433(f16dPdxy3)
+            3575:    208(ptr) AccessChain 3468(texel) 207
+            3576:3138(ResType) ImageSparseSampleDrefExplicitLod 3570 3571 3572 Grad 3573 3574
+            3577:    6(float) CompositeExtract 3576 1
+                              Store 3575 3577
+            3578:     47(int) CompositeExtract 3576 0
+            3579:         284 Load 286(s2DArray)
+            3580:  167(fvec3) Load 169(c3)
+            3581:   53(fvec2) Load 1409(dPdxy2)
+            3582:   53(fvec2) Load 1409(dPdxy2)
+            3583:3102(ResType) ImageSparseSampleExplicitLod 3579 3580 Grad 3581 3582
+            3584:    7(fvec4) CompositeExtract 3583 1
+                              Store 3468(texel) 3584
+            3585:     47(int) CompositeExtract 3583 0
+            3586:         284 Load 286(s2DArray)
+            3587:  175(fvec3) Load 177(f16c3)
+            3588:  154(fvec2) Load 1417(f16dPdxy2)
+            3589:  154(fvec2) Load 1417(f16dPdxy2)
+            3590:3102(ResType) ImageSparseSampleExplicitLod 3586 3587 Grad 3588 3589
+            3591:    7(fvec4) CompositeExtract 3590 1
+                              Store 3468(texel) 3591
+            3592:     47(int) CompositeExtract 3590 0
+            3593:         337 Load 339(s2DArrayShadow)
+            3594:  249(fvec4) Load 251(c4)
+            3595:   53(fvec2) Load 1409(dPdxy2)
+            3596:   53(fvec2) Load 1409(dPdxy2)
+            3597:    208(ptr) AccessChain 3468(texel) 207
+            3598:   52(float) CompositeExtract 3594 3
+            3599:3138(ResType) ImageSparseSampleDrefExplicitLod 3593 3594 3598 Grad 3595 3596
+            3600:    6(float) CompositeExtract 3599 1
+                              Store 3597 3600
+            3601:     47(int) CompositeExtract 3599 0
+            3602:         337 Load 339(s2DArrayShadow)
+            3603:  175(fvec3) Load 177(f16c3)
+            3604:   52(float) Load 215(compare)
+            3605:  154(fvec2) Load 1417(f16dPdxy2)
+            3606:  154(fvec2) Load 1417(f16dPdxy2)
+            3607:    208(ptr) AccessChain 3468(texel) 207
+            3608:3138(ResType) ImageSparseSampleDrefExplicitLod 3602 3603 3604 Grad 3605 3606
+            3609:    6(float) CompositeExtract 3608 1
+                              Store 3607 3609
+            3610:     47(int) CompositeExtract 3608 0
+            3611:         299 Load 301(sCubeArray)
+            3612:  249(fvec4) Load 251(c4)
+            3613:  167(fvec3) Load 1425(dPdxy3)
+            3614:  167(fvec3) Load 1425(dPdxy3)
+            3615:3102(ResType) ImageSparseSampleExplicitLod 3611 3612 Grad 3613 3614
+            3616:    7(fvec4) CompositeExtract 3615 1
+                              Store 3468(texel) 3616
+            3617:     47(int) CompositeExtract 3615 0
+            3618:         299 Load 301(sCubeArray)
+            3619:    7(fvec4) Load 309(f16c4)
+            3620:  175(fvec3) Load 1433(f16dPdxy3)
+            3621:  175(fvec3) Load 1433(f16dPdxy3)
+            3622:3102(ResType) ImageSparseSampleExplicitLod 3618 3619 Grad 3620 3621
+            3623:    7(fvec4) CompositeExtract 3622 1
+                              Store 3468(texel) 3623
+            3624:     47(int) CompositeExtract 3622 0
+            3625:    7(fvec4) Load 3468(texel)
+                              ReturnValue 3625
+                              FunctionEnd
+79(testSparseTextureGradOffset():    7(fvec4) Function None 8
+              80:             Label
+     3628(texel):     64(ptr) Variable Function
+                              Store 3628(texel) 121
+            3629:         143 Load 145(s2D)
+            3630:   53(fvec2) Load 148(c2)
+            3631:   53(fvec2) Load 1409(dPdxy2)
+            3632:   53(fvec2) Load 1409(dPdxy2)
+            3633:3102(ResType) ImageSparseSampleExplicitLod 3629 3630 Grad ConstOffset 3631 3632 722
+            3634:    7(fvec4) CompositeExtract 3633 1
+                              Store 3628(texel) 3634
+            3635:     47(int) CompositeExtract 3633 0
+            3636:         143 Load 145(s2D)
+            3637:  154(fvec2) Load 156(f16c2)
+            3638:  154(fvec2) Load 1417(f16dPdxy2)
+            3639:  154(fvec2) Load 1417(f16dPdxy2)
+            3640:3102(ResType) ImageSparseSampleExplicitLod 3636 3637 Grad ConstOffset 3638 3639 722
+            3641:    7(fvec4) CompositeExtract 3640 1
+                              Store 3628(texel) 3641
+            3642:     47(int) CompositeExtract 3640 0
+            3643:         163 Load 165(s3D)
+            3644:  167(fvec3) Load 169(c3)
+            3645:  167(fvec3) Load 1425(dPdxy3)
+            3646:  167(fvec3) Load 1425(dPdxy3)
+            3647:3102(ResType) ImageSparseSampleExplicitLod 3643 3644 Grad ConstOffset 3645 3646 735
+            3648:    7(fvec4) CompositeExtract 3647 1
+                              Store 3628(texel) 3648
+            3649:     47(int) CompositeExtract 3647 0
+            3650:         163 Load 165(s3D)
+            3651:  175(fvec3) Load 177(f16c3)
+            3652:  175(fvec3) Load 1433(f16dPdxy3)
+            3653:  175(fvec3) Load 1433(f16dPdxy3)
+            3654:3102(ResType) ImageSparseSampleExplicitLod 3650 3651 Grad ConstOffset 3652 3653 735
+            3655:    7(fvec4) CompositeExtract 3654 1
+                              Store 3628(texel) 3655
+            3656:     47(int) CompositeExtract 3654 0
+            3657:         357 Load 359(s2DRect)
+            3658:   53(fvec2) Load 148(c2)
+            3659:   53(fvec2) Load 1409(dPdxy2)
+            3660:   53(fvec2) Load 1409(dPdxy2)
+            3661:3102(ResType) ImageSparseSampleExplicitLod 3657 3658 Grad ConstOffset 3659 3660 722
+            3662:    7(fvec4) CompositeExtract 3661 1
+                              Store 3628(texel) 3662
+            3663:     47(int) CompositeExtract 3661 0
+            3664:         357 Load 359(s2DRect)
+            3665:  154(fvec2) Load 156(f16c2)
+            3666:  154(fvec2) Load 1417(f16dPdxy2)
+            3667:  154(fvec2) Load 1417(f16dPdxy2)
+            3668:3102(ResType) ImageSparseSampleExplicitLod 3664 3665 Grad ConstOffset 3666 3667 722
+            3669:    7(fvec4) CompositeExtract 3668 1
+                              Store 3628(texel) 3669
+            3670:     47(int) CompositeExtract 3668 0
+            3671:         371 Load 373(s2DRectShadow)
+            3672:  167(fvec3) Load 169(c3)
+            3673:   53(fvec2) Load 1409(dPdxy2)
+            3674:   53(fvec2) Load 1409(dPdxy2)
+            3675:    208(ptr) AccessChain 3628(texel) 207
+            3676:   52(float) CompositeExtract 3672 2
+            3677:3138(ResType) ImageSparseSampleDrefExplicitLod 3671 3672 3676 Grad ConstOffset 3673 3674 722
+            3678:    6(float) CompositeExtract 3677 1
+                              Store 3675 3678
+            3679:     47(int) CompositeExtract 3677 0
+            3680:         371 Load 373(s2DRectShadow)
+            3681:  154(fvec2) Load 156(f16c2)
+            3682:   52(float) Load 215(compare)
+            3683:  154(fvec2) Load 1417(f16dPdxy2)
+            3684:  154(fvec2) Load 1417(f16dPdxy2)
+            3685:    208(ptr) AccessChain 3628(texel) 207
+            3686:3138(ResType) ImageSparseSampleDrefExplicitLod 3680 3681 3682 Grad ConstOffset 3683 3684 722
+            3687:    6(float) CompositeExtract 3686 1
+                              Store 3685 3687
+            3688:     47(int) CompositeExtract 3686 0
+            3689:         224 Load 226(s2DShadow)
+            3690:  167(fvec3) Load 169(c3)
+            3691:   53(fvec2) Load 1409(dPdxy2)
+            3692:   53(fvec2) Load 1409(dPdxy2)
+            3693:    208(ptr) AccessChain 3628(texel) 207
+            3694:   52(float) CompositeExtract 3690 2
+            3695:3138(ResType) ImageSparseSampleDrefExplicitLod 3689 3690 3694 Grad ConstOffset 3691 3692 722
+            3696:    6(float) CompositeExtract 3695 1
+                              Store 3693 3696
+            3697:     47(int) CompositeExtract 3695 0
+            3698:         224 Load 226(s2DShadow)
+            3699:  154(fvec2) Load 156(f16c2)
+            3700:   52(float) Load 215(compare)
+            3701:  154(fvec2) Load 1417(f16dPdxy2)
+            3702:  154(fvec2) Load 1417(f16dPdxy2)
+            3703:    208(ptr) AccessChain 3628(texel) 207
+            3704:3138(ResType) ImageSparseSampleDrefExplicitLod 3698 3699 3700 Grad ConstOffset 3701 3702 722
+            3705:    6(float) CompositeExtract 3704 1
+                              Store 3703 3705
+            3706:     47(int) CompositeExtract 3704 0
+            3707:         284 Load 286(s2DArray)
+            3708:  167(fvec3) Load 169(c3)
+            3709:   53(fvec2) Load 1409(dPdxy2)
+            3710:   53(fvec2) Load 1409(dPdxy2)
+            3711:3102(ResType) ImageSparseSampleExplicitLod 3707 3708 Grad ConstOffset 3709 3710 722
+            3712:    7(fvec4) CompositeExtract 3711 1
+                              Store 3628(texel) 3712
+            3713:     47(int) CompositeExtract 3711 0
+            3714:         284 Load 286(s2DArray)
+            3715:  175(fvec3) Load 177(f16c3)
+            3716:  154(fvec2) Load 1417(f16dPdxy2)
+            3717:  154(fvec2) Load 1417(f16dPdxy2)
+            3718:3102(ResType) ImageSparseSampleExplicitLod 3714 3715 Grad ConstOffset 3716 3717 722
+            3719:    7(fvec4) CompositeExtract 3718 1
+                              Store 3628(texel) 3719
+            3720:     47(int) CompositeExtract 3718 0
+            3721:         337 Load 339(s2DArrayShadow)
+            3722:  249(fvec4) Load 251(c4)
+            3723:   53(fvec2) Load 1409(dPdxy2)
+            3724:   53(fvec2) Load 1409(dPdxy2)
+            3725:    208(ptr) AccessChain 3628(texel) 207
+            3726:   52(float) CompositeExtract 3722 3
+            3727:3138(ResType) ImageSparseSampleDrefExplicitLod 3721 3722 3726 Grad ConstOffset 3723 3724 722
+            3728:    6(float) CompositeExtract 3727 1
+                              Store 3725 3728
+            3729:     47(int) CompositeExtract 3727 0
+            3730:         337 Load 339(s2DArrayShadow)
+            3731:  175(fvec3) Load 177(f16c3)
+            3732:   52(float) Load 215(compare)
+            3733:  154(fvec2) Load 1417(f16dPdxy2)
+            3734:  154(fvec2) Load 1417(f16dPdxy2)
+            3735:    208(ptr) AccessChain 3628(texel) 207
+            3736:3138(ResType) ImageSparseSampleDrefExplicitLod 3730 3731 3732 Grad ConstOffset 3733 3734 722
+            3737:    6(float) CompositeExtract 3736 1
+                              Store 3735 3737
+            3738:     47(int) CompositeExtract 3736 0
+            3739:    7(fvec4) Load 3628(texel)
+                              ReturnValue 3739
+                              FunctionEnd
+81(testSparseTexelFetch():    7(fvec4) Function None 8
+              82:             Label
+     3742(texel):     64(ptr) Variable Function
+                              Store 3742(texel) 121
+            3743:         143 Load 145(s2D)
+            3744:   53(fvec2) Load 148(c2)
+            3745:  721(ivec2) ConvertFToS 3744
+            3746:   52(float) Load 565(lod)
+            3747:     47(int) ConvertFToS 3746
+            3748:         142 Image 3743
+            3749:3102(ResType) ImageSparseFetch 3748 3745 Lod 3747
+            3750:    7(fvec4) CompositeExtract 3749 1
+                              Store 3742(texel) 3750
+            3751:     47(int) CompositeExtract 3749 0
+            3752:         163 Load 165(s3D)
+            3753:  167(fvec3) Load 169(c3)
+            3754:  734(ivec3) ConvertFToS 3753
+            3755:   52(float) Load 565(lod)
+            3756:     47(int) ConvertFToS 3755
+            3757:         162 Image 3752
+            3758:3102(ResType) ImageSparseFetch 3757 3754 Lod 3756
+            3759:    7(fvec4) CompositeExtract 3758 1
+                              Store 3742(texel) 3759
+            3760:     47(int) CompositeExtract 3758 0
+            3761:         357 Load 359(s2DRect)
+            3762:   53(fvec2) Load 148(c2)
+            3763:  721(ivec2) ConvertFToS 3762
+            3764:         356 Image 3761
+            3765:3102(ResType) ImageSparseFetch 3764 3763
+            3766:    7(fvec4) CompositeExtract 3765 1
+                              Store 3742(texel) 3766
+            3767:     47(int) CompositeExtract 3765 0
+            3768:         284 Load 286(s2DArray)
+            3769:  167(fvec3) Load 169(c3)
+            3770:  734(ivec3) ConvertFToS 3769
+            3771:   52(float) Load 565(lod)
+            3772:     47(int) ConvertFToS 3771
+            3773:         283 Image 3768
+            3774:3102(ResType) ImageSparseFetch 3773 3770 Lod 3772
+            3775:    7(fvec4) CompositeExtract 3774 1
+                              Store 3742(texel) 3775
+            3776:     47(int) CompositeExtract 3774 0
+            3777:        1309 Load 1311(s2DMS)
+            3778:   53(fvec2) Load 148(c2)
+            3779:  721(ivec2) ConvertFToS 3778
+            3780:        1308 Image 3777
+            3781:3102(ResType) ImageSparseFetch 3780 3779 Sample 709
+            3782:    7(fvec4) CompositeExtract 3781 1
+                              Store 3742(texel) 3782
+            3783:     47(int) CompositeExtract 3781 0
+            3784:        1320 Load 1322(s2DMSArray)
+            3785:  167(fvec3) Load 169(c3)
+            3786:  734(ivec3) ConvertFToS 3785
+            3787:        1319 Image 3784
+            3788:3102(ResType) ImageSparseFetch 3787 3786 Sample 1326
+            3789:    7(fvec4) CompositeExtract 3788 1
+                              Store 3742(texel) 3789
+            3790:     47(int) CompositeExtract 3788 0
+            3791:    7(fvec4) Load 3742(texel)
+                              ReturnValue 3791
+                              FunctionEnd
+83(testSparseTexelFetchOffset():    7(fvec4) Function None 8
+              84:             Label
+     3794(texel):     64(ptr) Variable Function
+                              Store 3794(texel) 121
+            3795:         143 Load 145(s2D)
+            3796:   53(fvec2) Load 148(c2)
+            3797:  721(ivec2) ConvertFToS 3796
+            3798:   52(float) Load 565(lod)
+            3799:     47(int) ConvertFToS 3798
+            3800:         142 Image 3795
+            3801:3102(ResType) ImageSparseFetch 3800 3797 Lod ConstOffset 3799 722
+            3802:    7(fvec4) CompositeExtract 3801 1
+                              Store 3794(texel) 3802
+            3803:     47(int) CompositeExtract 3801 0
+            3804:         163 Load 165(s3D)
+            3805:  167(fvec3) Load 169(c3)
+            3806:  734(ivec3) ConvertFToS 3805
+            3807:   52(float) Load 565(lod)
+            3808:     47(int) ConvertFToS 3807
+            3809:         162 Image 3804
+            3810:3102(ResType) ImageSparseFetch 3809 3806 Lod ConstOffset 3808 735
+            3811:    7(fvec4) CompositeExtract 3810 1
+                              Store 3794(texel) 3811
+            3812:     47(int) CompositeExtract 3810 0
+            3813:         357 Load 359(s2DRect)
+            3814:   53(fvec2) Load 148(c2)
+            3815:  721(ivec2) ConvertFToS 3814
+            3816:         356 Image 3813
+            3817:3102(ResType) ImageSparseFetch 3816 3815 ConstOffset 722
+            3818:    7(fvec4) CompositeExtract 3817 1
+                              Store 3794(texel) 3818
+            3819:     47(int) CompositeExtract 3817 0
+            3820:         284 Load 286(s2DArray)
+            3821:  167(fvec3) Load 169(c3)
+            3822:  734(ivec3) ConvertFToS 3821
+            3823:   52(float) Load 565(lod)
+            3824:     47(int) ConvertFToS 3823
+            3825:         283 Image 3820
+            3826:3102(ResType) ImageSparseFetch 3825 3822 Lod ConstOffset 3824 722
+            3827:    7(fvec4) CompositeExtract 3826 1
+                              Store 3794(texel) 3827
+            3828:     47(int) CompositeExtract 3826 0
+            3829:    7(fvec4) Load 3794(texel)
+                              ReturnValue 3829
+                              FunctionEnd
+85(testSparseTextureGather():    7(fvec4) Function None 8
+              86:             Label
+     3832(texel):     64(ptr) Variable Function
+                              Store 3832(texel) 121
+            3833:         143 Load 145(s2D)
+            3834:   53(fvec2) Load 148(c2)
+            3835:3102(ResType) ImageSparseGather 3833 3834 2187
+            3836:    7(fvec4) CompositeExtract 3835 1
+                              Store 3832(texel) 3836
+            3837:     47(int) CompositeExtract 3835 0
+            3838:         143 Load 145(s2D)
+            3839:  154(fvec2) Load 156(f16c2)
+            3840:    6(float) Load 137(f16bias)
+            3841:3102(ResType) ImageSparseGather 3838 3839 2187 Bias 3840
+            3842:    7(fvec4) CompositeExtract 3841 1
+                              Store 3832(texel) 3842
+            3843:     47(int) CompositeExtract 3841 0
+            3844:         284 Load 286(s2DArray)
+            3845:  167(fvec3) Load 169(c3)
+            3846:3102(ResType) ImageSparseGather 3844 3845 2187
+            3847:    7(fvec4) CompositeExtract 3846 1
+                              Store 3832(texel) 3847
+            3848:     47(int) CompositeExtract 3846 0
+            3849:         284 Load 286(s2DArray)
+            3850:  175(fvec3) Load 177(f16c3)
+            3851:    6(float) Load 137(f16bias)
+            3852:3102(ResType) ImageSparseGather 3849 3850 2187 Bias 3851
+            3853:    7(fvec4) CompositeExtract 3852 1
+                              Store 3832(texel) 3853
+            3854:     47(int) CompositeExtract 3852 0
+            3855:         184 Load 186(sCube)
+            3856:  167(fvec3) Load 169(c3)
+            3857:3102(ResType) ImageSparseGather 3855 3856 2187
+            3858:    7(fvec4) CompositeExtract 3857 1
+                              Store 3832(texel) 3858
+            3859:     47(int) CompositeExtract 3857 0
+            3860:         184 Load 186(sCube)
+            3861:  175(fvec3) Load 177(f16c3)
+            3862:    6(float) Load 137(f16bias)
+            3863:3102(ResType) ImageSparseGather 3860 3861 2187 Bias 3862
+            3864:    7(fvec4) CompositeExtract 3863 1
+                              Store 3832(texel) 3864
+            3865:     47(int) CompositeExtract 3863 0
+            3866:         299 Load 301(sCubeArray)
+            3867:  249(fvec4) Load 251(c4)
+            3868:3102(ResType) ImageSparseGather 3866 3867 2187
+            3869:    7(fvec4) CompositeExtract 3868 1
+                              Store 3832(texel) 3869
+            3870:     47(int) CompositeExtract 3868 0
+            3871:         299 Load 301(sCubeArray)
+            3872:    7(fvec4) Load 309(f16c4)
+            3873:    6(float) Load 137(f16bias)
+            3874:3102(ResType) ImageSparseGather 3871 3872 2187 Bias 3873
+            3875:    7(fvec4) CompositeExtract 3874 1
+                              Store 3832(texel) 3875
+            3876:     47(int) CompositeExtract 3874 0
+            3877:         357 Load 359(s2DRect)
+            3878:   53(fvec2) Load 148(c2)
+            3879:3102(ResType) ImageSparseGather 3877 3878 2187
+            3880:    7(fvec4) CompositeExtract 3879 1
+                              Store 3832(texel) 3880
+            3881:     47(int) CompositeExtract 3879 0
+            3882:         357 Load 359(s2DRect)
+            3883:  154(fvec2) Load 156(f16c2)
+            3884:3102(ResType) ImageSparseGather 3882 3883 2187
+            3885:    7(fvec4) CompositeExtract 3884 1
+                              Store 3832(texel) 3885
+            3886:     47(int) CompositeExtract 3884 0
+            3887:         224 Load 226(s2DShadow)
+            3888:   53(fvec2) Load 148(c2)
+            3889:   52(float) Load 215(compare)
+            3890:3102(ResType) ImageSparseDrefGather 3887 3888 3889
+            3891:    7(fvec4) CompositeExtract 3890 1
+                              Store 3832(texel) 3891
+            3892:     47(int) CompositeExtract 3890 0
+            3893:         224 Load 226(s2DShadow)
+            3894:  154(fvec2) Load 156(f16c2)
+            3895:   52(float) Load 215(compare)
+            3896:3102(ResType) ImageSparseDrefGather 3893 3894 3895
+            3897:    7(fvec4) CompositeExtract 3896 1
+                              Store 3832(texel) 3897
+            3898:     47(int) CompositeExtract 3896 0
+            3899:         337 Load 339(s2DArrayShadow)
+            3900:  167(fvec3) Load 169(c3)
+            3901:   52(float) Load 215(compare)
+            3902:3102(ResType) ImageSparseDrefGather 3899 3900 3901
+            3903:    7(fvec4) CompositeExtract 3902 1
+                              Store 3832(texel) 3903
+            3904:     47(int) CompositeExtract 3902 0
+            3905:         337 Load 339(s2DArrayShadow)
+            3906:  175(fvec3) Load 177(f16c3)
+            3907:   52(float) Load 215(compare)
+            3908:3102(ResType) ImageSparseDrefGather 3905 3906 3907
+            3909:    7(fvec4) CompositeExtract 3908 1
+                              Store 3832(texel) 3909
+            3910:     47(int) CompositeExtract 3908 0
+            3911:         245 Load 247(sCubeShadow)
+            3912:  167(fvec3) Load 169(c3)
+            3913:   52(float) Load 215(compare)
+            3914:3102(ResType) ImageSparseDrefGather 3911 3912 3913
+            3915:    7(fvec4) CompositeExtract 3914 1
+                              Store 3832(texel) 3915
+            3916:     47(int) CompositeExtract 3914 0
+            3917:         245 Load 247(sCubeShadow)
+            3918:  175(fvec3) Load 177(f16c3)
+            3919:   52(float) Load 215(compare)
+            3920:3102(ResType) ImageSparseDrefGather 3917 3918 3919
+            3921:    7(fvec4) CompositeExtract 3920 1
+                              Store 3832(texel) 3921
+            3922:     47(int) CompositeExtract 3920 0
+            3923:         391 Load 393(sCubeArrayShadow)
+            3924:  249(fvec4) Load 251(c4)
+            3925:   52(float) Load 215(compare)
+            3926:3102(ResType) ImageSparseDrefGather 3923 3924 3925
+            3927:    7(fvec4) CompositeExtract 3926 1
+                              Store 3832(texel) 3927
+            3928:     47(int) CompositeExtract 3926 0
+            3929:         391 Load 393(sCubeArrayShadow)
+            3930:    7(fvec4) Load 309(f16c4)
+            3931:   52(float) Load 215(compare)
+            3932:3102(ResType) ImageSparseDrefGather 3929 3930 3931
+            3933:    7(fvec4) CompositeExtract 3932 1
+                              Store 3832(texel) 3933
+            3934:     47(int) CompositeExtract 3932 0
+            3935:         371 Load 373(s2DRectShadow)
+            3936:   53(fvec2) Load 148(c2)
+            3937:   52(float) Load 215(compare)
+            3938:3102(ResType) ImageSparseDrefGather 3935 3936 3937
+            3939:    7(fvec4) CompositeExtract 3938 1
+                              Store 3832(texel) 3939
+            3940:     47(int) CompositeExtract 3938 0
+            3941:         371 Load 373(s2DRectShadow)
+            3942:  154(fvec2) Load 156(f16c2)
+            3943:   52(float) Load 215(compare)
+            3944:3102(ResType) ImageSparseDrefGather 3941 3942 3943
+            3945:    7(fvec4) CompositeExtract 3944 1
+                              Store 3832(texel) 3945
+            3946:     47(int) CompositeExtract 3944 0
+            3947:    7(fvec4) Load 3832(texel)
+                              ReturnValue 3947
+                              FunctionEnd
+87(testSparseTextureGatherOffset():    7(fvec4) Function None 8
+              88:             Label
+     3950(texel):     64(ptr) Variable Function
+                              Store 3950(texel) 121
+            3951:         143 Load 145(s2D)
+            3952:   53(fvec2) Load 148(c2)
+            3953:3102(ResType) ImageSparseGather 3951 3952 2187 ConstOffset 722
+            3954:    7(fvec4) CompositeExtract 3953 1
+                              Store 3950(texel) 3954
+            3955:     47(int) CompositeExtract 3953 0
+            3956:         143 Load 145(s2D)
+            3957:  154(fvec2) Load 156(f16c2)
+            3958:    6(float) Load 137(f16bias)
+            3959:3102(ResType) ImageSparseGather 3956 3957 2187 Bias ConstOffset 3958 722
+            3960:    7(fvec4) CompositeExtract 3959 1
+                              Store 3950(texel) 3960
+            3961:     47(int) CompositeExtract 3959 0
+            3962:         284 Load 286(s2DArray)
+            3963:  167(fvec3) Load 169(c3)
+            3964:3102(ResType) ImageSparseGather 3962 3963 2187 ConstOffset 722
+            3965:    7(fvec4) CompositeExtract 3964 1
+                              Store 3950(texel) 3965
+            3966:     47(int) CompositeExtract 3964 0
+            3967:         284 Load 286(s2DArray)
+            3968:  175(fvec3) Load 177(f16c3)
+            3969:    6(float) Load 137(f16bias)
+            3970:3102(ResType) ImageSparseGather 3967 3968 2187 Bias ConstOffset 3969 722
+            3971:    7(fvec4) CompositeExtract 3970 1
+                              Store 3950(texel) 3971
+            3972:     47(int) CompositeExtract 3970 0
+            3973:         357 Load 359(s2DRect)
+            3974:   53(fvec2) Load 148(c2)
+            3975:3102(ResType) ImageSparseGather 3973 3974 2187 ConstOffset 722
+            3976:    7(fvec4) CompositeExtract 3975 1
+                              Store 3950(texel) 3976
+            3977:     47(int) CompositeExtract 3975 0
+            3978:         357 Load 359(s2DRect)
+            3979:  154(fvec2) Load 156(f16c2)
+            3980:3102(ResType) ImageSparseGather 3978 3979 2187 ConstOffset 722
+            3981:    7(fvec4) CompositeExtract 3980 1
+                              Store 3950(texel) 3981
+            3982:     47(int) CompositeExtract 3980 0
+            3983:         224 Load 226(s2DShadow)
+            3984:   53(fvec2) Load 148(c2)
+            3985:   52(float) Load 215(compare)
+            3986:3102(ResType) ImageSparseDrefGather 3983 3984 3985 ConstOffset 722
+            3987:    7(fvec4) CompositeExtract 3986 1
+                              Store 3950(texel) 3987
+            3988:     47(int) CompositeExtract 3986 0
+            3989:         224 Load 226(s2DShadow)
+            3990:  154(fvec2) Load 156(f16c2)
+            3991:   52(float) Load 215(compare)
+            3992:3102(ResType) ImageSparseDrefGather 3989 3990 3991 ConstOffset 722
+            3993:    7(fvec4) CompositeExtract 3992 1
+                              Store 3950(texel) 3993
+            3994:     47(int) CompositeExtract 3992 0
+            3995:         337 Load 339(s2DArrayShadow)
+            3996:  167(fvec3) Load 169(c3)
+            3997:   52(float) Load 215(compare)
+            3998:3102(ResType) ImageSparseDrefGather 3995 3996 3997 ConstOffset 722
+            3999:    7(fvec4) CompositeExtract 3998 1
+                              Store 3950(texel) 3999
+            4000:     47(int) CompositeExtract 3998 0
+            4001:         337 Load 339(s2DArrayShadow)
+            4002:  175(fvec3) Load 177(f16c3)
+            4003:   52(float) Load 215(compare)
+            4004:3102(ResType) ImageSparseDrefGather 4001 4002 4003 ConstOffset 722
+            4005:    7(fvec4) CompositeExtract 4004 1
+                              Store 3950(texel) 4005
+            4006:     47(int) CompositeExtract 4004 0
+            4007:         371 Load 373(s2DRectShadow)
+            4008:   53(fvec2) Load 148(c2)
+            4009:   52(float) Load 215(compare)
+            4010:3102(ResType) ImageSparseDrefGather 4007 4008 4009 ConstOffset 722
+            4011:    7(fvec4) CompositeExtract 4010 1
+                              Store 3950(texel) 4011
+            4012:     47(int) CompositeExtract 4010 0
+            4013:         371 Load 373(s2DRectShadow)
+            4014:  154(fvec2) Load 156(f16c2)
+            4015:   52(float) Load 215(compare)
+            4016:3102(ResType) ImageSparseDrefGather 4013 4014 4015 ConstOffset 722
+            4017:    7(fvec4) CompositeExtract 4016 1
+                              Store 3950(texel) 4017
+            4018:     47(int) CompositeExtract 4016 0
+            4019:    7(fvec4) Load 3950(texel)
+                              ReturnValue 4019
+                              FunctionEnd
+89(testSparseTextureGatherOffsets():    7(fvec4) Function None 8
+              90:             Label
+     4022(texel):     64(ptr) Variable Function
+                              Store 4022(texel) 121
+            4023:         143 Load 145(s2D)
+            4024:   53(fvec2) Load 148(c2)
+            4025:3102(ResType) ImageSparseGather 4023 4024 2187 ConstOffsets 2380
+            4026:    7(fvec4) CompositeExtract 4025 1
+                              Store 4022(texel) 4026
+            4027:     47(int) CompositeExtract 4025 0
+            4028:         143 Load 145(s2D)
+            4029:  154(fvec2) Load 156(f16c2)
+            4030:    6(float) Load 137(f16bias)
+            4031:3102(ResType) ImageSparseGather 4028 4029 2187 Bias ConstOffsets 4030 2380
+            4032:    7(fvec4) CompositeExtract 4031 1
+                              Store 4022(texel) 4032
+            4033:     47(int) CompositeExtract 4031 0
+            4034:         284 Load 286(s2DArray)
+            4035:  167(fvec3) Load 169(c3)
+            4036:3102(ResType) ImageSparseGather 4034 4035 2187 ConstOffsets 2380
+            4037:    7(fvec4) CompositeExtract 4036 1
+                              Store 4022(texel) 4037
+            4038:     47(int) CompositeExtract 4036 0
+            4039:         284 Load 286(s2DArray)
+            4040:  175(fvec3) Load 177(f16c3)
+            4041:    6(float) Load 137(f16bias)
+            4042:3102(ResType) ImageSparseGather 4039 4040 2187 Bias ConstOffsets 4041 2380
+            4043:    7(fvec4) CompositeExtract 4042 1
+                              Store 4022(texel) 4043
+            4044:     47(int) CompositeExtract 4042 0
+            4045:         357 Load 359(s2DRect)
+            4046:   53(fvec2) Load 148(c2)
+            4047:3102(ResType) ImageSparseGather 4045 4046 2187 ConstOffsets 2380
+            4048:    7(fvec4) CompositeExtract 4047 1
+                              Store 4022(texel) 4048
+            4049:     47(int) CompositeExtract 4047 0
+            4050:         357 Load 359(s2DRect)
+            4051:  154(fvec2) Load 156(f16c2)
+            4052:3102(ResType) ImageSparseGather 4050 4051 2187 ConstOffsets 2380
+            4053:    7(fvec4) CompositeExtract 4052 1
+                              Store 4022(texel) 4053
+            4054:     47(int) CompositeExtract 4052 0
+            4055:         224 Load 226(s2DShadow)
+            4056:   53(fvec2) Load 148(c2)
+            4057:   52(float) Load 215(compare)
+            4058:3102(ResType) ImageSparseDrefGather 4055 4056 4057 ConstOffsets 2380
+            4059:    7(fvec4) CompositeExtract 4058 1
+                              Store 4022(texel) 4059
+            4060:     47(int) CompositeExtract 4058 0
+            4061:         224 Load 226(s2DShadow)
+            4062:  154(fvec2) Load 156(f16c2)
+            4063:   52(float) Load 215(compare)
+            4064:3102(ResType) ImageSparseDrefGather 4061 4062 4063 ConstOffsets 2380
+            4065:    7(fvec4) CompositeExtract 4064 1
+                              Store 4022(texel) 4065
+            4066:     47(int) CompositeExtract 4064 0
+            4067:         337 Load 339(s2DArrayShadow)
+            4068:  167(fvec3) Load 169(c3)
+            4069:   52(float) Load 215(compare)
+            4070:3102(ResType) ImageSparseDrefGather 4067 4068 4069 ConstOffsets 2380
+            4071:    7(fvec4) CompositeExtract 4070 1
+                              Store 4022(texel) 4071
+            4072:     47(int) CompositeExtract 4070 0
+            4073:         337 Load 339(s2DArrayShadow)
+            4074:  175(fvec3) Load 177(f16c3)
+            4075:   52(float) Load 215(compare)
+            4076:3102(ResType) ImageSparseDrefGather 4073 4074 4075 ConstOffsets 2380
+            4077:    7(fvec4) CompositeExtract 4076 1
+                              Store 4022(texel) 4077
+            4078:     47(int) CompositeExtract 4076 0
+            4079:         371 Load 373(s2DRectShadow)
+            4080:   53(fvec2) Load 148(c2)
+            4081:   52(float) Load 215(compare)
+            4082:3102(ResType) ImageSparseDrefGather 4079 4080 4081 ConstOffsets 2380
+            4083:    7(fvec4) CompositeExtract 4082 1
+                              Store 4022(texel) 4083
+            4084:     47(int) CompositeExtract 4082 0
+            4085:         371 Load 373(s2DRectShadow)
+            4086:  154(fvec2) Load 156(f16c2)
+            4087:   52(float) Load 215(compare)
+            4088:3102(ResType) ImageSparseDrefGather 4085 4086 4087 ConstOffsets 2380
+            4089:    7(fvec4) CompositeExtract 4088 1
+                              Store 4022(texel) 4089
+            4090:     47(int) CompositeExtract 4088 0
+            4091:    7(fvec4) Load 4022(texel)
+                              ReturnValue 4091
+                              FunctionEnd
+91(testSparseTextureGatherLod():    7(fvec4) Function None 8
+              92:             Label
+     4094(texel):     64(ptr) Variable Function
+                              Store 4094(texel) 121
+            4095:         143 Load 145(s2D)
+            4096:   53(fvec2) Load 148(c2)
+            4097:   52(float) Load 565(lod)
+            4098:3102(ResType) ImageSparseGather 4095 4096 2187 Lod 4097
+            4099:    7(fvec4) CompositeExtract 4098 1
+                              Store 4094(texel) 4099
+            4100:     47(int) CompositeExtract 4098 0
+            4101:         143 Load 145(s2D)
+            4102:  154(fvec2) Load 156(f16c2)
+            4103:    6(float) Load 572(f16lod)
+            4104:3102(ResType) ImageSparseGather 4101 4102 2187 Lod 4103
+            4105:    7(fvec4) CompositeExtract 4104 1
+                              Store 4094(texel) 4105
+            4106:     47(int) CompositeExtract 4104 0
+            4107:         284 Load 286(s2DArray)
+            4108:  167(fvec3) Load 169(c3)
+            4109:   52(float) Load 565(lod)
+            4110:3102(ResType) ImageSparseGather 4107 4108 2187 Lod 4109
+            4111:    7(fvec4) CompositeExtract 4110 1
+                              Store 4094(texel) 4111
+            4112:     47(int) CompositeExtract 4110 0
+            4113:         284 Load 286(s2DArray)
+            4114:  175(fvec3) Load 177(f16c3)
+            4115:    6(float) Load 572(f16lod)
+            4116:3102(ResType) ImageSparseGather 4113 4114 2187 Lod 4115
+            4117:    7(fvec4) CompositeExtract 4116 1
+                              Store 4094(texel) 4117
+            4118:     47(int) CompositeExtract 4116 0
+            4119:         184 Load 186(sCube)
+            4120:  167(fvec3) Load 169(c3)
+            4121:   52(float) Load 565(lod)
+            4122:3102(ResType) ImageSparseGather 4119 4120 2187 Lod 4121
+            4123:    7(fvec4) CompositeExtract 4122 1
+                              Store 4094(texel) 4123
+            4124:     47(int) CompositeExtract 4122 0
+            4125:         184 Load 186(sCube)
+            4126:  175(fvec3) Load 177(f16c3)
+            4127:    6(float) Load 572(f16lod)
+            4128:3102(ResType) ImageSparseGather 4125 4126 2187 Lod 4127
+            4129:    7(fvec4) CompositeExtract 4128 1
+                              Store 4094(texel) 4129
+            4130:     47(int) CompositeExtract 4128 0
+            4131:         299 Load 301(sCubeArray)
+            4132:  249(fvec4) Load 251(c4)
+            4133:   52(float) Load 565(lod)
+            4134:3102(ResType) ImageSparseGather 4131 4132 2187 Lod 4133
+            4135:    7(fvec4) CompositeExtract 4134 1
+                              Store 4094(texel) 4135
+            4136:     47(int) CompositeExtract 4134 0
+            4137:         299 Load 301(sCubeArray)
+            4138:    7(fvec4) Load 309(f16c4)
+            4139:    6(float) Load 572(f16lod)
+            4140:3102(ResType) ImageSparseGather 4137 4138 2187 Lod 4139
+            4141:    7(fvec4) CompositeExtract 4140 1
+                              Store 4094(texel) 4141
+            4142:     47(int) CompositeExtract 4140 0
+            4143:    7(fvec4) Load 4094(texel)
+                              ReturnValue 4143
+                              FunctionEnd
+93(testSparseTextureGatherLodOffset():    7(fvec4) Function None 8
+              94:             Label
+     4146(texel):     64(ptr) Variable Function
+                              Store 4146(texel) 121
+            4147:         143 Load 145(s2D)
+            4148:   53(fvec2) Load 148(c2)
+            4149:   52(float) Load 565(lod)
+            4150:3102(ResType) ImageSparseGather 4147 4148 2187 Lod ConstOffset 4149 722
+            4151:    7(fvec4) CompositeExtract 4150 1
+                              Store 4146(texel) 4151
+            4152:     47(int) CompositeExtract 4150 0
+            4153:         143 Load 145(s2D)
+            4154:  154(fvec2) Load 156(f16c2)
+            4155:    6(float) Load 572(f16lod)
+            4156:3102(ResType) ImageSparseGather 4153 4154 2187 Lod ConstOffset 4155 722
+            4157:    7(fvec4) CompositeExtract 4156 1
+                              Store 4146(texel) 4157
+            4158:     47(int) CompositeExtract 4156 0
+            4159:         284 Load 286(s2DArray)
+            4160:  167(fvec3) Load 169(c3)
+            4161:   52(float) Load 565(lod)
+            4162:3102(ResType) ImageSparseGather 4159 4160 2187 Lod ConstOffset 4161 722
+            4163:    7(fvec4) CompositeExtract 4162 1
+                              Store 4146(texel) 4163
+            4164:     47(int) CompositeExtract 4162 0
+            4165:         284 Load 286(s2DArray)
+            4166:  175(fvec3) Load 177(f16c3)
+            4167:    6(float) Load 572(f16lod)
+            4168:3102(ResType) ImageSparseGather 4165 4166 2187 Lod ConstOffset 4167 722
+            4169:    7(fvec4) CompositeExtract 4168 1
+                              Store 4146(texel) 4169
+            4170:     47(int) CompositeExtract 4168 0
+            4171:    7(fvec4) Load 4146(texel)
+                              ReturnValue 4171
+                              FunctionEnd
+95(testSparseTextureGatherLodOffsets():    7(fvec4) Function None 8
+              96:             Label
+     4174(texel):     64(ptr) Variable Function
+                              Store 4174(texel) 121
+            4175:         143 Load 145(s2D)
+            4176:   53(fvec2) Load 148(c2)
+            4177:   52(float) Load 565(lod)
+            4178:3102(ResType) ImageSparseGather 4175 4176 2187 Lod ConstOffsets 4177 2380
+            4179:    7(fvec4) CompositeExtract 4178 1
+                              Store 4174(texel) 4179
+            4180:     47(int) CompositeExtract 4178 0
+            4181:         143 Load 145(s2D)
+            4182:  154(fvec2) Load 156(f16c2)
+            4183:    6(float) Load 572(f16lod)
+            4184:3102(ResType) ImageSparseGather 4181 4182 2187 Lod ConstOffsets 4183 2380
+            4185:    7(fvec4) CompositeExtract 4184 1
+                              Store 4174(texel) 4185
+            4186:     47(int) CompositeExtract 4184 0
+            4187:         284 Load 286(s2DArray)
+            4188:  167(fvec3) Load 169(c3)
+            4189:   52(float) Load 565(lod)
+            4190:3102(ResType) ImageSparseGather 4187 4188 2187 Lod ConstOffsets 4189 2380
+            4191:    7(fvec4) CompositeExtract 4190 1
+                              Store 4174(texel) 4191
+            4192:     47(int) CompositeExtract 4190 0
+            4193:         284 Load 286(s2DArray)
+            4194:  175(fvec3) Load 177(f16c3)
+            4195:    6(float) Load 572(f16lod)
+            4196:3102(ResType) ImageSparseGather 4193 4194 2187 Lod ConstOffsets 4195 2380
+            4197:    7(fvec4) CompositeExtract 4196 1
+                              Store 4174(texel) 4197
+            4198:     47(int) CompositeExtract 4196 0
+            4199:    7(fvec4) Load 4174(texel)
+                              ReturnValue 4199
+                              FunctionEnd
+97(testSparseImageLoad():    7(fvec4) Function None 8
+              98:             Label
+     4202(texel):     64(ptr) Variable Function
+                              Store 4202(texel) 121
+            4203:        2962 Load 2964(i2D)
+            4204:   53(fvec2) Load 148(c2)
+            4205:  721(ivec2) ConvertFToS 4204
+            4206:3102(ResType) ImageSparseRead 4203 4205
+            4207:    7(fvec4) CompositeExtract 4206 1
+                              Store 4202(texel) 4207
+            4208:     47(int) CompositeExtract 4206 0
+            4209:        2971 Load 2973(i3D)
+            4210:  167(fvec3) Load 169(c3)
+            4211:  734(ivec3) ConvertFToS 4210
+            4212:3102(ResType) ImageSparseRead 4209 4211
+            4213:    7(fvec4) CompositeExtract 4212 1
+                              Store 4202(texel) 4213
+            4214:     47(int) CompositeExtract 4212 0
+            4215:        2980 Load 2982(i2DRect)
+            4216:   53(fvec2) Load 148(c2)
+            4217:  721(ivec2) ConvertFToS 4216
+            4218:3102(ResType) ImageSparseRead 4215 4217
+            4219:    7(fvec4) CompositeExtract 4218 1
+                              Store 4202(texel) 4219
+            4220:     47(int) CompositeExtract 4218 0
+            4221:        2989 Load 2991(iCube)
+            4222:  167(fvec3) Load 169(c3)
+            4223:  734(ivec3) ConvertFToS 4222
+            4224:3102(ResType) ImageSparseRead 4221 4223
+            4225:    7(fvec4) CompositeExtract 4224 1
+                              Store 4202(texel) 4225
+            4226:     47(int) CompositeExtract 4224 0
+            4227:        3016 Load 3018(i2DArray)
+            4228:  167(fvec3) Load 169(c3)
+            4229:  734(ivec3) ConvertFToS 4228
+            4230:3102(ResType) ImageSparseRead 4227 4229
+            4231:    7(fvec4) CompositeExtract 4230 1
+                              Store 4202(texel) 4231
+            4232:     47(int) CompositeExtract 4230 0
+            4233:        3025 Load 3027(iCubeArray)
+            4234:  167(fvec3) Load 169(c3)
+            4235:  734(ivec3) ConvertFToS 4234
+            4236:3102(ResType) ImageSparseRead 4233 4235
+            4237:    7(fvec4) CompositeExtract 4236 1
+                              Store 4202(texel) 4237
+            4238:     47(int) CompositeExtract 4236 0
+            4239:        3034 Load 3036(i2DMS)
+            4240:   53(fvec2) Load 148(c2)
+            4241:  721(ivec2) ConvertFToS 4240
+            4242:3102(ResType) ImageSparseRead 4239 4241 Sample 709
+            4243:    7(fvec4) CompositeExtract 4242 1
+                              Store 4202(texel) 4243
+            4244:     47(int) CompositeExtract 4242 0
+            4245:        3043 Load 3045(i2DMSArray)
+            4246:  167(fvec3) Load 169(c3)
+            4247:  734(ivec3) ConvertFToS 4246
+            4248:3102(ResType) ImageSparseRead 4245 4247 Sample 1326
+            4249:    7(fvec4) CompositeExtract 4248 1
+                              Store 4202(texel) 4249
+            4250:     47(int) CompositeExtract 4248 0
+            4251:    7(fvec4) Load 4202(texel)
+                              ReturnValue 4251
+                              FunctionEnd
+99(testSparseTextureClamp():    7(fvec4) Function None 8
+             100:             Label
+     4254(texel):     64(ptr) Variable Function
+                              Store 4254(texel) 121
+            4255:         143 Load 145(s2D)
+            4256:   53(fvec2) Load 148(c2)
+            4258:   52(float) Load 4257(lodClamp)
+            4259:3102(ResType) ImageSparseSampleImplicitLod 4255 4256 MinLod 4258
+            4260:    7(fvec4) CompositeExtract 4259 1
+                              Store 4254(texel) 4260
+            4261:     47(int) CompositeExtract 4259 0
+            4262:         143 Load 145(s2D)
+            4263:  154(fvec2) Load 156(f16c2)
+            4265:    6(float) Load 4264(f16lodClamp)
+            4266:    6(float) Load 137(f16bias)
+            4267:3102(ResType) ImageSparseSampleImplicitLod 4262 4263 Bias MinLod 4266 4265
+            4268:    7(fvec4) CompositeExtract 4267 1
+                              Store 4254(texel) 4268
+            4269:     47(int) CompositeExtract 4267 0
+            4270:         163 Load 165(s3D)
+            4271:  167(fvec3) Load 169(c3)
+            4272:   52(float) Load 4257(lodClamp)
+            4273:3102(ResType) ImageSparseSampleImplicitLod 4270 4271 MinLod 4272
+            4274:    7(fvec4) CompositeExtract 4273 1
+                              Store 4254(texel) 4274
+            4275:     47(int) CompositeExtract 4273 0
+            4276:         163 Load 165(s3D)
+            4277:  175(fvec3) Load 177(f16c3)
+            4278:    6(float) Load 4264(f16lodClamp)
+            4279:    6(float) Load 137(f16bias)
+            4280:3102(ResType) ImageSparseSampleImplicitLod 4276 4277 Bias MinLod 4279 4278
+            4281:    7(fvec4) CompositeExtract 4280 1
+                              Store 4254(texel) 4281
+            4282:     47(int) CompositeExtract 4280 0
+            4283:         184 Load 186(sCube)
+            4284:  167(fvec3) Load 169(c3)
+            4285:   52(float) Load 4257(lodClamp)
+            4286:3102(ResType) ImageSparseSampleImplicitLod 4283 4284 MinLod 4285
+            4287:    7(fvec4) CompositeExtract 4286 1
+                              Store 4254(texel) 4287
+            4288:     47(int) CompositeExtract 4286 0
+            4289:         184 Load 186(sCube)
+            4290:  175(fvec3) Load 177(f16c3)
+            4291:    6(float) Load 4264(f16lodClamp)
+            4292:    6(float) Load 137(f16bias)
+            4293:3102(ResType) ImageSparseSampleImplicitLod 4289 4290 Bias MinLod 4292 4291
+            4294:    7(fvec4) CompositeExtract 4293 1
+                              Store 4254(texel) 4294
+            4295:     47(int) CompositeExtract 4293 0
+            4296:         224 Load 226(s2DShadow)
+            4297:  167(fvec3) Load 169(c3)
+            4298:   52(float) Load 4257(lodClamp)
+            4299:    208(ptr) AccessChain 4254(texel) 207
+            4300:   52(float) CompositeExtract 4297 2
+            4301:3138(ResType) ImageSparseSampleDrefImplicitLod 4296 4297 4300 MinLod 4298
+            4302:    6(float) CompositeExtract 4301 1
+                              Store 4299 4302
+            4303:     47(int) CompositeExtract 4301 0
+            4304:         224 Load 226(s2DShadow)
+            4305:  154(fvec2) Load 156(f16c2)
+            4306:   52(float) Load 215(compare)
+            4307:    6(float) Load 4264(f16lodClamp)
+            4308:    208(ptr) AccessChain 4254(texel) 207
+            4309:    6(float) Load 137(f16bias)
+            4310:3138(ResType) ImageSparseSampleDrefImplicitLod 4304 4305 4306 Bias MinLod 4309 4307
+            4311:    6(float) CompositeExtract 4310 1
+                              Store 4308 4311
+            4312:     47(int) CompositeExtract 4310 0
+            4313:         245 Load 247(sCubeShadow)
+            4314:  249(fvec4) Load 251(c4)
+            4315:   52(float) Load 4257(lodClamp)
+            4316:    208(ptr) AccessChain 4254(texel) 207
+            4317:   52(float) CompositeExtract 4314 3
+            4318:3138(ResType) ImageSparseSampleDrefImplicitLod 4313 4314 4317 MinLod 4315
+            4319:    6(float) CompositeExtract 4318 1
+                              Store 4316 4319
+            4320:     47(int) CompositeExtract 4318 0
+            4321:         245 Load 247(sCubeShadow)
+            4322:  175(fvec3) Load 177(f16c3)
+            4323:   52(float) Load 215(compare)
+            4324:    6(float) Load 4264(f16lodClamp)
+            4325:    208(ptr) AccessChain 4254(texel) 207
+            4326:    6(float) Load 137(f16bias)
+            4327:3138(ResType) ImageSparseSampleDrefImplicitLod 4321 4322 4323 Bias MinLod 4326 4324
+            4328:    6(float) CompositeExtract 4327 1
+                              Store 4325 4328
+            4329:     47(int) CompositeExtract 4327 0
+            4330:         284 Load 286(s2DArray)
+            4331:  167(fvec3) Load 169(c3)
+            4332:   52(float) Load 4257(lodClamp)
+            4333:3102(ResType) ImageSparseSampleImplicitLod 4330 4331 MinLod 4332
+            4334:    7(fvec4) CompositeExtract 4333 1
+                              Store 4254(texel) 4334
+            4335:     47(int) CompositeExtract 4333 0
+            4336:         284 Load 286(s2DArray)
+            4337:  175(fvec3) Load 177(f16c3)
+            4338:    6(float) Load 4264(f16lodClamp)
+            4339:    6(float) Load 137(f16bias)
+            4340:3102(ResType) ImageSparseSampleImplicitLod 4336 4337 Bias MinLod 4339 4338
+            4341:    7(fvec4) CompositeExtract 4340 1
+                              Store 4254(texel) 4341
+            4342:     47(int) CompositeExtract 4340 0
+            4343:         299 Load 301(sCubeArray)
+            4344:  249(fvec4) Load 251(c4)
+            4345:   52(float) Load 4257(lodClamp)
+            4346:3102(ResType) ImageSparseSampleImplicitLod 4343 4344 MinLod 4345
+            4347:    7(fvec4) CompositeExtract 4346 1
+                              Store 4254(texel) 4347
+            4348:     47(int) CompositeExtract 4346 0
+            4349:         299 Load 301(sCubeArray)
+            4350:    7(fvec4) Load 309(f16c4)
+            4351:    6(float) Load 4264(f16lodClamp)
+            4352:    6(float) Load 137(f16bias)
+            4353:3102(ResType) ImageSparseSampleImplicitLod 4349 4350 Bias MinLod 4352 4351
+            4354:    7(fvec4) CompositeExtract 4353 1
+                              Store 4254(texel) 4354
+            4355:     47(int) CompositeExtract 4353 0
+            4356:         337 Load 339(s2DArrayShadow)
+            4357:  249(fvec4) Load 251(c4)
+            4358:   52(float) Load 4257(lodClamp)
+            4359:    208(ptr) AccessChain 4254(texel) 207
+            4360:   52(float) CompositeExtract 4357 3
+            4361:3138(ResType) ImageSparseSampleDrefImplicitLod 4356 4357 4360 MinLod 4358
+            4362:    6(float) CompositeExtract 4361 1
+                              Store 4359 4362
+            4363:     47(int) CompositeExtract 4361 0
+            4364:         337 Load 339(s2DArrayShadow)
+            4365:  175(fvec3) Load 177(f16c3)
+            4366:   52(float) Load 215(compare)
+            4367:    6(float) Load 4264(f16lodClamp)
+            4368:    208(ptr) AccessChain 4254(texel) 207
+            4369:3138(ResType) ImageSparseSampleDrefImplicitLod 4364 4365 4366 MinLod 4367
+            4370:    6(float) CompositeExtract 4369 1
+                              Store 4368 4370
+            4371:     47(int) CompositeExtract 4369 0
+            4372:         391 Load 393(sCubeArrayShadow)
+            4373:  249(fvec4) Load 251(c4)
+            4374:   52(float) Load 215(compare)
+            4375:   52(float) Load 4257(lodClamp)
+            4376:    208(ptr) AccessChain 4254(texel) 207
+            4377:3138(ResType) ImageSparseSampleDrefImplicitLod 4372 4373 4374 MinLod 4375
+            4378:    6(float) CompositeExtract 4377 1
+                              Store 4376 4378
+            4379:     47(int) CompositeExtract 4377 0
+            4380:         391 Load 393(sCubeArrayShadow)
+            4381:    7(fvec4) Load 309(f16c4)
+            4382:   52(float) Load 215(compare)
+            4383:    6(float) Load 4264(f16lodClamp)
+            4384:    208(ptr) AccessChain 4254(texel) 207
+            4385:3138(ResType) ImageSparseSampleDrefImplicitLod 4380 4381 4382 MinLod 4383
+            4386:    6(float) CompositeExtract 4385 1
+                              Store 4384 4386
+            4387:     47(int) CompositeExtract 4385 0
+            4388:    7(fvec4) Load 4254(texel)
+                              ReturnValue 4388
+                              FunctionEnd
+101(testTextureClamp():    7(fvec4) Function None 8
+             102:             Label
+     4391(texel):     64(ptr) Variable Function
+                              Store 4391(texel) 121
+            4392:         123 Load 125(s1D)
+            4393:   52(float) Load 128(c1)
+            4394:   52(float) Load 4257(lodClamp)
+            4395:    7(fvec4) ImageSampleImplicitLod 4392 4393 MinLod 4394
+            4396:    7(fvec4) Load 4391(texel)
+            4397:    7(fvec4) FAdd 4396 4395
+                              Store 4391(texel) 4397
+            4398:         123 Load 125(s1D)
+            4399:    6(float) Load 135(f16c1)
+            4400:    6(float) Load 4264(f16lodClamp)
+            4401:    6(float) Load 137(f16bias)
+            4402:    7(fvec4) ImageSampleImplicitLod 4398 4399 Bias MinLod 4401 4400
+            4403:    7(fvec4) Load 4391(texel)
+            4404:    7(fvec4) FAdd 4403 4402
+                              Store 4391(texel) 4404
+            4405:         143 Load 145(s2D)
+            4406:   53(fvec2) Load 148(c2)
+            4407:   52(float) Load 4257(lodClamp)
+            4408:    7(fvec4) ImageSampleImplicitLod 4405 4406 MinLod 4407
+            4409:    7(fvec4) Load 4391(texel)
+            4410:    7(fvec4) FAdd 4409 4408
+                              Store 4391(texel) 4410
+            4411:         143 Load 145(s2D)
+            4412:  154(fvec2) Load 156(f16c2)
+            4413:    6(float) Load 4264(f16lodClamp)
+            4414:    6(float) Load 137(f16bias)
+            4415:    7(fvec4) ImageSampleImplicitLod 4411 4412 Bias MinLod 4414 4413
+            4416:    7(fvec4) Load 4391(texel)
+            4417:    7(fvec4) FAdd 4416 4415
+                              Store 4391(texel) 4417
+            4418:         163 Load 165(s3D)
+            4419:  167(fvec3) Load 169(c3)
+            4420:   52(float) Load 4257(lodClamp)
+            4421:    7(fvec4) ImageSampleImplicitLod 4418 4419 MinLod 4420
+            4422:    7(fvec4) Load 4391(texel)
+            4423:    7(fvec4) FAdd 4422 4421
+                              Store 4391(texel) 4423
+            4424:         163 Load 165(s3D)
+            4425:  175(fvec3) Load 177(f16c3)
+            4426:    6(float) Load 4264(f16lodClamp)
+            4427:    6(float) Load 137(f16bias)
+            4428:    7(fvec4) ImageSampleImplicitLod 4424 4425 Bias MinLod 4427 4426
+            4429:    7(fvec4) Load 4391(texel)
+            4430:    7(fvec4) FAdd 4429 4428
+                              Store 4391(texel) 4430
+            4431:         184 Load 186(sCube)
+            4432:  167(fvec3) Load 169(c3)
+            4433:   52(float) Load 4257(lodClamp)
+            4434:    7(fvec4) ImageSampleImplicitLod 4431 4432 MinLod 4433
+            4435:    7(fvec4) Load 4391(texel)
+            4436:    7(fvec4) FAdd 4435 4434
+                              Store 4391(texel) 4436
+            4437:         184 Load 186(sCube)
+            4438:  175(fvec3) Load 177(f16c3)
+            4439:    6(float) Load 4264(f16lodClamp)
+            4440:    6(float) Load 137(f16bias)
+            4441:    7(fvec4) ImageSampleImplicitLod 4437 4438 Bias MinLod 4440 4439
+            4442:    7(fvec4) Load 4391(texel)
+            4443:    7(fvec4) FAdd 4442 4441
+                              Store 4391(texel) 4443
+            4444:         199 Load 201(s1DShadow)
+            4445:  167(fvec3) Load 169(c3)
+            4446:   52(float) Load 4257(lodClamp)
+            4447:   52(float) CompositeExtract 4445 2
+            4448:    6(float) ImageSampleDrefImplicitLod 4444 4445 4447 MinLod 4446
+            4449:    208(ptr) AccessChain 4391(texel) 207
+            4450:    6(float) Load 4449
+            4451:    6(float) FAdd 4450 4448
+            4452:    208(ptr) AccessChain 4391(texel) 207
+                              Store 4452 4451
+            4453:         199 Load 201(s1DShadow)
+            4454:  154(fvec2) Load 156(f16c2)
+            4455:   52(float) Load 215(compare)
+            4456:    6(float) Load 4264(f16lodClamp)
+            4457:    6(float) Load 137(f16bias)
+            4458:    6(float) ImageSampleDrefImplicitLod 4453 4454 4455 Bias MinLod 4457 4456
+            4459:    208(ptr) AccessChain 4391(texel) 207
+            4460:    6(float) Load 4459
+            4461:    6(float) FAdd 4460 4458
+            4462:    208(ptr) AccessChain 4391(texel) 207
+                              Store 4462 4461
+            4463:         224 Load 226(s2DShadow)
+            4464:  167(fvec3) Load 169(c3)
+            4465:   52(float) Load 4257(lodClamp)
+            4466:   52(float) CompositeExtract 4464 2
+            4467:    6(float) ImageSampleDrefImplicitLod 4463 4464 4466 MinLod 4465
+            4468:    208(ptr) AccessChain 4391(texel) 207
+            4469:    6(float) Load 4468
+            4470:    6(float) FAdd 4469 4467
+            4471:    208(ptr) AccessChain 4391(texel) 207
+                              Store 4471 4470
+            4472:         224 Load 226(s2DShadow)
+            4473:  154(fvec2) Load 156(f16c2)
+            4474:   52(float) Load 215(compare)
+            4475:    6(float) Load 4264(f16lodClamp)
+            4476:    6(float) Load 137(f16bias)
+            4477:    6(float) ImageSampleDrefImplicitLod 4472 4473 4474 Bias MinLod 4476 4475
+            4478:    208(ptr) AccessChain 4391(texel) 207
+            4479:    6(float) Load 4478
+            4480:    6(float) FAdd 4479 4477
+            4481:    208(ptr) AccessChain 4391(texel) 207
+                              Store 4481 4480
+            4482:         245 Load 247(sCubeShadow)
+            4483:  249(fvec4) Load 251(c4)
+            4484:   52(float) Load 4257(lodClamp)
+            4485:   52(float) CompositeExtract 4483 3
+            4486:    6(float) ImageSampleDrefImplicitLod 4482 4483 4485 MinLod 4484
+            4487:    208(ptr) AccessChain 4391(texel) 207
+            4488:    6(float) Load 4487
+            4489:    6(float) FAdd 4488 4486
+            4490:    208(ptr) AccessChain 4391(texel) 207
+                              Store 4490 4489
+            4491:         245 Load 247(sCubeShadow)
+            4492:  175(fvec3) Load 177(f16c3)
+            4493:   52(float) Load 215(compare)
+            4494:    6(float) Load 4264(f16lodClamp)
+            4495:    6(float) Load 137(f16bias)
+            4496:    6(float) ImageSampleDrefImplicitLod 4491 4492 4493 Bias MinLod 4495 4494
+            4497:    208(ptr) AccessChain 4391(texel) 207
+            4498:    6(float) Load 4497
+            4499:    6(float) FAdd 4498 4496
+            4500:    208(ptr) AccessChain 4391(texel) 207
+                              Store 4500 4499
+            4501:         269 Load 271(s1DArray)
+            4502:   53(fvec2) Load 148(c2)
+            4503:   52(float) Load 4257(lodClamp)
+            4504:    7(fvec4) ImageSampleImplicitLod 4501 4502 MinLod 4503
+            4505:    7(fvec4) Load 4391(texel)
+            4506:    7(fvec4) FAdd 4505 4504
+                              Store 4391(texel) 4506
+            4507:         269 Load 271(s1DArray)
+            4508:  154(fvec2) Load 156(f16c2)
+            4509:    6(float) Load 4264(f16lodClamp)
+            4510:    6(float) Load 137(f16bias)
+            4511:    7(fvec4) ImageSampleImplicitLod 4507 4508 Bias MinLod 4510 4509
+            4512:    7(fvec4) Load 4391(texel)
+            4513:    7(fvec4) FAdd 4512 4511
+                              Store 4391(texel) 4513
+            4514:         284 Load 286(s2DArray)
+            4515:  167(fvec3) Load 169(c3)
+            4516:   52(float) Load 4257(lodClamp)
+            4517:    7(fvec4) ImageSampleImplicitLod 4514 4515 MinLod 4516
+            4518:    7(fvec4) Load 4391(texel)
+            4519:    7(fvec4) FAdd 4518 4517
+                              Store 4391(texel) 4519
+            4520:         284 Load 286(s2DArray)
+            4521:  175(fvec3) Load 177(f16c3)
+            4522:    6(float) Load 4264(f16lodClamp)
+            4523:    6(float) Load 137(f16bias)
+            4524:    7(fvec4) ImageSampleImplicitLod 4520 4521 Bias MinLod 4523 4522
+            4525:    7(fvec4) Load 4391(texel)
+            4526:    7(fvec4) FAdd 4525 4524
+                              Store 4391(texel) 4526
+            4527:         299 Load 301(sCubeArray)
+            4528:  249(fvec4) Load 251(c4)
+            4529:   52(float) Load 4257(lodClamp)
+            4530:    7(fvec4) ImageSampleImplicitLod 4527 4528 MinLod 4529
+            4531:    7(fvec4) Load 4391(texel)
+            4532:    7(fvec4) FAdd 4531 4530
+                              Store 4391(texel) 4532
+            4533:         299 Load 301(sCubeArray)
+            4534:    7(fvec4) Load 309(f16c4)
+            4535:    6(float) Load 4264(f16lodClamp)
+            4536:    6(float) Load 137(f16bias)
+            4537:    7(fvec4) ImageSampleImplicitLod 4533 4534 Bias MinLod 4536 4535
+            4538:    7(fvec4) Load 4391(texel)
+            4539:    7(fvec4) FAdd 4538 4537
+                              Store 4391(texel) 4539
+            4540:         316 Load 318(s1DArrayShadow)
+            4541:  167(fvec3) Load 169(c3)
+            4542:   52(float) Load 4257(lodClamp)
+            4543:   52(float) CompositeExtract 4541 2
+            4544:    6(float) ImageSampleDrefImplicitLod 4540 4541 4543 MinLod 4542
+            4545:    208(ptr) AccessChain 4391(texel) 207
+            4546:    6(float) Load 4545
+            4547:    6(float) FAdd 4546 4544
+            4548:    208(ptr) AccessChain 4391(texel) 207
+                              Store 4548 4547
+            4549:         316 Load 318(s1DArrayShadow)
+            4550:  154(fvec2) Load 156(f16c2)
+            4551:   52(float) Load 215(compare)
+            4552:    6(float) Load 4264(f16lodClamp)
+            4553:    6(float) Load 137(f16bias)
+            4554:    6(float) ImageSampleDrefImplicitLod 4549 4550 4551 Bias MinLod 4553 4552
+            4555:    208(ptr) AccessChain 4391(texel) 207
+            4556:    6(float) Load 4555
+            4557:    6(float) FAdd 4556 4554
+            4558:    208(ptr) AccessChain 4391(texel) 207
+                              Store 4558 4557
+            4559:         337 Load 339(s2DArrayShadow)
+            4560:  249(fvec4) Load 251(c4)
+            4561:   52(float) Load 4257(lodClamp)
+            4562:   52(float) CompositeExtract 4560 3
+            4563:    6(float) ImageSampleDrefImplicitLod 4559 4560 4562 MinLod 4561
+            4564:    208(ptr) AccessChain 4391(texel) 207
+            4565:    6(float) Load 4564
+            4566:    6(float) FAdd 4565 4563
+            4567:    208(ptr) AccessChain 4391(texel) 207
+                              Store 4567 4566
+            4568:         337 Load 339(s2DArrayShadow)
+            4569:  175(fvec3) Load 177(f16c3)
+            4570:   52(float) Load 215(compare)
+            4571:    6(float) Load 4264(f16lodClamp)
+            4572:    6(float) ImageSampleDrefImplicitLod 4568 4569 4570 MinLod 4571
+            4573:    208(ptr) AccessChain 4391(texel) 207
+            4574:    6(float) Load 4573
+            4575:    6(float) FAdd 4574 4572
+            4576:    208(ptr) AccessChain 4391(texel) 207
+                              Store 4576 4575
+            4577:         391 Load 393(sCubeArrayShadow)
+            4578:  249(fvec4) Load 251(c4)
+            4579:   52(float) Load 215(compare)
+            4580:   52(float) Load 4257(lodClamp)
+            4581:    6(float) ImageSampleDrefImplicitLod 4577 4578 4579 MinLod 4580
+            4582:    208(ptr) AccessChain 4391(texel) 207
+            4583:    6(float) Load 4582
+            4584:    6(float) FAdd 4583 4581
+            4585:    208(ptr) AccessChain 4391(texel) 207
+                              Store 4585 4584
+            4586:         391 Load 393(sCubeArrayShadow)
+            4587:    7(fvec4) Load 309(f16c4)
+            4588:   52(float) Load 215(compare)
+            4589:    6(float) Load 4264(f16lodClamp)
+            4590:    6(float) ImageSampleDrefImplicitLod 4586 4587 4588 MinLod 4589
+            4591:    208(ptr) AccessChain 4391(texel) 207
+            4592:    6(float) Load 4591
+            4593:    6(float) FAdd 4592 4590
+            4594:    208(ptr) AccessChain 4391(texel) 207
+                              Store 4594 4593
+            4595:    7(fvec4) Load 4391(texel)
+                              ReturnValue 4595
+                              FunctionEnd
+103(testSparseTextureOffsetClamp():    7(fvec4) Function None 8
+             104:             Label
+     4598(texel):     64(ptr) Variable Function
+                              Store 4598(texel) 121
+            4599:         143 Load 145(s2D)
+            4600:   53(fvec2) Load 148(c2)
+            4601:   52(float) Load 4257(lodClamp)
+            4602:3102(ResType) ImageSparseSampleImplicitLod 4599 4600 ConstOffset MinLod 722 4601
+            4603:    7(fvec4) CompositeExtract 4602 1
+                              Store 4598(texel) 4603
+            4604:     47(int) CompositeExtract 4602 0
+            4605:         143 Load 145(s2D)
+            4606:  154(fvec2) Load 156(f16c2)
+            4607:    6(float) Load 4264(f16lodClamp)
+            4608:    6(float) Load 137(f16bias)
+            4609:3102(ResType) ImageSparseSampleImplicitLod 4605 4606 Bias ConstOffset MinLod 4608 722 4607
+            4610:    7(fvec4) CompositeExtract 4609 1
+                              Store 4598(texel) 4610
+            4611:     47(int) CompositeExtract 4609 0
+            4612:         163 Load 165(s3D)
+            4613:  167(fvec3) Load 169(c3)
+            4614:   52(float) Load 4257(lodClamp)
+            4615:3102(ResType) ImageSparseSampleImplicitLod 4612 4613 ConstOffset MinLod 735 4614
+            4616:    7(fvec4) CompositeExtract 4615 1
+                              Store 4598(texel) 4616
+            4617:     47(int) CompositeExtract 4615 0
+            4618:         163 Load 165(s3D)
+            4619:  175(fvec3) Load 177(f16c3)
+            4620:    6(float) Load 4264(f16lodClamp)
+            4621:    6(float) Load 137(f16bias)
+            4622:3102(ResType) ImageSparseSampleImplicitLod 4618 4619 Bias ConstOffset MinLod 4621 735 4620
+            4623:    7(fvec4) CompositeExtract 4622 1
+                              Store 4598(texel) 4623
+            4624:     47(int) CompositeExtract 4622 0
+            4625:         224 Load 226(s2DShadow)
+            4626:  167(fvec3) Load 169(c3)
+            4627:   52(float) Load 4257(lodClamp)
+            4628:    208(ptr) AccessChain 4598(texel) 207
+            4629:   52(float) CompositeExtract 4626 2
+            4630:3138(ResType) ImageSparseSampleDrefImplicitLod 4625 4626 4629 ConstOffset MinLod 722 4627
+            4631:    6(float) CompositeExtract 4630 1
+                              Store 4628 4631
+            4632:     47(int) CompositeExtract 4630 0
+            4633:         224 Load 226(s2DShadow)
+            4634:  154(fvec2) Load 156(f16c2)
+            4635:   52(float) Load 215(compare)
+            4636:    6(float) Load 4264(f16lodClamp)
+            4637:    208(ptr) AccessChain 4598(texel) 207
+            4638:    6(float) Load 137(f16bias)
+            4639:3138(ResType) ImageSparseSampleDrefImplicitLod 4633 4634 4635 Bias ConstOffset MinLod 4638 722 4636
+            4640:    6(float) CompositeExtract 4639 1
+                              Store 4637 4640
+            4641:     47(int) CompositeExtract 4639 0
+            4642:         284 Load 286(s2DArray)
+            4643:  167(fvec3) Load 169(c3)
+            4644:   52(float) Load 4257(lodClamp)
+            4645:3102(ResType) ImageSparseSampleImplicitLod 4642 4643 ConstOffset MinLod 722 4644
+            4646:    7(fvec4) CompositeExtract 4645 1
+                              Store 4598(texel) 4646
+            4647:     47(int) CompositeExtract 4645 0
+            4648:         284 Load 286(s2DArray)
+            4649:  175(fvec3) Load 177(f16c3)
+            4650:    6(float) Load 4264(f16lodClamp)
+            4651:    6(float) Load 137(f16bias)
+            4652:3102(ResType) ImageSparseSampleImplicitLod 4648 4649 Bias ConstOffset MinLod 4651 722 4650
+            4653:    7(fvec4) CompositeExtract 4652 1
+                              Store 4598(texel) 4653
+            4654:     47(int) CompositeExtract 4652 0
+            4655:         337 Load 339(s2DArrayShadow)
+            4656:  249(fvec4) Load 251(c4)
+            4657:   52(float) Load 4257(lodClamp)
+            4658:    208(ptr) AccessChain 4598(texel) 207
+            4659:   52(float) CompositeExtract 4656 3
+            4660:3138(ResType) ImageSparseSampleDrefImplicitLod 4655 4656 4659 ConstOffset MinLod 722 4657
+            4661:    6(float) CompositeExtract 4660 1
+                              Store 4658 4661
+            4662:     47(int) CompositeExtract 4660 0
+            4663:         337 Load 339(s2DArrayShadow)
+            4664:  175(fvec3) Load 177(f16c3)
+            4665:   52(float) Load 215(compare)
+            4666:    6(float) Load 4264(f16lodClamp)
+            4667:    208(ptr) AccessChain 4598(texel) 207
+            4668:3138(ResType) ImageSparseSampleDrefImplicitLod 4663 4664 4665 ConstOffset MinLod 722 4666
+            4669:    6(float) CompositeExtract 4668 1
+                              Store 4667 4669
+            4670:     47(int) CompositeExtract 4668 0
+            4671:    7(fvec4) Load 4598(texel)
+                              ReturnValue 4671
+                              FunctionEnd
+105(testTextureOffsetClamp():    7(fvec4) Function None 8
+             106:             Label
+     4674(texel):     64(ptr) Variable Function
+                              Store 4674(texel) 121
+            4675:         123 Load 125(s1D)
+            4676:   52(float) Load 128(c1)
+            4677:   52(float) Load 4257(lodClamp)
+            4678:    7(fvec4) ImageSampleImplicitLod 4675 4676 ConstOffset MinLod 709 4677
+            4679:    7(fvec4) Load 4674(texel)
+            4680:    7(fvec4) FAdd 4679 4678
+                              Store 4674(texel) 4680
+            4681:         123 Load 125(s1D)
+            4682:    6(float) Load 135(f16c1)
+            4683:    6(float) Load 4264(f16lodClamp)
+            4684:    6(float) Load 137(f16bias)
+            4685:    7(fvec4) ImageSampleImplicitLod 4681 4682 Bias ConstOffset MinLod 4684 709 4683
+            4686:    7(fvec4) Load 4674(texel)
+            4687:    7(fvec4) FAdd 4686 4685
+                              Store 4674(texel) 4687
+            4688:         143 Load 145(s2D)
+            4689:   53(fvec2) Load 148(c2)
+            4690:   52(float) Load 4257(lodClamp)
+            4691:    7(fvec4) ImageSampleImplicitLod 4688 4689 ConstOffset MinLod 722 4690
+            4692:    7(fvec4) Load 4674(texel)
+            4693:    7(fvec4) FAdd 4692 4691
+                              Store 4674(texel) 4693
+            4694:         143 Load 145(s2D)
+            4695:  154(fvec2) Load 156(f16c2)
+            4696:    6(float) Load 4264(f16lodClamp)
+            4697:    6(float) Load 137(f16bias)
+            4698:    7(fvec4) ImageSampleImplicitLod 4694 4695 Bias ConstOffset MinLod 4697 722 4696
+            4699:    7(fvec4) Load 4674(texel)
+            4700:    7(fvec4) FAdd 4699 4698
+                              Store 4674(texel) 4700
+            4701:         163 Load 165(s3D)
+            4702:  167(fvec3) Load 169(c3)
+            4703:   52(float) Load 4257(lodClamp)
+            4704:    7(fvec4) ImageSampleImplicitLod 4701 4702 ConstOffset MinLod 735 4703
+            4705:    7(fvec4) Load 4674(texel)
+            4706:    7(fvec4) FAdd 4705 4704
+                              Store 4674(texel) 4706
+            4707:         163 Load 165(s3D)
+            4708:  175(fvec3) Load 177(f16c3)
+            4709:    6(float) Load 4264(f16lodClamp)
+            4710:    6(float) Load 137(f16bias)
+            4711:    7(fvec4) ImageSampleImplicitLod 4707 4708 Bias ConstOffset MinLod 4710 735 4709
+            4712:    7(fvec4) Load 4674(texel)
+            4713:    7(fvec4) FAdd 4712 4711
+                              Store 4674(texel) 4713
+            4714:         199 Load 201(s1DShadow)
+            4715:  167(fvec3) Load 169(c3)
+            4716:   52(float) Load 4257(lodClamp)
+            4717:   52(float) CompositeExtract 4715 2
+            4718:    6(float) ImageSampleDrefImplicitLod 4714 4715 4717 ConstOffset MinLod 709 4716
+            4719:    208(ptr) AccessChain 4674(texel) 207
+            4720:    6(float) Load 4719
+            4721:    6(float) FAdd 4720 4718
+            4722:    208(ptr) AccessChain 4674(texel) 207
+                              Store 4722 4721
+            4723:         199 Load 201(s1DShadow)
+            4724:  154(fvec2) Load 156(f16c2)
+            4725:   52(float) Load 215(compare)
+            4726:    6(float) Load 4264(f16lodClamp)
+            4727:    6(float) Load 137(f16bias)
+            4728:    6(float) ImageSampleDrefImplicitLod 4723 4724 4725 Bias ConstOffset MinLod 4727 709 4726
+            4729:    208(ptr) AccessChain 4674(texel) 207
+            4730:    6(float) Load 4729
+            4731:    6(float) FAdd 4730 4728
+            4732:    208(ptr) AccessChain 4674(texel) 207
+                              Store 4732 4731
+            4733:         224 Load 226(s2DShadow)
+            4734:  167(fvec3) Load 169(c3)
+            4735:   52(float) Load 4257(lodClamp)
+            4736:   52(float) CompositeExtract 4734 2
+            4737:    6(float) ImageSampleDrefImplicitLod 4733 4734 4736 ConstOffset MinLod 722 4735
+            4738:    208(ptr) AccessChain 4674(texel) 207
+            4739:    6(float) Load 4738
+            4740:    6(float) FAdd 4739 4737
+            4741:    208(ptr) AccessChain 4674(texel) 207
+                              Store 4741 4740
+            4742:         224 Load 226(s2DShadow)
+            4743:  154(fvec2) Load 156(f16c2)
+            4744:   52(float) Load 215(compare)
+            4745:    6(float) Load 4264(f16lodClamp)
+            4746:    6(float) Load 137(f16bias)
+            4747:    6(float) ImageSampleDrefImplicitLod 4742 4743 4744 Bias ConstOffset MinLod 4746 722 4745
+            4748:    208(ptr) AccessChain 4674(texel) 207
+            4749:    6(float) Load 4748
+            4750:    6(float) FAdd 4749 4747
+            4751:    208(ptr) AccessChain 4674(texel) 207
+                              Store 4751 4750
+            4752:         269 Load 271(s1DArray)
+            4753:   53(fvec2) Load 148(c2)
+            4754:   52(float) Load 4257(lodClamp)
+            4755:    7(fvec4) ImageSampleImplicitLod 4752 4753 ConstOffset MinLod 709 4754
+            4756:    7(fvec4) Load 4674(texel)
+            4757:    7(fvec4) FAdd 4756 4755
+                              Store 4674(texel) 4757
+            4758:         269 Load 271(s1DArray)
+            4759:  154(fvec2) Load 156(f16c2)
+            4760:    6(float) Load 4264(f16lodClamp)
+            4761:    6(float) Load 137(f16bias)
+            4762:    7(fvec4) ImageSampleImplicitLod 4758 4759 Bias ConstOffset MinLod 4761 709 4760
+            4763:    7(fvec4) Load 4674(texel)
+            4764:    7(fvec4) FAdd 4763 4762
+                              Store 4674(texel) 4764
+            4765:         284 Load 286(s2DArray)
+            4766:  167(fvec3) Load 169(c3)
+            4767:   52(float) Load 4257(lodClamp)
+            4768:    7(fvec4) ImageSampleImplicitLod 4765 4766 ConstOffset MinLod 722 4767
+            4769:    7(fvec4) Load 4674(texel)
+            4770:    7(fvec4) FAdd 4769 4768
+                              Store 4674(texel) 4770
+            4771:         284 Load 286(s2DArray)
+            4772:  175(fvec3) Load 177(f16c3)
+            4773:    6(float) Load 4264(f16lodClamp)
+            4774:    6(float) Load 137(f16bias)
+            4775:    7(fvec4) ImageSampleImplicitLod 4771 4772 Bias ConstOffset MinLod 4774 722 4773
+            4776:    7(fvec4) Load 4674(texel)
+            4777:    7(fvec4) FAdd 4776 4775
+                              Store 4674(texel) 4777
+            4778:         316 Load 318(s1DArrayShadow)
+            4779:  167(fvec3) Load 169(c3)
+            4780:   52(float) Load 4257(lodClamp)
+            4781:   52(float) CompositeExtract 4779 2
+            4782:    6(float) ImageSampleDrefImplicitLod 4778 4779 4781 ConstOffset MinLod 709 4780
+            4783:    208(ptr) AccessChain 4674(texel) 207
+            4784:    6(float) Load 4783
+            4785:    6(float) FAdd 4784 4782
+            4786:    208(ptr) AccessChain 4674(texel) 207
+                              Store 4786 4785
+            4787:         316 Load 318(s1DArrayShadow)
+            4788:  154(fvec2) Load 156(f16c2)
+            4789:   52(float) Load 215(compare)
+            4790:    6(float) Load 4264(f16lodClamp)
+            4791:    6(float) Load 137(f16bias)
+            4792:    6(float) ImageSampleDrefImplicitLod 4787 4788 4789 Bias ConstOffset MinLod 4791 709 4790
+            4793:    208(ptr) AccessChain 4674(texel) 207
+            4794:    6(float) Load 4793
+            4795:    6(float) FAdd 4794 4792
+            4796:    208(ptr) AccessChain 4674(texel) 207
+                              Store 4796 4795
+            4797:         337 Load 339(s2DArrayShadow)
+            4798:  249(fvec4) Load 251(c4)
+            4799:   52(float) Load 4257(lodClamp)
+            4800:   52(float) CompositeExtract 4798 3
+            4801:    6(float) ImageSampleDrefImplicitLod 4797 4798 4800 ConstOffset MinLod 722 4799
+            4802:    208(ptr) AccessChain 4674(texel) 207
+            4803:    6(float) Load 4802
+            4804:    6(float) FAdd 4803 4801
+            4805:    208(ptr) AccessChain 4674(texel) 207
+                              Store 4805 4804
+            4806:         337 Load 339(s2DArrayShadow)
+            4807:  175(fvec3) Load 177(f16c3)
+            4808:   52(float) Load 215(compare)
+            4809:    6(float) Load 4264(f16lodClamp)
+            4810:    6(float) ImageSampleDrefImplicitLod 4806 4807 4808 ConstOffset MinLod 722 4809
+            4811:    208(ptr) AccessChain 4674(texel) 207
+            4812:    6(float) Load 4811
+            4813:    6(float) FAdd 4812 4810
+            4814:    208(ptr) AccessChain 4674(texel) 207
+                              Store 4814 4813
+            4815:    7(fvec4) Load 4674(texel)
+                              ReturnValue 4815
+                              FunctionEnd
+107(testSparseTextureGradClamp():    7(fvec4) Function None 8
+             108:             Label
+     4818(texel):     64(ptr) Variable Function
+                              Store 4818(texel) 121
+            4819:         143 Load 145(s2D)
+            4820:   53(fvec2) Load 148(c2)
+            4821:   53(fvec2) Load 1409(dPdxy2)
+            4822:   53(fvec2) Load 1409(dPdxy2)
+            4823:   52(float) Load 4257(lodClamp)
+            4824:3102(ResType) ImageSparseSampleExplicitLod 4819 4820 Grad MinLod 4821 4822 4823
+            4825:    7(fvec4) CompositeExtract 4824 1
+                              Store 4818(texel) 4825
+            4826:     47(int) CompositeExtract 4824 0
+            4827:         143 Load 145(s2D)
+            4828:  154(fvec2) Load 156(f16c2)
+            4829:  154(fvec2) Load 1417(f16dPdxy2)
+            4830:  154(fvec2) Load 1417(f16dPdxy2)
+            4831:    6(float) Load 4264(f16lodClamp)
+            4832:3102(ResType) ImageSparseSampleExplicitLod 4827 4828 Grad MinLod 4829 4830 4831
+            4833:    7(fvec4) CompositeExtract 4832 1
+                              Store 4818(texel) 4833
+            4834:     47(int) CompositeExtract 4832 0
+            4835:         163 Load 165(s3D)
+            4836:  167(fvec3) Load 169(c3)
+            4837:  167(fvec3) Load 1425(dPdxy3)
+            4838:  167(fvec3) Load 1425(dPdxy3)
+            4839:   52(float) Load 4257(lodClamp)
+            4840:3102(ResType) ImageSparseSampleExplicitLod 4835 4836 Grad MinLod 4837 4838 4839
+            4841:    7(fvec4) CompositeExtract 4840 1
+                              Store 4818(texel) 4841
+            4842:     47(int) CompositeExtract 4840 0
+            4843:         163 Load 165(s3D)
+            4844:  175(fvec3) Load 177(f16c3)
+            4845:  175(fvec3) Load 1433(f16dPdxy3)
+            4846:  175(fvec3) Load 1433(f16dPdxy3)
+            4847:    6(float) Load 4264(f16lodClamp)
+            4848:3102(ResType) ImageSparseSampleExplicitLod 4843 4844 Grad MinLod 4845 4846 4847
+            4849:    7(fvec4) CompositeExtract 4848 1
+                              Store 4818(texel) 4849
+            4850:     47(int) CompositeExtract 4848 0
+            4851:         184 Load 186(sCube)
+            4852:  167(fvec3) Load 169(c3)
+            4853:  167(fvec3) Load 1425(dPdxy3)
+            4854:  167(fvec3) Load 1425(dPdxy3)
+            4855:   52(float) Load 4257(lodClamp)
+            4856:3102(ResType) ImageSparseSampleExplicitLod 4851 4852 Grad MinLod 4853 4854 4855
+            4857:    7(fvec4) CompositeExtract 4856 1
+                              Store 4818(texel) 4857
+            4858:     47(int) CompositeExtract 4856 0
+            4859:         184 Load 186(sCube)
+            4860:  175(fvec3) Load 177(f16c3)
+            4861:  175(fvec3) Load 1433(f16dPdxy3)
+            4862:  175(fvec3) Load 1433(f16dPdxy3)
+            4863:    6(float) Load 4264(f16lodClamp)
+            4864:3102(ResType) ImageSparseSampleExplicitLod 4859 4860 Grad MinLod 4861 4862 4863
+            4865:    7(fvec4) CompositeExtract 4864 1
+                              Store 4818(texel) 4865
+            4866:     47(int) CompositeExtract 4864 0
+            4867:         224 Load 226(s2DShadow)
+            4868:  167(fvec3) Load 169(c3)
+            4869:   53(fvec2) Load 1409(dPdxy2)
+            4870:   53(fvec2) Load 1409(dPdxy2)
+            4871:   52(float) Load 4257(lodClamp)
+            4872:    208(ptr) AccessChain 4818(texel) 207
+            4873:   52(float) CompositeExtract 4868 2
+            4874:3138(ResType) ImageSparseSampleDrefExplicitLod 4867 4868 4873 Grad MinLod 4869 4870 4871
+            4875:    6(float) CompositeExtract 4874 1
+                              Store 4872 4875
+            4876:     47(int) CompositeExtract 4874 0
+            4877:         224 Load 226(s2DShadow)
+            4878:  154(fvec2) Load 156(f16c2)
+            4879:   52(float) Load 215(compare)
+            4880:  154(fvec2) Load 1417(f16dPdxy2)
+            4881:  154(fvec2) Load 1417(f16dPdxy2)
+            4882:    6(float) Load 4264(f16lodClamp)
+            4883:    208(ptr) AccessChain 4818(texel) 207
+            4884:3138(ResType) ImageSparseSampleDrefExplicitLod 4877 4878 4879 Grad MinLod 4880 4881 4882
+            4885:    6(float) CompositeExtract 4884 1
+                              Store 4883 4885
+            4886:     47(int) CompositeExtract 4884 0
+            4887:         245 Load 247(sCubeShadow)
+            4888:  249(fvec4) Load 251(c4)
+            4889:  167(fvec3) Load 1425(dPdxy3)
+            4890:  167(fvec3) Load 1425(dPdxy3)
+            4891:   52(float) Load 4257(lodClamp)
+            4892:    208(ptr) AccessChain 4818(texel) 207
+            4893:   52(float) CompositeExtract 4888 3
+            4894:3138(ResType) ImageSparseSampleDrefExplicitLod 4887 4888 4893 Grad MinLod 4889 4890 4891
+            4895:    6(float) CompositeExtract 4894 1
+                              Store 4892 4895
+            4896:     47(int) CompositeExtract 4894 0
+            4897:         245 Load 247(sCubeShadow)
+            4898:  175(fvec3) Load 177(f16c3)
+            4899:   52(float) Load 215(compare)
+            4900:  175(fvec3) Load 1433(f16dPdxy3)
+            4901:  175(fvec3) Load 1433(f16dPdxy3)
+            4902:    6(float) Load 4264(f16lodClamp)
+            4903:    208(ptr) AccessChain 4818(texel) 207
+            4904:3138(ResType) ImageSparseSampleDrefExplicitLod 4897 4898 4899 Grad MinLod 4900 4901 4902
+            4905:    6(float) CompositeExtract 4904 1
+                              Store 4903 4905
+            4906:     47(int) CompositeExtract 4904 0
+            4907:         284 Load 286(s2DArray)
+            4908:  167(fvec3) Load 169(c3)
+            4909:   53(fvec2) Load 1409(dPdxy2)
+            4910:   53(fvec2) Load 1409(dPdxy2)
+            4911:   52(float) Load 4257(lodClamp)
+            4912:3102(ResType) ImageSparseSampleExplicitLod 4907 4908 Grad MinLod 4909 4910 4911
+            4913:    7(fvec4) CompositeExtract 4912 1
+                              Store 4818(texel) 4913
+            4914:     47(int) CompositeExtract 4912 0
+            4915:         284 Load 286(s2DArray)
+            4916:  175(fvec3) Load 177(f16c3)
+            4917:  154(fvec2) Load 1417(f16dPdxy2)
+            4918:  154(fvec2) Load 1417(f16dPdxy2)
+            4919:    6(float) Load 4264(f16lodClamp)
+            4920:3102(ResType) ImageSparseSampleExplicitLod 4915 4916 Grad MinLod 4917 4918 4919
+            4921:    7(fvec4) CompositeExtract 4920 1
+                              Store 4818(texel) 4921
+            4922:     47(int) CompositeExtract 4920 0
+            4923:         337 Load 339(s2DArrayShadow)
+            4924:  249(fvec4) Load 251(c4)
+            4925:   53(fvec2) Load 1409(dPdxy2)
+            4926:   53(fvec2) Load 1409(dPdxy2)
+            4927:   52(float) Load 4257(lodClamp)
+            4928:    208(ptr) AccessChain 4818(texel) 207
+            4929:   52(float) CompositeExtract 4924 3
+            4930:3138(ResType) ImageSparseSampleDrefExplicitLod 4923 4924 4929 Grad MinLod 4925 4926 4927
+            4931:    6(float) CompositeExtract 4930 1
+                              Store 4928 4931
+            4932:     47(int) CompositeExtract 4930 0
+            4933:         337 Load 339(s2DArrayShadow)
+            4934:  175(fvec3) Load 177(f16c3)
+            4935:   52(float) Load 215(compare)
+            4936:  154(fvec2) Load 1417(f16dPdxy2)
+            4937:  154(fvec2) Load 1417(f16dPdxy2)
+            4938:    6(float) Load 4264(f16lodClamp)
+            4939:    208(ptr) AccessChain 4818(texel) 207
+            4940:3138(ResType) ImageSparseSampleDrefExplicitLod 4933 4934 4935 Grad MinLod 4936 4937 4938
+            4941:    6(float) CompositeExtract 4940 1
+                              Store 4939 4941
+            4942:     47(int) CompositeExtract 4940 0
+            4943:         299 Load 301(sCubeArray)
+            4944:  249(fvec4) Load 251(c4)
+            4945:  167(fvec3) Load 1425(dPdxy3)
+            4946:  167(fvec3) Load 1425(dPdxy3)
+            4947:   52(float) Load 4257(lodClamp)
+            4948:3102(ResType) ImageSparseSampleExplicitLod 4943 4944 Grad MinLod 4945 4946 4947
+            4949:    7(fvec4) CompositeExtract 4948 1
+                              Store 4818(texel) 4949
+            4950:     47(int) CompositeExtract 4948 0
+            4951:         299 Load 301(sCubeArray)
+            4952:    7(fvec4) Load 309(f16c4)
+            4953:  175(fvec3) Load 1433(f16dPdxy3)
+            4954:  175(fvec3) Load 1433(f16dPdxy3)
+            4955:    6(float) Load 4264(f16lodClamp)
+            4956:3102(ResType) ImageSparseSampleExplicitLod 4951 4952 Grad MinLod 4953 4954 4955
+            4957:    7(fvec4) CompositeExtract 4956 1
+                              Store 4818(texel) 4957
+            4958:     47(int) CompositeExtract 4956 0
+            4959:    7(fvec4) Load 4818(texel)
+                              ReturnValue 4959
+                              FunctionEnd
+109(testTextureGradClamp():    7(fvec4) Function None 8
+             110:             Label
+     4962(texel):     64(ptr) Variable Function
+                              Store 4962(texel) 121
+            4963:         123 Load 125(s1D)
+            4964:   52(float) Load 128(c1)
+            4965:   52(float) Load 1393(dPdxy1)
+            4966:   52(float) Load 1393(dPdxy1)
+            4967:   52(float) Load 4257(lodClamp)
+            4968:    7(fvec4) ImageSampleExplicitLod 4963 4964 Grad MinLod 4965 4966 4967
+            4969:    7(fvec4) Load 4962(texel)
+            4970:    7(fvec4) FAdd 4969 4968
+                              Store 4962(texel) 4970
+            4971:         123 Load 125(s1D)
+            4972:    6(float) Load 135(f16c1)
+            4973:    6(float) Load 1401(f16dPdxy1)
+            4974:    6(float) Load 1401(f16dPdxy1)
+            4975:    6(float) Load 4264(f16lodClamp)
+            4976:    7(fvec4) ImageSampleExplicitLod 4971 4972 Grad MinLod 4973 4974 4975
+            4977:    7(fvec4) Load 4962(texel)
+            4978:    7(fvec4) FAdd 4977 4976
+                              Store 4962(texel) 4978
+            4979:         143 Load 145(s2D)
+            4980:   53(fvec2) Load 148(c2)
+            4981:   53(fvec2) Load 1409(dPdxy2)
+            4982:   53(fvec2) Load 1409(dPdxy2)
+            4983:   52(float) Load 4257(lodClamp)
+            4984:    7(fvec4) ImageSampleExplicitLod 4979 4980 Grad MinLod 4981 4982 4983
+            4985:    7(fvec4) Load 4962(texel)
+            4986:    7(fvec4) FAdd 4985 4984
+                              Store 4962(texel) 4986
+            4987:         143 Load 145(s2D)
+            4988:  154(fvec2) Load 156(f16c2)
+            4989:  154(fvec2) Load 1417(f16dPdxy2)
+            4990:  154(fvec2) Load 1417(f16dPdxy2)
+            4991:    6(float) Load 4264(f16lodClamp)
+            4992:    7(fvec4) ImageSampleExplicitLod 4987 4988 Grad MinLod 4989 4990 4991
+            4993:    7(fvec4) Load 4962(texel)
+            4994:    7(fvec4) FAdd 4993 4992
+                              Store 4962(texel) 4994
+            4995:         163 Load 165(s3D)
+            4996:  167(fvec3) Load 169(c3)
+            4997:  167(fvec3) Load 1425(dPdxy3)
+            4998:  167(fvec3) Load 1425(dPdxy3)
+            4999:   52(float) Load 4257(lodClamp)
+            5000:    7(fvec4) ImageSampleExplicitLod 4995 4996 Grad MinLod 4997 4998 4999
+            5001:    7(fvec4) Load 4962(texel)
+            5002:    7(fvec4) FAdd 5001 5000
+                              Store 4962(texel) 5002
+            5003:         163 Load 165(s3D)
+            5004:  175(fvec3) Load 177(f16c3)
+            5005:  175(fvec3) Load 1433(f16dPdxy3)
+            5006:  175(fvec3) Load 1433(f16dPdxy3)
+            5007:    6(float) Load 4264(f16lodClamp)
+            5008:    7(fvec4) ImageSampleExplicitLod 5003 5004 Grad MinLod 5005 5006 5007
+            5009:    7(fvec4) Load 4962(texel)
+            5010:    7(fvec4) FAdd 5009 5008
+                              Store 4962(texel) 5010
+            5011:         184 Load 186(sCube)
+            5012:  167(fvec3) Load 169(c3)
+            5013:  167(fvec3) Load 1425(dPdxy3)
+            5014:  167(fvec3) Load 1425(dPdxy3)
+            5015:   52(float) Load 4257(lodClamp)
+            5016:    7(fvec4) ImageSampleExplicitLod 5011 5012 Grad MinLod 5013 5014 5015
+            5017:    7(fvec4) Load 4962(texel)
+            5018:    7(fvec4) FAdd 5017 5016
+                              Store 4962(texel) 5018
+            5019:         184 Load 186(sCube)
+            5020:  175(fvec3) Load 177(f16c3)
+            5021:  175(fvec3) Load 1433(f16dPdxy3)
+            5022:  175(fvec3) Load 1433(f16dPdxy3)
+            5023:    6(float) Load 4264(f16lodClamp)
+            5024:    7(fvec4) ImageSampleExplicitLod 5019 5020 Grad MinLod 5021 5022 5023
+            5025:    7(fvec4) Load 4962(texel)
+            5026:    7(fvec4) FAdd 5025 5024
+                              Store 4962(texel) 5026
+            5027:         199 Load 201(s1DShadow)
+            5028:  167(fvec3) Load 169(c3)
+            5029:   52(float) Load 1393(dPdxy1)
+            5030:   52(float) Load 1393(dPdxy1)
+            5031:   52(float) Load 4257(lodClamp)
+            5032:   52(float) CompositeExtract 5028 2
+            5033:    6(float) ImageSampleDrefExplicitLod 5027 5028 5032 Grad MinLod 5029 5030 5031
+            5034:    208(ptr) AccessChain 4962(texel) 207
+            5035:    6(float) Load 5034
+            5036:    6(float) FAdd 5035 5033
+            5037:    208(ptr) AccessChain 4962(texel) 207
+                              Store 5037 5036
+            5038:         199 Load 201(s1DShadow)
+            5039:  154(fvec2) Load 156(f16c2)
+            5040:   52(float) Load 215(compare)
+            5041:    6(float) Load 1401(f16dPdxy1)
+            5042:    6(float) Load 1401(f16dPdxy1)
+            5043:    6(float) Load 4264(f16lodClamp)
+            5044:    6(float) ImageSampleDrefExplicitLod 5038 5039 5040 Grad MinLod 5041 5042 5043
+            5045:    208(ptr) AccessChain 4962(texel) 207
+            5046:    6(float) Load 5045
+            5047:    6(float) FAdd 5046 5044
+            5048:    208(ptr) AccessChain 4962(texel) 207
+                              Store 5048 5047
+            5049:         224 Load 226(s2DShadow)
+            5050:  167(fvec3) Load 169(c3)
+            5051:   53(fvec2) Load 1409(dPdxy2)
+            5052:   53(fvec2) Load 1409(dPdxy2)
+            5053:   52(float) Load 4257(lodClamp)
+            5054:   52(float) CompositeExtract 5050 2
+            5055:    6(float) ImageSampleDrefExplicitLod 5049 5050 5054 Grad MinLod 5051 5052 5053
+            5056:    208(ptr) AccessChain 4962(texel) 207
+            5057:    6(float) Load 5056
+            5058:    6(float) FAdd 5057 5055
+            5059:    208(ptr) AccessChain 4962(texel) 207
+                              Store 5059 5058
+            5060:         224 Load 226(s2DShadow)
+            5061:  154(fvec2) Load 156(f16c2)
+            5062:   52(float) Load 215(compare)
+            5063:  154(fvec2) Load 1417(f16dPdxy2)
+            5064:  154(fvec2) Load 1417(f16dPdxy2)
+            5065:    6(float) Load 4264(f16lodClamp)
+            5066:    6(float) ImageSampleDrefExplicitLod 5060 5061 5062 Grad MinLod 5063 5064 5065
+            5067:    208(ptr) AccessChain 4962(texel) 207
+            5068:    6(float) Load 5067
+            5069:    6(float) FAdd 5068 5066
+            5070:    208(ptr) AccessChain 4962(texel) 207
+                              Store 5070 5069
+            5071:         245 Load 247(sCubeShadow)
+            5072:  249(fvec4) Load 251(c4)
+            5073:  167(fvec3) Load 1425(dPdxy3)
+            5074:  167(fvec3) Load 1425(dPdxy3)
+            5075:   52(float) Load 4257(lodClamp)
+            5076:   52(float) CompositeExtract 5072 3
+            5077:    6(float) ImageSampleDrefExplicitLod 5071 5072 5076 Grad MinLod 5073 5074 5075
+            5078:    208(ptr) AccessChain 4962(texel) 207
+            5079:    6(float) Load 5078
+            5080:    6(float) FAdd 5079 5077
+            5081:    208(ptr) AccessChain 4962(texel) 207
+                              Store 5081 5080
+            5082:         245 Load 247(sCubeShadow)
+            5083:  175(fvec3) Load 177(f16c3)
+            5084:   52(float) Load 215(compare)
+            5085:  175(fvec3) Load 1433(f16dPdxy3)
+            5086:  175(fvec3) Load 1433(f16dPdxy3)
+            5087:    6(float) Load 4264(f16lodClamp)
+            5088:    6(float) ImageSampleDrefExplicitLod 5082 5083 5084 Grad MinLod 5085 5086 5087
+            5089:    208(ptr) AccessChain 4962(texel) 207
+            5090:    6(float) Load 5089
+            5091:    6(float) FAdd 5090 5088
+            5092:    208(ptr) AccessChain 4962(texel) 207
+                              Store 5092 5091
+            5093:         269 Load 271(s1DArray)
+            5094:   53(fvec2) Load 148(c2)
+            5095:   52(float) Load 1393(dPdxy1)
+            5096:   52(float) Load 1393(dPdxy1)
+            5097:   52(float) Load 4257(lodClamp)
+            5098:    7(fvec4) ImageSampleExplicitLod 5093 5094 Grad MinLod 5095 5096 5097
+            5099:    7(fvec4) Load 4962(texel)
+            5100:    7(fvec4) FAdd 5099 5098
+                              Store 4962(texel) 5100
+            5101:         269 Load 271(s1DArray)
+            5102:  154(fvec2) Load 156(f16c2)
+            5103:    6(float) Load 1401(f16dPdxy1)
+            5104:    6(float) Load 1401(f16dPdxy1)
+            5105:    6(float) Load 4264(f16lodClamp)
+            5106:    7(fvec4) ImageSampleExplicitLod 5101 5102 Grad MinLod 5103 5104 5105
+            5107:    7(fvec4) Load 4962(texel)
+            5108:    7(fvec4) FAdd 5107 5106
+                              Store 4962(texel) 5108
+            5109:         284 Load 286(s2DArray)
+            5110:  167(fvec3) Load 169(c3)
+            5111:   53(fvec2) Load 1409(dPdxy2)
+            5112:   53(fvec2) Load 1409(dPdxy2)
+            5113:   52(float) Load 4257(lodClamp)
+            5114:    7(fvec4) ImageSampleExplicitLod 5109 5110 Grad MinLod 5111 5112 5113
+            5115:    7(fvec4) Load 4962(texel)
+            5116:    7(fvec4) FAdd 5115 5114
+                              Store 4962(texel) 5116
+            5117:         284 Load 286(s2DArray)
+            5118:  175(fvec3) Load 177(f16c3)
+            5119:  154(fvec2) Load 1417(f16dPdxy2)
+            5120:  154(fvec2) Load 1417(f16dPdxy2)
+            5121:    6(float) Load 4264(f16lodClamp)
+            5122:    7(fvec4) ImageSampleExplicitLod 5117 5118 Grad MinLod 5119 5120 5121
+            5123:    7(fvec4) Load 4962(texel)
+            5124:    7(fvec4) FAdd 5123 5122
+                              Store 4962(texel) 5124
+            5125:         316 Load 318(s1DArrayShadow)
+            5126:  167(fvec3) Load 169(c3)
+            5127:   52(float) Load 1393(dPdxy1)
+            5128:   52(float) Load 1393(dPdxy1)
+            5129:   52(float) Load 4257(lodClamp)
+            5130:   52(float) CompositeExtract 5126 2
+            5131:    6(float) ImageSampleDrefExplicitLod 5125 5126 5130 Grad MinLod 5127 5128 5129
+            5132:    208(ptr) AccessChain 4962(texel) 207
+            5133:    6(float) Load 5132
+            5134:    6(float) FAdd 5133 5131
+            5135:    208(ptr) AccessChain 4962(texel) 207
+                              Store 5135 5134
+            5136:         316 Load 318(s1DArrayShadow)
+            5137:  154(fvec2) Load 156(f16c2)
+            5138:   52(float) Load 215(compare)
+            5139:    6(float) Load 1401(f16dPdxy1)
+            5140:    6(float) Load 1401(f16dPdxy1)
+            5141:    6(float) Load 4264(f16lodClamp)
+            5142:    6(float) ImageSampleDrefExplicitLod 5136 5137 5138 Grad MinLod 5139 5140 5141
+            5143:    208(ptr) AccessChain 4962(texel) 207
+            5144:    6(float) Load 5143
+            5145:    6(float) FAdd 5144 5142
+            5146:    208(ptr) AccessChain 4962(texel) 207
+                              Store 5146 5145
+            5147:         337 Load 339(s2DArrayShadow)
+            5148:  249(fvec4) Load 251(c4)
+            5149:   53(fvec2) Load 1409(dPdxy2)
+            5150:   53(fvec2) Load 1409(dPdxy2)
+            5151:   52(float) Load 4257(lodClamp)
+            5152:   52(float) CompositeExtract 5148 3
+            5153:    6(float) ImageSampleDrefExplicitLod 5147 5148 5152 Grad MinLod 5149 5150 5151
+            5154:    208(ptr) AccessChain 4962(texel) 207
+            5155:    6(float) Load 5154
+            5156:    6(float) FAdd 5155 5153
+            5157:    208(ptr) AccessChain 4962(texel) 207
+                              Store 5157 5156
+            5158:         337 Load 339(s2DArrayShadow)
+            5159:  175(fvec3) Load 177(f16c3)
+            5160:   52(float) Load 215(compare)
+            5161:  154(fvec2) Load 1417(f16dPdxy2)
+            5162:  154(fvec2) Load 1417(f16dPdxy2)
+            5163:    6(float) Load 4264(f16lodClamp)
+            5164:    6(float) ImageSampleDrefExplicitLod 5158 5159 5160 Grad MinLod 5161 5162 5163
+            5165:    208(ptr) AccessChain 4962(texel) 207
+            5166:    6(float) Load 5165
+            5167:    6(float) FAdd 5166 5164
+            5168:    208(ptr) AccessChain 4962(texel) 207
+                              Store 5168 5167
+            5169:         299 Load 301(sCubeArray)
+            5170:  249(fvec4) Load 251(c4)
+            5171:  167(fvec3) Load 1425(dPdxy3)
+            5172:  167(fvec3) Load 1425(dPdxy3)
+            5173:   52(float) Load 4257(lodClamp)
+            5174:    7(fvec4) ImageSampleExplicitLod 5169 5170 Grad MinLod 5171 5172 5173
+            5175:    7(fvec4) Load 4962(texel)
+            5176:    7(fvec4) FAdd 5175 5174
+                              Store 4962(texel) 5176
+            5177:         299 Load 301(sCubeArray)
+            5178:    7(fvec4) Load 309(f16c4)
+            5179:  175(fvec3) Load 1433(f16dPdxy3)
+            5180:  175(fvec3) Load 1433(f16dPdxy3)
+            5181:    6(float) Load 4264(f16lodClamp)
+            5182:    7(fvec4) ImageSampleExplicitLod 5177 5178 Grad MinLod 5179 5180 5181
+            5183:    7(fvec4) Load 4962(texel)
+            5184:    7(fvec4) FAdd 5183 5182
+                              Store 4962(texel) 5184
+            5185:    7(fvec4) Load 4962(texel)
+                              ReturnValue 5185
+                              FunctionEnd
+111(testSparseTextureGradOffsetClamp():    7(fvec4) Function None 8
+             112:             Label
+     5188(texel):     64(ptr) Variable Function
+                              Store 5188(texel) 121
+            5189:         143 Load 145(s2D)
+            5190:   53(fvec2) Load 148(c2)
+            5191:   53(fvec2) Load 1409(dPdxy2)
+            5192:   53(fvec2) Load 1409(dPdxy2)
+            5193:   52(float) Load 4257(lodClamp)
+            5194:3102(ResType) ImageSparseSampleExplicitLod 5189 5190 Grad ConstOffset MinLod 5191 5192 722 5193
+            5195:    7(fvec4) CompositeExtract 5194 1
+                              Store 5188(texel) 5195
+            5196:     47(int) CompositeExtract 5194 0
+            5197:         143 Load 145(s2D)
+            5198:  154(fvec2) Load 156(f16c2)
+            5199:  154(fvec2) Load 1417(f16dPdxy2)
+            5200:  154(fvec2) Load 1417(f16dPdxy2)
+            5201:    6(float) Load 4264(f16lodClamp)
+            5202:3102(ResType) ImageSparseSampleExplicitLod 5197 5198 Grad ConstOffset MinLod 5199 5200 722 5201
+            5203:    7(fvec4) CompositeExtract 5202 1
+                              Store 5188(texel) 5203
+            5204:     47(int) CompositeExtract 5202 0
+            5205:         163 Load 165(s3D)
+            5206:  167(fvec3) Load 169(c3)
+            5207:  167(fvec3) Load 1425(dPdxy3)
+            5208:  167(fvec3) Load 1425(dPdxy3)
+            5209:   52(float) Load 4257(lodClamp)
+            5210:3102(ResType) ImageSparseSampleExplicitLod 5205 5206 Grad ConstOffset MinLod 5207 5208 735 5209
+            5211:    7(fvec4) CompositeExtract 5210 1
+                              Store 5188(texel) 5211
+            5212:     47(int) CompositeExtract 5210 0
+            5213:         163 Load 165(s3D)
+            5214:  175(fvec3) Load 177(f16c3)
+            5215:  175(fvec3) Load 1433(f16dPdxy3)
+            5216:  175(fvec3) Load 1433(f16dPdxy3)
+            5217:    6(float) Load 4264(f16lodClamp)
+            5218:3102(ResType) ImageSparseSampleExplicitLod 5213 5214 Grad ConstOffset MinLod 5215 5216 735 5217
+            5219:    7(fvec4) CompositeExtract 5218 1
+                              Store 5188(texel) 5219
+            5220:     47(int) CompositeExtract 5218 0
+            5221:         224 Load 226(s2DShadow)
+            5222:  167(fvec3) Load 169(c3)
+            5223:   53(fvec2) Load 1409(dPdxy2)
+            5224:   53(fvec2) Load 1409(dPdxy2)
+            5225:   52(float) Load 4257(lodClamp)
+            5226:    208(ptr) AccessChain 5188(texel) 207
+            5227:   52(float) CompositeExtract 5222 2
+            5228:3138(ResType) ImageSparseSampleDrefExplicitLod 5221 5222 5227 Grad ConstOffset MinLod 5223 5224 722 5225
+            5229:    6(float) CompositeExtract 5228 1
+                              Store 5226 5229
+            5230:     47(int) CompositeExtract 5228 0
+            5231:         224 Load 226(s2DShadow)
+            5232:  154(fvec2) Load 156(f16c2)
+            5233:   52(float) Load 215(compare)
+            5234:  154(fvec2) Load 1417(f16dPdxy2)
+            5235:  154(fvec2) Load 1417(f16dPdxy2)
+            5236:    6(float) Load 4264(f16lodClamp)
+            5237:    208(ptr) AccessChain 5188(texel) 207
+            5238:3138(ResType) ImageSparseSampleDrefExplicitLod 5231 5232 5233 Grad ConstOffset MinLod 5234 5235 722 5236
+            5239:    6(float) CompositeExtract 5238 1
+                              Store 5237 5239
+            5240:     47(int) CompositeExtract 5238 0
+            5241:         284 Load 286(s2DArray)
+            5242:  167(fvec3) Load 169(c3)
+            5243:   53(fvec2) Load 1409(dPdxy2)
+            5244:   53(fvec2) Load 1409(dPdxy2)
+            5245:   52(float) Load 4257(lodClamp)
+            5246:3102(ResType) ImageSparseSampleExplicitLod 5241 5242 Grad ConstOffset MinLod 5243 5244 722 5245
+            5247:    7(fvec4) CompositeExtract 5246 1
+                              Store 5188(texel) 5247
+            5248:     47(int) CompositeExtract 5246 0
+            5249:         284 Load 286(s2DArray)
+            5250:  175(fvec3) Load 177(f16c3)
+            5251:  154(fvec2) Load 1417(f16dPdxy2)
+            5252:  154(fvec2) Load 1417(f16dPdxy2)
+            5253:    6(float) Load 4264(f16lodClamp)
+            5254:3102(ResType) ImageSparseSampleExplicitLod 5249 5250 Grad ConstOffset MinLod 5251 5252 722 5253
+            5255:    7(fvec4) CompositeExtract 5254 1
+                              Store 5188(texel) 5255
+            5256:     47(int) CompositeExtract 5254 0
+            5257:         337 Load 339(s2DArrayShadow)
+            5258:  249(fvec4) Load 251(c4)
+            5259:   53(fvec2) Load 1409(dPdxy2)
+            5260:   53(fvec2) Load 1409(dPdxy2)
+            5261:   52(float) Load 4257(lodClamp)
+            5262:    208(ptr) AccessChain 5188(texel) 207
+            5263:   52(float) CompositeExtract 5258 3
+            5264:3138(ResType) ImageSparseSampleDrefExplicitLod 5257 5258 5263 Grad ConstOffset MinLod 5259 5260 722 5261
+            5265:    6(float) CompositeExtract 5264 1
+                              Store 5262 5265
+            5266:     47(int) CompositeExtract 5264 0
+            5267:         337 Load 339(s2DArrayShadow)
+            5268:  175(fvec3) Load 177(f16c3)
+            5269:   52(float) Load 215(compare)
+            5270:  154(fvec2) Load 1417(f16dPdxy2)
+            5271:  154(fvec2) Load 1417(f16dPdxy2)
+            5272:    6(float) Load 4264(f16lodClamp)
+            5273:    208(ptr) AccessChain 5188(texel) 207
+            5274:3138(ResType) ImageSparseSampleDrefExplicitLod 5267 5268 5269 Grad ConstOffset MinLod 5270 5271 722 5272
+            5275:    6(float) CompositeExtract 5274 1
+                              Store 5273 5275
+            5276:     47(int) CompositeExtract 5274 0
+            5277:    7(fvec4) Load 5188(texel)
+                              ReturnValue 5277
+                              FunctionEnd
+113(testTextureGradOffsetClamp():    7(fvec4) Function None 8
+             114:             Label
+     5280(texel):     64(ptr) Variable Function
+                              Store 5280(texel) 121
+            5281:         123 Load 125(s1D)
+            5282:   52(float) Load 128(c1)
+            5283:   52(float) Load 1393(dPdxy1)
+            5284:   52(float) Load 1393(dPdxy1)
+            5285:   52(float) Load 4257(lodClamp)
+            5286:    7(fvec4) ImageSampleExplicitLod 5281 5282 Grad ConstOffset MinLod 5283 5284 709 5285
+            5287:    7(fvec4) Load 5280(texel)
+            5288:    7(fvec4) FAdd 5287 5286
+                              Store 5280(texel) 5288
+            5289:         123 Load 125(s1D)
+            5290:    6(float) Load 135(f16c1)
+            5291:    6(float) Load 1401(f16dPdxy1)
+            5292:    6(float) Load 1401(f16dPdxy1)
+            5293:    6(float) Load 4264(f16lodClamp)
+            5294:    7(fvec4) ImageSampleExplicitLod 5289 5290 Grad ConstOffset MinLod 5291 5292 709 5293
+            5295:    7(fvec4) Load 5280(texel)
+            5296:    7(fvec4) FAdd 5295 5294
+                              Store 5280(texel) 5296
+            5297:         143 Load 145(s2D)
+            5298:   53(fvec2) Load 148(c2)
+            5299:   53(fvec2) Load 1409(dPdxy2)
+            5300:   53(fvec2) Load 1409(dPdxy2)
+            5301:   52(float) Load 4257(lodClamp)
+            5302:    7(fvec4) ImageSampleExplicitLod 5297 5298 Grad ConstOffset MinLod 5299 5300 722 5301
+            5303:    7(fvec4) Load 5280(texel)
+            5304:    7(fvec4) FAdd 5303 5302
+                              Store 5280(texel) 5304
+            5305:         143 Load 145(s2D)
+            5306:  154(fvec2) Load 156(f16c2)
+            5307:  154(fvec2) Load 1417(f16dPdxy2)
+            5308:  154(fvec2) Load 1417(f16dPdxy2)
+            5309:    6(float) Load 4264(f16lodClamp)
+            5310:    7(fvec4) ImageSampleExplicitLod 5305 5306 Grad ConstOffset MinLod 5307 5308 722 5309
+            5311:    7(fvec4) Load 5280(texel)
+            5312:    7(fvec4) FAdd 5311 5310
+                              Store 5280(texel) 5312
+            5313:         163 Load 165(s3D)
+            5314:  167(fvec3) Load 169(c3)
+            5315:  167(fvec3) Load 1425(dPdxy3)
+            5316:  167(fvec3) Load 1425(dPdxy3)
+            5317:   52(float) Load 4257(lodClamp)
+            5318:    7(fvec4) ImageSampleExplicitLod 5313 5314 Grad ConstOffset MinLod 5315 5316 735 5317
+            5319:    7(fvec4) Load 5280(texel)
+            5320:    7(fvec4) FAdd 5319 5318
+                              Store 5280(texel) 5320
+            5321:         163 Load 165(s3D)
+            5322:  175(fvec3) Load 177(f16c3)
+            5323:  175(fvec3) Load 1433(f16dPdxy3)
+            5324:  175(fvec3) Load 1433(f16dPdxy3)
+            5325:    6(float) Load 4264(f16lodClamp)
+            5326:    7(fvec4) ImageSampleExplicitLod 5321 5322 Grad ConstOffset MinLod 5323 5324 735 5325
+            5327:    7(fvec4) Load 5280(texel)
+            5328:    7(fvec4) FAdd 5327 5326
+                              Store 5280(texel) 5328
+            5329:         199 Load 201(s1DShadow)
+            5330:  167(fvec3) Load 169(c3)
+            5331:   52(float) Load 1393(dPdxy1)
+            5332:   52(float) Load 1393(dPdxy1)
+            5333:   52(float) Load 4257(lodClamp)
+            5334:   52(float) CompositeExtract 5330 2
+            5335:    6(float) ImageSampleDrefExplicitLod 5329 5330 5334 Grad ConstOffset MinLod 5331 5332 709 5333
+            5336:    208(ptr) AccessChain 5280(texel) 207
+            5337:    6(float) Load 5336
+            5338:    6(float) FAdd 5337 5335
+            5339:    208(ptr) AccessChain 5280(texel) 207
+                              Store 5339 5338
+            5340:         199 Load 201(s1DShadow)
+            5341:  154(fvec2) Load 156(f16c2)
+            5342:   52(float) Load 215(compare)
+            5343:    6(float) Load 1401(f16dPdxy1)
+            5344:    6(float) Load 1401(f16dPdxy1)
+            5345:    6(float) Load 4264(f16lodClamp)
+            5346:    6(float) ImageSampleDrefExplicitLod 5340 5341 5342 Grad ConstOffset MinLod 5343 5344 709 5345
+            5347:    208(ptr) AccessChain 5280(texel) 207
+            5348:    6(float) Load 5347
+            5349:    6(float) FAdd 5348 5346
+            5350:    208(ptr) AccessChain 5280(texel) 207
+                              Store 5350 5349
+            5351:         224 Load 226(s2DShadow)
+            5352:  167(fvec3) Load 169(c3)
+            5353:   53(fvec2) Load 1409(dPdxy2)
+            5354:   53(fvec2) Load 1409(dPdxy2)
+            5355:   52(float) Load 4257(lodClamp)
+            5356:   52(float) CompositeExtract 5352 2
+            5357:    6(float) ImageSampleDrefExplicitLod 5351 5352 5356 Grad ConstOffset MinLod 5353 5354 722 5355
+            5358:    208(ptr) AccessChain 5280(texel) 207
+            5359:    6(float) Load 5358
+            5360:    6(float) FAdd 5359 5357
+            5361:    208(ptr) AccessChain 5280(texel) 207
+                              Store 5361 5360
+            5362:         224 Load 226(s2DShadow)
+            5363:  154(fvec2) Load 156(f16c2)
+            5364:   52(float) Load 215(compare)
+            5365:  154(fvec2) Load 1417(f16dPdxy2)
+            5366:  154(fvec2) Load 1417(f16dPdxy2)
+            5367:    6(float) Load 4264(f16lodClamp)
+            5368:    6(float) ImageSampleDrefExplicitLod 5362 5363 5364 Grad ConstOffset MinLod 5365 5366 722 5367
+            5369:    208(ptr) AccessChain 5280(texel) 207
+            5370:    6(float) Load 5369
+            5371:    6(float) FAdd 5370 5368
+            5372:    208(ptr) AccessChain 5280(texel) 207
+                              Store 5372 5371
+            5373:         269 Load 271(s1DArray)
+            5374:   53(fvec2) Load 148(c2)
+            5375:   52(float) Load 1393(dPdxy1)
+            5376:   52(float) Load 1393(dPdxy1)
+            5377:   52(float) Load 4257(lodClamp)
+            5378:    7(fvec4) ImageSampleExplicitLod 5373 5374 Grad ConstOffset MinLod 5375 5376 709 5377
+            5379:    7(fvec4) Load 5280(texel)
+            5380:    7(fvec4) FAdd 5379 5378
+                              Store 5280(texel) 5380
+            5381:         269 Load 271(s1DArray)
+            5382:  154(fvec2) Load 156(f16c2)
+            5383:    6(float) Load 1401(f16dPdxy1)
+            5384:    6(float) Load 1401(f16dPdxy1)
+            5385:    6(float) Load 4264(f16lodClamp)
+            5386:    7(fvec4) ImageSampleExplicitLod 5381 5382 Grad ConstOffset MinLod 5383 5384 709 5385
+            5387:    7(fvec4) Load 5280(texel)
+            5388:    7(fvec4) FAdd 5387 5386
+                              Store 5280(texel) 5388
+            5389:         284 Load 286(s2DArray)
+            5390:  167(fvec3) Load 169(c3)
+            5391:   53(fvec2) Load 1409(dPdxy2)
+            5392:   53(fvec2) Load 1409(dPdxy2)
+            5393:   52(float) Load 4257(lodClamp)
+            5394:    7(fvec4) ImageSampleExplicitLod 5389 5390 Grad ConstOffset MinLod 5391 5392 722 5393
+            5395:    7(fvec4) Load 5280(texel)
+            5396:    7(fvec4) FAdd 5395 5394
+                              Store 5280(texel) 5396
+            5397:         284 Load 286(s2DArray)
+            5398:  175(fvec3) Load 177(f16c3)
+            5399:  154(fvec2) Load 1417(f16dPdxy2)
+            5400:  154(fvec2) Load 1417(f16dPdxy2)
+            5401:    6(float) Load 4264(f16lodClamp)
+            5402:    7(fvec4) ImageSampleExplicitLod 5397 5398 Grad ConstOffset MinLod 5399 5400 722 5401
+            5403:    7(fvec4) Load 5280(texel)
+            5404:    7(fvec4) FAdd 5403 5402
+                              Store 5280(texel) 5404
+            5405:         316 Load 318(s1DArrayShadow)
+            5406:  167(fvec3) Load 169(c3)
+            5407:   52(float) Load 1393(dPdxy1)
+            5408:   52(float) Load 1393(dPdxy1)
+            5409:   52(float) Load 4257(lodClamp)
+            5410:   52(float) CompositeExtract 5406 2
+            5411:    6(float) ImageSampleDrefExplicitLod 5405 5406 5410 Grad ConstOffset MinLod 5407 5408 709 5409
+            5412:    208(ptr) AccessChain 5280(texel) 207
+            5413:    6(float) Load 5412
+            5414:    6(float) FAdd 5413 5411
+            5415:    208(ptr) AccessChain 5280(texel) 207
+                              Store 5415 5414
+            5416:         316 Load 318(s1DArrayShadow)
+            5417:  154(fvec2) Load 156(f16c2)
+            5418:   52(float) Load 215(compare)
+            5419:    6(float) Load 1401(f16dPdxy1)
+            5420:    6(float) Load 1401(f16dPdxy1)
+            5421:    6(float) Load 4264(f16lodClamp)
+            5422:    6(float) ImageSampleDrefExplicitLod 5416 5417 5418 Grad ConstOffset MinLod 5419 5420 709 5421
+            5423:    208(ptr) AccessChain 5280(texel) 207
+            5424:    6(float) Load 5423
+            5425:    6(float) FAdd 5424 5422
+            5426:    208(ptr) AccessChain 5280(texel) 207
+                              Store 5426 5425
+            5427:         337 Load 339(s2DArrayShadow)
+            5428:  249(fvec4) Load 251(c4)
+            5429:   53(fvec2) Load 1409(dPdxy2)
+            5430:   53(fvec2) Load 1409(dPdxy2)
+            5431:   52(float) Load 4257(lodClamp)
+            5432:   52(float) CompositeExtract 5428 3
+            5433:    6(float) ImageSampleDrefExplicitLod 5427 5428 5432 Grad ConstOffset MinLod 5429 5430 722 5431
+            5434:    208(ptr) AccessChain 5280(texel) 207
+            5435:    6(float) Load 5434
+            5436:    6(float) FAdd 5435 5433
+            5437:    208(ptr) AccessChain 5280(texel) 207
+                              Store 5437 5436
+            5438:         337 Load 339(s2DArrayShadow)
+            5439:  175(fvec3) Load 177(f16c3)
+            5440:   52(float) Load 215(compare)
+            5441:  154(fvec2) Load 1417(f16dPdxy2)
+            5442:  154(fvec2) Load 1417(f16dPdxy2)
+            5443:    6(float) Load 4264(f16lodClamp)
+            5444:    6(float) ImageSampleDrefExplicitLod 5438 5439 5440 Grad ConstOffset MinLod 5441 5442 722 5443
+            5445:    208(ptr) AccessChain 5280(texel) 207
+            5446:    6(float) Load 5445
+            5447:    6(float) FAdd 5446 5444
+            5448:    208(ptr) AccessChain 5280(texel) 207
+                              Store 5448 5447
+            5449:    7(fvec4) Load 5280(texel)
+                              ReturnValue 5449
+                              FunctionEnd
+115(testCombinedTextureSampler():    7(fvec4) Function None 8
+             116:             Label
+     5452(texel):     64(ptr) Variable Function
+                              Store 5452(texel) 121
+            5455:         122 Load 5454(t1D)
+            5459:        5456 Load 5458(s)
+            5460:         123 SampledImage 5455 5459
+            5461:   52(float) Load 128(c1)
+            5462:    7(fvec4) ImageSampleImplicitLod 5460 5461
+            5463:    7(fvec4) Load 5452(texel)
+            5464:    7(fvec4) FAdd 5463 5462
+                              Store 5452(texel) 5464
+            5465:         122 Load 5454(t1D)
+            5466:        5456 Load 5458(s)
+            5467:         123 SampledImage 5465 5466
+            5468:    6(float) Load 135(f16c1)
+            5469:    6(float) Load 137(f16bias)
+            5470:    7(fvec4) ImageSampleImplicitLod 5467 5468 Bias 5469
+            5471:    7(fvec4) Load 5452(texel)
+            5472:    7(fvec4) FAdd 5471 5470
+                              Store 5452(texel) 5472
+            5475:         142 Load 5474(t2D)
+            5476:        5456 Load 5458(s)
+            5477:         143 SampledImage 5475 5476
+            5478:   53(fvec2) Load 148(c2)
+            5479:    7(fvec4) ImageSampleImplicitLod 5477 5478
+            5480:    7(fvec4) Load 5452(texel)
+            5481:    7(fvec4) FAdd 5480 5479
+                              Store 5452(texel) 5481
+            5482:         142 Load 5474(t2D)
+            5483:        5456 Load 5458(s)
+            5484:         143 SampledImage 5482 5483
+            5485:  154(fvec2) Load 156(f16c2)
+            5486:    6(float) Load 137(f16bias)
+            5487:    7(fvec4) ImageSampleImplicitLod 5484 5485 Bias 5486
+            5488:    7(fvec4) Load 5452(texel)
+            5489:    7(fvec4) FAdd 5488 5487
+                              Store 5452(texel) 5489
+            5492:         162 Load 5491(t3D)
+            5493:        5456 Load 5458(s)
+            5494:         163 SampledImage 5492 5493
+            5495:  167(fvec3) Load 169(c3)
+            5496:    7(fvec4) ImageSampleImplicitLod 5494 5495
+            5497:    7(fvec4) Load 5452(texel)
+            5498:    7(fvec4) FAdd 5497 5496
+                              Store 5452(texel) 5498
+            5499:         162 Load 5491(t3D)
+            5500:        5456 Load 5458(s)
+            5501:         163 SampledImage 5499 5500
+            5502:  175(fvec3) Load 177(f16c3)
+            5503:    6(float) Load 137(f16bias)
+            5504:    7(fvec4) ImageSampleImplicitLod 5501 5502 Bias 5503
+            5505:    7(fvec4) Load 5452(texel)
+            5506:    7(fvec4) FAdd 5505 5504
+                              Store 5452(texel) 5506
+            5509:         183 Load 5508(tCube)
+            5510:        5456 Load 5458(s)
+            5511:         184 SampledImage 5509 5510
+            5512:  167(fvec3) Load 169(c3)
+            5513:    7(fvec4) ImageSampleImplicitLod 5511 5512
+            5514:    7(fvec4) Load 5452(texel)
+            5515:    7(fvec4) FAdd 5514 5513
+                              Store 5452(texel) 5515
+            5516:         183 Load 5508(tCube)
+            5517:        5456 Load 5458(s)
+            5518:         184 SampledImage 5516 5517
+            5519:  175(fvec3) Load 177(f16c3)
+            5520:    6(float) Load 137(f16bias)
+            5521:    7(fvec4) ImageSampleImplicitLod 5518 5519 Bias 5520
+            5522:    7(fvec4) Load 5452(texel)
+            5523:    7(fvec4) FAdd 5522 5521
+                              Store 5452(texel) 5523
+            5524:         122 Load 5454(t1D)
+            5526:        5456 Load 5525(sShadow)
+            5527:         199 SampledImage 5524 5526
+            5528:  167(fvec3) Load 169(c3)
+            5529:   52(float) CompositeExtract 5528 2
+            5530:    6(float) ImageSampleDrefImplicitLod 5527 5528 5529
+            5531:    208(ptr) AccessChain 5452(texel) 207
+            5532:    6(float) Load 5531
+            5533:    6(float) FAdd 5532 5530
+            5534:    208(ptr) AccessChain 5452(texel) 207
+                              Store 5534 5533
+            5535:         122 Load 5454(t1D)
+            5536:        5456 Load 5525(sShadow)
+            5537:         199 SampledImage 5535 5536
+            5538:  154(fvec2) Load 156(f16c2)
+            5539:   52(float) Load 215(compare)
+            5540:    6(float) Load 137(f16bias)
+            5541:    6(float) ImageSampleDrefImplicitLod 5537 5538 5539 Bias 5540
+            5542:    208(ptr) AccessChain 5452(texel) 207
+            5543:    6(float) Load 5542
+            5544:    6(float) FAdd 5543 5541
+            5545:    208(ptr) AccessChain 5452(texel) 207
+                              Store 5545 5544
+            5546:         142 Load 5474(t2D)
+            5547:        5456 Load 5525(sShadow)
+            5548:         224 SampledImage 5546 5547
+            5549:  167(fvec3) Load 169(c3)
+            5550:   52(float) CompositeExtract 5549 2
+            5551:    6(float) ImageSampleDrefImplicitLod 5548 5549 5550
+            5552:    208(ptr) AccessChain 5452(texel) 207
+            5553:    6(float) Load 5552
+            5554:    6(float) FAdd 5553 5551
+            5555:    208(ptr) AccessChain 5452(texel) 207
+                              Store 5555 5554
+            5556:         142 Load 5474(t2D)
+            5557:        5456 Load 5525(sShadow)
+            5558:         224 SampledImage 5556 5557
+            5559:  154(fvec2) Load 156(f16c2)
+            5560:   52(float) Load 215(compare)
+            5561:    6(float) Load 137(f16bias)
+            5562:    6(float) ImageSampleDrefImplicitLod 5558 5559 5560 Bias 5561
+            5563:    208(ptr) AccessChain 5452(texel) 207
+            5564:    6(float) Load 5563
+            5565:    6(float) FAdd 5564 5562
+            5566:    208(ptr) AccessChain 5452(texel) 207
+                              Store 5566 5565
+            5567:         183 Load 5508(tCube)
+            5568:        5456 Load 5525(sShadow)
+            5569:         245 SampledImage 5567 5568
+            5570:  249(fvec4) Load 251(c4)
+            5571:   52(float) CompositeExtract 5570 3
+            5572:    6(float) ImageSampleDrefImplicitLod 5569 5570 5571
+            5573:    208(ptr) AccessChain 5452(texel) 207
+            5574:    6(float) Load 5573
+            5575:    6(float) FAdd 5574 5572
+            5576:    208(ptr) AccessChain 5452(texel) 207
+                              Store 5576 5575
+            5577:         183 Load 5508(tCube)
+            5578:        5456 Load 5525(sShadow)
+            5579:         245 SampledImage 5577 5578
+            5580:  175(fvec3) Load 177(f16c3)
+            5581:   52(float) Load 215(compare)
+            5582:    6(float) Load 137(f16bias)
+            5583:    6(float) ImageSampleDrefImplicitLod 5579 5580 5581 Bias 5582
+            5584:    208(ptr) AccessChain 5452(texel) 207
+            5585:    6(float) Load 5584
+            5586:    6(float) FAdd 5585 5583
+            5587:    208(ptr) AccessChain 5452(texel) 207
+                              Store 5587 5586
+            5590:         268 Load 5589(t1DArray)
+            5591:        5456 Load 5458(s)
+            5592:         269 SampledImage 5590 5591
+            5593:   53(fvec2) Load 148(c2)
+            5594:    7(fvec4) ImageSampleImplicitLod 5592 5593
+            5595:    7(fvec4) Load 5452(texel)
+            5596:    7(fvec4) FAdd 5595 5594
+                              Store 5452(texel) 5596
+            5597:         268 Load 5589(t1DArray)
+            5598:        5456 Load 5458(s)
+            5599:         269 SampledImage 5597 5598
+            5600:  154(fvec2) Load 156(f16c2)
+            5601:    6(float) Load 137(f16bias)
+            5602:    7(fvec4) ImageSampleImplicitLod 5599 5600 Bias 5601
+            5603:    7(fvec4) Load 5452(texel)
+            5604:    7(fvec4) FAdd 5603 5602
+                              Store 5452(texel) 5604
+            5607:         283 Load 5606(t2DArray)
+            5608:        5456 Load 5458(s)
+            5609:         284 SampledImage 5607 5608
+            5610:  167(fvec3) Load 169(c3)
+            5611:    7(fvec4) ImageSampleImplicitLod 5609 5610
+            5612:    7(fvec4) Load 5452(texel)
+            5613:    7(fvec4) FAdd 5612 5611
+                              Store 5452(texel) 5613
+            5614:         283 Load 5606(t2DArray)
+            5615:        5456 Load 5458(s)
+            5616:         284 SampledImage 5614 5615
+            5617:  175(fvec3) Load 177(f16c3)
+            5618:    6(float) Load 137(f16bias)
+            5619:    7(fvec4) ImageSampleImplicitLod 5616 5617 Bias 5618
+            5620:    7(fvec4) Load 5452(texel)
+            5621:    7(fvec4) FAdd 5620 5619
+                              Store 5452(texel) 5621
+            5624:         298 Load 5623(tCubeArray)
+            5625:        5456 Load 5458(s)
+            5626:         299 SampledImage 5624 5625
+            5627:  249(fvec4) Load 251(c4)
+            5628:    7(fvec4) ImageSampleImplicitLod 5626 5627
+            5629:    7(fvec4) Load 5452(texel)
+            5630:    7(fvec4) FAdd 5629 5628
+                              Store 5452(texel) 5630
+            5631:         298 Load 5623(tCubeArray)
+            5632:        5456 Load 5458(s)
+            5633:         299 SampledImage 5631 5632
+            5634:    7(fvec4) Load 309(f16c4)
+            5635:    6(float) Load 137(f16bias)
+            5636:    7(fvec4) ImageSampleImplicitLod 5633 5634 Bias 5635
+            5637:    7(fvec4) Load 5452(texel)
+            5638:    7(fvec4) FAdd 5637 5636
+                              Store 5452(texel) 5638
+            5639:         268 Load 5589(t1DArray)
+            5640:        5456 Load 5525(sShadow)
+            5641:         316 SampledImage 5639 5640
+            5642:  167(fvec3) Load 169(c3)
+            5643:   52(float) CompositeExtract 5642 2
+            5644:    6(float) ImageSampleDrefImplicitLod 5641 5642 5643
+            5645:    208(ptr) AccessChain 5452(texel) 207
+            5646:    6(float) Load 5645
+            5647:    6(float) FAdd 5646 5644
+            5648:    208(ptr) AccessChain 5452(texel) 207
+                              Store 5648 5647
+            5649:         268 Load 5589(t1DArray)
+            5650:        5456 Load 5525(sShadow)
+            5651:         316 SampledImage 5649 5650
+            5652:  154(fvec2) Load 156(f16c2)
+            5653:   52(float) Load 215(compare)
+            5654:    6(float) Load 137(f16bias)
+            5655:    6(float) ImageSampleDrefImplicitLod 5651 5652 5653 Bias 5654
+            5656:    208(ptr) AccessChain 5452(texel) 207
+            5657:    6(float) Load 5656
+            5658:    6(float) FAdd 5657 5655
+            5659:    208(ptr) AccessChain 5452(texel) 207
+                              Store 5659 5658
+            5660:         283 Load 5606(t2DArray)
+            5661:        5456 Load 5525(sShadow)
+            5662:         337 SampledImage 5660 5661
+            5663:  249(fvec4) Load 251(c4)
+            5664:   52(float) CompositeExtract 5663 3
+            5665:    6(float) ImageSampleDrefImplicitLod 5662 5663 5664
+            5666:    208(ptr) AccessChain 5452(texel) 207
+            5667:    6(float) Load 5666
+            5668:    6(float) FAdd 5667 5665
+            5669:    208(ptr) AccessChain 5452(texel) 207
+                              Store 5669 5668
+            5670:         283 Load 5606(t2DArray)
+            5671:        5456 Load 5525(sShadow)
+            5672:         337 SampledImage 5670 5671
+            5673:  175(fvec3) Load 177(f16c3)
+            5674:   52(float) Load 215(compare)
+            5675:    6(float) ImageSampleDrefImplicitLod 5672 5673 5674
+            5676:    208(ptr) AccessChain 5452(texel) 207
+            5677:    6(float) Load 5676
+            5678:    6(float) FAdd 5677 5675
+            5679:    208(ptr) AccessChain 5452(texel) 207
+                              Store 5679 5678
+            5682:         356 Load 5681(t2DRect)
+            5683:        5456 Load 5458(s)
+            5684:         357 SampledImage 5682 5683
+            5685:   53(fvec2) Load 148(c2)
+            5686:    7(fvec4) ImageSampleImplicitLod 5684 5685
+            5687:    7(fvec4) Load 5452(texel)
+            5688:    7(fvec4) FAdd 5687 5686
+                              Store 5452(texel) 5688
+            5689:         356 Load 5681(t2DRect)
+            5690:        5456 Load 5458(s)
+            5691:         357 SampledImage 5689 5690
+            5692:  154(fvec2) Load 156(f16c2)
+            5693:    7(fvec4) ImageSampleImplicitLod 5691 5692
+            5694:    7(fvec4) Load 5452(texel)
+            5695:    7(fvec4) FAdd 5694 5693
+                              Store 5452(texel) 5695
+            5696:         356 Load 5681(t2DRect)
+            5697:        5456 Load 5525(sShadow)
+            5698:         371 SampledImage 5696 5697
+            5699:  167(fvec3) Load 169(c3)
+            5700:   52(float) CompositeExtract 5699 2
+            5701:    6(float) ImageSampleDrefImplicitLod 5698 5699 5700
+            5702:    208(ptr) AccessChain 5452(texel) 207
+            5703:    6(float) Load 5702
+            5704:    6(float) FAdd 5703 5701
+            5705:    208(ptr) AccessChain 5452(texel) 207
+                              Store 5705 5704
+            5706:         356 Load 5681(t2DRect)
+            5707:        5456 Load 5525(sShadow)
+            5708:         371 SampledImage 5706 5707
+            5709:  154(fvec2) Load 156(f16c2)
+            5710:   52(float) Load 215(compare)
+            5711:    6(float) ImageSampleDrefImplicitLod 5708 5709 5710
+            5712:    208(ptr) AccessChain 5452(texel) 207
+            5713:    6(float) Load 5712
+            5714:    6(float) FAdd 5713 5711
+            5715:    208(ptr) AccessChain 5452(texel) 207
+                              Store 5715 5714
+            5716:         298 Load 5623(tCubeArray)
+            5717:        5456 Load 5525(sShadow)
+            5718:         391 SampledImage 5716 5717
+            5719:  249(fvec4) Load 251(c4)
+            5720:   52(float) Load 215(compare)
+            5721:    6(float) ImageSampleDrefImplicitLod 5718 5719 5720
+            5722:    208(ptr) AccessChain 5452(texel) 207
+            5723:    6(float) Load 5722
+            5724:    6(float) FAdd 5723 5721
+            5725:    208(ptr) AccessChain 5452(texel) 207
+                              Store 5725 5724
+            5726:         298 Load 5623(tCubeArray)
+            5727:        5456 Load 5525(sShadow)
+            5728:         391 SampledImage 5726 5727
+            5729:    7(fvec4) Load 309(f16c4)
+            5730:   52(float) Load 215(compare)
+            5731:    6(float) ImageSampleDrefImplicitLod 5728 5729 5730
+            5732:    208(ptr) AccessChain 5452(texel) 207
+            5733:    6(float) Load 5732
+            5734:    6(float) FAdd 5733 5731
+            5735:    208(ptr) AccessChain 5452(texel) 207
+                              Store 5735 5734
+            5736:    7(fvec4) Load 5452(texel)
+                              ReturnValue 5736
+                              FunctionEnd
+117(testSubpassLoad():    7(fvec4) Function None 8
+             118:             Label
+            5742:        5739 Load 5741(subpass)
+            5744:    7(fvec4) ImageRead 5742 5743
+            5748:        5745 Load 5747(subpassMS)
+            5749:    7(fvec4) ImageRead 5748 5743 Sample 1326
+            5750:    7(fvec4) FAdd 5744 5749
+                              ReturnValue 5750
+                              FunctionEnd
diff --git a/Test/baseResults/spv.float32.frag.out b/Test/baseResults/spv.float32.frag.out
new file mode 100644
index 0000000..f9fe321
--- /dev/null
+++ b/Test/baseResults/spv.float32.frag.out
@@ -0,0 +1,800 @@
+spv.float32.frag
+// Module Version 10300
+// Generated by (magic number): 80006
+// Id's are bound by 530
+
+                              Capability Shader
+                              Capability Float16
+                              Capability Float64
+                              Capability Int64
+                              Capability Int16
+                              Capability Int8
+                              Capability DerivativeControl
+                              Capability InterpolationFunction
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 468
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_float16"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_float32"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_float64"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_int16"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_int32"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_int64"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_int8"
+                              Name 4  "main"
+                              Name 6  "literal("
+                              Name 8  "operators("
+                              Name 10  "typeCast("
+                              Name 12  "builtinAngleTrigFuncs("
+                              Name 14  "builtinExpFuncs("
+                              Name 16  "builtinCommonFuncs("
+                              Name 18  "builtinGeometryFuncs("
+                              Name 20  "builtinMatrixFuncs("
+                              Name 22  "builtinVecRelFuncs("
+                              Name 24  "builtinFragProcFuncs("
+                              Name 29  "f32v"
+                              Name 40  "f32v"
+                              Name 62  "f32m"
+                              Name 85  "f32"
+                              Name 109  "b"
+                              Name 152  "f64v"
+                              Name 155  "f32v"
+                              Name 160  "bv"
+                              Name 175  "f16v"
+                              Name 183  "i8v"
+                              Name 189  "i16v"
+                              Name 195  "i32v"
+                              Name 201  "i64v"
+                              Name 204  "u8v"
+                              Name 210  "u16v"
+                              Name 215  "u32v"
+                              Name 221  "u64v"
+                              Name 226  "f32v2"
+                              Name 227  "f32v1"
+                              Name 259  "f32v2"
+                              Name 260  "f32v1"
+                              Name 276  "f32v2"
+                              Name 277  "f32v1"
+                              Name 298  "f32"
+                              Name 302  "f32v3"
+                              Name 342  "bv"
+                              Name 363  "b"
+                              Name 373  "iv"
+                              Name 374  "ResType"
+                              Name 381  "f32"
+                              Name 382  "f32v1"
+                              Name 386  "f32v2"
+                              Name 392  "f32v3"
+                              Name 411  "f32m3"
+                              Name 412  "f32m1"
+                              Name 414  "f32m2"
+                              Name 423  "f32v1"
+                              Name 425  "f32v2"
+                              Name 430  "f32m4"
+                              Name 433  "f32"
+                              Name 436  "f32m5"
+                              Name 441  "f32m6"
+                              Name 442  "f32m7"
+                              Name 445  "bv"
+                              Name 446  "f32v1"
+                              Name 448  "f32v2"
+                              Name 466  "f32v"
+                              Name 468  "if32v"
+                              Name 517  "S"
+                              MemberName 517(S) 0  "x"
+                              MemberName 517(S) 1  "y"
+                              MemberName 517(S) 2  "z"
+                              Name 519  "B1"
+                              MemberName 519(B1) 0  "a"
+                              MemberName 519(B1) 1  "b"
+                              MemberName 519(B1) 2  "c"
+                              MemberName 519(B1) 3  "d"
+                              MemberName 519(B1) 4  "e"
+                              MemberName 519(B1) 5  "f"
+                              MemberName 519(B1) 6  "g"
+                              MemberName 519(B1) 7  "h"
+                              Name 521  ""
+                              Name 522  "sf16"
+                              Name 523  "sf"
+                              Name 524  "sd"
+                              Decorate 515 ArrayStride 16
+                              Decorate 516 ArrayStride 32
+                              MemberDecorate 517(S) 0 Offset 0
+                              MemberDecorate 517(S) 1 Offset 8
+                              MemberDecorate 517(S) 2 Offset 16
+                              Decorate 518 ArrayStride 32
+                              MemberDecorate 519(B1) 0 Offset 0
+                              MemberDecorate 519(B1) 1 Offset 8
+                              MemberDecorate 519(B1) 2 Offset 16
+                              MemberDecorate 519(B1) 3 Offset 32
+                              MemberDecorate 519(B1) 4 ColMajor
+                              MemberDecorate 519(B1) 4 Offset 64
+                              MemberDecorate 519(B1) 4 MatrixStride 16
+                              MemberDecorate 519(B1) 5 ColMajor
+                              MemberDecorate 519(B1) 5 Offset 96
+                              MemberDecorate 519(B1) 5 MatrixStride 16
+                              MemberDecorate 519(B1) 6 Offset 160
+                              MemberDecorate 519(B1) 7 Offset 192
+                              Decorate 519(B1) Block
+                              Decorate 521 DescriptorSet 0
+                              Decorate 522(sf16) SpecId 100
+                              Decorate 523(sf) SpecId 101
+                              Decorate 524(sd) SpecId 102
+               2:             TypeVoid
+               3:             TypeFunction 2
+              26:             TypeFloat 32
+              27:             TypeVector 26(float) 2
+              28:             TypePointer Function 27(fvec2)
+              30:   26(float) Constant 897988541
+              31:             TypeInt 32 0
+              32:     31(int) Constant 0
+              33:             TypePointer Function 26(float)
+              35:   26(float) Constant 3196059648
+              36:   26(float) Constant 1022739087
+              37:   27(fvec2) ConstantComposite 35 36
+              54:   26(float) Constant 1065353216
+              60:             TypeMatrix 27(fvec2) 2
+              61:             TypePointer Function 60
+              88:     31(int) Constant 1
+             107:             TypeBool
+             108:             TypePointer Function 107(bool)
+             149:             TypeFloat 64
+             150:             TypeVector 149(float) 3
+             151:             TypePointer Function 150(fvec3)
+             153:             TypeVector 26(float) 3
+             154:             TypePointer Function 153(fvec3)
+             158:             TypeVector 107(bool) 3
+             159:             TypePointer Function 158(bvec3)
+             162:   26(float) Constant 0
+             163:  153(fvec3) ConstantComposite 162 162 162
+             164:  153(fvec3) ConstantComposite 54 54 54
+             172:             TypeFloat 16
+             173:             TypeVector 172(float) 3
+             174:             TypePointer Function 173(fvec3)
+             180:             TypeInt 8 1
+             181:             TypeVector 180(int) 3
+             182:             TypePointer Function 181(ivec3)
+             186:             TypeInt 16 1
+             187:             TypeVector 186(int) 3
+             188:             TypePointer Function 187(ivec3)
+             192:             TypeInt 32 1
+             193:             TypeVector 192(int) 3
+             194:             TypePointer Function 193(ivec3)
+             198:             TypeInt 64 1
+             199:             TypeVector 198(int) 3
+             200:             TypePointer Function 199(ivec3)
+             207:             TypeInt 16 0
+             208:             TypeVector 207(int) 3
+             209:             TypePointer Function 208(ivec3)
+             213:             TypeVector 31(int) 3
+             214:             TypePointer Function 213(ivec3)
+             218:             TypeInt 64 0
+             219:             TypeVector 218(int) 3
+             220:             TypePointer Function 219(ivec3)
+             224:             TypeVector 26(float) 4
+             225:             TypePointer Function 224(fvec4)
+    374(ResType):             TypeStruct 153(fvec3) 193(ivec3)
+             409:             TypeMatrix 153(fvec3) 2
+             410:             TypePointer Function 409
+             428:             TypeMatrix 27(fvec2) 3
+             429:             TypePointer Function 428
+             434:             TypeMatrix 153(fvec3) 3
+             435:             TypePointer Function 434
+             439:             TypeMatrix 224(fvec4) 4
+             440:             TypePointer Function 439
+             467:             TypePointer Input 153(fvec3)
+      468(if32v):    467(ptr) Variable Input
+             469:             TypePointer Input 26(float)
+             506:    192(int) Constant 1
+             511:   26(float) Constant 1056964608
+             512:   27(fvec2) ConstantComposite 511 511
+             514:     31(int) Constant 2
+             515:             TypeArray 26(float) 514
+             516:             TypeArray 409 514
+          517(S):             TypeStruct 26(float) 27(fvec2) 153(fvec3)
+             518:             TypeArray 517(S) 514
+         519(B1):             TypeStruct 26(float) 27(fvec2) 153(fvec3) 515 409 516 517(S) 518
+             520:             TypePointer Uniform 519(B1)
+             521:    520(ptr) Variable Uniform
+       522(sf16):  172(float) SpecConstant 12288
+         523(sf):   26(float) SpecConstant 1048576000
+         524(sd):  149(float) SpecConstant 0 1071644672
+             525:   26(float) SpecConstantOp 115 522(sf16)
+             526:   26(float) SpecConstantOp 115 522(sf16)
+             527:  149(float) SpecConstantOp 115 526
+             528:  172(float) SpecConstantOp 115 523(sf)
+             529:  172(float) SpecConstantOp 115 524(sd)
+         4(main):           2 Function None 3
+               5:             Label
+                              Return
+                              FunctionEnd
+     6(literal():           2 Function None 3
+               7:             Label
+        29(f32v):     28(ptr) Variable Function
+              34:     33(ptr) AccessChain 29(f32v) 32
+                              Store 34 30
+              38:   27(fvec2) Load 29(f32v)
+              39:   27(fvec2) FAdd 38 37
+                              Store 29(f32v) 39
+                              Return
+                              FunctionEnd
+   8(operators():           2 Function None 3
+               9:             Label
+        40(f32v):     28(ptr) Variable Function
+        62(f32m):     61(ptr) Variable Function
+         85(f32):     33(ptr) Variable Function
+          109(b):    108(ptr) Variable Function
+              41:   27(fvec2) Load 40(f32v)
+              42:   27(fvec2) Load 40(f32v)
+              43:   27(fvec2) FAdd 42 41
+                              Store 40(f32v) 43
+              44:   27(fvec2) Load 40(f32v)
+              45:   27(fvec2) Load 40(f32v)
+              46:   27(fvec2) FSub 45 44
+                              Store 40(f32v) 46
+              47:   27(fvec2) Load 40(f32v)
+              48:   27(fvec2) Load 40(f32v)
+              49:   27(fvec2) FMul 48 47
+                              Store 40(f32v) 49
+              50:   27(fvec2) Load 40(f32v)
+              51:   27(fvec2) Load 40(f32v)
+              52:   27(fvec2) FDiv 51 50
+                              Store 40(f32v) 52
+              53:   27(fvec2) Load 40(f32v)
+              55:   27(fvec2) CompositeConstruct 54 54
+              56:   27(fvec2) FAdd 53 55
+                              Store 40(f32v) 56
+              57:   27(fvec2) Load 40(f32v)
+              58:   27(fvec2) CompositeConstruct 54 54
+              59:   27(fvec2) FSub 57 58
+                              Store 40(f32v) 59
+              63:          60 Load 62(f32m)
+              64:   27(fvec2) CompositeConstruct 54 54
+              65:   27(fvec2) CompositeExtract 63 0
+              66:   27(fvec2) FAdd 65 64
+              67:   27(fvec2) CompositeExtract 63 1
+              68:   27(fvec2) FAdd 67 64
+              69:          60 CompositeConstruct 66 68
+                              Store 62(f32m) 69
+              70:          60 Load 62(f32m)
+              71:   27(fvec2) CompositeConstruct 54 54
+              72:   27(fvec2) CompositeExtract 70 0
+              73:   27(fvec2) FSub 72 71
+              74:   27(fvec2) CompositeExtract 70 1
+              75:   27(fvec2) FSub 74 71
+              76:          60 CompositeConstruct 73 75
+                              Store 62(f32m) 76
+              77:   27(fvec2) Load 40(f32v)
+              78:   27(fvec2) FNegate 77
+                              Store 40(f32v) 78
+              79:          60 Load 62(f32m)
+              80:   27(fvec2) CompositeExtract 79 0
+              81:   27(fvec2) FNegate 80
+              82:   27(fvec2) CompositeExtract 79 1
+              83:   27(fvec2) FNegate 82
+              84:          60 CompositeConstruct 81 83
+                              Store 62(f32m) 84
+              86:     33(ptr) AccessChain 40(f32v) 32
+              87:   26(float) Load 86
+              89:     33(ptr) AccessChain 40(f32v) 88
+              90:   26(float) Load 89
+              91:   26(float) FAdd 87 90
+                              Store 85(f32) 91
+              92:     33(ptr) AccessChain 40(f32v) 32
+              93:   26(float) Load 92
+              94:     33(ptr) AccessChain 40(f32v) 88
+              95:   26(float) Load 94
+              96:   26(float) FSub 93 95
+                              Store 85(f32) 96
+              97:     33(ptr) AccessChain 40(f32v) 32
+              98:   26(float) Load 97
+              99:     33(ptr) AccessChain 40(f32v) 88
+             100:   26(float) Load 99
+             101:   26(float) FMul 98 100
+                              Store 85(f32) 101
+             102:     33(ptr) AccessChain 40(f32v) 32
+             103:   26(float) Load 102
+             104:     33(ptr) AccessChain 40(f32v) 88
+             105:   26(float) Load 104
+             106:   26(float) FDiv 103 105
+                              Store 85(f32) 106
+             110:     33(ptr) AccessChain 40(f32v) 32
+             111:   26(float) Load 110
+             112:   26(float) Load 85(f32)
+             113:   107(bool) FOrdNotEqual 111 112
+                              Store 109(b) 113
+             114:     33(ptr) AccessChain 40(f32v) 88
+             115:   26(float) Load 114
+             116:   26(float) Load 85(f32)
+             117:   107(bool) FOrdEqual 115 116
+                              Store 109(b) 117
+             118:     33(ptr) AccessChain 40(f32v) 32
+             119:   26(float) Load 118
+             120:   26(float) Load 85(f32)
+             121:   107(bool) FOrdGreaterThan 119 120
+                              Store 109(b) 121
+             122:     33(ptr) AccessChain 40(f32v) 88
+             123:   26(float) Load 122
+             124:   26(float) Load 85(f32)
+             125:   107(bool) FOrdLessThan 123 124
+                              Store 109(b) 125
+             126:     33(ptr) AccessChain 40(f32v) 32
+             127:   26(float) Load 126
+             128:   26(float) Load 85(f32)
+             129:   107(bool) FOrdGreaterThanEqual 127 128
+                              Store 109(b) 129
+             130:     33(ptr) AccessChain 40(f32v) 88
+             131:   26(float) Load 130
+             132:   26(float) Load 85(f32)
+             133:   107(bool) FOrdLessThanEqual 131 132
+                              Store 109(b) 133
+             134:   27(fvec2) Load 40(f32v)
+             135:   26(float) Load 85(f32)
+             136:   27(fvec2) VectorTimesScalar 134 135
+                              Store 40(f32v) 136
+             137:          60 Load 62(f32m)
+             138:   26(float) Load 85(f32)
+             139:          60 MatrixTimesScalar 137 138
+                              Store 62(f32m) 139
+             140:          60 Load 62(f32m)
+             141:   27(fvec2) Load 40(f32v)
+             142:   27(fvec2) MatrixTimesVector 140 141
+                              Store 40(f32v) 142
+             143:   27(fvec2) Load 40(f32v)
+             144:          60 Load 62(f32m)
+             145:   27(fvec2) VectorTimesMatrix 143 144
+                              Store 40(f32v) 145
+             146:          60 Load 62(f32m)
+             147:          60 Load 62(f32m)
+             148:          60 MatrixTimesMatrix 146 147
+                              Store 62(f32m) 148
+                              Return
+                              FunctionEnd
+   10(typeCast():           2 Function None 3
+              11:             Label
+       152(f64v):    151(ptr) Variable Function
+       155(f32v):    154(ptr) Variable Function
+         160(bv):    159(ptr) Variable Function
+       175(f16v):    174(ptr) Variable Function
+        183(i8v):    182(ptr) Variable Function
+       189(i16v):    188(ptr) Variable Function
+       195(i32v):    194(ptr) Variable Function
+       201(i64v):    200(ptr) Variable Function
+        204(u8v):    182(ptr) Variable Function
+       210(u16v):    209(ptr) Variable Function
+       215(u32v):    214(ptr) Variable Function
+       221(u64v):    220(ptr) Variable Function
+             156:  153(fvec3) Load 155(f32v)
+             157:  150(fvec3) FConvert 156
+                              Store 152(f64v) 157
+             161:  158(bvec3) Load 160(bv)
+             165:  153(fvec3) Select 161 164 163
+                              Store 155(f32v) 165
+             166:  153(fvec3) Load 155(f32v)
+             167:  158(bvec3) FOrdNotEqual 166 163
+                              Store 160(bv) 167
+             168:  150(fvec3) Load 152(f64v)
+             169:  153(fvec3) FConvert 168
+                              Store 155(f32v) 169
+             170:  153(fvec3) Load 155(f32v)
+             171:  150(fvec3) FConvert 170
+                              Store 152(f64v) 171
+             176:  173(fvec3) Load 175(f16v)
+             177:  153(fvec3) FConvert 176
+                              Store 155(f32v) 177
+             178:  153(fvec3) Load 155(f32v)
+             179:  173(fvec3) FConvert 178
+                              Store 175(f16v) 179
+             184:  153(fvec3) Load 155(f32v)
+             185:  181(ivec3) ConvertFToS 184
+                              Store 183(i8v) 185
+             190:  153(fvec3) Load 155(f32v)
+             191:  187(ivec3) ConvertFToS 190
+                              Store 189(i16v) 191
+             196:  153(fvec3) Load 155(f32v)
+             197:  193(ivec3) ConvertFToS 196
+                              Store 195(i32v) 197
+             202:  153(fvec3) Load 155(f32v)
+             203:  199(ivec3) ConvertFToS 202
+                              Store 201(i64v) 203
+             205:  153(fvec3) Load 155(f32v)
+             206:  181(ivec3) ConvertFToS 205
+                              Store 204(u8v) 206
+             211:  153(fvec3) Load 155(f32v)
+             212:  208(ivec3) ConvertFToU 211
+                              Store 210(u16v) 212
+             216:  153(fvec3) Load 155(f32v)
+             217:  213(ivec3) ConvertFToU 216
+                              Store 215(u32v) 217
+             222:  153(fvec3) Load 155(f32v)
+             223:  219(ivec3) ConvertFToU 222
+                              Store 221(u64v) 223
+                              Return
+                              FunctionEnd
+12(builtinAngleTrigFuncs():           2 Function None 3
+              13:             Label
+      226(f32v2):    225(ptr) Variable Function
+      227(f32v1):    225(ptr) Variable Function
+             228:  224(fvec4) Load 227(f32v1)
+             229:  224(fvec4) ExtInst 1(GLSL.std.450) 11(Radians) 228
+                              Store 226(f32v2) 229
+             230:  224(fvec4) Load 227(f32v1)
+             231:  224(fvec4) ExtInst 1(GLSL.std.450) 12(Degrees) 230
+                              Store 226(f32v2) 231
+             232:  224(fvec4) Load 227(f32v1)
+             233:  224(fvec4) ExtInst 1(GLSL.std.450) 13(Sin) 232
+                              Store 226(f32v2) 233
+             234:  224(fvec4) Load 227(f32v1)
+             235:  224(fvec4) ExtInst 1(GLSL.std.450) 14(Cos) 234
+                              Store 226(f32v2) 235
+             236:  224(fvec4) Load 227(f32v1)
+             237:  224(fvec4) ExtInst 1(GLSL.std.450) 15(Tan) 236
+                              Store 226(f32v2) 237
+             238:  224(fvec4) Load 227(f32v1)
+             239:  224(fvec4) ExtInst 1(GLSL.std.450) 16(Asin) 238
+                              Store 226(f32v2) 239
+             240:  224(fvec4) Load 227(f32v1)
+             241:  224(fvec4) ExtInst 1(GLSL.std.450) 17(Acos) 240
+                              Store 226(f32v2) 241
+             242:  224(fvec4) Load 227(f32v1)
+             243:  224(fvec4) Load 226(f32v2)
+             244:  224(fvec4) ExtInst 1(GLSL.std.450) 25(Atan2) 242 243
+                              Store 226(f32v2) 244
+             245:  224(fvec4) Load 227(f32v1)
+             246:  224(fvec4) ExtInst 1(GLSL.std.450) 18(Atan) 245
+                              Store 226(f32v2) 246
+             247:  224(fvec4) Load 227(f32v1)
+             248:  224(fvec4) ExtInst 1(GLSL.std.450) 19(Sinh) 247
+                              Store 226(f32v2) 248
+             249:  224(fvec4) Load 227(f32v1)
+             250:  224(fvec4) ExtInst 1(GLSL.std.450) 20(Cosh) 249
+                              Store 226(f32v2) 250
+             251:  224(fvec4) Load 227(f32v1)
+             252:  224(fvec4) ExtInst 1(GLSL.std.450) 21(Tanh) 251
+                              Store 226(f32v2) 252
+             253:  224(fvec4) Load 227(f32v1)
+             254:  224(fvec4) ExtInst 1(GLSL.std.450) 22(Asinh) 253
+                              Store 226(f32v2) 254
+             255:  224(fvec4) Load 227(f32v1)
+             256:  224(fvec4) ExtInst 1(GLSL.std.450) 23(Acosh) 255
+                              Store 226(f32v2) 256
+             257:  224(fvec4) Load 227(f32v1)
+             258:  224(fvec4) ExtInst 1(GLSL.std.450) 24(Atanh) 257
+                              Store 226(f32v2) 258
+                              Return
+                              FunctionEnd
+14(builtinExpFuncs():           2 Function None 3
+              15:             Label
+      259(f32v2):     28(ptr) Variable Function
+      260(f32v1):     28(ptr) Variable Function
+             261:   27(fvec2) Load 260(f32v1)
+             262:   27(fvec2) Load 259(f32v2)
+             263:   27(fvec2) ExtInst 1(GLSL.std.450) 26(Pow) 261 262
+                              Store 259(f32v2) 263
+             264:   27(fvec2) Load 260(f32v1)
+             265:   27(fvec2) ExtInst 1(GLSL.std.450) 27(Exp) 264
+                              Store 259(f32v2) 265
+             266:   27(fvec2) Load 260(f32v1)
+             267:   27(fvec2) ExtInst 1(GLSL.std.450) 28(Log) 266
+                              Store 259(f32v2) 267
+             268:   27(fvec2) Load 260(f32v1)
+             269:   27(fvec2) ExtInst 1(GLSL.std.450) 29(Exp2) 268
+                              Store 259(f32v2) 269
+             270:   27(fvec2) Load 260(f32v1)
+             271:   27(fvec2) ExtInst 1(GLSL.std.450) 30(Log2) 270
+                              Store 259(f32v2) 271
+             272:   27(fvec2) Load 260(f32v1)
+             273:   27(fvec2) ExtInst 1(GLSL.std.450) 31(Sqrt) 272
+                              Store 259(f32v2) 273
+             274:   27(fvec2) Load 260(f32v1)
+             275:   27(fvec2) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 274
+                              Store 259(f32v2) 275
+                              Return
+                              FunctionEnd
+16(builtinCommonFuncs():           2 Function None 3
+              17:             Label
+      276(f32v2):    154(ptr) Variable Function
+      277(f32v1):    154(ptr) Variable Function
+        298(f32):     33(ptr) Variable Function
+      302(f32v3):    154(ptr) Variable Function
+         342(bv):    159(ptr) Variable Function
+          363(b):    108(ptr) Variable Function
+         373(iv):    194(ptr) Variable Function
+             278:  153(fvec3) Load 277(f32v1)
+             279:  153(fvec3) ExtInst 1(GLSL.std.450) 4(FAbs) 278
+                              Store 276(f32v2) 279
+             280:  153(fvec3) Load 277(f32v1)
+             281:  153(fvec3) ExtInst 1(GLSL.std.450) 6(FSign) 280
+                              Store 276(f32v2) 281
+             282:  153(fvec3) Load 277(f32v1)
+             283:  153(fvec3) ExtInst 1(GLSL.std.450) 8(Floor) 282
+                              Store 276(f32v2) 283
+             284:  153(fvec3) Load 277(f32v1)
+             285:  153(fvec3) ExtInst 1(GLSL.std.450) 3(Trunc) 284
+                              Store 276(f32v2) 285
+             286:  153(fvec3) Load 277(f32v1)
+             287:  153(fvec3) ExtInst 1(GLSL.std.450) 1(Round) 286
+                              Store 276(f32v2) 287
+             288:  153(fvec3) Load 277(f32v1)
+             289:  153(fvec3) ExtInst 1(GLSL.std.450) 2(RoundEven) 288
+                              Store 276(f32v2) 289
+             290:  153(fvec3) Load 277(f32v1)
+             291:  153(fvec3) ExtInst 1(GLSL.std.450) 9(Ceil) 290
+                              Store 276(f32v2) 291
+             292:  153(fvec3) Load 277(f32v1)
+             293:  153(fvec3) ExtInst 1(GLSL.std.450) 10(Fract) 292
+                              Store 276(f32v2) 293
+             294:  153(fvec3) Load 277(f32v1)
+             295:  153(fvec3) Load 276(f32v2)
+             296:  153(fvec3) FMod 294 295
+                              Store 276(f32v2) 296
+             297:  153(fvec3) Load 277(f32v1)
+             299:   26(float) Load 298(f32)
+             300:  153(fvec3) CompositeConstruct 299 299 299
+             301:  153(fvec3) FMod 297 300
+                              Store 276(f32v2) 301
+             303:  153(fvec3) Load 277(f32v1)
+             304:  153(fvec3) ExtInst 1(GLSL.std.450) 35(Modf) 303 276(f32v2)
+                              Store 302(f32v3) 304
+             305:  153(fvec3) Load 277(f32v1)
+             306:  153(fvec3) Load 276(f32v2)
+             307:  153(fvec3) ExtInst 1(GLSL.std.450) 37(FMin) 305 306
+                              Store 302(f32v3) 307
+             308:  153(fvec3) Load 277(f32v1)
+             309:   26(float) Load 298(f32)
+             310:  153(fvec3) CompositeConstruct 309 309 309
+             311:  153(fvec3) ExtInst 1(GLSL.std.450) 37(FMin) 308 310
+                              Store 302(f32v3) 311
+             312:  153(fvec3) Load 277(f32v1)
+             313:  153(fvec3) Load 276(f32v2)
+             314:  153(fvec3) ExtInst 1(GLSL.std.450) 40(FMax) 312 313
+                              Store 302(f32v3) 314
+             315:  153(fvec3) Load 277(f32v1)
+             316:   26(float) Load 298(f32)
+             317:  153(fvec3) CompositeConstruct 316 316 316
+             318:  153(fvec3) ExtInst 1(GLSL.std.450) 40(FMax) 315 317
+                              Store 302(f32v3) 318
+             319:  153(fvec3) Load 277(f32v1)
+             320:   26(float) Load 298(f32)
+             321:     33(ptr) AccessChain 276(f32v2) 32
+             322:   26(float) Load 321
+             323:  153(fvec3) CompositeConstruct 320 320 320
+             324:  153(fvec3) CompositeConstruct 322 322 322
+             325:  153(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 319 323 324
+                              Store 302(f32v3) 325
+             326:  153(fvec3) Load 277(f32v1)
+             327:  153(fvec3) Load 276(f32v2)
+             328:   26(float) Load 298(f32)
+             329:  153(fvec3) CompositeConstruct 328 328 328
+             330:  153(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 326 327 329
+                              Store 302(f32v3) 330
+             331:  153(fvec3) Load 277(f32v1)
+             332:  153(fvec3) Load 276(f32v2)
+             333:   26(float) Load 298(f32)
+             334:  153(fvec3) CompositeConstruct 333 333 333
+             335:  153(fvec3) ExtInst 1(GLSL.std.450) 46(FMix) 331 332 334
+                              Store 302(f32v3) 335
+             336:  153(fvec3) Load 277(f32v1)
+             337:  153(fvec3) Load 276(f32v2)
+             338:  153(fvec3) Load 302(f32v3)
+             339:  153(fvec3) ExtInst 1(GLSL.std.450) 46(FMix) 336 337 338
+                              Store 302(f32v3) 339
+             340:  153(fvec3) Load 277(f32v1)
+             341:  153(fvec3) Load 276(f32v2)
+             343:  158(bvec3) Load 342(bv)
+             344:  153(fvec3) Select 343 341 340
+                              Store 302(f32v3) 344
+             345:  153(fvec3) Load 277(f32v1)
+             346:  153(fvec3) Load 276(f32v2)
+             347:  153(fvec3) ExtInst 1(GLSL.std.450) 48(Step) 345 346
+                              Store 302(f32v3) 347
+             348:   26(float) Load 298(f32)
+             349:  153(fvec3) Load 302(f32v3)
+             350:  153(fvec3) CompositeConstruct 348 348 348
+             351:  153(fvec3) ExtInst 1(GLSL.std.450) 48(Step) 350 349
+                              Store 302(f32v3) 351
+             352:  153(fvec3) Load 277(f32v1)
+             353:  153(fvec3) Load 276(f32v2)
+             354:  153(fvec3) Load 302(f32v3)
+             355:  153(fvec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 352 353 354
+                              Store 302(f32v3) 355
+             356:   26(float) Load 298(f32)
+             357:     33(ptr) AccessChain 277(f32v1) 32
+             358:   26(float) Load 357
+             359:  153(fvec3) Load 276(f32v2)
+             360:  153(fvec3) CompositeConstruct 356 356 356
+             361:  153(fvec3) CompositeConstruct 358 358 358
+             362:  153(fvec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 360 361 359
+                              Store 302(f32v3) 362
+             364:   26(float) Load 298(f32)
+             365:   107(bool) IsNan 364
+                              Store 363(b) 365
+             366:  153(fvec3) Load 277(f32v1)
+             367:  158(bvec3) IsInf 366
+                              Store 342(bv) 367
+             368:  153(fvec3) Load 277(f32v1)
+             369:  153(fvec3) Load 276(f32v2)
+             370:  153(fvec3) Load 302(f32v3)
+             371:  153(fvec3) ExtInst 1(GLSL.std.450) 50(Fma) 368 369 370
+                              Store 302(f32v3) 371
+             372:  153(fvec3) Load 277(f32v1)
+             375:374(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 372
+             376:  193(ivec3) CompositeExtract 375 1
+                              Store 373(iv) 376
+             377:  153(fvec3) CompositeExtract 375 0
+                              Store 276(f32v2) 377
+             378:  153(fvec3) Load 277(f32v1)
+             379:  193(ivec3) Load 373(iv)
+             380:  153(fvec3) ExtInst 1(GLSL.std.450) 53(Ldexp) 378 379
+                              Store 276(f32v2) 380
+                              Return
+                              FunctionEnd
+18(builtinGeometryFuncs():           2 Function None 3
+              19:             Label
+        381(f32):     33(ptr) Variable Function
+      382(f32v1):    154(ptr) Variable Function
+      386(f32v2):    154(ptr) Variable Function
+      392(f32v3):    154(ptr) Variable Function
+             383:  153(fvec3) Load 382(f32v1)
+             384:   26(float) ExtInst 1(GLSL.std.450) 66(Length) 383
+                              Store 381(f32) 384
+             385:  153(fvec3) Load 382(f32v1)
+             387:  153(fvec3) Load 386(f32v2)
+             388:   26(float) ExtInst 1(GLSL.std.450) 67(Distance) 385 387
+                              Store 381(f32) 388
+             389:  153(fvec3) Load 382(f32v1)
+             390:  153(fvec3) Load 386(f32v2)
+             391:   26(float) Dot 389 390
+                              Store 381(f32) 391
+             393:  153(fvec3) Load 382(f32v1)
+             394:  153(fvec3) Load 386(f32v2)
+             395:  153(fvec3) ExtInst 1(GLSL.std.450) 68(Cross) 393 394
+                              Store 392(f32v3) 395
+             396:  153(fvec3) Load 382(f32v1)
+             397:  153(fvec3) ExtInst 1(GLSL.std.450) 69(Normalize) 396
+                              Store 386(f32v2) 397
+             398:  153(fvec3) Load 382(f32v1)
+             399:  153(fvec3) Load 386(f32v2)
+             400:  153(fvec3) Load 392(f32v3)
+             401:  153(fvec3) ExtInst 1(GLSL.std.450) 70(FaceForward) 398 399 400
+                              Store 392(f32v3) 401
+             402:  153(fvec3) Load 382(f32v1)
+             403:  153(fvec3) Load 386(f32v2)
+             404:  153(fvec3) ExtInst 1(GLSL.std.450) 71(Reflect) 402 403
+                              Store 392(f32v3) 404
+             405:  153(fvec3) Load 382(f32v1)
+             406:  153(fvec3) Load 386(f32v2)
+             407:   26(float) Load 381(f32)
+             408:  153(fvec3) ExtInst 1(GLSL.std.450) 72(Refract) 405 406 407
+                              Store 392(f32v3) 408
+                              Return
+                              FunctionEnd
+20(builtinMatrixFuncs():           2 Function None 3
+              21:             Label
+      411(f32m3):    410(ptr) Variable Function
+      412(f32m1):    410(ptr) Variable Function
+      414(f32m2):    410(ptr) Variable Function
+      423(f32v1):    154(ptr) Variable Function
+      425(f32v2):     28(ptr) Variable Function
+      430(f32m4):    429(ptr) Variable Function
+        433(f32):     33(ptr) Variable Function
+      436(f32m5):    435(ptr) Variable Function
+      441(f32m6):    440(ptr) Variable Function
+      442(f32m7):    440(ptr) Variable Function
+             413:         409 Load 412(f32m1)
+             415:         409 Load 414(f32m2)
+             416:  153(fvec3) CompositeExtract 413 0
+             417:  153(fvec3) CompositeExtract 415 0
+             418:  153(fvec3) FMul 416 417
+             419:  153(fvec3) CompositeExtract 413 1
+             420:  153(fvec3) CompositeExtract 415 1
+             421:  153(fvec3) FMul 419 420
+             422:         409 CompositeConstruct 418 421
+                              Store 411(f32m3) 422
+             424:  153(fvec3) Load 423(f32v1)
+             426:   27(fvec2) Load 425(f32v2)
+             427:         409 OuterProduct 424 426
+                              Store 412(f32m1) 427
+             431:         409 Load 412(f32m1)
+             432:         428 Transpose 431
+                              Store 430(f32m4) 432
+             437:         434 Load 436(f32m5)
+             438:   26(float) ExtInst 1(GLSL.std.450) 33(Determinant) 437
+                              Store 433(f32) 438
+             443:         439 Load 442(f32m7)
+             444:         439 ExtInst 1(GLSL.std.450) 34(MatrixInverse) 443
+                              Store 441(f32m6) 444
+                              Return
+                              FunctionEnd
+22(builtinVecRelFuncs():           2 Function None 3
+              23:             Label
+         445(bv):    159(ptr) Variable Function
+      446(f32v1):    154(ptr) Variable Function
+      448(f32v2):    154(ptr) Variable Function
+             447:  153(fvec3) Load 446(f32v1)
+             449:  153(fvec3) Load 448(f32v2)
+             450:  158(bvec3) FOrdLessThan 447 449
+                              Store 445(bv) 450
+             451:  153(fvec3) Load 446(f32v1)
+             452:  153(fvec3) Load 448(f32v2)
+             453:  158(bvec3) FOrdLessThanEqual 451 452
+                              Store 445(bv) 453
+             454:  153(fvec3) Load 446(f32v1)
+             455:  153(fvec3) Load 448(f32v2)
+             456:  158(bvec3) FOrdGreaterThan 454 455
+                              Store 445(bv) 456
+             457:  153(fvec3) Load 446(f32v1)
+             458:  153(fvec3) Load 448(f32v2)
+             459:  158(bvec3) FOrdGreaterThanEqual 457 458
+                              Store 445(bv) 459
+             460:  153(fvec3) Load 446(f32v1)
+             461:  153(fvec3) Load 448(f32v2)
+             462:  158(bvec3) FOrdEqual 460 461
+                              Store 445(bv) 462
+             463:  153(fvec3) Load 446(f32v1)
+             464:  153(fvec3) Load 448(f32v2)
+             465:  158(bvec3) FOrdNotEqual 463 464
+                              Store 445(bv) 465
+                              Return
+                              FunctionEnd
+24(builtinFragProcFuncs():           2 Function None 3
+              25:             Label
+       466(f32v):    154(ptr) Variable Function
+             470:    469(ptr) AccessChain 468(if32v) 32
+             471:   26(float) Load 470
+             472:   26(float) DPdx 471
+             473:     33(ptr) AccessChain 466(f32v) 32
+                              Store 473 472
+             474:    469(ptr) AccessChain 468(if32v) 88
+             475:   26(float) Load 474
+             476:   26(float) DPdy 475
+             477:     33(ptr) AccessChain 466(f32v) 88
+                              Store 477 476
+             478:  153(fvec3) Load 468(if32v)
+             479:   27(fvec2) VectorShuffle 478 478 0 1
+             480:   27(fvec2) DPdxFine 479
+             481:  153(fvec3) Load 466(f32v)
+             482:  153(fvec3) VectorShuffle 481 480 3 4 2
+                              Store 466(f32v) 482
+             483:  153(fvec3) Load 468(if32v)
+             484:   27(fvec2) VectorShuffle 483 483 0 1
+             485:   27(fvec2) DPdyFine 484
+             486:  153(fvec3) Load 466(f32v)
+             487:  153(fvec3) VectorShuffle 486 485 3 4 2
+                              Store 466(f32v) 487
+             488:  153(fvec3) Load 468(if32v)
+             489:  153(fvec3) DPdxCoarse 488
+                              Store 466(f32v) 489
+             490:  153(fvec3) Load 468(if32v)
+             491:  153(fvec3) DPdxCoarse 490
+                              Store 466(f32v) 491
+             492:    469(ptr) AccessChain 468(if32v) 32
+             493:   26(float) Load 492
+             494:   26(float) Fwidth 493
+             495:     33(ptr) AccessChain 466(f32v) 32
+                              Store 495 494
+             496:  153(fvec3) Load 468(if32v)
+             497:   27(fvec2) VectorShuffle 496 496 0 1
+             498:   27(fvec2) FwidthFine 497
+             499:  153(fvec3) Load 466(f32v)
+             500:  153(fvec3) VectorShuffle 499 498 3 4 2
+                              Store 466(f32v) 500
+             501:  153(fvec3) Load 468(if32v)
+             502:  153(fvec3) FwidthCoarse 501
+                              Store 466(f32v) 502
+             503:    469(ptr) AccessChain 468(if32v) 32
+             504:   26(float) ExtInst 1(GLSL.std.450) 76(InterpolateAtCentroid) 503
+             505:     33(ptr) AccessChain 466(f32v) 32
+                              Store 505 504
+             507:  153(fvec3) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 468(if32v) 506
+             508:   27(fvec2) VectorShuffle 507 507 0 1
+             509:  153(fvec3) Load 466(f32v)
+             510:  153(fvec3) VectorShuffle 509 508 3 4 2
+                              Store 466(f32v) 510
+             513:  153(fvec3) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 468(if32v) 512
+                              Store 466(f32v) 513
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.float64.frag.out b/Test/baseResults/spv.float64.frag.out
new file mode 100644
index 0000000..ea06734
--- /dev/null
+++ b/Test/baseResults/spv.float64.frag.out
@@ -0,0 +1,788 @@
+spv.float64.frag
+// Module Version 10300
+// Generated by (magic number): 80006
+// Id's are bound by 521
+
+                              Capability Shader
+                              Capability Float16
+                              Capability Float64
+                              Capability Int64
+                              Capability Int16
+                              Capability Int8
+                              Capability DerivativeControl
+                              Capability InterpolationFunction
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 458
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_float16"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_float32"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_float64"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_int16"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_int32"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_int64"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_int8"
+                              Name 4  "main"
+                              Name 6  "literal("
+                              Name 8  "operators("
+                              Name 10  "typeCast("
+                              Name 12  "builtinAngleTrigFuncs("
+                              Name 14  "builtinExpFuncs("
+                              Name 16  "builtinCommonFuncs("
+                              Name 18  "builtinGeometryFuncs("
+                              Name 20  "builtinMatrixFuncs("
+                              Name 22  "builtinVecRelFuncs("
+                              Name 24  "builtinFragProcFuncs("
+                              Name 29  "f64v"
+                              Name 40  "f64v"
+                              Name 62  "f64m"
+                              Name 85  "f64"
+                              Name 109  "b"
+                              Name 151  "f64v"
+                              Name 154  "bv"
+                              Name 165  "f16v"
+                              Name 173  "i8v"
+                              Name 179  "i16v"
+                              Name 185  "i32v"
+                              Name 191  "i64v"
+                              Name 194  "u8v"
+                              Name 200  "u16v"
+                              Name 205  "u32v"
+                              Name 211  "u64v"
+                              Name 216  "f64v2"
+                              Name 217  "f64v1"
+                              Name 249  "f64v2"
+                              Name 250  "f64v1"
+                              Name 266  "f64v2"
+                              Name 267  "f64v1"
+                              Name 288  "f64"
+                              Name 292  "f64v3"
+                              Name 332  "bv"
+                              Name 353  "b"
+                              Name 363  "iv"
+                              Name 364  "ResType"
+                              Name 371  "f64"
+                              Name 372  "f64v1"
+                              Name 376  "f64v2"
+                              Name 382  "f64v3"
+                              Name 401  "f64m3"
+                              Name 402  "f64m1"
+                              Name 404  "f64m2"
+                              Name 413  "f64v1"
+                              Name 415  "f64v2"
+                              Name 420  "f64m4"
+                              Name 423  "f64"
+                              Name 426  "f64m5"
+                              Name 431  "f64m6"
+                              Name 432  "f64m7"
+                              Name 435  "bv"
+                              Name 436  "f64v1"
+                              Name 438  "f64v2"
+                              Name 456  "f64v"
+                              Name 458  "if64v"
+                              Name 507  "S"
+                              MemberName 507(S) 0  "x"
+                              MemberName 507(S) 1  "y"
+                              MemberName 507(S) 2  "z"
+                              Name 509  "B1"
+                              MemberName 509(B1) 0  "a"
+                              MemberName 509(B1) 1  "b"
+                              MemberName 509(B1) 2  "c"
+                              MemberName 509(B1) 3  "d"
+                              MemberName 509(B1) 4  "e"
+                              MemberName 509(B1) 5  "f"
+                              MemberName 509(B1) 6  "g"
+                              MemberName 509(B1) 7  "h"
+                              Name 511  ""
+                              Name 512  "sf16"
+                              Name 514  "sf"
+                              Name 515  "sd"
+                              Decorate 458(if64v) Flat
+                              Decorate 505 ArrayStride 16
+                              Decorate 506 ArrayStride 64
+                              MemberDecorate 507(S) 0 Offset 0
+                              MemberDecorate 507(S) 1 Offset 16
+                              MemberDecorate 507(S) 2 Offset 32
+                              Decorate 508 ArrayStride 64
+                              MemberDecorate 509(B1) 0 Offset 0
+                              MemberDecorate 509(B1) 1 Offset 16
+                              MemberDecorate 509(B1) 2 Offset 32
+                              MemberDecorate 509(B1) 3 Offset 64
+                              MemberDecorate 509(B1) 4 ColMajor
+                              MemberDecorate 509(B1) 4 Offset 96
+                              MemberDecorate 509(B1) 4 MatrixStride 32
+                              MemberDecorate 509(B1) 5 ColMajor
+                              MemberDecorate 509(B1) 5 Offset 160
+                              MemberDecorate 509(B1) 5 MatrixStride 32
+                              MemberDecorate 509(B1) 6 Offset 288
+                              MemberDecorate 509(B1) 7 Offset 352
+                              Decorate 509(B1) Block
+                              Decorate 511 DescriptorSet 0
+                              Decorate 512(sf16) SpecId 100
+                              Decorate 514(sf) SpecId 101
+                              Decorate 515(sd) SpecId 102
+               2:             TypeVoid
+               3:             TypeFunction 2
+              26:             TypeFloat 64
+              27:             TypeVector 26(float) 2
+              28:             TypePointer Function 27(fvec2)
+              30:   26(float) Constant 2696277389 1051772663
+              31:             TypeInt 32 0
+              32:     31(int) Constant 0
+              33:             TypePointer Function 26(float)
+              35:   26(float) Constant 0 3218079744
+              36:   26(float) Constant 3951369912 1067366481
+              37:   27(fvec2) ConstantComposite 35 36
+              54:   26(float) Constant 0 1072693248
+              60:             TypeMatrix 27(fvec2) 2
+              61:             TypePointer Function 60
+              88:     31(int) Constant 1
+             107:             TypeBool
+             108:             TypePointer Function 107(bool)
+             149:             TypeVector 26(float) 3
+             150:             TypePointer Function 149(fvec3)
+             152:             TypeVector 107(bool) 3
+             153:             TypePointer Function 152(bvec3)
+             156:   26(float) Constant 0 0
+             157:  149(fvec3) ConstantComposite 156 156 156
+             158:  149(fvec3) ConstantComposite 54 54 54
+             162:             TypeFloat 16
+             163:             TypeVector 162(float) 3
+             164:             TypePointer Function 163(fvec3)
+             170:             TypeInt 8 1
+             171:             TypeVector 170(int) 3
+             172:             TypePointer Function 171(ivec3)
+             176:             TypeInt 16 1
+             177:             TypeVector 176(int) 3
+             178:             TypePointer Function 177(ivec3)
+             182:             TypeInt 32 1
+             183:             TypeVector 182(int) 3
+             184:             TypePointer Function 183(ivec3)
+             188:             TypeInt 64 1
+             189:             TypeVector 188(int) 3
+             190:             TypePointer Function 189(ivec3)
+             197:             TypeInt 16 0
+             198:             TypeVector 197(int) 3
+             199:             TypePointer Function 198(ivec3)
+             203:             TypeVector 31(int) 3
+             204:             TypePointer Function 203(ivec3)
+             208:             TypeInt 64 0
+             209:             TypeVector 208(int) 3
+             210:             TypePointer Function 209(ivec3)
+             214:             TypeVector 26(float) 4
+             215:             TypePointer Function 214(fvec4)
+    364(ResType):             TypeStruct 149(fvec3) 183(ivec3)
+             399:             TypeMatrix 149(fvec3) 2
+             400:             TypePointer Function 399
+             418:             TypeMatrix 27(fvec2) 3
+             419:             TypePointer Function 418
+             424:             TypeMatrix 149(fvec3) 3
+             425:             TypePointer Function 424
+             429:             TypeMatrix 214(fvec4) 4
+             430:             TypePointer Function 429
+             457:             TypePointer Input 149(fvec3)
+      458(if64v):    457(ptr) Variable Input
+             459:             TypePointer Input 26(float)
+             496:    182(int) Constant 1
+             501:   26(float) Constant 0 1071644672
+             502:   27(fvec2) ConstantComposite 501 501
+             504:     31(int) Constant 2
+             505:             TypeArray 26(float) 504
+             506:             TypeArray 399 504
+          507(S):             TypeStruct 26(float) 27(fvec2) 149(fvec3)
+             508:             TypeArray 507(S) 504
+         509(B1):             TypeStruct 26(float) 27(fvec2) 149(fvec3) 505 399 506 507(S) 508
+             510:             TypePointer Uniform 509(B1)
+             511:    510(ptr) Variable Uniform
+       512(sf16):  162(float) SpecConstant 12288
+             513:             TypeFloat 32
+         514(sf):  513(float) SpecConstant 1048576000
+         515(sd):   26(float) SpecConstant 0 1071644672
+             516:  513(float) SpecConstantOp 115 512(sf16)
+             517:  513(float) SpecConstantOp 115 512(sf16)
+             518:   26(float) SpecConstantOp 115 517
+             519:  162(float) SpecConstantOp 115 514(sf)
+             520:  162(float) SpecConstantOp 115 515(sd)
+         4(main):           2 Function None 3
+               5:             Label
+                              Return
+                              FunctionEnd
+     6(literal():           2 Function None 3
+               7:             Label
+        29(f64v):     28(ptr) Variable Function
+              34:     33(ptr) AccessChain 29(f64v) 32
+                              Store 34 30
+              38:   27(fvec2) Load 29(f64v)
+              39:   27(fvec2) FAdd 38 37
+                              Store 29(f64v) 39
+                              Return
+                              FunctionEnd
+   8(operators():           2 Function None 3
+               9:             Label
+        40(f64v):     28(ptr) Variable Function
+        62(f64m):     61(ptr) Variable Function
+         85(f64):     33(ptr) Variable Function
+          109(b):    108(ptr) Variable Function
+              41:   27(fvec2) Load 40(f64v)
+              42:   27(fvec2) Load 40(f64v)
+              43:   27(fvec2) FAdd 42 41
+                              Store 40(f64v) 43
+              44:   27(fvec2) Load 40(f64v)
+              45:   27(fvec2) Load 40(f64v)
+              46:   27(fvec2) FSub 45 44
+                              Store 40(f64v) 46
+              47:   27(fvec2) Load 40(f64v)
+              48:   27(fvec2) Load 40(f64v)
+              49:   27(fvec2) FMul 48 47
+                              Store 40(f64v) 49
+              50:   27(fvec2) Load 40(f64v)
+              51:   27(fvec2) Load 40(f64v)
+              52:   27(fvec2) FDiv 51 50
+                              Store 40(f64v) 52
+              53:   27(fvec2) Load 40(f64v)
+              55:   27(fvec2) CompositeConstruct 54 54
+              56:   27(fvec2) FAdd 53 55
+                              Store 40(f64v) 56
+              57:   27(fvec2) Load 40(f64v)
+              58:   27(fvec2) CompositeConstruct 54 54
+              59:   27(fvec2) FSub 57 58
+                              Store 40(f64v) 59
+              63:          60 Load 62(f64m)
+              64:   27(fvec2) CompositeConstruct 54 54
+              65:   27(fvec2) CompositeExtract 63 0
+              66:   27(fvec2) FAdd 65 64
+              67:   27(fvec2) CompositeExtract 63 1
+              68:   27(fvec2) FAdd 67 64
+              69:          60 CompositeConstruct 66 68
+                              Store 62(f64m) 69
+              70:          60 Load 62(f64m)
+              71:   27(fvec2) CompositeConstruct 54 54
+              72:   27(fvec2) CompositeExtract 70 0
+              73:   27(fvec2) FSub 72 71
+              74:   27(fvec2) CompositeExtract 70 1
+              75:   27(fvec2) FSub 74 71
+              76:          60 CompositeConstruct 73 75
+                              Store 62(f64m) 76
+              77:   27(fvec2) Load 40(f64v)
+              78:   27(fvec2) FNegate 77
+                              Store 40(f64v) 78
+              79:          60 Load 62(f64m)
+              80:   27(fvec2) CompositeExtract 79 0
+              81:   27(fvec2) FNegate 80
+              82:   27(fvec2) CompositeExtract 79 1
+              83:   27(fvec2) FNegate 82
+              84:          60 CompositeConstruct 81 83
+                              Store 62(f64m) 84
+              86:     33(ptr) AccessChain 40(f64v) 32
+              87:   26(float) Load 86
+              89:     33(ptr) AccessChain 40(f64v) 88
+              90:   26(float) Load 89
+              91:   26(float) FAdd 87 90
+                              Store 85(f64) 91
+              92:     33(ptr) AccessChain 40(f64v) 32
+              93:   26(float) Load 92
+              94:     33(ptr) AccessChain 40(f64v) 88
+              95:   26(float) Load 94
+              96:   26(float) FSub 93 95
+                              Store 85(f64) 96
+              97:     33(ptr) AccessChain 40(f64v) 32
+              98:   26(float) Load 97
+              99:     33(ptr) AccessChain 40(f64v) 88
+             100:   26(float) Load 99
+             101:   26(float) FMul 98 100
+                              Store 85(f64) 101
+             102:     33(ptr) AccessChain 40(f64v) 32
+             103:   26(float) Load 102
+             104:     33(ptr) AccessChain 40(f64v) 88
+             105:   26(float) Load 104
+             106:   26(float) FDiv 103 105
+                              Store 85(f64) 106
+             110:     33(ptr) AccessChain 40(f64v) 32
+             111:   26(float) Load 110
+             112:   26(float) Load 85(f64)
+             113:   107(bool) FOrdNotEqual 111 112
+                              Store 109(b) 113
+             114:     33(ptr) AccessChain 40(f64v) 88
+             115:   26(float) Load 114
+             116:   26(float) Load 85(f64)
+             117:   107(bool) FOrdEqual 115 116
+                              Store 109(b) 117
+             118:     33(ptr) AccessChain 40(f64v) 32
+             119:   26(float) Load 118
+             120:   26(float) Load 85(f64)
+             121:   107(bool) FOrdGreaterThan 119 120
+                              Store 109(b) 121
+             122:     33(ptr) AccessChain 40(f64v) 88
+             123:   26(float) Load 122
+             124:   26(float) Load 85(f64)
+             125:   107(bool) FOrdLessThan 123 124
+                              Store 109(b) 125
+             126:     33(ptr) AccessChain 40(f64v) 32
+             127:   26(float) Load 126
+             128:   26(float) Load 85(f64)
+             129:   107(bool) FOrdGreaterThanEqual 127 128
+                              Store 109(b) 129
+             130:     33(ptr) AccessChain 40(f64v) 88
+             131:   26(float) Load 130
+             132:   26(float) Load 85(f64)
+             133:   107(bool) FOrdLessThanEqual 131 132
+                              Store 109(b) 133
+             134:   27(fvec2) Load 40(f64v)
+             135:   26(float) Load 85(f64)
+             136:   27(fvec2) VectorTimesScalar 134 135
+                              Store 40(f64v) 136
+             137:          60 Load 62(f64m)
+             138:   26(float) Load 85(f64)
+             139:          60 MatrixTimesScalar 137 138
+                              Store 62(f64m) 139
+             140:          60 Load 62(f64m)
+             141:   27(fvec2) Load 40(f64v)
+             142:   27(fvec2) MatrixTimesVector 140 141
+                              Store 40(f64v) 142
+             143:   27(fvec2) Load 40(f64v)
+             144:          60 Load 62(f64m)
+             145:   27(fvec2) VectorTimesMatrix 143 144
+                              Store 40(f64v) 145
+             146:          60 Load 62(f64m)
+             147:          60 Load 62(f64m)
+             148:          60 MatrixTimesMatrix 146 147
+                              Store 62(f64m) 148
+                              Return
+                              FunctionEnd
+   10(typeCast():           2 Function None 3
+              11:             Label
+       151(f64v):    150(ptr) Variable Function
+         154(bv):    153(ptr) Variable Function
+       165(f16v):    164(ptr) Variable Function
+        173(i8v):    172(ptr) Variable Function
+       179(i16v):    178(ptr) Variable Function
+       185(i32v):    184(ptr) Variable Function
+       191(i64v):    190(ptr) Variable Function
+        194(u8v):    172(ptr) Variable Function
+       200(u16v):    199(ptr) Variable Function
+       205(u32v):    204(ptr) Variable Function
+       211(u64v):    210(ptr) Variable Function
+             155:  152(bvec3) Load 154(bv)
+             159:  149(fvec3) Select 155 158 157
+                              Store 151(f64v) 159
+             160:  149(fvec3) Load 151(f64v)
+             161:  152(bvec3) FOrdNotEqual 160 157
+                              Store 154(bv) 161
+             166:  163(fvec3) Load 165(f16v)
+             167:  149(fvec3) FConvert 166
+                              Store 151(f64v) 167
+             168:  149(fvec3) Load 151(f64v)
+             169:  163(fvec3) FConvert 168
+                              Store 165(f16v) 169
+             174:  149(fvec3) Load 151(f64v)
+             175:  171(ivec3) ConvertFToS 174
+                              Store 173(i8v) 175
+             180:  149(fvec3) Load 151(f64v)
+             181:  177(ivec3) ConvertFToS 180
+                              Store 179(i16v) 181
+             186:  149(fvec3) Load 151(f64v)
+             187:  183(ivec3) ConvertFToS 186
+                              Store 185(i32v) 187
+             192:  149(fvec3) Load 151(f64v)
+             193:  189(ivec3) ConvertFToS 192
+                              Store 191(i64v) 193
+             195:  149(fvec3) Load 151(f64v)
+             196:  171(ivec3) ConvertFToS 195
+                              Store 194(u8v) 196
+             201:  149(fvec3) Load 151(f64v)
+             202:  198(ivec3) ConvertFToU 201
+                              Store 200(u16v) 202
+             206:  149(fvec3) Load 151(f64v)
+             207:  203(ivec3) ConvertFToU 206
+                              Store 205(u32v) 207
+             212:  149(fvec3) Load 151(f64v)
+             213:  209(ivec3) ConvertFToU 212
+                              Store 211(u64v) 213
+                              Return
+                              FunctionEnd
+12(builtinAngleTrigFuncs():           2 Function None 3
+              13:             Label
+      216(f64v2):    215(ptr) Variable Function
+      217(f64v1):    215(ptr) Variable Function
+             218:  214(fvec4) Load 217(f64v1)
+             219:  214(fvec4) ExtInst 1(GLSL.std.450) 11(Radians) 218
+                              Store 216(f64v2) 219
+             220:  214(fvec4) Load 217(f64v1)
+             221:  214(fvec4) ExtInst 1(GLSL.std.450) 12(Degrees) 220
+                              Store 216(f64v2) 221
+             222:  214(fvec4) Load 217(f64v1)
+             223:  214(fvec4) ExtInst 1(GLSL.std.450) 13(Sin) 222
+                              Store 216(f64v2) 223
+             224:  214(fvec4) Load 217(f64v1)
+             225:  214(fvec4) ExtInst 1(GLSL.std.450) 14(Cos) 224
+                              Store 216(f64v2) 225
+             226:  214(fvec4) Load 217(f64v1)
+             227:  214(fvec4) ExtInst 1(GLSL.std.450) 15(Tan) 226
+                              Store 216(f64v2) 227
+             228:  214(fvec4) Load 217(f64v1)
+             229:  214(fvec4) ExtInst 1(GLSL.std.450) 16(Asin) 228
+                              Store 216(f64v2) 229
+             230:  214(fvec4) Load 217(f64v1)
+             231:  214(fvec4) ExtInst 1(GLSL.std.450) 17(Acos) 230
+                              Store 216(f64v2) 231
+             232:  214(fvec4) Load 217(f64v1)
+             233:  214(fvec4) Load 216(f64v2)
+             234:  214(fvec4) ExtInst 1(GLSL.std.450) 25(Atan2) 232 233
+                              Store 216(f64v2) 234
+             235:  214(fvec4) Load 217(f64v1)
+             236:  214(fvec4) ExtInst 1(GLSL.std.450) 18(Atan) 235
+                              Store 216(f64v2) 236
+             237:  214(fvec4) Load 217(f64v1)
+             238:  214(fvec4) ExtInst 1(GLSL.std.450) 19(Sinh) 237
+                              Store 216(f64v2) 238
+             239:  214(fvec4) Load 217(f64v1)
+             240:  214(fvec4) ExtInst 1(GLSL.std.450) 20(Cosh) 239
+                              Store 216(f64v2) 240
+             241:  214(fvec4) Load 217(f64v1)
+             242:  214(fvec4) ExtInst 1(GLSL.std.450) 21(Tanh) 241
+                              Store 216(f64v2) 242
+             243:  214(fvec4) Load 217(f64v1)
+             244:  214(fvec4) ExtInst 1(GLSL.std.450) 22(Asinh) 243
+                              Store 216(f64v2) 244
+             245:  214(fvec4) Load 217(f64v1)
+             246:  214(fvec4) ExtInst 1(GLSL.std.450) 23(Acosh) 245
+                              Store 216(f64v2) 246
+             247:  214(fvec4) Load 217(f64v1)
+             248:  214(fvec4) ExtInst 1(GLSL.std.450) 24(Atanh) 247
+                              Store 216(f64v2) 248
+                              Return
+                              FunctionEnd
+14(builtinExpFuncs():           2 Function None 3
+              15:             Label
+      249(f64v2):     28(ptr) Variable Function
+      250(f64v1):     28(ptr) Variable Function
+             251:   27(fvec2) Load 250(f64v1)
+             252:   27(fvec2) Load 249(f64v2)
+             253:   27(fvec2) ExtInst 1(GLSL.std.450) 26(Pow) 251 252
+                              Store 249(f64v2) 253
+             254:   27(fvec2) Load 250(f64v1)
+             255:   27(fvec2) ExtInst 1(GLSL.std.450) 27(Exp) 254
+                              Store 249(f64v2) 255
+             256:   27(fvec2) Load 250(f64v1)
+             257:   27(fvec2) ExtInst 1(GLSL.std.450) 28(Log) 256
+                              Store 249(f64v2) 257
+             258:   27(fvec2) Load 250(f64v1)
+             259:   27(fvec2) ExtInst 1(GLSL.std.450) 29(Exp2) 258
+                              Store 249(f64v2) 259
+             260:   27(fvec2) Load 250(f64v1)
+             261:   27(fvec2) ExtInst 1(GLSL.std.450) 30(Log2) 260
+                              Store 249(f64v2) 261
+             262:   27(fvec2) Load 250(f64v1)
+             263:   27(fvec2) ExtInst 1(GLSL.std.450) 31(Sqrt) 262
+                              Store 249(f64v2) 263
+             264:   27(fvec2) Load 250(f64v1)
+             265:   27(fvec2) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 264
+                              Store 249(f64v2) 265
+                              Return
+                              FunctionEnd
+16(builtinCommonFuncs():           2 Function None 3
+              17:             Label
+      266(f64v2):    150(ptr) Variable Function
+      267(f64v1):    150(ptr) Variable Function
+        288(f64):     33(ptr) Variable Function
+      292(f64v3):    150(ptr) Variable Function
+         332(bv):    153(ptr) Variable Function
+          353(b):    108(ptr) Variable Function
+         363(iv):    184(ptr) Variable Function
+             268:  149(fvec3) Load 267(f64v1)
+             269:  149(fvec3) ExtInst 1(GLSL.std.450) 4(FAbs) 268
+                              Store 266(f64v2) 269
+             270:  149(fvec3) Load 267(f64v1)
+             271:  149(fvec3) ExtInst 1(GLSL.std.450) 6(FSign) 270
+                              Store 266(f64v2) 271
+             272:  149(fvec3) Load 267(f64v1)
+             273:  149(fvec3) ExtInst 1(GLSL.std.450) 8(Floor) 272
+                              Store 266(f64v2) 273
+             274:  149(fvec3) Load 267(f64v1)
+             275:  149(fvec3) ExtInst 1(GLSL.std.450) 3(Trunc) 274
+                              Store 266(f64v2) 275
+             276:  149(fvec3) Load 267(f64v1)
+             277:  149(fvec3) ExtInst 1(GLSL.std.450) 1(Round) 276
+                              Store 266(f64v2) 277
+             278:  149(fvec3) Load 267(f64v1)
+             279:  149(fvec3) ExtInst 1(GLSL.std.450) 2(RoundEven) 278
+                              Store 266(f64v2) 279
+             280:  149(fvec3) Load 267(f64v1)
+             281:  149(fvec3) ExtInst 1(GLSL.std.450) 9(Ceil) 280
+                              Store 266(f64v2) 281
+             282:  149(fvec3) Load 267(f64v1)
+             283:  149(fvec3) ExtInst 1(GLSL.std.450) 10(Fract) 282
+                              Store 266(f64v2) 283
+             284:  149(fvec3) Load 267(f64v1)
+             285:  149(fvec3) Load 266(f64v2)
+             286:  149(fvec3) FMod 284 285
+                              Store 266(f64v2) 286
+             287:  149(fvec3) Load 267(f64v1)
+             289:   26(float) Load 288(f64)
+             290:  149(fvec3) CompositeConstruct 289 289 289
+             291:  149(fvec3) FMod 287 290
+                              Store 266(f64v2) 291
+             293:  149(fvec3) Load 267(f64v1)
+             294:  149(fvec3) ExtInst 1(GLSL.std.450) 35(Modf) 293 266(f64v2)
+                              Store 292(f64v3) 294
+             295:  149(fvec3) Load 267(f64v1)
+             296:  149(fvec3) Load 266(f64v2)
+             297:  149(fvec3) ExtInst 1(GLSL.std.450) 37(FMin) 295 296
+                              Store 292(f64v3) 297
+             298:  149(fvec3) Load 267(f64v1)
+             299:   26(float) Load 288(f64)
+             300:  149(fvec3) CompositeConstruct 299 299 299
+             301:  149(fvec3) ExtInst 1(GLSL.std.450) 37(FMin) 298 300
+                              Store 292(f64v3) 301
+             302:  149(fvec3) Load 267(f64v1)
+             303:  149(fvec3) Load 266(f64v2)
+             304:  149(fvec3) ExtInst 1(GLSL.std.450) 40(FMax) 302 303
+                              Store 292(f64v3) 304
+             305:  149(fvec3) Load 267(f64v1)
+             306:   26(float) Load 288(f64)
+             307:  149(fvec3) CompositeConstruct 306 306 306
+             308:  149(fvec3) ExtInst 1(GLSL.std.450) 40(FMax) 305 307
+                              Store 292(f64v3) 308
+             309:  149(fvec3) Load 267(f64v1)
+             310:   26(float) Load 288(f64)
+             311:     33(ptr) AccessChain 266(f64v2) 32
+             312:   26(float) Load 311
+             313:  149(fvec3) CompositeConstruct 310 310 310
+             314:  149(fvec3) CompositeConstruct 312 312 312
+             315:  149(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 309 313 314
+                              Store 292(f64v3) 315
+             316:  149(fvec3) Load 267(f64v1)
+             317:  149(fvec3) Load 266(f64v2)
+             318:   26(float) Load 288(f64)
+             319:  149(fvec3) CompositeConstruct 318 318 318
+             320:  149(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 316 317 319
+                              Store 292(f64v3) 320
+             321:  149(fvec3) Load 267(f64v1)
+             322:  149(fvec3) Load 266(f64v2)
+             323:   26(float) Load 288(f64)
+             324:  149(fvec3) CompositeConstruct 323 323 323
+             325:  149(fvec3) ExtInst 1(GLSL.std.450) 46(FMix) 321 322 324
+                              Store 292(f64v3) 325
+             326:  149(fvec3) Load 267(f64v1)
+             327:  149(fvec3) Load 266(f64v2)
+             328:  149(fvec3) Load 292(f64v3)
+             329:  149(fvec3) ExtInst 1(GLSL.std.450) 46(FMix) 326 327 328
+                              Store 292(f64v3) 329
+             330:  149(fvec3) Load 267(f64v1)
+             331:  149(fvec3) Load 266(f64v2)
+             333:  152(bvec3) Load 332(bv)
+             334:  149(fvec3) Select 333 331 330
+                              Store 292(f64v3) 334
+             335:  149(fvec3) Load 267(f64v1)
+             336:  149(fvec3) Load 266(f64v2)
+             337:  149(fvec3) ExtInst 1(GLSL.std.450) 48(Step) 335 336
+                              Store 292(f64v3) 337
+             338:   26(float) Load 288(f64)
+             339:  149(fvec3) Load 292(f64v3)
+             340:  149(fvec3) CompositeConstruct 338 338 338
+             341:  149(fvec3) ExtInst 1(GLSL.std.450) 48(Step) 340 339
+                              Store 292(f64v3) 341
+             342:  149(fvec3) Load 267(f64v1)
+             343:  149(fvec3) Load 266(f64v2)
+             344:  149(fvec3) Load 292(f64v3)
+             345:  149(fvec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 342 343 344
+                              Store 292(f64v3) 345
+             346:   26(float) Load 288(f64)
+             347:     33(ptr) AccessChain 267(f64v1) 32
+             348:   26(float) Load 347
+             349:  149(fvec3) Load 266(f64v2)
+             350:  149(fvec3) CompositeConstruct 346 346 346
+             351:  149(fvec3) CompositeConstruct 348 348 348
+             352:  149(fvec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 350 351 349
+                              Store 292(f64v3) 352
+             354:   26(float) Load 288(f64)
+             355:   107(bool) IsNan 354
+                              Store 353(b) 355
+             356:  149(fvec3) Load 267(f64v1)
+             357:  152(bvec3) IsInf 356
+                              Store 332(bv) 357
+             358:  149(fvec3) Load 267(f64v1)
+             359:  149(fvec3) Load 266(f64v2)
+             360:  149(fvec3) Load 292(f64v3)
+             361:  149(fvec3) ExtInst 1(GLSL.std.450) 50(Fma) 358 359 360
+                              Store 292(f64v3) 361
+             362:  149(fvec3) Load 267(f64v1)
+             365:364(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 362
+             366:  183(ivec3) CompositeExtract 365 1
+                              Store 363(iv) 366
+             367:  149(fvec3) CompositeExtract 365 0
+                              Store 266(f64v2) 367
+             368:  149(fvec3) Load 267(f64v1)
+             369:  183(ivec3) Load 363(iv)
+             370:  149(fvec3) ExtInst 1(GLSL.std.450) 53(Ldexp) 368 369
+                              Store 266(f64v2) 370
+                              Return
+                              FunctionEnd
+18(builtinGeometryFuncs():           2 Function None 3
+              19:             Label
+        371(f64):     33(ptr) Variable Function
+      372(f64v1):    150(ptr) Variable Function
+      376(f64v2):    150(ptr) Variable Function
+      382(f64v3):    150(ptr) Variable Function
+             373:  149(fvec3) Load 372(f64v1)
+             374:   26(float) ExtInst 1(GLSL.std.450) 66(Length) 373
+                              Store 371(f64) 374
+             375:  149(fvec3) Load 372(f64v1)
+             377:  149(fvec3) Load 376(f64v2)
+             378:   26(float) ExtInst 1(GLSL.std.450) 67(Distance) 375 377
+                              Store 371(f64) 378
+             379:  149(fvec3) Load 372(f64v1)
+             380:  149(fvec3) Load 376(f64v2)
+             381:   26(float) Dot 379 380
+                              Store 371(f64) 381
+             383:  149(fvec3) Load 372(f64v1)
+             384:  149(fvec3) Load 376(f64v2)
+             385:  149(fvec3) ExtInst 1(GLSL.std.450) 68(Cross) 383 384
+                              Store 382(f64v3) 385
+             386:  149(fvec3) Load 372(f64v1)
+             387:  149(fvec3) ExtInst 1(GLSL.std.450) 69(Normalize) 386
+                              Store 376(f64v2) 387
+             388:  149(fvec3) Load 372(f64v1)
+             389:  149(fvec3) Load 376(f64v2)
+             390:  149(fvec3) Load 382(f64v3)
+             391:  149(fvec3) ExtInst 1(GLSL.std.450) 70(FaceForward) 388 389 390
+                              Store 382(f64v3) 391
+             392:  149(fvec3) Load 372(f64v1)
+             393:  149(fvec3) Load 376(f64v2)
+             394:  149(fvec3) ExtInst 1(GLSL.std.450) 71(Reflect) 392 393
+                              Store 382(f64v3) 394
+             395:  149(fvec3) Load 372(f64v1)
+             396:  149(fvec3) Load 376(f64v2)
+             397:   26(float) Load 371(f64)
+             398:  149(fvec3) ExtInst 1(GLSL.std.450) 72(Refract) 395 396 397
+                              Store 382(f64v3) 398
+                              Return
+                              FunctionEnd
+20(builtinMatrixFuncs():           2 Function None 3
+              21:             Label
+      401(f64m3):    400(ptr) Variable Function
+      402(f64m1):    400(ptr) Variable Function
+      404(f64m2):    400(ptr) Variable Function
+      413(f64v1):    150(ptr) Variable Function
+      415(f64v2):     28(ptr) Variable Function
+      420(f64m4):    419(ptr) Variable Function
+        423(f64):     33(ptr) Variable Function
+      426(f64m5):    425(ptr) Variable Function
+      431(f64m6):    430(ptr) Variable Function
+      432(f64m7):    430(ptr) Variable Function
+             403:         399 Load 402(f64m1)
+             405:         399 Load 404(f64m2)
+             406:  149(fvec3) CompositeExtract 403 0
+             407:  149(fvec3) CompositeExtract 405 0
+             408:  149(fvec3) FMul 406 407
+             409:  149(fvec3) CompositeExtract 403 1
+             410:  149(fvec3) CompositeExtract 405 1
+             411:  149(fvec3) FMul 409 410
+             412:         399 CompositeConstruct 408 411
+                              Store 401(f64m3) 412
+             414:  149(fvec3) Load 413(f64v1)
+             416:   27(fvec2) Load 415(f64v2)
+             417:         399 OuterProduct 414 416
+                              Store 402(f64m1) 417
+             421:         399 Load 402(f64m1)
+             422:         418 Transpose 421
+                              Store 420(f64m4) 422
+             427:         424 Load 426(f64m5)
+             428:   26(float) ExtInst 1(GLSL.std.450) 33(Determinant) 427
+                              Store 423(f64) 428
+             433:         429 Load 432(f64m7)
+             434:         429 ExtInst 1(GLSL.std.450) 34(MatrixInverse) 433
+                              Store 431(f64m6) 434
+                              Return
+                              FunctionEnd
+22(builtinVecRelFuncs():           2 Function None 3
+              23:             Label
+         435(bv):    153(ptr) Variable Function
+      436(f64v1):    150(ptr) Variable Function
+      438(f64v2):    150(ptr) Variable Function
+             437:  149(fvec3) Load 436(f64v1)
+             439:  149(fvec3) Load 438(f64v2)
+             440:  152(bvec3) FOrdLessThan 437 439
+                              Store 435(bv) 440
+             441:  149(fvec3) Load 436(f64v1)
+             442:  149(fvec3) Load 438(f64v2)
+             443:  152(bvec3) FOrdLessThanEqual 441 442
+                              Store 435(bv) 443
+             444:  149(fvec3) Load 436(f64v1)
+             445:  149(fvec3) Load 438(f64v2)
+             446:  152(bvec3) FOrdGreaterThan 444 445
+                              Store 435(bv) 446
+             447:  149(fvec3) Load 436(f64v1)
+             448:  149(fvec3) Load 438(f64v2)
+             449:  152(bvec3) FOrdGreaterThanEqual 447 448
+                              Store 435(bv) 449
+             450:  149(fvec3) Load 436(f64v1)
+             451:  149(fvec3) Load 438(f64v2)
+             452:  152(bvec3) FOrdEqual 450 451
+                              Store 435(bv) 452
+             453:  149(fvec3) Load 436(f64v1)
+             454:  149(fvec3) Load 438(f64v2)
+             455:  152(bvec3) FOrdNotEqual 453 454
+                              Store 435(bv) 455
+                              Return
+                              FunctionEnd
+24(builtinFragProcFuncs():           2 Function None 3
+              25:             Label
+       456(f64v):    150(ptr) Variable Function
+             460:    459(ptr) AccessChain 458(if64v) 32
+             461:   26(float) Load 460
+             462:   26(float) DPdx 461
+             463:     33(ptr) AccessChain 456(f64v) 32
+                              Store 463 462
+             464:    459(ptr) AccessChain 458(if64v) 88
+             465:   26(float) Load 464
+             466:   26(float) DPdy 465
+             467:     33(ptr) AccessChain 456(f64v) 88
+                              Store 467 466
+             468:  149(fvec3) Load 458(if64v)
+             469:   27(fvec2) VectorShuffle 468 468 0 1
+             470:   27(fvec2) DPdxFine 469
+             471:  149(fvec3) Load 456(f64v)
+             472:  149(fvec3) VectorShuffle 471 470 3 4 2
+                              Store 456(f64v) 472
+             473:  149(fvec3) Load 458(if64v)
+             474:   27(fvec2) VectorShuffle 473 473 0 1
+             475:   27(fvec2) DPdyFine 474
+             476:  149(fvec3) Load 456(f64v)
+             477:  149(fvec3) VectorShuffle 476 475 3 4 2
+                              Store 456(f64v) 477
+             478:  149(fvec3) Load 458(if64v)
+             479:  149(fvec3) DPdxCoarse 478
+                              Store 456(f64v) 479
+             480:  149(fvec3) Load 458(if64v)
+             481:  149(fvec3) DPdxCoarse 480
+                              Store 456(f64v) 481
+             482:    459(ptr) AccessChain 458(if64v) 32
+             483:   26(float) Load 482
+             484:   26(float) Fwidth 483
+             485:     33(ptr) AccessChain 456(f64v) 32
+                              Store 485 484
+             486:  149(fvec3) Load 458(if64v)
+             487:   27(fvec2) VectorShuffle 486 486 0 1
+             488:   27(fvec2) FwidthFine 487
+             489:  149(fvec3) Load 456(f64v)
+             490:  149(fvec3) VectorShuffle 489 488 3 4 2
+                              Store 456(f64v) 490
+             491:  149(fvec3) Load 458(if64v)
+             492:  149(fvec3) FwidthCoarse 491
+                              Store 456(f64v) 492
+             493:    459(ptr) AccessChain 458(if64v) 32
+             494:   26(float) ExtInst 1(GLSL.std.450) 76(InterpolateAtCentroid) 493
+             495:     33(ptr) AccessChain 456(f64v) 32
+                              Store 495 494
+             497:  149(fvec3) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 458(if64v) 496
+             498:   27(fvec2) VectorShuffle 497 497 0 1
+             499:  149(fvec3) Load 456(f64v)
+             500:  149(fvec3) VectorShuffle 499 498 3 4 2
+                              Store 456(f64v) 500
+             503:  149(fvec3) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 458(if64v) 502
+                              Store 456(f64v) 503
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.flowControl.frag.out b/Test/baseResults/spv.flowControl.frag.out
index ca04e07..5650f57 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): 80002
+// Generated by (magic number): 80006
 // 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 0bea463..6a0672d 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): 80002
+// Generated by (magic number): 80006
 // 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 98c8fd0..7b1a747 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): 80002
+// Generated by (magic number): 80006
 // 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 919c71a..2d14103 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): 80002
+// Generated by (magic number): 80006
 // 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 b2e574c..aac80b9 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): 80002
+// Generated by (magic number): 80006
 // 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 945668c..c528400 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): 80002
+// Generated by (magic number): 80006
 // 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 6095a45..c640557 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): 80002
+// Generated by (magic number): 80006
 // 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 06d76bf..10e6f71 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): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 60
 
                               Capability Shader
diff --git a/Test/baseResults/spv.fullyCovered.frag.out b/Test/baseResults/spv.fullyCovered.frag.out
new file mode 100644
index 0000000..d19d5d3
--- /dev/null
+++ b/Test/baseResults/spv.fullyCovered.frag.out
@@ -0,0 +1,37 @@
+spv.fullyCovered.frag
+// Module Version 10000
+// Generated by (magic number): 80006
+// Id's are bound by 18
+
+                              Capability Shader
+                              Capability FragmentFullyCoveredEXT
+                              Extension  "SPV_EXT_fragment_fully_covered"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 9 12
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              SourceExtension  "GL_NV_conservative_raster_underestimation"
+                              Name 4  "main"
+                              Name 9  "color"
+                              Name 12  "gl_FragFullyCoveredNV"
+                              Decorate 12(gl_FragFullyCoveredNV) BuiltIn FullyCoveredEXT
+               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:             TypeBool
+              11:             TypePointer Input 10(bool)
+12(gl_FragFullyCoveredNV):     11(ptr) Variable Input
+              14:    6(float) Constant 0
+              15:    6(float) Constant 1065353216
+         4(main):           2 Function None 3
+               5:             Label
+              13:    10(bool) Load 12(gl_FragFullyCoveredNV)
+              16:    6(float) Select 13 15 14
+              17:    7(fvec4) CompositeConstruct 16 14 14 14
+                              Store 9(color) 17
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.functionCall.frag.out b/Test/baseResults/spv.functionCall.frag.out
index c9762d9..a84bff7 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): 80002
+// Generated by (magic number): 80006
 // 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 71f994e..9b5e6dd 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): 80002
+// Generated by (magic number): 80006
 // 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 e81cb30..6a1dbf9 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): 80002
+// Generated by (magic number): 80006
 // 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 15f7765..a2f33d0 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): 80002
+// Generated by (magic number): 80006
 // 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 e26fd6a..e146f0c 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): 80002
+// Generated by (magic number): 80006
 // 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 5fd0596..23463b6 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): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 142
 
                               Capability Shader
@@ -41,19 +41,25 @@
                               Name 137  "FragColor"
                               Name 141  "g_tTex_unused3"
                               Decorate 17(g_tTex1) DescriptorSet 0
-                              Decorate 17(g_tTex1) Binding 11
+                              Decorate 17(g_tTex1) Binding 17
                               Decorate 21(g_sSamp1) DescriptorSet 0
                               Decorate 21(g_sSamp1) Binding 5
                               Decorate 27(g_tTex2) DescriptorSet 0
+                              Decorate 27(g_tTex2) Binding 18
                               Decorate 29(g_sSamp2) DescriptorSet 0
+                              Decorate 29(g_sSamp2) Binding 6
                               Decorate 39(g_tTex3) DescriptorSet 0
-                              Decorate 39(g_tTex3) Binding 13
+                              Decorate 39(g_tTex3) Binding 19
                               Decorate 46(g_sSamp3) DescriptorSet 0
                               Decorate 46(g_sSamp3) Binding 7
                               Decorate 64(g_tTex4) DescriptorSet 0
+                              Decorate 64(g_tTex4) Binding 20
                               Decorate 69(g_sSamp4) DescriptorSet 0
+                              Decorate 69(g_sSamp4) Binding 8
                               Decorate 84(g_tTex5) DescriptorSet 0
+                              Decorate 84(g_tTex5) Binding 21
                               Decorate 86(g_sSamp5) DescriptorSet 0
+                              Decorate 86(g_sSamp5) Binding 9
                               MemberDecorate 93(MyStruct_t) 0 Offset 0
                               MemberDecorate 93(MyStruct_t) 1 Offset 4
                               MemberDecorate 93(MyStruct_t) 2 Offset 16
@@ -65,13 +71,16 @@
                               Decorate 97 DescriptorSet 0
                               Decorate 97 Binding 19
                               Decorate 119(g_tTex_unused1) DescriptorSet 0
-                              Decorate 119(g_tTex_unused1) Binding 10
+                              Decorate 119(g_tTex_unused1) Binding 22
                               Decorate 121(g_sSamp_unused1) DescriptorSet 0
+                              Decorate 121(g_sSamp_unused1) Binding 10
                               Decorate 126(g_tTex_unused2) DescriptorSet 0
-                              Decorate 126(g_tTex_unused2) Binding 12
+                              Decorate 126(g_tTex_unused2) Binding 23
                               Decorate 128(g_sSamp_unused2) DescriptorSet 0
+                              Decorate 128(g_sSamp_unused2) Binding 11
                               Decorate 137(FragColor) Location 0
                               Decorate 141(g_tTex_unused3) DescriptorSet 0
+                              Decorate 141(g_tTex_unused3) Binding 24
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.hlslDebugInfo.frag.out b/Test/baseResults/spv.hlslDebugInfo.frag.out
index 9eddfdf..b4f8109 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): 80002
+// Generated by (magic number): 80006
 // 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 f96a629..f3bb586 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): 80002
+// Generated by (magic number): 80006
 // 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 6e35b36..697b6bc 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): 80002
+// Generated by (magic number): 80006
 // 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 50b04a8..e9f99f0 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): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 82
 
                               Capability Shader
diff --git a/Test/baseResults/spv.int16.amd.frag.out b/Test/baseResults/spv.int16.amd.frag.out
new file mode 100644
index 0000000..0cafb89
--- /dev/null
+++ b/Test/baseResults/spv.int16.amd.frag.out
@@ -0,0 +1,778 @@
+spv.int16.amd.frag
+// Module Version 10000
+// Generated by (magic number): 80006
+// Id's are bound by 560
+
+                              Capability Shader
+                              Capability Float16
+                              Capability Float64
+                              Capability Int64
+                              Capability Int16
+                              Capability StorageUniform16
+                              Capability StorageInputOutput16
+                              Extension  "SPV_AMD_gpu_shader_half_float"
+                              Extension  "SPV_AMD_gpu_shader_int16"
+                              Extension  "SPV_KHR_16bit_storage"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 519 521
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              SourceExtension  "GL_AMD_gpu_shader_half_float"
+                              SourceExtension  "GL_AMD_gpu_shader_int16"
+                              SourceExtension  "GL_ARB_gpu_shader_int64"
+                              Name 4  "main"
+                              Name 6  "literal("
+                              Name 8  "operators("
+                              Name 10  "typeCast("
+                              Name 12  "builtinFuncs("
+                              Name 16  "u16"
+                              Name 25  "Uniforms"
+                              MemberName 25(Uniforms) 0  "i"
+                              Name 27  ""
+                              Name 34  "indexable"
+                              Name 45  "indexable"
+                              Name 51  "u16v"
+                              Name 57  "i16"
+                              Name 70  "u16"
+                              Name 127  "b"
+                              Name 148  "u"
+                              Name 159  "i"
+                              Name 189  "i16v"
+                              Name 192  "bv"
+                              Name 200  "u16v"
+                              Name 213  "iv"
+                              Name 226  "uv"
+                              Name 240  "fv"
+                              Name 252  "dv"
+                              Name 264  "f16v"
+                              Name 276  "i64v"
+                              Name 290  "u64v"
+                              Name 305  "i16v"
+                              Name 311  "i16"
+                              Name 319  "u16v"
+                              Name 321  "u16"
+                              Name 393  "f16v"
+                              Name 396  "exp"
+                              Name 397  "ResType"
+                              Name 418  "packi"
+                              Name 423  "packu"
+                              Name 432  "packi64"
+                              Name 441  "packu64"
+                              Name 450  "bv"
+                              Name 515  "Block"
+                              MemberName 515(Block) 0  "i16v"
+                              MemberName 515(Block) 1  "u16"
+                              Name 517  "block"
+                              Name 519  "iu16v"
+                              Name 521  "ii16"
+                              Name 522  "si64"
+                              Name 523  "su64"
+                              Name 524  "si"
+                              Name 525  "su"
+                              Name 526  "sb"
+                              Name 527  "si16"
+                              Name 528  "su16"
+                              MemberDecorate 25(Uniforms) 0 Offset 0
+                              Decorate 25(Uniforms) Block
+                              Decorate 27 DescriptorSet 0
+                              Decorate 27 Binding 0
+                              MemberDecorate 515(Block) 0 Offset 0
+                              MemberDecorate 515(Block) 1 Offset 6
+                              Decorate 515(Block) Block
+                              Decorate 517(block) DescriptorSet 0
+                              Decorate 517(block) Binding 1
+                              Decorate 519(iu16v) Flat
+                              Decorate 519(iu16v) Location 0
+                              Decorate 521(ii16) Flat
+                              Decorate 521(ii16) Location 1
+                              Decorate 522(si64) SpecId 100
+                              Decorate 523(su64) SpecId 101
+                              Decorate 524(si) SpecId 102
+                              Decorate 525(su) SpecId 103
+                              Decorate 526(sb) SpecId 104
+                              Decorate 527(si16) SpecId 105
+                              Decorate 528(su16) SpecId 106
+               2:             TypeVoid
+               3:             TypeFunction 2
+              14:             TypeInt 16 0
+              15:             TypePointer Function 14(int)
+              17:             TypeInt 16 1
+              18:             TypeInt 32 0
+              19:     18(int) Constant 3
+              20:             TypeArray 17(int) 19
+              21:     17(int) Constant 273
+              22:     17(int) Constant 4294967294
+              23:     17(int) Constant 256
+              24:          20 ConstantComposite 21 22 23
+    25(Uniforms):             TypeStruct 18(int)
+              26:             TypePointer Uniform 25(Uniforms)
+              27:     26(ptr) Variable Uniform
+              28:             TypeInt 32 1
+              29:     28(int) Constant 0
+              30:             TypePointer Uniform 18(int)
+              33:             TypePointer Function 20
+              35:             TypePointer Function 17(int)
+              39:             TypeArray 14(int) 19
+              40:     14(int) Constant 65535
+              41:          39 ConstantComposite 40 40 40
+              44:             TypePointer Function 39
+              49:             TypeVector 14(int) 3
+              50:             TypePointer Function 49(ivec3)
+              53:     17(int) Constant 1
+              54:             TypeVector 17(int) 3
+             111:     18(int) Constant 1
+             117:     18(int) Constant 2
+             125:             TypeBool
+             126:             TypePointer Function 125(bool)
+             128:     18(int) Constant 0
+             147:             TypePointer Function 18(int)
+             158:             TypePointer Function 28(int)
+             187:             TypeVector 17(int) 2
+             188:             TypePointer Function 187(ivec2)
+             190:             TypeVector 125(bool) 2
+             191:             TypePointer Function 190(bvec2)
+             194:     17(int) Constant 0
+             195:  187(ivec2) ConstantComposite 194 194
+             196:  187(ivec2) ConstantComposite 53 53
+             198:             TypeVector 14(int) 2
+             199:             TypePointer Function 198(ivec2)
+             202:     14(int) Constant 0
+             203:     14(int) Constant 1
+             204:  198(ivec2) ConstantComposite 202 202
+             205:  198(ivec2) ConstantComposite 203 203
+             211:             TypeVector 28(int) 2
+             212:             TypePointer Function 211(ivec2)
+             224:             TypeVector 18(int) 2
+             225:             TypePointer Function 224(ivec2)
+             237:             TypeFloat 32
+             238:             TypeVector 237(float) 2
+             239:             TypePointer Function 238(fvec2)
+             249:             TypeFloat 64
+             250:             TypeVector 249(float) 2
+             251:             TypePointer Function 250(fvec2)
+             261:             TypeFloat 16
+             262:             TypeVector 261(float) 2
+             263:             TypePointer Function 262(fvec2)
+             273:             TypeInt 64 1
+             274:             TypeVector 273(int) 2
+             275:             TypePointer Function 274(ivec2)
+             287:             TypeInt 64 0
+             288:             TypeVector 287(int) 2
+             289:             TypePointer Function 288(ivec2)
+             316:     17(int) Constant 4294967295
+             317:  187(ivec2) ConstantComposite 316 316
+             326:   49(ivec3) ConstantComposite 202 202 202
+             368:   125(bool) ConstantTrue
+             375:   125(bool) ConstantFalse
+             376:  190(bvec2) ConstantComposite 375 375
+             388:             TypeVector 125(bool) 3
+             389:  388(bvec3) ConstantComposite 375 375 375
+             391:             TypeVector 261(float) 3
+             392:             TypePointer Function 391(fvec3)
+             395:             TypePointer Function 54(ivec3)
+    397(ResType):             TypeStruct 391(fvec3) 54(ivec3)
+             407:             TypePointer Function 261(float)
+             431:             TypePointer Function 273(int)
+             434:             TypeVector 17(int) 4
+             440:             TypePointer Function 287(int)
+             443:             TypeVector 14(int) 4
+             449:             TypePointer Function 388(bvec3)
+      515(Block):             TypeStruct 54(ivec3) 14(int)
+             516:             TypePointer Uniform 515(Block)
+      517(block):    516(ptr) Variable Uniform
+             518:             TypePointer Input 49(ivec3)
+      519(iu16v):    518(ptr) Variable Input
+             520:             TypePointer Input 17(int)
+       521(ii16):    520(ptr) Variable Input
+       522(si64):    273(int) SpecConstant 4294967286 4294967295
+       523(su64):    287(int) SpecConstant 20 0
+         524(si):     28(int) SpecConstant 4294967291
+         525(su):     18(int) SpecConstant 4
+         526(sb):   125(bool) SpecConstantTrue
+       527(si16):     17(int) SpecConstant 4294967291
+       528(su16):     14(int) SpecConstant 4
+             529:   125(bool) SpecConstantOp 171 527(si16) 202
+             530:   125(bool) SpecConstantOp 171 528(su16) 202
+             531:     17(int) SpecConstantOp 169 526(sb) 53 194
+             532:     14(int) SpecConstantOp 169 526(sb) 203 202
+             533:     28(int) SpecConstantOp 114 527(si16)
+             534:     28(int) SpecConstantOp 113 528(su16)
+             535:     28(int) SpecConstantOp 128 534 128
+             536:     17(int) SpecConstantOp 114 524(si)
+             537:     17(int) SpecConstantOp 114 524(si)
+             538:     14(int) SpecConstantOp 128 537 202
+             539:     28(int) SpecConstantOp 114 527(si16)
+             540:     18(int) SpecConstantOp 128 539 128
+             541:     18(int) SpecConstantOp 113 528(su16)
+             542:     17(int) SpecConstantOp 113 525(su)
+             543:     17(int) SpecConstantOp 128 542 202
+             544:     14(int) SpecConstantOp 113 525(su)
+             545:    273(int) SpecConstantOp 114 527(si16)
+             546:    273(int) SpecConstantOp 113 528(su16)
+             547:    287(int) Constant 0 0
+             548:    273(int) SpecConstantOp 128 546 547
+             549:     17(int) SpecConstantOp 114 522(si64)
+             550:     17(int) SpecConstantOp 114 522(si64)
+             551:     14(int) SpecConstantOp 128 550 202
+             552:    273(int) SpecConstantOp 114 527(si16)
+             553:    287(int) SpecConstantOp 128 552 547
+             554:    287(int) SpecConstantOp 113 528(su16)
+             555:     17(int) SpecConstantOp 113 523(su64)
+             556:     17(int) SpecConstantOp 128 555 202
+             557:     14(int) SpecConstantOp 113 523(su64)
+             558:     14(int) SpecConstantOp 128 527(si16) 202
+             559:     17(int) SpecConstantOp 128 528(su16) 202
+         4(main):           2 Function None 3
+               5:             Label
+             511:           2 FunctionCall 6(literal()
+             512:           2 FunctionCall 8(operators()
+             513:           2 FunctionCall 10(typeCast()
+             514:           2 FunctionCall 12(builtinFuncs()
+                              Return
+                              FunctionEnd
+     6(literal():           2 Function None 3
+               7:             Label
+         16(u16):     15(ptr) Variable Function
+   34(indexable):     33(ptr) Variable Function
+   45(indexable):     44(ptr) Variable Function
+              31:     30(ptr) AccessChain 27 29
+              32:     18(int) Load 31
+                              Store 34(indexable) 24
+              36:     35(ptr) AccessChain 34(indexable) 32
+              37:     17(int) Load 36
+              38:     14(int) Bitcast 37
+              42:     30(ptr) AccessChain 27 29
+              43:     18(int) Load 42
+                              Store 45(indexable) 41
+              46:     15(ptr) AccessChain 45(indexable) 43
+              47:     14(int) Load 46
+              48:     14(int) IAdd 38 47
+                              Store 16(u16) 48
+                              Return
+                              FunctionEnd
+   8(operators():           2 Function None 3
+               9:             Label
+        51(u16v):     50(ptr) Variable Function
+         57(i16):     35(ptr) Variable Function
+         70(u16):     15(ptr) Variable Function
+          127(b):    126(ptr) Variable Function
+          148(u):    147(ptr) Variable Function
+          159(i):    158(ptr) Variable Function
+              52:   49(ivec3) Load 51(u16v)
+              55:   54(ivec3) CompositeConstruct 53 53 53
+              56:   49(ivec3) IAdd 52 55
+                              Store 51(u16v) 56
+              58:     17(int) Load 57(i16)
+              59:     17(int) ISub 58 53
+                              Store 57(i16) 59
+              60:     17(int) Load 57(i16)
+              61:     17(int) IAdd 60 53
+                              Store 57(i16) 61
+              62:   49(ivec3) Load 51(u16v)
+              63:   54(ivec3) CompositeConstruct 53 53 53
+              64:   49(ivec3) ISub 62 63
+                              Store 51(u16v) 64
+              65:   49(ivec3) Load 51(u16v)
+              66:   49(ivec3) Not 65
+                              Store 51(u16v) 66
+              67:     17(int) Load 57(i16)
+                              Store 57(i16) 67
+              68:   49(ivec3) Load 51(u16v)
+              69:   49(ivec3) SNegate 68
+                              Store 51(u16v) 69
+              71:     17(int) Load 57(i16)
+              72:     14(int) Bitcast 71
+              73:     14(int) Load 70(u16)
+              74:     14(int) IAdd 73 72
+                              Store 70(u16) 74
+              75:   49(ivec3) Load 51(u16v)
+              76:   49(ivec3) Load 51(u16v)
+              77:   49(ivec3) ISub 76 75
+                              Store 51(u16v) 77
+              78:     17(int) Load 57(i16)
+              79:     17(int) Load 57(i16)
+              80:     17(int) IMul 79 78
+                              Store 57(i16) 80
+              81:   49(ivec3) Load 51(u16v)
+              82:   49(ivec3) Load 51(u16v)
+              83:   49(ivec3) UDiv 82 81
+                              Store 51(u16v) 83
+              84:     17(int) Load 57(i16)
+              85:     14(int) Bitcast 84
+              86:   49(ivec3) Load 51(u16v)
+              87:   49(ivec3) CompositeConstruct 85 85 85
+              88:   49(ivec3) UMod 86 87
+                              Store 51(u16v) 88
+              89:   49(ivec3) Load 51(u16v)
+              90:   49(ivec3) Load 51(u16v)
+              91:   49(ivec3) IAdd 89 90
+                              Store 51(u16v) 91
+              92:     17(int) Load 57(i16)
+              93:     14(int) Bitcast 92
+              94:     14(int) Load 70(u16)
+              95:     14(int) ISub 93 94
+                              Store 70(u16) 95
+              96:   49(ivec3) Load 51(u16v)
+              97:     17(int) Load 57(i16)
+              98:     14(int) Bitcast 97
+              99:   49(ivec3) CompositeConstruct 98 98 98
+             100:   49(ivec3) IMul 96 99
+                              Store 51(u16v) 100
+             101:     17(int) Load 57(i16)
+             102:     17(int) Load 57(i16)
+             103:     17(int) IMul 101 102
+                              Store 57(i16) 103
+             104:     17(int) Load 57(i16)
+             105:     17(int) Load 57(i16)
+             106:     17(int) SMod 104 105
+                              Store 57(i16) 106
+             107:     17(int) Load 57(i16)
+             108:   49(ivec3) Load 51(u16v)
+             109:   54(ivec3) CompositeConstruct 107 107 107
+             110:   49(ivec3) ShiftLeftLogical 108 109
+                              Store 51(u16v) 110
+             112:     15(ptr) AccessChain 51(u16v) 111
+             113:     14(int) Load 112
+             114:     17(int) Load 57(i16)
+             115:     17(int) ShiftRightArithmetic 114 113
+                              Store 57(i16) 115
+             116:     17(int) Load 57(i16)
+             118:     15(ptr) AccessChain 51(u16v) 117
+             119:     14(int) Load 118
+             120:     17(int) ShiftLeftLogical 116 119
+                              Store 57(i16) 120
+             121:   49(ivec3) Load 51(u16v)
+             122:     17(int) Load 57(i16)
+             123:   54(ivec3) CompositeConstruct 122 122 122
+             124:   49(ivec3) ShiftLeftLogical 121 123
+                              Store 51(u16v) 124
+             129:     15(ptr) AccessChain 51(u16v) 128
+             130:     14(int) Load 129
+             131:     17(int) Load 57(i16)
+             132:     14(int) Bitcast 131
+             133:   125(bool) INotEqual 130 132
+                              Store 127(b) 133
+             134:     17(int) Load 57(i16)
+             135:     14(int) Bitcast 134
+             136:     15(ptr) AccessChain 51(u16v) 128
+             137:     14(int) Load 136
+             138:   125(bool) IEqual 135 137
+                              Store 127(b) 138
+             139:     15(ptr) AccessChain 51(u16v) 128
+             140:     14(int) Load 139
+             141:     15(ptr) AccessChain 51(u16v) 111
+             142:     14(int) Load 141
+             143:   125(bool) UGreaterThan 140 142
+                              Store 127(b) 143
+             144:     17(int) Load 57(i16)
+             145:     28(int) SConvert 144
+             146:     18(int) Bitcast 145
+             149:     18(int) Load 148(u)
+             150:   125(bool) ULessThan 146 149
+                              Store 127(b) 150
+             151:     15(ptr) AccessChain 51(u16v) 111
+             152:     14(int) Load 151
+             153:     15(ptr) AccessChain 51(u16v) 128
+             154:     14(int) Load 153
+             155:   125(bool) UGreaterThanEqual 152 154
+                              Store 127(b) 155
+             156:     17(int) Load 57(i16)
+             157:     28(int) SConvert 156
+             160:     28(int) Load 159(i)
+             161:   125(bool) SLessThanEqual 157 160
+                              Store 127(b) 161
+             162:     17(int) Load 57(i16)
+             163:     14(int) Bitcast 162
+             164:   49(ivec3) Load 51(u16v)
+             165:   49(ivec3) CompositeConstruct 163 163 163
+             166:   49(ivec3) BitwiseOr 164 165
+                              Store 51(u16v) 166
+             167:     17(int) Load 57(i16)
+             168:     14(int) Bitcast 167
+             169:     14(int) Load 70(u16)
+             170:     14(int) BitwiseOr 168 169
+                              Store 70(u16) 170
+             171:     17(int) Load 57(i16)
+             172:     17(int) Load 57(i16)
+             173:     17(int) BitwiseAnd 172 171
+                              Store 57(i16) 173
+             174:   49(ivec3) Load 51(u16v)
+             175:   49(ivec3) Load 51(u16v)
+             176:   49(ivec3) BitwiseAnd 174 175
+                              Store 51(u16v) 176
+             177:     17(int) Load 57(i16)
+             178:     14(int) Bitcast 177
+             179:   49(ivec3) Load 51(u16v)
+             180:   49(ivec3) CompositeConstruct 178 178 178
+             181:   49(ivec3) BitwiseXor 179 180
+                              Store 51(u16v) 181
+             182:   49(ivec3) Load 51(u16v)
+             183:     17(int) Load 57(i16)
+             184:     14(int) Bitcast 183
+             185:   49(ivec3) CompositeConstruct 184 184 184
+             186:   49(ivec3) BitwiseXor 182 185
+                              Store 51(u16v) 186
+                              Return
+                              FunctionEnd
+   10(typeCast():           2 Function None 3
+              11:             Label
+       189(i16v):    188(ptr) Variable Function
+         192(bv):    191(ptr) Variable Function
+       200(u16v):    199(ptr) Variable Function
+         213(iv):    212(ptr) Variable Function
+         226(uv):    225(ptr) Variable Function
+         240(fv):    239(ptr) Variable Function
+         252(dv):    251(ptr) Variable Function
+       264(f16v):    263(ptr) Variable Function
+       276(i64v):    275(ptr) Variable Function
+       290(u64v):    289(ptr) Variable Function
+             193:  190(bvec2) Load 192(bv)
+             197:  187(ivec2) Select 193 196 195
+                              Store 189(i16v) 197
+             201:  190(bvec2) Load 192(bv)
+             206:  198(ivec2) Select 201 205 204
+                              Store 200(u16v) 206
+             207:  187(ivec2) Load 189(i16v)
+             208:  190(bvec2) INotEqual 207 204
+                              Store 192(bv) 208
+             209:  198(ivec2) Load 200(u16v)
+             210:  190(bvec2) INotEqual 209 204
+                              Store 192(bv) 210
+             214:  211(ivec2) Load 213(iv)
+             215:  187(ivec2) SConvert 214
+                              Store 189(i16v) 215
+             216:  211(ivec2) Load 213(iv)
+             217:  187(ivec2) SConvert 216
+             218:  198(ivec2) Bitcast 217
+                              Store 200(u16v) 218
+             219:  187(ivec2) Load 189(i16v)
+             220:  211(ivec2) SConvert 219
+                              Store 213(iv) 220
+             221:  198(ivec2) Load 200(u16v)
+             222:  211(ivec2) UConvert 221
+             223:  211(ivec2) Bitcast 222
+                              Store 213(iv) 223
+             227:  224(ivec2) Load 226(uv)
+             228:  187(ivec2) UConvert 227
+             229:  187(ivec2) Bitcast 228
+                              Store 189(i16v) 229
+             230:  224(ivec2) Load 226(uv)
+             231:  198(ivec2) UConvert 230
+                              Store 200(u16v) 231
+             232:  187(ivec2) Load 189(i16v)
+             233:  211(ivec2) SConvert 232
+             234:  224(ivec2) Bitcast 233
+                              Store 226(uv) 234
+             235:  198(ivec2) Load 200(u16v)
+             236:  224(ivec2) UConvert 235
+                              Store 226(uv) 236
+             241:  238(fvec2) Load 240(fv)
+             242:  187(ivec2) ConvertFToS 241
+                              Store 189(i16v) 242
+             243:  238(fvec2) Load 240(fv)
+             244:  198(ivec2) ConvertFToU 243
+                              Store 200(u16v) 244
+             245:  187(ivec2) Load 189(i16v)
+             246:  238(fvec2) ConvertSToF 245
+                              Store 240(fv) 246
+             247:  198(ivec2) Load 200(u16v)
+             248:  238(fvec2) ConvertUToF 247
+                              Store 240(fv) 248
+             253:  250(fvec2) Load 252(dv)
+             254:  187(ivec2) ConvertFToS 253
+                              Store 189(i16v) 254
+             255:  250(fvec2) Load 252(dv)
+             256:  198(ivec2) ConvertFToU 255
+                              Store 200(u16v) 256
+             257:  187(ivec2) Load 189(i16v)
+             258:  250(fvec2) ConvertSToF 257
+                              Store 252(dv) 258
+             259:  198(ivec2) Load 200(u16v)
+             260:  250(fvec2) ConvertUToF 259
+                              Store 252(dv) 260
+             265:  262(fvec2) Load 264(f16v)
+             266:  187(ivec2) ConvertFToS 265
+                              Store 189(i16v) 266
+             267:  262(fvec2) Load 264(f16v)
+             268:  198(ivec2) ConvertFToU 267
+                              Store 200(u16v) 268
+             269:  187(ivec2) Load 189(i16v)
+             270:  262(fvec2) ConvertSToF 269
+                              Store 264(f16v) 270
+             271:  198(ivec2) Load 200(u16v)
+             272:  262(fvec2) ConvertUToF 271
+                              Store 264(f16v) 272
+             277:  274(ivec2) Load 276(i64v)
+             278:  187(ivec2) SConvert 277
+                              Store 189(i16v) 278
+             279:  274(ivec2) Load 276(i64v)
+             280:  187(ivec2) SConvert 279
+             281:  198(ivec2) Bitcast 280
+                              Store 200(u16v) 281
+             282:  187(ivec2) Load 189(i16v)
+             283:  274(ivec2) SConvert 282
+                              Store 276(i64v) 283
+             284:  198(ivec2) Load 200(u16v)
+             285:  274(ivec2) UConvert 284
+             286:  274(ivec2) Bitcast 285
+                              Store 276(i64v) 286
+             291:  288(ivec2) Load 290(u64v)
+             292:  187(ivec2) UConvert 291
+             293:  187(ivec2) Bitcast 292
+                              Store 189(i16v) 293
+             294:  288(ivec2) Load 290(u64v)
+             295:  198(ivec2) UConvert 294
+                              Store 200(u16v) 295
+             296:  187(ivec2) Load 189(i16v)
+             297:  274(ivec2) SConvert 296
+             298:  288(ivec2) Bitcast 297
+                              Store 290(u64v) 298
+             299:  198(ivec2) Load 200(u16v)
+             300:  288(ivec2) UConvert 299
+                              Store 290(u64v) 300
+             301:  198(ivec2) Load 200(u16v)
+             302:  187(ivec2) Bitcast 301
+                              Store 189(i16v) 302
+             303:  187(ivec2) Load 189(i16v)
+             304:  198(ivec2) Bitcast 303
+                              Store 200(u16v) 304
+                              Return
+                              FunctionEnd
+12(builtinFuncs():           2 Function None 3
+              13:             Label
+       305(i16v):    188(ptr) Variable Function
+        311(i16):     35(ptr) Variable Function
+       319(u16v):     50(ptr) Variable Function
+        321(u16):     15(ptr) Variable Function
+       393(f16v):    392(ptr) Variable Function
+        396(exp):    395(ptr) Variable Function
+      418(packi):    158(ptr) Variable Function
+      423(packu):    147(ptr) Variable Function
+    432(packi64):    431(ptr) Variable Function
+    441(packu64):    440(ptr) Variable Function
+         450(bv):    449(ptr) Variable Function
+             306:  187(ivec2) Load 305(i16v)
+             307:  187(ivec2) ExtInst 1(GLSL.std.450) 5(SAbs) 306
+                              Store 305(i16v) 307
+             308:  187(ivec2) Load 305(i16v)
+             309:  187(ivec2) ExtInst 1(GLSL.std.450) 7(SSign) 308
+                              Store 305(i16v) 309
+             310:  187(ivec2) Load 305(i16v)
+             312:     17(int) Load 311(i16)
+             313:  187(ivec2) CompositeConstruct 312 312
+             314:  187(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 310 313
+                              Store 305(i16v) 314
+             315:  187(ivec2) Load 305(i16v)
+             318:  187(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 315 317
+                              Store 305(i16v) 318
+             320:   49(ivec3) Load 319(u16v)
+             322:     14(int) Load 321(u16)
+             323:   49(ivec3) CompositeConstruct 322 322 322
+             324:   49(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 320 323
+                              Store 319(u16v) 324
+             325:   49(ivec3) Load 319(u16v)
+             327:   49(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 325 326
+                              Store 319(u16v) 327
+             328:  187(ivec2) Load 305(i16v)
+             329:     17(int) Load 311(i16)
+             330:  187(ivec2) CompositeConstruct 329 329
+             331:  187(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 328 330
+                              Store 305(i16v) 331
+             332:  187(ivec2) Load 305(i16v)
+             333:  187(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 332 317
+                              Store 305(i16v) 333
+             334:   49(ivec3) Load 319(u16v)
+             335:     14(int) Load 321(u16)
+             336:   49(ivec3) CompositeConstruct 335 335 335
+             337:   49(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 334 336
+                              Store 319(u16v) 337
+             338:   49(ivec3) Load 319(u16v)
+             339:   49(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 338 326
+                              Store 319(u16v) 339
+             340:  187(ivec2) Load 305(i16v)
+             341:     17(int) Load 311(i16)
+             342:     17(int) SNegate 341
+             343:     17(int) Load 311(i16)
+             344:  187(ivec2) CompositeConstruct 342 342
+             345:  187(ivec2) CompositeConstruct 343 343
+             346:  187(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 340 344 345
+                              Store 305(i16v) 346
+             347:  187(ivec2) Load 305(i16v)
+             348:  187(ivec2) Load 305(i16v)
+             349:  187(ivec2) SNegate 348
+             350:  187(ivec2) Load 305(i16v)
+             351:  187(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 347 349 350
+                              Store 305(i16v) 351
+             352:   49(ivec3) Load 319(u16v)
+             353:     14(int) Load 321(u16)
+             354:     14(int) SNegate 353
+             355:     14(int) Load 321(u16)
+             356:   49(ivec3) CompositeConstruct 354 354 354
+             357:   49(ivec3) CompositeConstruct 355 355 355
+             358:   49(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 352 356 357
+                              Store 319(u16v) 358
+             359:   49(ivec3) Load 319(u16v)
+             360:   49(ivec3) Load 319(u16v)
+             361:   49(ivec3) SNegate 360
+             362:   49(ivec3) Load 319(u16v)
+             363:   49(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 359 361 362
+                              Store 319(u16v) 363
+             364:     35(ptr) AccessChain 305(i16v) 128
+             365:     17(int) Load 364
+             366:     35(ptr) AccessChain 305(i16v) 111
+             367:     17(int) Load 366
+             369:     17(int) Select 368 367 365
+                              Store 311(i16) 369
+             370:     17(int) Load 311(i16)
+             371:  187(ivec2) CompositeConstruct 370 370
+             372:     17(int) Load 311(i16)
+             373:     17(int) SNegate 372
+             374:  187(ivec2) CompositeConstruct 373 373
+             377:  187(ivec2) Select 376 374 371
+                              Store 305(i16v) 377
+             378:     15(ptr) AccessChain 319(u16v) 128
+             379:     14(int) Load 378
+             380:     15(ptr) AccessChain 319(u16v) 111
+             381:     14(int) Load 380
+             382:     14(int) Select 368 381 379
+                              Store 321(u16) 382
+             383:     14(int) Load 321(u16)
+             384:   49(ivec3) CompositeConstruct 383 383 383
+             385:     14(int) Load 321(u16)
+             386:     14(int) SNegate 385
+             387:   49(ivec3) CompositeConstruct 386 386 386
+             390:   49(ivec3) Select 389 387 384
+                              Store 319(u16v) 390
+             394:  391(fvec3) Load 393(f16v)
+             398:397(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 394
+             399:   54(ivec3) CompositeExtract 398 1
+                              Store 396(exp) 399
+             400:  391(fvec3) CompositeExtract 398 0
+                              Store 393(f16v) 400
+             401:  391(fvec3) Load 393(f16v)
+             402:   54(ivec3) Load 396(exp)
+             403:  391(fvec3) ExtInst 1(GLSL.std.450) 53(Ldexp) 401 402
+                              Store 393(f16v) 403
+             404:  391(fvec3) Load 393(f16v)
+             405:  262(fvec2) VectorShuffle 404 404 0 1
+             406:  187(ivec2) Bitcast 405
+                              Store 305(i16v) 406
+             408:    407(ptr) AccessChain 393(f16v) 117
+             409:  261(float) Load 408
+             410:     14(int) Bitcast 409
+             411:     15(ptr) AccessChain 319(u16v) 128
+                              Store 411 410
+             412:  187(ivec2) Load 305(i16v)
+             413:  262(fvec2) Bitcast 412
+             414:  391(fvec3) Load 393(f16v)
+             415:  391(fvec3) VectorShuffle 414 413 3 4 2
+                              Store 393(f16v) 415
+             416:   49(ivec3) Load 319(u16v)
+             417:  391(fvec3) Bitcast 416
+                              Store 393(f16v) 417
+             419:  187(ivec2) Load 305(i16v)
+             420:     28(int) Bitcast 419
+                              Store 418(packi) 420
+             421:     28(int) Load 418(packi)
+             422:  187(ivec2) Bitcast 421
+                              Store 305(i16v) 422
+             424:   49(ivec3) Load 319(u16v)
+             425:  198(ivec2) VectorShuffle 424 424 0 1
+             426:     18(int) Bitcast 425
+                              Store 423(packu) 426
+             427:     18(int) Load 423(packu)
+             428:  198(ivec2) Bitcast 427
+             429:   49(ivec3) Load 319(u16v)
+             430:   49(ivec3) VectorShuffle 429 428 3 4 2
+                              Store 319(u16v) 430
+             433:     17(int) Load 311(i16)
+             435:  434(ivec4) CompositeConstruct 433 433 433 433
+             436:    273(int) Bitcast 435
+                              Store 432(packi64) 436
+             437:    273(int) Load 432(packi64)
+             438:  434(ivec4) Bitcast 437
+             439:  187(ivec2) VectorShuffle 438 438 0 1
+                              Store 305(i16v) 439
+             442:     14(int) Load 321(u16)
+             444:  443(ivec4) CompositeConstruct 442 442 442 442
+             445:    287(int) Bitcast 444
+                              Store 441(packu64) 445
+             446:    287(int) Load 441(packu64)
+             447:  443(ivec4) Bitcast 446
+             448:   49(ivec3) VectorShuffle 447 447 0 1 2
+                              Store 319(u16v) 448
+             451:   49(ivec3) Load 319(u16v)
+             452:     14(int) Load 321(u16)
+             453:   49(ivec3) CompositeConstruct 452 452 452
+             454:  388(bvec3) ULessThan 451 453
+                              Store 450(bv) 454
+             455:  187(ivec2) Load 305(i16v)
+             456:     17(int) Load 311(i16)
+             457:  187(ivec2) CompositeConstruct 456 456
+             458:  190(bvec2) SLessThan 455 457
+             459:  388(bvec3) Load 450(bv)
+             460:  388(bvec3) VectorShuffle 459 458 3 4 2
+                              Store 450(bv) 460
+             461:   49(ivec3) Load 319(u16v)
+             462:     14(int) Load 321(u16)
+             463:   49(ivec3) CompositeConstruct 462 462 462
+             464:  388(bvec3) ULessThanEqual 461 463
+                              Store 450(bv) 464
+             465:  187(ivec2) Load 305(i16v)
+             466:     17(int) Load 311(i16)
+             467:  187(ivec2) CompositeConstruct 466 466
+             468:  190(bvec2) SLessThanEqual 465 467
+             469:  388(bvec3) Load 450(bv)
+             470:  388(bvec3) VectorShuffle 469 468 3 4 2
+                              Store 450(bv) 470
+             471:   49(ivec3) Load 319(u16v)
+             472:     14(int) Load 321(u16)
+             473:   49(ivec3) CompositeConstruct 472 472 472
+             474:  388(bvec3) UGreaterThan 471 473
+                              Store 450(bv) 474
+             475:  187(ivec2) Load 305(i16v)
+             476:     17(int) Load 311(i16)
+             477:  187(ivec2) CompositeConstruct 476 476
+             478:  190(bvec2) SGreaterThan 475 477
+             479:  388(bvec3) Load 450(bv)
+             480:  388(bvec3) VectorShuffle 479 478 3 4 2
+                              Store 450(bv) 480
+             481:   49(ivec3) Load 319(u16v)
+             482:     14(int) Load 321(u16)
+             483:   49(ivec3) CompositeConstruct 482 482 482
+             484:  388(bvec3) UGreaterThanEqual 481 483
+                              Store 450(bv) 484
+             485:  187(ivec2) Load 305(i16v)
+             486:     17(int) Load 311(i16)
+             487:  187(ivec2) CompositeConstruct 486 486
+             488:  190(bvec2) SGreaterThanEqual 485 487
+             489:  388(bvec3) Load 450(bv)
+             490:  388(bvec3) VectorShuffle 489 488 3 4 2
+                              Store 450(bv) 490
+             491:   49(ivec3) Load 319(u16v)
+             492:     14(int) Load 321(u16)
+             493:   49(ivec3) CompositeConstruct 492 492 492
+             494:  388(bvec3) IEqual 491 493
+                              Store 450(bv) 494
+             495:  187(ivec2) Load 305(i16v)
+             496:     17(int) Load 311(i16)
+             497:  187(ivec2) CompositeConstruct 496 496
+             498:  190(bvec2) IEqual 495 497
+             499:  388(bvec3) Load 450(bv)
+             500:  388(bvec3) VectorShuffle 499 498 3 4 2
+                              Store 450(bv) 500
+             501:   49(ivec3) Load 319(u16v)
+             502:     14(int) Load 321(u16)
+             503:   49(ivec3) CompositeConstruct 502 502 502
+             504:  388(bvec3) INotEqual 501 503
+                              Store 450(bv) 504
+             505:  187(ivec2) Load 305(i16v)
+             506:     17(int) Load 311(i16)
+             507:  187(ivec2) CompositeConstruct 506 506
+             508:  190(bvec2) INotEqual 505 507
+             509:  388(bvec3) Load 450(bv)
+             510:  388(bvec3) VectorShuffle 509 508 3 4 2
+                              Store 450(bv) 510
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.int16.frag.out b/Test/baseResults/spv.int16.frag.out
index 6cc6070..8355569 100644
--- a/Test/baseResults/spv.int16.frag.out
+++ b/Test/baseResults/spv.int16.frag.out
@@ -1,779 +1,744 @@
 spv.int16.frag
 // Module Version 10000
-// Generated by (magic number): 80002
-// Id's are bound by 561
+// Generated by (magic number): 80006
+// Id's are bound by 523
 
                               Capability Shader
                               Capability Float16
                               Capability Float64
                               Capability Int64
                               Capability Int16
+                              Capability Int8
                               Capability StorageUniform16
-                              Capability StorageInputOutput16
                               Extension  "SPV_AMD_gpu_shader_half_float"
                               Extension  "SPV_AMD_gpu_shader_int16"
                               Extension  "SPV_KHR_16bit_storage"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 520 522
+                              EntryPoint Fragment 4  "main"
                               ExecutionMode 4 OriginUpperLeft
                               Source GLSL 450
-                              SourceExtension  "GL_AMD_gpu_shader_half_float"
-                              SourceExtension  "GL_AMD_gpu_shader_int16"
-                              SourceExtension  "GL_ARB_gpu_shader_int64"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_float16"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_float32"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_float64"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_int16"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_int32"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_int64"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_int8"
                               Name 4  "main"
                               Name 6  "literal("
-                              Name 8  "operators("
-                              Name 10  "typeCast("
+                              Name 8  "typeCast16("
+                              Name 10  "operators("
                               Name 12  "builtinFuncs("
-                              Name 16  "u16"
-                              Name 25  "Uniforms"
-                              MemberName 25(Uniforms) 0  "i"
-                              Name 27  ""
-                              Name 34  "indexable"
-                              Name 45  "indexable"
-                              Name 51  "u16v"
-                              Name 57  "i16"
-                              Name 70  "u16"
-                              Name 108  "i"
-                              Name 130  "b"
-                              Name 151  "u"
-                              Name 190  "i16v"
-                              Name 193  "bv"
-                              Name 201  "u16v"
-                              Name 214  "iv"
+                              Name 16  "i16"
+                              Name 24  "Uniforms"
+                              MemberName 24(Uniforms) 0  "index"
+                              Name 26  ""
+                              Name 33  "indexable"
+                              Name 38  "u16"
+                              Name 46  "indexable"
+                              Name 51  "i32v"
+                              Name 54  "i16v"
+                              Name 59  "u16v"
+                              Name 67  "u32v"
+                              Name 74  "i64v"
+                              Name 80  "u64v"
+                              Name 94  "f16v"
+                              Name 100  "f32v"
+                              Name 106  "f64v"
+                              Name 154  "i8v"
+                              Name 163  "u8v"
+                              Name 176  "bv"
+                              Name 195  "u16v"
+                              Name 200  "i16"
+                              Name 220  "i"
                               Name 227  "uv"
-                              Name 241  "fv"
-                              Name 253  "dv"
-                              Name 265  "f16v"
-                              Name 277  "i64v"
-                              Name 291  "u64v"
-                              Name 306  "i16v"
-                              Name 312  "i16"
-                              Name 320  "u16v"
-                              Name 322  "u16"
-                              Name 394  "f16v"
-                              Name 397  "exp"
-                              Name 398  "ResType"
-                              Name 419  "packi"
-                              Name 424  "packu"
-                              Name 433  "packi64"
-                              Name 442  "packu64"
-                              Name 451  "bv"
-                              Name 516  "Block"
-                              MemberName 516(Block) 0  "i16v"
-                              MemberName 516(Block) 1  "u16"
-                              Name 518  "block"
-                              Name 520  "iu16v"
-                              Name 522  "ii16"
-                              Name 523  "si64"
-                              Name 524  "su64"
-                              Name 525  "si"
-                              Name 526  "su"
-                              Name 527  "sb"
-                              Name 528  "si16"
-                              Name 529  "su16"
-                              MemberDecorate 25(Uniforms) 0 Offset 0
-                              Decorate 25(Uniforms) Block
-                              Decorate 27 DescriptorSet 0
-                              Decorate 27 Binding 0
-                              MemberDecorate 516(Block) 0 Offset 0
-                              MemberDecorate 516(Block) 1 Offset 6
-                              Decorate 516(Block) Block
-                              Decorate 518(block) DescriptorSet 0
-                              Decorate 518(block) Binding 1
-                              Decorate 520(iu16v) Flat
-                              Decorate 520(iu16v) Location 0
-                              Decorate 522(ii16) Flat
-                              Decorate 522(ii16) Location 1
-                              Decorate 523(si64) SpecId 100
-                              Decorate 524(su64) SpecId 101
-                              Decorate 525(si) SpecId 102
-                              Decorate 526(su) SpecId 103
-                              Decorate 527(sb) SpecId 104
-                              Decorate 528(si16) SpecId 105
-                              Decorate 529(su16) SpecId 106
+                              Name 243  "i64"
+                              Name 281  "b"
+                              Name 343  "i16v"
+                              Name 346  "i16"
+                              Name 356  "u16v"
+                              Name 358  "u16"
+                              Name 428  "i32"
+                              Name 431  "i64"
+                              Name 434  "i16v4"
+                              Name 437  "u32"
+                              Name 438  "u16v2"
+                              Name 442  "u64"
+                              Name 445  "u16v4"
+                              Name 457  "bv"
+                              Name 518  "Block"
+                              MemberName 518(Block) 0  "i16"
+                              MemberName 518(Block) 1  "i16v2"
+                              MemberName 518(Block) 2  "i16v3"
+                              MemberName 518(Block) 3  "i16v4"
+                              MemberName 518(Block) 4  "u16"
+                              MemberName 518(Block) 5  "u16v2"
+                              MemberName 518(Block) 6  "u16v3"
+                              MemberName 518(Block) 7  "u16v4"
+                              Name 520  "block"
+                              Name 521  "si16"
+                              Name 522  "su16"
+                              MemberDecorate 24(Uniforms) 0 Offset 0
+                              Decorate 24(Uniforms) Block
+                              Decorate 26 DescriptorSet 0
+                              Decorate 26 Binding 0
+                              MemberDecorate 518(Block) 0 Offset 0
+                              MemberDecorate 518(Block) 1 Offset 4
+                              MemberDecorate 518(Block) 2 Offset 8
+                              MemberDecorate 518(Block) 3 Offset 16
+                              MemberDecorate 518(Block) 4 Offset 24
+                              MemberDecorate 518(Block) 5 Offset 28
+                              MemberDecorate 518(Block) 6 Offset 32
+                              MemberDecorate 518(Block) 7 Offset 40
+                              Decorate 518(Block) Block
+                              Decorate 520(block) DescriptorSet 0
+                              Decorate 520(block) Binding 1
+                              Decorate 521(si16) SpecId 100
+                              Decorate 522(su16) SpecId 101
                2:             TypeVoid
                3:             TypeFunction 2
-              14:             TypeInt 16 0
+              14:             TypeInt 16 1
               15:             TypePointer Function 14(int)
-              17:             TypeInt 16 1
-              18:             TypeInt 32 0
-              19:     18(int) Constant 3
-              20:             TypeArray 17(int) 19
-              21:     17(int) Constant 273
-              22:     17(int) Constant 65534
-              23:     17(int) Constant 256
-              24:          20 ConstantComposite 21 22 23
-    25(Uniforms):             TypeStruct 18(int)
-              26:             TypePointer Uniform 25(Uniforms)
-              27:     26(ptr) Variable Uniform
-              28:             TypeInt 32 1
-              29:     28(int) Constant 0
-              30:             TypePointer Uniform 18(int)
-              33:             TypePointer Function 20
-              35:             TypePointer Function 17(int)
-              39:             TypeArray 14(int) 19
-              40:     14(int) Constant 65535
-              41:          39 ConstantComposite 40 40 40
-              44:             TypePointer Function 39
-              49:             TypeVector 14(int) 3
-              50:             TypePointer Function 49(ivec3)
-              53:     17(int) Constant 1
-              54:             TypeVector 17(int) 3
-             107:             TypePointer Function 28(int)
-             111:             TypeVector 28(int) 3
-             114:     18(int) Constant 1
-             120:     18(int) Constant 2
-             128:             TypeBool
-             129:             TypePointer Function 128(bool)
-             131:     18(int) Constant 0
-             150:             TypePointer Function 18(int)
-             188:             TypeVector 17(int) 2
-             189:             TypePointer Function 188(ivec2)
-             191:             TypeVector 128(bool) 2
-             192:             TypePointer Function 191(bvec2)
-             195:     17(int) Constant 0
-             196:  188(ivec2) ConstantComposite 195 195
-             197:  188(ivec2) ConstantComposite 53 53
-             199:             TypeVector 14(int) 2
-             200:             TypePointer Function 199(ivec2)
-             203:     14(int) Constant 0
-             204:     14(int) Constant 1
-             205:  199(ivec2) ConstantComposite 203 203
-             206:  199(ivec2) ConstantComposite 204 204
-             212:             TypeVector 28(int) 2
-             213:             TypePointer Function 212(ivec2)
-             223:             TypeVector 18(int) 2
-             226:             TypePointer Function 223(ivec2)
-             238:             TypeFloat 32
-             239:             TypeVector 238(float) 2
-             240:             TypePointer Function 239(fvec2)
-             250:             TypeFloat 64
-             251:             TypeVector 250(float) 2
-             252:             TypePointer Function 251(fvec2)
-             262:             TypeFloat 16
-             263:             TypeVector 262(float) 2
-             264:             TypePointer Function 263(fvec2)
-             274:             TypeInt 64 1
-             275:             TypeVector 274(int) 2
-             276:             TypePointer Function 275(ivec2)
-             286:             TypeInt 64 0
-             287:             TypeVector 286(int) 2
-             290:             TypePointer Function 287(ivec2)
-             317:     17(int) Constant 65535
-             318:  188(ivec2) ConstantComposite 317 317
-             327:   49(ivec3) ConstantComposite 203 203 203
-             369:   128(bool) ConstantTrue
-             376:   128(bool) ConstantFalse
-             377:  191(bvec2) ConstantComposite 376 376
-             389:             TypeVector 128(bool) 3
-             390:  389(bvec3) ConstantComposite 376 376 376
-             392:             TypeVector 262(float) 3
-             393:             TypePointer Function 392(fvec3)
-             396:             TypePointer Function 54(ivec3)
-    398(ResType):             TypeStruct 392(fvec3) 54(ivec3)
-             408:             TypePointer Function 262(float)
-             432:             TypePointer Function 274(int)
-             435:             TypeVector 17(int) 4
-             441:             TypePointer Function 286(int)
-             444:             TypeVector 14(int) 4
-             450:             TypePointer Function 389(bvec3)
-      516(Block):             TypeStruct 54(ivec3) 14(int)
-             517:             TypePointer Uniform 516(Block)
-      518(block):    517(ptr) Variable Uniform
-             519:             TypePointer Input 49(ivec3)
-      520(iu16v):    519(ptr) Variable Input
-             521:             TypePointer Input 17(int)
-       522(ii16):    521(ptr) Variable Input
-       523(si64):    274(int) SpecConstant 4294967286 4294967295
-       524(su64):    286(int) SpecConstant 20 0
-         525(si):     28(int) SpecConstant 4294967291
-         526(su):     18(int) SpecConstant 4
-         527(sb):   128(bool) SpecConstantTrue
-       528(si16):     17(int) SpecConstant 65531
-       529(su16):     14(int) SpecConstant 4
-             530:   128(bool) SpecConstantOp 171 528(si16) 203
-             531:   128(bool) SpecConstantOp 171 529(su16) 203
-             532:     17(int) SpecConstantOp 169 527(sb) 53 195
-             533:     14(int) SpecConstantOp 169 527(sb) 204 203
-             534:     28(int) SpecConstantOp 114 528(si16)
-             535:     18(int) SpecConstantOp 113 529(su16)
-             536:     28(int) SpecConstantOp 128 535 131
-             537:     17(int) SpecConstantOp 114 525(si)
-             538:     17(int) SpecConstantOp 114 525(si)
-             539:     14(int) SpecConstantOp 128 538 203
-             540:     28(int) SpecConstantOp 114 528(si16)
-             541:     18(int) SpecConstantOp 128 540 131
-             542:     18(int) SpecConstantOp 113 529(su16)
-             543:     14(int) SpecConstantOp 113 526(su)
-             544:     17(int) SpecConstantOp 128 543 203
-             545:     14(int) SpecConstantOp 113 526(su)
-             546:    274(int) SpecConstantOp 114 528(si16)
-             547:    286(int) SpecConstantOp 113 529(su16)
-             548:    286(int) Constant 0 0
-             549:    274(int) SpecConstantOp 128 547 548
-             550:     17(int) SpecConstantOp 114 523(si64)
-             551:     17(int) SpecConstantOp 114 523(si64)
-             552:     14(int) SpecConstantOp 128 551 203
-             553:    274(int) SpecConstantOp 114 528(si16)
-             554:    286(int) SpecConstantOp 128 553 548
-             555:    286(int) SpecConstantOp 113 529(su16)
-             556:     14(int) SpecConstantOp 113 524(su64)
-             557:     17(int) SpecConstantOp 128 556 203
-             558:     14(int) SpecConstantOp 113 524(su64)
-             559:     14(int) SpecConstantOp 128 528(si16) 203
-             560:     17(int) SpecConstantOp 128 529(su16) 203
+              17:             TypeInt 32 0
+              18:     17(int) Constant 3
+              19:             TypeArray 14(int) 18
+              20:     14(int) Constant 4294962927
+              21:     14(int) Constant 4294967295
+              22:     14(int) Constant 16384
+              23:          19 ConstantComposite 20 21 22
+    24(Uniforms):             TypeStruct 17(int)
+              25:             TypePointer Uniform 24(Uniforms)
+              26:     25(ptr) Variable Uniform
+              27:             TypeInt 32 1
+              28:     27(int) Constant 0
+              29:             TypePointer Uniform 17(int)
+              32:             TypePointer Function 19
+              36:             TypeInt 16 0
+              37:             TypePointer Function 36(int)
+              39:             TypeArray 36(int) 18
+              40:     36(int) Constant 65535
+              41:     36(int) Constant 32767
+              42:          39 ConstantComposite 40 40 41
+              45:             TypePointer Function 39
+              49:             TypeVector 27(int) 2
+              50:             TypePointer Function 49(ivec2)
+              52:             TypeVector 14(int) 2
+              53:             TypePointer Function 52(ivec2)
+              57:             TypeVector 36(int) 2
+              58:             TypePointer Function 57(ivec2)
+              65:             TypeVector 17(int) 2
+              66:             TypePointer Function 65(ivec2)
+              71:             TypeInt 64 1
+              72:             TypeVector 71(int) 2
+              73:             TypePointer Function 72(ivec2)
+              77:             TypeInt 64 0
+              78:             TypeVector 77(int) 2
+              79:             TypePointer Function 78(ivec2)
+              91:             TypeFloat 16
+              92:             TypeVector 91(float) 2
+              93:             TypePointer Function 92(fvec2)
+              97:             TypeFloat 32
+              98:             TypeVector 97(float) 2
+              99:             TypePointer Function 98(fvec2)
+             103:             TypeFloat 64
+             104:             TypeVector 103(float) 2
+             105:             TypePointer Function 104(fvec2)
+             151:             TypeInt 8 1
+             152:             TypeVector 151(int) 2
+             153:             TypePointer Function 152(ivec2)
+             160:             TypeInt 8 0
+             161:             TypeVector 160(int) 2
+             162:             TypePointer Function 161(ivec2)
+             173:             TypeBool
+             174:             TypeVector 173(bool) 2
+             175:             TypePointer Function 174(bvec2)
+             178:     14(int) Constant 0
+             179:     14(int) Constant 1
+             180:   52(ivec2) ConstantComposite 178 178
+             181:   52(ivec2) ConstantComposite 179 179
+             184:     36(int) Constant 0
+             185:     36(int) Constant 1
+             186:   57(ivec2) ConstantComposite 184 184
+             187:   57(ivec2) ConstantComposite 185 185
+             193:             TypeVector 36(int) 3
+             194:             TypePointer Function 193(ivec3)
+             197:             TypeVector 14(int) 3
+             219:             TypePointer Function 27(int)
+             225:             TypeVector 17(int) 3
+             226:             TypePointer Function 225(ivec3)
+             242:             TypePointer Function 71(int)
+             264:     17(int) Constant 1
+             270:     17(int) Constant 2
+             276:             TypeVector 27(int) 3
+             280:             TypePointer Function 173(bool)
+             282:     17(int) Constant 0
+             296:             TypePointer Function 17(int)
+             354:   52(ivec2) ConstantComposite 21 21
+             363:  193(ivec3) ConstantComposite 184 184 184
+             405:   173(bool) ConstantTrue
+             412:   173(bool) ConstantFalse
+             413:  174(bvec2) ConstantComposite 412 412
+             425:             TypeVector 173(bool) 3
+             426:  425(bvec3) ConstantComposite 412 412 412
+             432:             TypeVector 14(int) 4
+             433:             TypePointer Function 432(ivec4)
+             441:             TypePointer Function 77(int)
+             443:             TypeVector 36(int) 4
+             444:             TypePointer Function 443(ivec4)
+             456:             TypePointer Function 425(bvec3)
+      518(Block):             TypeStruct 14(int) 52(ivec2) 197(ivec3) 432(ivec4) 36(int) 57(ivec2) 193(ivec3) 443(ivec4)
+             519:             TypePointer Uniform 518(Block)
+      520(block):    519(ptr) Variable Uniform
+       521(si16):     14(int) SpecConstant 4294967286
+       522(su16):     36(int) SpecConstant 20
          4(main):           2 Function None 3
                5:             Label
-             512:           2 FunctionCall 6(literal()
-             513:           2 FunctionCall 8(operators()
-             514:           2 FunctionCall 10(typeCast()
-             515:           2 FunctionCall 12(builtinFuncs()
                               Return
                               FunctionEnd
      6(literal():           2 Function None 3
                7:             Label
-         16(u16):     15(ptr) Variable Function
-   34(indexable):     33(ptr) Variable Function
-   45(indexable):     44(ptr) Variable Function
-              31:     30(ptr) AccessChain 27 29
-              32:     18(int) Load 31
-                              Store 34(indexable) 24
-              36:     35(ptr) AccessChain 34(indexable) 32
-              37:     17(int) Load 36
-              38:     14(int) Bitcast 37
-              42:     30(ptr) AccessChain 27 29
-              43:     18(int) Load 42
-                              Store 45(indexable) 41
-              46:     15(ptr) AccessChain 45(indexable) 43
-              47:     14(int) Load 46
-              48:     14(int) IAdd 38 47
-                              Store 16(u16) 48
+         16(i16):     15(ptr) Variable Function
+   33(indexable):     32(ptr) Variable Function
+         38(u16):     37(ptr) Variable Function
+   46(indexable):     45(ptr) Variable Function
+              30:     29(ptr) AccessChain 26 28
+              31:     17(int) Load 30
+                              Store 33(indexable) 23
+              34:     15(ptr) AccessChain 33(indexable) 31
+              35:     14(int) Load 34
+                              Store 16(i16) 35
+              43:     29(ptr) AccessChain 26 28
+              44:     17(int) Load 43
+                              Store 46(indexable) 42
+              47:     37(ptr) AccessChain 46(indexable) 44
+              48:     36(int) Load 47
+                              Store 38(u16) 48
                               Return
                               FunctionEnd
-   8(operators():           2 Function None 3
+  8(typeCast16():           2 Function None 3
                9:             Label
-        51(u16v):     50(ptr) Variable Function
-         57(i16):     35(ptr) Variable Function
-         70(u16):     15(ptr) Variable Function
-          108(i):    107(ptr) Variable Function
-          130(b):    129(ptr) Variable Function
-          151(u):    150(ptr) Variable Function
-              52:   49(ivec3) Load 51(u16v)
-              55:   54(ivec3) CompositeConstruct 53 53 53
-              56:   49(ivec3) IAdd 52 55
-                              Store 51(u16v) 56
-              58:     17(int) Load 57(i16)
-              59:     17(int) ISub 58 53
-                              Store 57(i16) 59
-              60:     17(int) Load 57(i16)
-              61:     17(int) IAdd 60 53
-                              Store 57(i16) 61
-              62:   49(ivec3) Load 51(u16v)
-              63:   54(ivec3) CompositeConstruct 53 53 53
-              64:   49(ivec3) ISub 62 63
-                              Store 51(u16v) 64
-              65:   49(ivec3) Load 51(u16v)
-              66:   49(ivec3) Not 65
-                              Store 51(u16v) 66
-              67:     17(int) Load 57(i16)
-                              Store 57(i16) 67
-              68:   49(ivec3) Load 51(u16v)
-              69:   49(ivec3) SNegate 68
-                              Store 51(u16v) 69
-              71:     17(int) Load 57(i16)
-              72:     14(int) Bitcast 71
-              73:     14(int) Load 70(u16)
-              74:     14(int) IAdd 73 72
-                              Store 70(u16) 74
-              75:   49(ivec3) Load 51(u16v)
-              76:   49(ivec3) Load 51(u16v)
-              77:   49(ivec3) ISub 76 75
-                              Store 51(u16v) 77
-              78:     17(int) Load 57(i16)
-              79:     17(int) Load 57(i16)
-              80:     17(int) IMul 79 78
-                              Store 57(i16) 80
-              81:   49(ivec3) Load 51(u16v)
-              82:   49(ivec3) Load 51(u16v)
-              83:   49(ivec3) UDiv 82 81
-                              Store 51(u16v) 83
-              84:     17(int) Load 57(i16)
-              85:     14(int) Bitcast 84
-              86:   49(ivec3) Load 51(u16v)
-              87:   49(ivec3) CompositeConstruct 85 85 85
-              88:   49(ivec3) UMod 86 87
-                              Store 51(u16v) 88
-              89:   49(ivec3) Load 51(u16v)
-              90:   49(ivec3) Load 51(u16v)
-              91:   49(ivec3) IAdd 89 90
-                              Store 51(u16v) 91
-              92:     17(int) Load 57(i16)
-              93:     14(int) Bitcast 92
-              94:     14(int) Load 70(u16)
-              95:     14(int) ISub 93 94
-                              Store 70(u16) 95
-              96:   49(ivec3) Load 51(u16v)
-              97:     17(int) Load 57(i16)
-              98:     14(int) Bitcast 97
-              99:   49(ivec3) CompositeConstruct 98 98 98
-             100:   49(ivec3) IMul 96 99
-                              Store 51(u16v) 100
-             101:     17(int) Load 57(i16)
-             102:     17(int) Load 57(i16)
-             103:     17(int) IMul 101 102
-                              Store 57(i16) 103
-             104:     17(int) Load 57(i16)
-             105:     17(int) Load 57(i16)
-             106:     17(int) SMod 104 105
-                              Store 57(i16) 106
-             109:     28(int) Load 108(i)
-             110:   49(ivec3) Load 51(u16v)
-             112:  111(ivec3) CompositeConstruct 109 109 109
-             113:   49(ivec3) ShiftLeftLogical 110 112
-                              Store 51(u16v) 113
-             115:     15(ptr) AccessChain 51(u16v) 114
-             116:     14(int) Load 115
-             117:     17(int) Load 57(i16)
-             118:     17(int) ShiftRightArithmetic 117 116
-                              Store 57(i16) 118
-             119:     17(int) Load 57(i16)
-             121:     15(ptr) AccessChain 51(u16v) 120
-             122:     14(int) Load 121
-             123:     17(int) ShiftLeftLogical 119 122
-                              Store 57(i16) 123
-             124:   49(ivec3) Load 51(u16v)
-             125:     17(int) Load 57(i16)
-             126:   54(ivec3) CompositeConstruct 125 125 125
-             127:   49(ivec3) ShiftLeftLogical 124 126
-                              Store 51(u16v) 127
-             132:     15(ptr) AccessChain 51(u16v) 131
-             133:     14(int) Load 132
-             134:     17(int) Load 57(i16)
-             135:     14(int) Bitcast 134
-             136:   128(bool) INotEqual 133 135
-                              Store 130(b) 136
-             137:     17(int) Load 57(i16)
-             138:     14(int) Bitcast 137
-             139:     15(ptr) AccessChain 51(u16v) 131
-             140:     14(int) Load 139
-             141:   128(bool) IEqual 138 140
-                              Store 130(b) 141
-             142:     15(ptr) AccessChain 51(u16v) 131
-             143:     14(int) Load 142
-             144:     15(ptr) AccessChain 51(u16v) 114
-             145:     14(int) Load 144
-             146:   128(bool) UGreaterThan 143 145
-                              Store 130(b) 146
-             147:     17(int) Load 57(i16)
-             148:     28(int) SConvert 147
-             149:     18(int) Bitcast 148
-             152:     18(int) Load 151(u)
-             153:   128(bool) ULessThan 149 152
-                              Store 130(b) 153
-             154:     15(ptr) AccessChain 51(u16v) 114
-             155:     14(int) Load 154
-             156:     15(ptr) AccessChain 51(u16v) 131
-             157:     14(int) Load 156
-             158:   128(bool) UGreaterThanEqual 155 157
-                              Store 130(b) 158
-             159:     17(int) Load 57(i16)
-             160:     28(int) SConvert 159
-             161:     28(int) Load 108(i)
-             162:   128(bool) SLessThanEqual 160 161
-                              Store 130(b) 162
-             163:     17(int) Load 57(i16)
-             164:     14(int) Bitcast 163
-             165:   49(ivec3) Load 51(u16v)
-             166:   49(ivec3) CompositeConstruct 164 164 164
-             167:   49(ivec3) BitwiseOr 165 166
-                              Store 51(u16v) 167
-             168:     17(int) Load 57(i16)
-             169:     14(int) Bitcast 168
-             170:     14(int) Load 70(u16)
-             171:     14(int) BitwiseOr 169 170
-                              Store 70(u16) 171
-             172:     17(int) Load 57(i16)
-             173:     17(int) Load 57(i16)
-             174:     17(int) BitwiseAnd 173 172
-                              Store 57(i16) 174
-             175:   49(ivec3) Load 51(u16v)
-             176:   49(ivec3) Load 51(u16v)
-             177:   49(ivec3) BitwiseAnd 175 176
-                              Store 51(u16v) 177
-             178:     17(int) Load 57(i16)
-             179:     14(int) Bitcast 178
-             180:   49(ivec3) Load 51(u16v)
-             181:   49(ivec3) CompositeConstruct 179 179 179
-             182:   49(ivec3) BitwiseXor 180 181
-                              Store 51(u16v) 182
-             183:   49(ivec3) Load 51(u16v)
-             184:     17(int) Load 57(i16)
-             185:     14(int) Bitcast 184
-             186:   49(ivec3) CompositeConstruct 185 185 185
-             187:   49(ivec3) BitwiseXor 183 186
-                              Store 51(u16v) 187
+        51(i32v):     50(ptr) Variable Function
+        54(i16v):     53(ptr) Variable Function
+        59(u16v):     58(ptr) Variable Function
+        67(u32v):     66(ptr) Variable Function
+        74(i64v):     73(ptr) Variable Function
+        80(u64v):     79(ptr) Variable Function
+        94(f16v):     93(ptr) Variable Function
+       100(f32v):     99(ptr) Variable Function
+       106(f64v):    105(ptr) Variable Function
+        154(i8v):    153(ptr) Variable Function
+        163(u8v):    162(ptr) Variable Function
+         176(bv):    175(ptr) Variable Function
+              55:   52(ivec2) Load 54(i16v)
+              56:   49(ivec2) SConvert 55
+                              Store 51(i32v) 56
+              60:   57(ivec2) Load 59(u16v)
+              61:   49(ivec2) UConvert 60
+              62:   49(ivec2) Bitcast 61
+                              Store 51(i32v) 62
+              63:   52(ivec2) Load 54(i16v)
+              64:   57(ivec2) Bitcast 63
+                              Store 59(u16v) 64
+              68:   52(ivec2) Load 54(i16v)
+              69:   49(ivec2) SConvert 68
+              70:   65(ivec2) Bitcast 69
+                              Store 67(u32v) 70
+              75:   52(ivec2) Load 54(i16v)
+              76:   72(ivec2) SConvert 75
+                              Store 74(i64v) 76
+              81:   52(ivec2) Load 54(i16v)
+              82:   72(ivec2) SConvert 81
+              83:   78(ivec2) Bitcast 82
+                              Store 80(u64v) 83
+              84:   57(ivec2) Load 59(u16v)
+              85:   65(ivec2) UConvert 84
+                              Store 67(u32v) 85
+              86:   57(ivec2) Load 59(u16v)
+              87:   72(ivec2) UConvert 86
+              88:   72(ivec2) Bitcast 87
+                              Store 74(i64v) 88
+              89:   57(ivec2) Load 59(u16v)
+              90:   78(ivec2) UConvert 89
+                              Store 80(u64v) 90
+              95:   52(ivec2) Load 54(i16v)
+              96:   92(fvec2) ConvertSToF 95
+                              Store 94(f16v) 96
+             101:   52(ivec2) Load 54(i16v)
+             102:   98(fvec2) ConvertSToF 101
+                              Store 100(f32v) 102
+             107:   52(ivec2) Load 54(i16v)
+             108:  104(fvec2) ConvertSToF 107
+                              Store 106(f64v) 108
+             109:   57(ivec2) Load 59(u16v)
+             110:   92(fvec2) ConvertUToF 109
+                              Store 94(f16v) 110
+             111:   57(ivec2) Load 59(u16v)
+             112:   98(fvec2) ConvertUToF 111
+                              Store 100(f32v) 112
+             113:   57(ivec2) Load 59(u16v)
+             114:  104(fvec2) ConvertUToF 113
+                              Store 106(f64v) 114
+             115:   52(ivec2) Load 54(i16v)
+             116:   49(ivec2) SConvert 115
+                              Store 51(i32v) 116
+             117:   57(ivec2) Load 59(u16v)
+             118:   49(ivec2) UConvert 117
+             119:   49(ivec2) Bitcast 118
+                              Store 51(i32v) 119
+             120:   52(ivec2) Load 54(i16v)
+             121:   57(ivec2) Bitcast 120
+                              Store 59(u16v) 121
+             122:   52(ivec2) Load 54(i16v)
+             123:   49(ivec2) SConvert 122
+             124:   65(ivec2) Bitcast 123
+                              Store 67(u32v) 124
+             125:   52(ivec2) Load 54(i16v)
+             126:   72(ivec2) SConvert 125
+                              Store 74(i64v) 126
+             127:   52(ivec2) Load 54(i16v)
+             128:   72(ivec2) SConvert 127
+             129:   78(ivec2) Bitcast 128
+                              Store 80(u64v) 129
+             130:   57(ivec2) Load 59(u16v)
+             131:   65(ivec2) UConvert 130
+                              Store 67(u32v) 131
+             132:   57(ivec2) Load 59(u16v)
+             133:   72(ivec2) UConvert 132
+             134:   72(ivec2) Bitcast 133
+                              Store 74(i64v) 134
+             135:   57(ivec2) Load 59(u16v)
+             136:   72(ivec2) UConvert 135
+             137:   72(ivec2) Bitcast 136
+             138:   78(ivec2) Bitcast 137
+                              Store 80(u64v) 138
+             139:   52(ivec2) Load 54(i16v)
+             140:   92(fvec2) ConvertSToF 139
+                              Store 94(f16v) 140
+             141:   52(ivec2) Load 54(i16v)
+             142:   98(fvec2) ConvertSToF 141
+                              Store 100(f32v) 142
+             143:   52(ivec2) Load 54(i16v)
+             144:  104(fvec2) ConvertSToF 143
+                              Store 106(f64v) 144
+             145:   57(ivec2) Load 59(u16v)
+             146:   92(fvec2) ConvertUToF 145
+                              Store 94(f16v) 146
+             147:   57(ivec2) Load 59(u16v)
+             148:   98(fvec2) ConvertUToF 147
+                              Store 100(f32v) 148
+             149:   57(ivec2) Load 59(u16v)
+             150:  104(fvec2) ConvertUToF 149
+                              Store 106(f64v) 150
+             155:   52(ivec2) Load 54(i16v)
+             156:  152(ivec2) SConvert 155
+                              Store 154(i8v) 156
+             157:   57(ivec2) Load 59(u16v)
+             158:  152(ivec2) UConvert 157
+             159:  152(ivec2) Bitcast 158
+                              Store 154(i8v) 159
+             164:   52(ivec2) Load 54(i16v)
+             165:  152(ivec2) SConvert 164
+             166:  161(ivec2) Bitcast 165
+                              Store 163(u8v) 166
+             167:   57(ivec2) Load 59(u16v)
+             168:  161(ivec2) UConvert 167
+                              Store 163(u8v) 168
+             169:   57(ivec2) Load 59(u16v)
+             170:  161(ivec2) UConvert 169
+             171:   52(ivec2) UConvert 170
+             172:   52(ivec2) Bitcast 171
+                              Store 54(i16v) 172
+             177:  174(bvec2) Load 176(bv)
+             182:   52(ivec2) Select 177 181 180
+                              Store 54(i16v) 182
+             183:  174(bvec2) Load 176(bv)
+             188:   57(ivec2) Select 183 187 186
+                              Store 59(u16v) 188
+             189:   52(ivec2) Load 54(i16v)
+             190:  174(bvec2) INotEqual 189 186
+                              Store 176(bv) 190
+             191:   57(ivec2) Load 59(u16v)
+             192:  174(bvec2) INotEqual 191 186
+                              Store 176(bv) 192
                               Return
                               FunctionEnd
-   10(typeCast():           2 Function None 3
+  10(operators():           2 Function None 3
               11:             Label
-       190(i16v):    189(ptr) Variable Function
-         193(bv):    192(ptr) Variable Function
-       201(u16v):    200(ptr) Variable Function
-         214(iv):    213(ptr) Variable Function
+       195(u16v):    194(ptr) Variable Function
+        200(i16):     15(ptr) Variable Function
+          220(i):    219(ptr) Variable Function
          227(uv):    226(ptr) Variable Function
-         241(fv):    240(ptr) Variable Function
-         253(dv):    252(ptr) Variable Function
-       265(f16v):    264(ptr) Variable Function
-       277(i64v):    276(ptr) Variable Function
-       291(u64v):    290(ptr) Variable Function
-             194:  191(bvec2) Load 193(bv)
-             198:  188(ivec2) Select 194 197 196
-                              Store 190(i16v) 198
-             202:  191(bvec2) Load 193(bv)
-             207:  199(ivec2) Select 202 206 205
-                              Store 201(u16v) 207
-             208:  188(ivec2) Load 190(i16v)
-             209:  191(bvec2) INotEqual 208 205
-                              Store 193(bv) 209
-             210:  199(ivec2) Load 201(u16v)
-             211:  191(bvec2) INotEqual 210 205
-                              Store 193(bv) 211
-             215:  212(ivec2) Load 214(iv)
-             216:  188(ivec2) SConvert 215
-                              Store 190(i16v) 216
-             217:  212(ivec2) Load 214(iv)
-             218:  188(ivec2) SConvert 217
-             219:  199(ivec2) Bitcast 218
-                              Store 201(u16v) 219
-             220:  188(ivec2) Load 190(i16v)
-             221:  212(ivec2) SConvert 220
-                              Store 214(iv) 221
-             222:  199(ivec2) Load 201(u16v)
-             224:  223(ivec2) UConvert 222
-             225:  212(ivec2) Bitcast 224
-                              Store 214(iv) 225
-             228:  223(ivec2) Load 227(uv)
-             229:  199(ivec2) UConvert 228
-             230:  188(ivec2) Bitcast 229
-                              Store 190(i16v) 230
-             231:  223(ivec2) Load 227(uv)
-             232:  199(ivec2) UConvert 231
-                              Store 201(u16v) 232
-             233:  188(ivec2) Load 190(i16v)
-             234:  212(ivec2) SConvert 233
-             235:  223(ivec2) Bitcast 234
-                              Store 227(uv) 235
-             236:  199(ivec2) Load 201(u16v)
-             237:  223(ivec2) UConvert 236
+        243(i64):    242(ptr) Variable Function
+          281(b):    280(ptr) Variable Function
+             196:  193(ivec3) Load 195(u16v)
+             198:  197(ivec3) CompositeConstruct 179 179 179
+             199:  193(ivec3) IAdd 196 198
+                              Store 195(u16v) 199
+             201:     14(int) Load 200(i16)
+             202:     14(int) ISub 201 179
+                              Store 200(i16) 202
+             203:     14(int) Load 200(i16)
+             204:     14(int) IAdd 203 179
+                              Store 200(i16) 204
+             205:  193(ivec3) Load 195(u16v)
+             206:  197(ivec3) CompositeConstruct 179 179 179
+             207:  193(ivec3) ISub 205 206
+                              Store 195(u16v) 207
+             208:  193(ivec3) Load 195(u16v)
+             209:  193(ivec3) Not 208
+                              Store 195(u16v) 209
+             210:     14(int) Load 200(i16)
+                              Store 200(i16) 210
+             211:  193(ivec3) Load 195(u16v)
+             212:  193(ivec3) SNegate 211
+                              Store 195(u16v) 212
+             213:     14(int) Load 200(i16)
+             214:     14(int) Load 200(i16)
+             215:     14(int) IAdd 214 213
+                              Store 200(i16) 215
+             216:  193(ivec3) Load 195(u16v)
+             217:  193(ivec3) Load 195(u16v)
+             218:  193(ivec3) ISub 217 216
+                              Store 195(u16v) 218
+             221:     14(int) Load 200(i16)
+             222:     27(int) SConvert 221
+             223:     27(int) Load 220(i)
+             224:     27(int) IMul 223 222
+                              Store 220(i) 224
+             228:  193(ivec3) Load 195(u16v)
+             229:  225(ivec3) UConvert 228
+             230:  225(ivec3) Load 227(uv)
+             231:  225(ivec3) UDiv 230 229
+                              Store 227(uv) 231
+             232:     14(int) Load 200(i16)
+             233:     27(int) SConvert 232
+             234:     17(int) Bitcast 233
+             235:  225(ivec3) Load 227(uv)
+             236:  225(ivec3) CompositeConstruct 234 234 234
+             237:  225(ivec3) UMod 235 236
                               Store 227(uv) 237
-             242:  239(fvec2) Load 241(fv)
-             243:  188(ivec2) ConvertFToS 242
-                              Store 190(i16v) 243
-             244:  239(fvec2) Load 241(fv)
-             245:  199(ivec2) ConvertFToU 244
-                              Store 201(u16v) 245
-             246:  188(ivec2) Load 190(i16v)
-             247:  239(fvec2) ConvertSToF 246
-                              Store 241(fv) 247
-             248:  199(ivec2) Load 201(u16v)
-             249:  239(fvec2) ConvertUToF 248
-                              Store 241(fv) 249
-             254:  251(fvec2) Load 253(dv)
-             255:  188(ivec2) ConvertFToS 254
-                              Store 190(i16v) 255
-             256:  251(fvec2) Load 253(dv)
-             257:  199(ivec2) ConvertFToU 256
-                              Store 201(u16v) 257
-             258:  188(ivec2) Load 190(i16v)
-             259:  251(fvec2) ConvertSToF 258
-                              Store 253(dv) 259
-             260:  199(ivec2) Load 201(u16v)
-             261:  251(fvec2) ConvertUToF 260
-                              Store 253(dv) 261
-             266:  263(fvec2) Load 265(f16v)
-             267:  188(ivec2) ConvertFToS 266
-                              Store 190(i16v) 267
-             268:  263(fvec2) Load 265(f16v)
-             269:  199(ivec2) ConvertFToU 268
-                              Store 201(u16v) 269
-             270:  188(ivec2) Load 190(i16v)
-             271:  263(fvec2) ConvertSToF 270
-                              Store 265(f16v) 271
-             272:  199(ivec2) Load 201(u16v)
-             273:  263(fvec2) ConvertUToF 272
-                              Store 265(f16v) 273
-             278:  275(ivec2) Load 277(i64v)
-             279:  188(ivec2) SConvert 278
-                              Store 190(i16v) 279
-             280:  275(ivec2) Load 277(i64v)
-             281:  188(ivec2) SConvert 280
-             282:  199(ivec2) Bitcast 281
-                              Store 201(u16v) 282
-             283:  188(ivec2) Load 190(i16v)
-             284:  275(ivec2) SConvert 283
-                              Store 277(i64v) 284
-             285:  199(ivec2) Load 201(u16v)
-             288:  287(ivec2) UConvert 285
-             289:  275(ivec2) Bitcast 288
-                              Store 277(i64v) 289
-             292:  287(ivec2) Load 291(u64v)
-             293:  199(ivec2) UConvert 292
-             294:  188(ivec2) Bitcast 293
-                              Store 190(i16v) 294
-             295:  287(ivec2) Load 291(u64v)
-             296:  199(ivec2) UConvert 295
-                              Store 201(u16v) 296
-             297:  188(ivec2) Load 190(i16v)
-             298:  275(ivec2) SConvert 297
-             299:  287(ivec2) Bitcast 298
-                              Store 291(u64v) 299
-             300:  199(ivec2) Load 201(u16v)
-             301:  287(ivec2) UConvert 300
-                              Store 291(u64v) 301
-             302:  199(ivec2) Load 201(u16v)
-             303:  188(ivec2) Bitcast 302
-                              Store 190(i16v) 303
-             304:  188(ivec2) Load 190(i16v)
-             305:  199(ivec2) Bitcast 304
-                              Store 201(u16v) 305
+             238:  193(ivec3) Load 195(u16v)
+             239:  225(ivec3) UConvert 238
+             240:  225(ivec3) Load 227(uv)
+             241:  225(ivec3) IAdd 239 240
+                              Store 227(uv) 241
+             244:     14(int) Load 200(i16)
+             245:     71(int) SConvert 244
+             246:     71(int) Load 243(i64)
+             247:     71(int) ISub 245 246
+                              Store 243(i64) 247
+             248:  193(ivec3) Load 195(u16v)
+             249:  225(ivec3) UConvert 248
+             250:  225(ivec3) Load 227(uv)
+             251:  225(ivec3) IMul 249 250
+                              Store 227(uv) 251
+             252:     14(int) Load 200(i16)
+             253:     71(int) SConvert 252
+             254:     71(int) Load 243(i64)
+             255:     71(int) IMul 253 254
+                              Store 243(i64) 255
+             256:     14(int) Load 200(i16)
+             257:     27(int) SConvert 256
+             258:     27(int) Load 220(i)
+             259:     27(int) SMod 257 258
+                              Store 220(i) 259
+             260:     14(int) Load 200(i16)
+             261:  193(ivec3) Load 195(u16v)
+             262:  197(ivec3) CompositeConstruct 260 260 260
+             263:  193(ivec3) ShiftLeftLogical 261 262
+                              Store 195(u16v) 263
+             265:     37(ptr) AccessChain 195(u16v) 264
+             266:     36(int) Load 265
+             267:     14(int) Load 200(i16)
+             268:     14(int) ShiftRightArithmetic 267 266
+                              Store 200(i16) 268
+             269:     14(int) Load 200(i16)
+             271:     37(ptr) AccessChain 195(u16v) 270
+             272:     36(int) Load 271
+             273:     14(int) ShiftLeftLogical 269 272
+                              Store 200(i16) 273
+             274:  193(ivec3) Load 195(u16v)
+             275:     27(int) Load 220(i)
+             277:  276(ivec3) CompositeConstruct 275 275 275
+             278:  193(ivec3) ShiftLeftLogical 274 277
+             279:  225(ivec3) UConvert 278
+                              Store 227(uv) 279
+             283:     37(ptr) AccessChain 195(u16v) 282
+             284:     36(int) Load 283
+             285:     14(int) Load 200(i16)
+             286:     36(int) Bitcast 285
+             287:   173(bool) INotEqual 284 286
+                              Store 281(b) 287
+             288:     14(int) Load 200(i16)
+             289:     36(int) Bitcast 288
+             290:     37(ptr) AccessChain 195(u16v) 282
+             291:     36(int) Load 290
+             292:   173(bool) IEqual 289 291
+                              Store 281(b) 292
+             293:     37(ptr) AccessChain 195(u16v) 282
+             294:     36(int) Load 293
+             295:     17(int) UConvert 294
+             297:    296(ptr) AccessChain 227(uv) 264
+             298:     17(int) Load 297
+             299:   173(bool) UGreaterThan 295 298
+                              Store 281(b) 299
+             300:     14(int) Load 200(i16)
+             301:     27(int) SConvert 300
+             302:     27(int) Load 220(i)
+             303:   173(bool) SLessThan 301 302
+                              Store 281(b) 303
+             304:     37(ptr) AccessChain 195(u16v) 264
+             305:     36(int) Load 304
+             306:     17(int) UConvert 305
+             307:    296(ptr) AccessChain 227(uv) 282
+             308:     17(int) Load 307
+             309:   173(bool) UGreaterThanEqual 306 308
+                              Store 281(b) 309
+             310:     14(int) Load 200(i16)
+             311:     27(int) SConvert 310
+             312:     27(int) Load 220(i)
+             313:   173(bool) SLessThanEqual 311 312
+                              Store 281(b) 313
+             314:     14(int) Load 200(i16)
+             315:     27(int) SConvert 314
+             316:     17(int) Bitcast 315
+             317:  225(ivec3) Load 227(uv)
+             318:  225(ivec3) CompositeConstruct 316 316 316
+             319:  225(ivec3) BitwiseOr 317 318
+                              Store 227(uv) 319
+             320:     14(int) Load 200(i16)
+             321:     27(int) SConvert 320
+             322:     27(int) Load 220(i)
+             323:     27(int) BitwiseOr 321 322
+                              Store 220(i) 323
+             324:     14(int) Load 200(i16)
+             325:     71(int) SConvert 324
+             326:     71(int) Load 243(i64)
+             327:     71(int) BitwiseAnd 326 325
+                              Store 243(i64) 327
+             328:  193(ivec3) Load 195(u16v)
+             329:  225(ivec3) UConvert 328
+             330:  225(ivec3) Load 227(uv)
+             331:  225(ivec3) BitwiseAnd 329 330
+                              Store 227(uv) 331
+             332:     14(int) Load 200(i16)
+             333:     27(int) SConvert 332
+             334:     17(int) Bitcast 333
+             335:  225(ivec3) Load 227(uv)
+             336:  225(ivec3) CompositeConstruct 334 334 334
+             337:  225(ivec3) BitwiseXor 335 336
+                              Store 227(uv) 337
+             338:  193(ivec3) Load 195(u16v)
+             339:     14(int) Load 200(i16)
+             340:     36(int) Bitcast 339
+             341:  193(ivec3) CompositeConstruct 340 340 340
+             342:  193(ivec3) BitwiseXor 338 341
+                              Store 195(u16v) 342
                               Return
                               FunctionEnd
 12(builtinFuncs():           2 Function None 3
               13:             Label
-       306(i16v):    189(ptr) Variable Function
-        312(i16):     35(ptr) Variable Function
-       320(u16v):     50(ptr) Variable Function
-        322(u16):     15(ptr) Variable Function
-       394(f16v):    393(ptr) Variable Function
-        397(exp):    396(ptr) Variable Function
-      419(packi):    107(ptr) Variable Function
-      424(packu):    150(ptr) Variable Function
-    433(packi64):    432(ptr) Variable Function
-    442(packu64):    441(ptr) Variable Function
-         451(bv):    450(ptr) Variable Function
-             307:  188(ivec2) Load 306(i16v)
-             308:  188(ivec2) ExtInst 1(GLSL.std.450) 5(SAbs) 307
-                              Store 306(i16v) 308
-             309:  188(ivec2) Load 306(i16v)
-             310:  188(ivec2) ExtInst 1(GLSL.std.450) 7(SSign) 309
-                              Store 306(i16v) 310
-             311:  188(ivec2) Load 306(i16v)
-             313:     17(int) Load 312(i16)
-             314:  188(ivec2) CompositeConstruct 313 313
-             315:  188(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 311 314
-                              Store 306(i16v) 315
-             316:  188(ivec2) Load 306(i16v)
-             319:  188(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 316 318
-                              Store 306(i16v) 319
-             321:   49(ivec3) Load 320(u16v)
-             323:     14(int) Load 322(u16)
-             324:   49(ivec3) CompositeConstruct 323 323 323
-             325:   49(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 321 324
-                              Store 320(u16v) 325
-             326:   49(ivec3) Load 320(u16v)
-             328:   49(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 326 327
-                              Store 320(u16v) 328
-             329:  188(ivec2) Load 306(i16v)
-             330:     17(int) Load 312(i16)
-             331:  188(ivec2) CompositeConstruct 330 330
-             332:  188(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 329 331
-                              Store 306(i16v) 332
-             333:  188(ivec2) Load 306(i16v)
-             334:  188(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 333 318
-                              Store 306(i16v) 334
-             335:   49(ivec3) Load 320(u16v)
-             336:     14(int) Load 322(u16)
-             337:   49(ivec3) CompositeConstruct 336 336 336
-             338:   49(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 335 337
-                              Store 320(u16v) 338
-             339:   49(ivec3) Load 320(u16v)
-             340:   49(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 339 327
-                              Store 320(u16v) 340
-             341:  188(ivec2) Load 306(i16v)
-             342:     17(int) Load 312(i16)
-             343:     17(int) SNegate 342
-             344:     17(int) Load 312(i16)
-             345:  188(ivec2) CompositeConstruct 343 343
-             346:  188(ivec2) CompositeConstruct 344 344
-             347:  188(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 341 345 346
-                              Store 306(i16v) 347
-             348:  188(ivec2) Load 306(i16v)
-             349:  188(ivec2) Load 306(i16v)
-             350:  188(ivec2) SNegate 349
-             351:  188(ivec2) Load 306(i16v)
-             352:  188(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 348 350 351
-                              Store 306(i16v) 352
-             353:   49(ivec3) Load 320(u16v)
-             354:     14(int) Load 322(u16)
-             355:     14(int) SNegate 354
-             356:     14(int) Load 322(u16)
-             357:   49(ivec3) CompositeConstruct 355 355 355
-             358:   49(ivec3) CompositeConstruct 356 356 356
-             359:   49(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 353 357 358
-                              Store 320(u16v) 359
-             360:   49(ivec3) Load 320(u16v)
-             361:   49(ivec3) Load 320(u16v)
-             362:   49(ivec3) SNegate 361
-             363:   49(ivec3) Load 320(u16v)
-             364:   49(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 360 362 363
-                              Store 320(u16v) 364
-             365:     35(ptr) AccessChain 306(i16v) 131
-             366:     17(int) Load 365
-             367:     35(ptr) AccessChain 306(i16v) 114
-             368:     17(int) Load 367
-             370:     17(int) Select 369 368 366
-                              Store 312(i16) 370
-             371:     17(int) Load 312(i16)
-             372:  188(ivec2) CompositeConstruct 371 371
-             373:     17(int) Load 312(i16)
-             374:     17(int) SNegate 373
-             375:  188(ivec2) CompositeConstruct 374 374
-             378:  188(ivec2) Select 377 375 372
-                              Store 306(i16v) 378
-             379:     15(ptr) AccessChain 320(u16v) 131
-             380:     14(int) Load 379
-             381:     15(ptr) AccessChain 320(u16v) 114
-             382:     14(int) Load 381
-             383:     14(int) Select 369 382 380
-                              Store 322(u16) 383
-             384:     14(int) Load 322(u16)
-             385:   49(ivec3) CompositeConstruct 384 384 384
-             386:     14(int) Load 322(u16)
-             387:     14(int) SNegate 386
-             388:   49(ivec3) CompositeConstruct 387 387 387
-             391:   49(ivec3) Select 390 388 385
-                              Store 320(u16v) 391
-             395:  392(fvec3) Load 394(f16v)
-             399:398(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 395
-             400:   54(ivec3) CompositeExtract 399 1
-                              Store 397(exp) 400
-             401:  392(fvec3) CompositeExtract 399 0
-                              Store 394(f16v) 401
-             402:  392(fvec3) Load 394(f16v)
-             403:   54(ivec3) Load 397(exp)
-             404:  392(fvec3) ExtInst 1(GLSL.std.450) 53(Ldexp) 402 403
-                              Store 394(f16v) 404
-             405:  392(fvec3) Load 394(f16v)
-             406:  263(fvec2) VectorShuffle 405 405 0 1
-             407:  188(ivec2) Bitcast 406
-                              Store 306(i16v) 407
-             409:    408(ptr) AccessChain 394(f16v) 120
-             410:  262(float) Load 409
-             411:     14(int) Bitcast 410
-             412:     15(ptr) AccessChain 320(u16v) 131
-                              Store 412 411
-             413:  188(ivec2) Load 306(i16v)
-             414:  263(fvec2) Bitcast 413
-             415:  392(fvec3) Load 394(f16v)
-             416:  392(fvec3) VectorShuffle 415 414 3 4 2
-                              Store 394(f16v) 416
-             417:   49(ivec3) Load 320(u16v)
-             418:  392(fvec3) Bitcast 417
-                              Store 394(f16v) 418
-             420:  188(ivec2) Load 306(i16v)
-             421:     28(int) Bitcast 420
-                              Store 419(packi) 421
-             422:     28(int) Load 419(packi)
-             423:  188(ivec2) Bitcast 422
-                              Store 306(i16v) 423
-             425:   49(ivec3) Load 320(u16v)
-             426:  199(ivec2) VectorShuffle 425 425 0 1
-             427:     18(int) Bitcast 426
-                              Store 424(packu) 427
-             428:     18(int) Load 424(packu)
-             429:  199(ivec2) Bitcast 428
-             430:   49(ivec3) Load 320(u16v)
-             431:   49(ivec3) VectorShuffle 430 429 3 4 2
-                              Store 320(u16v) 431
-             434:     17(int) Load 312(i16)
-             436:  435(ivec4) CompositeConstruct 434 434 434 434
-             437:    274(int) Bitcast 436
-                              Store 433(packi64) 437
-             438:    274(int) Load 433(packi64)
-             439:  435(ivec4) Bitcast 438
-             440:  188(ivec2) VectorShuffle 439 439 0 1
-                              Store 306(i16v) 440
-             443:     14(int) Load 322(u16)
-             445:  444(ivec4) CompositeConstruct 443 443 443 443
-             446:    286(int) Bitcast 445
-                              Store 442(packu64) 446
-             447:    286(int) Load 442(packu64)
-             448:  444(ivec4) Bitcast 447
-             449:   49(ivec3) VectorShuffle 448 448 0 1 2
-                              Store 320(u16v) 449
-             452:   49(ivec3) Load 320(u16v)
-             453:     14(int) Load 322(u16)
-             454:   49(ivec3) CompositeConstruct 453 453 453
-             455:  389(bvec3) ULessThan 452 454
-                              Store 451(bv) 455
-             456:  188(ivec2) Load 306(i16v)
-             457:     17(int) Load 312(i16)
-             458:  188(ivec2) CompositeConstruct 457 457
-             459:  191(bvec2) SLessThan 456 458
-             460:  389(bvec3) Load 451(bv)
-             461:  389(bvec3) VectorShuffle 460 459 3 4 2
-                              Store 451(bv) 461
-             462:   49(ivec3) Load 320(u16v)
-             463:     14(int) Load 322(u16)
-             464:   49(ivec3) CompositeConstruct 463 463 463
-             465:  389(bvec3) ULessThanEqual 462 464
-                              Store 451(bv) 465
-             466:  188(ivec2) Load 306(i16v)
-             467:     17(int) Load 312(i16)
-             468:  188(ivec2) CompositeConstruct 467 467
-             469:  191(bvec2) SLessThanEqual 466 468
-             470:  389(bvec3) Load 451(bv)
-             471:  389(bvec3) VectorShuffle 470 469 3 4 2
-                              Store 451(bv) 471
-             472:   49(ivec3) Load 320(u16v)
-             473:     14(int) Load 322(u16)
-             474:   49(ivec3) CompositeConstruct 473 473 473
-             475:  389(bvec3) UGreaterThan 472 474
-                              Store 451(bv) 475
-             476:  188(ivec2) Load 306(i16v)
-             477:     17(int) Load 312(i16)
-             478:  188(ivec2) CompositeConstruct 477 477
-             479:  191(bvec2) SGreaterThan 476 478
-             480:  389(bvec3) Load 451(bv)
-             481:  389(bvec3) VectorShuffle 480 479 3 4 2
-                              Store 451(bv) 481
-             482:   49(ivec3) Load 320(u16v)
-             483:     14(int) Load 322(u16)
-             484:   49(ivec3) CompositeConstruct 483 483 483
-             485:  389(bvec3) UGreaterThanEqual 482 484
-                              Store 451(bv) 485
-             486:  188(ivec2) Load 306(i16v)
-             487:     17(int) Load 312(i16)
-             488:  188(ivec2) CompositeConstruct 487 487
-             489:  191(bvec2) SGreaterThanEqual 486 488
-             490:  389(bvec3) Load 451(bv)
-             491:  389(bvec3) VectorShuffle 490 489 3 4 2
-                              Store 451(bv) 491
-             492:   49(ivec3) Load 320(u16v)
-             493:     14(int) Load 322(u16)
-             494:   49(ivec3) CompositeConstruct 493 493 493
-             495:  389(bvec3) IEqual 492 494
-                              Store 451(bv) 495
-             496:  188(ivec2) Load 306(i16v)
-             497:     17(int) Load 312(i16)
-             498:  188(ivec2) CompositeConstruct 497 497
-             499:  191(bvec2) IEqual 496 498
-             500:  389(bvec3) Load 451(bv)
-             501:  389(bvec3) VectorShuffle 500 499 3 4 2
-                              Store 451(bv) 501
-             502:   49(ivec3) Load 320(u16v)
-             503:     14(int) Load 322(u16)
-             504:   49(ivec3) CompositeConstruct 503 503 503
-             505:  389(bvec3) INotEqual 502 504
-                              Store 451(bv) 505
-             506:  188(ivec2) Load 306(i16v)
-             507:     17(int) Load 312(i16)
-             508:  188(ivec2) CompositeConstruct 507 507
-             509:  191(bvec2) INotEqual 506 508
-             510:  389(bvec3) Load 451(bv)
-             511:  389(bvec3) VectorShuffle 510 509 3 4 2
-                              Store 451(bv) 511
+       343(i16v):     53(ptr) Variable Function
+        346(i16):     15(ptr) Variable Function
+       356(u16v):    194(ptr) Variable Function
+        358(u16):     37(ptr) Variable Function
+        428(i32):    219(ptr) Variable Function
+        431(i64):    242(ptr) Variable Function
+      434(i16v4):    433(ptr) Variable Function
+        437(u32):    296(ptr) Variable Function
+      438(u16v2):     58(ptr) Variable Function
+        442(u64):    441(ptr) Variable Function
+      445(u16v4):    444(ptr) Variable Function
+         457(bv):    456(ptr) Variable Function
+             344:   52(ivec2) Load 343(i16v)
+             345:   52(ivec2) ExtInst 1(GLSL.std.450) 5(SAbs) 344
+                              Store 343(i16v) 345
+             347:     14(int) Load 346(i16)
+             348:     14(int) ExtInst 1(GLSL.std.450) 7(SSign) 347
+                              Store 346(i16) 348
+             349:   52(ivec2) Load 343(i16v)
+             350:     14(int) Load 346(i16)
+             351:   52(ivec2) CompositeConstruct 350 350
+             352:   52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 349 351
+                              Store 343(i16v) 352
+             353:   52(ivec2) Load 343(i16v)
+             355:   52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 353 354
+                              Store 343(i16v) 355
+             357:  193(ivec3) Load 356(u16v)
+             359:     36(int) Load 358(u16)
+             360:  193(ivec3) CompositeConstruct 359 359 359
+             361:  193(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 357 360
+                              Store 356(u16v) 361
+             362:  193(ivec3) Load 356(u16v)
+             364:  193(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 362 363
+                              Store 356(u16v) 364
+             365:   52(ivec2) Load 343(i16v)
+             366:     14(int) Load 346(i16)
+             367:   52(ivec2) CompositeConstruct 366 366
+             368:   52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 365 367
+                              Store 343(i16v) 368
+             369:   52(ivec2) Load 343(i16v)
+             370:   52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 369 354
+                              Store 343(i16v) 370
+             371:  193(ivec3) Load 356(u16v)
+             372:     36(int) Load 358(u16)
+             373:  193(ivec3) CompositeConstruct 372 372 372
+             374:  193(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 371 373
+                              Store 356(u16v) 374
+             375:  193(ivec3) Load 356(u16v)
+             376:  193(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 375 363
+                              Store 356(u16v) 376
+             377:   52(ivec2) Load 343(i16v)
+             378:     14(int) Load 346(i16)
+             379:     14(int) SNegate 378
+             380:     14(int) Load 346(i16)
+             381:   52(ivec2) CompositeConstruct 379 379
+             382:   52(ivec2) CompositeConstruct 380 380
+             383:   52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 377 381 382
+                              Store 343(i16v) 383
+             384:   52(ivec2) Load 343(i16v)
+             385:   52(ivec2) Load 343(i16v)
+             386:   52(ivec2) SNegate 385
+             387:   52(ivec2) Load 343(i16v)
+             388:   52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 384 386 387
+                              Store 343(i16v) 388
+             389:  193(ivec3) Load 356(u16v)
+             390:     36(int) Load 358(u16)
+             391:     36(int) SNegate 390
+             392:     36(int) Load 358(u16)
+             393:  193(ivec3) CompositeConstruct 391 391 391
+             394:  193(ivec3) CompositeConstruct 392 392 392
+             395:  193(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 389 393 394
+                              Store 356(u16v) 395
+             396:  193(ivec3) Load 356(u16v)
+             397:  193(ivec3) Load 356(u16v)
+             398:  193(ivec3) SNegate 397
+             399:  193(ivec3) Load 356(u16v)
+             400:  193(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 396 398 399
+                              Store 356(u16v) 400
+             401:     15(ptr) AccessChain 343(i16v) 282
+             402:     14(int) Load 401
+             403:     15(ptr) AccessChain 343(i16v) 264
+             404:     14(int) Load 403
+             406:     14(int) Select 405 404 402
+                              Store 346(i16) 406
+             407:     14(int) Load 346(i16)
+             408:   52(ivec2) CompositeConstruct 407 407
+             409:     14(int) Load 346(i16)
+             410:     14(int) SNegate 409
+             411:   52(ivec2) CompositeConstruct 410 410
+             414:   52(ivec2) Select 413 411 408
+                              Store 343(i16v) 414
+             415:     37(ptr) AccessChain 356(u16v) 282
+             416:     36(int) Load 415
+             417:     37(ptr) AccessChain 356(u16v) 264
+             418:     36(int) Load 417
+             419:     36(int) Select 405 418 416
+                              Store 358(u16) 419
+             420:     36(int) Load 358(u16)
+             421:  193(ivec3) CompositeConstruct 420 420 420
+             422:     36(int) Load 358(u16)
+             423:     36(int) SNegate 422
+             424:  193(ivec3) CompositeConstruct 423 423 423
+             427:  193(ivec3) Select 426 424 421
+                              Store 356(u16v) 427
+             429:   52(ivec2) Load 343(i16v)
+             430:     27(int) Bitcast 429
+                              Store 428(i32) 430
+             435:  432(ivec4) Load 434(i16v4)
+             436:     71(int) Bitcast 435
+                              Store 431(i64) 436
+             439:   57(ivec2) Load 438(u16v2)
+             440:     17(int) Bitcast 439
+                              Store 437(u32) 440
+             446:  443(ivec4) Load 445(u16v4)
+             447:     77(int) Bitcast 446
+                              Store 442(u64) 447
+             448:     27(int) Load 428(i32)
+             449:   52(ivec2) Bitcast 448
+                              Store 343(i16v) 449
+             450:     71(int) Load 431(i64)
+             451:  432(ivec4) Bitcast 450
+                              Store 434(i16v4) 451
+             452:     17(int) Load 437(u32)
+             453:   57(ivec2) Bitcast 452
+                              Store 438(u16v2) 453
+             454:     77(int) Load 442(u64)
+             455:  443(ivec4) Bitcast 454
+                              Store 445(u16v4) 455
+             458:  193(ivec3) Load 356(u16v)
+             459:     36(int) Load 358(u16)
+             460:  193(ivec3) CompositeConstruct 459 459 459
+             461:  425(bvec3) ULessThan 458 460
+                              Store 457(bv) 461
+             462:   52(ivec2) Load 343(i16v)
+             463:     14(int) Load 346(i16)
+             464:   52(ivec2) CompositeConstruct 463 463
+             465:  174(bvec2) SLessThan 462 464
+             466:  425(bvec3) Load 457(bv)
+             467:  425(bvec3) VectorShuffle 466 465 3 4 2
+                              Store 457(bv) 467
+             468:  193(ivec3) Load 356(u16v)
+             469:     36(int) Load 358(u16)
+             470:  193(ivec3) CompositeConstruct 469 469 469
+             471:  425(bvec3) ULessThanEqual 468 470
+                              Store 457(bv) 471
+             472:   52(ivec2) Load 343(i16v)
+             473:     14(int) Load 346(i16)
+             474:   52(ivec2) CompositeConstruct 473 473
+             475:  174(bvec2) SLessThanEqual 472 474
+             476:  425(bvec3) Load 457(bv)
+             477:  425(bvec3) VectorShuffle 476 475 3 4 2
+                              Store 457(bv) 477
+             478:  193(ivec3) Load 356(u16v)
+             479:     36(int) Load 358(u16)
+             480:  193(ivec3) CompositeConstruct 479 479 479
+             481:  425(bvec3) UGreaterThan 478 480
+                              Store 457(bv) 481
+             482:   52(ivec2) Load 343(i16v)
+             483:     14(int) Load 346(i16)
+             484:   52(ivec2) CompositeConstruct 483 483
+             485:  174(bvec2) SGreaterThan 482 484
+             486:  425(bvec3) Load 457(bv)
+             487:  425(bvec3) VectorShuffle 486 485 3 4 2
+                              Store 457(bv) 487
+             488:  193(ivec3) Load 356(u16v)
+             489:     36(int) Load 358(u16)
+             490:  193(ivec3) CompositeConstruct 489 489 489
+             491:  425(bvec3) UGreaterThanEqual 488 490
+                              Store 457(bv) 491
+             492:   52(ivec2) Load 343(i16v)
+             493:     14(int) Load 346(i16)
+             494:   52(ivec2) CompositeConstruct 493 493
+             495:  174(bvec2) SGreaterThanEqual 492 494
+             496:  425(bvec3) Load 457(bv)
+             497:  425(bvec3) VectorShuffle 496 495 3 4 2
+                              Store 457(bv) 497
+             498:  193(ivec3) Load 356(u16v)
+             499:     36(int) Load 358(u16)
+             500:  193(ivec3) CompositeConstruct 499 499 499
+             501:  425(bvec3) IEqual 498 500
+                              Store 457(bv) 501
+             502:   52(ivec2) Load 343(i16v)
+             503:     14(int) Load 346(i16)
+             504:   52(ivec2) CompositeConstruct 503 503
+             505:  174(bvec2) IEqual 502 504
+             506:  425(bvec3) Load 457(bv)
+             507:  425(bvec3) VectorShuffle 506 505 3 4 2
+                              Store 457(bv) 507
+             508:  193(ivec3) Load 356(u16v)
+             509:     36(int) Load 358(u16)
+             510:  193(ivec3) CompositeConstruct 509 509 509
+             511:  425(bvec3) INotEqual 508 510
+                              Store 457(bv) 511
+             512:   52(ivec2) Load 343(i16v)
+             513:     14(int) Load 346(i16)
+             514:   52(ivec2) CompositeConstruct 513 513
+             515:  174(bvec2) INotEqual 512 514
+             516:  425(bvec3) Load 457(bv)
+             517:  425(bvec3) VectorShuffle 516 515 3 4 2
+                              Store 457(bv) 517
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.int32.frag.out b/Test/baseResults/spv.int32.frag.out
new file mode 100644
index 0000000..c615672
--- /dev/null
+++ b/Test/baseResults/spv.int32.frag.out
@@ -0,0 +1,712 @@
+spv.int32.frag
+// Module Version 10300
+// Generated by (magic number): 80006
+// Id's are bound by 493
+
+                              Capability Shader
+                              Capability Float16
+                              Capability Float64
+                              Capability Int64
+                              Capability Int16
+                              Capability Int8
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main"
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_float16"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_float32"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_float64"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_int16"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_int32"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_int64"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_int8"
+                              Name 4  "main"
+                              Name 6  "literal("
+                              Name 8  "typeCast32("
+                              Name 10  "operators("
+                              Name 12  "builtinFuncs("
+                              Name 16  "u32Max"
+                              Name 20  "i32"
+                              Name 27  "Uniforms"
+                              MemberName 27(Uniforms) 0  "index"
+                              Name 29  ""
+                              Name 35  "indexable"
+                              Name 39  "u32"
+                              Name 46  "indexable"
+                              Name 51  "u32v"
+                              Name 54  "i32v"
+                              Name 60  "i64v"
+                              Name 66  "u64v"
+                              Name 78  "f32v"
+                              Name 84  "f64v"
+                              Name 94  "i8v"
+                              Name 103  "i16v"
+                              Name 123  "u8v"
+                              Name 132  "u16v"
+                              Name 152  "f16v"
+                              Name 168  "bv"
+                              Name 186  "u32v"
+                              Name 191  "i32"
+                              Name 210  "i"
+                              Name 214  "uv"
+                              Name 227  "i64"
+                              Name 260  "b"
+                              Name 312  "i32v"
+                              Name 315  "i32"
+                              Name 325  "u32v"
+                              Name 327  "u32"
+                              Name 399  "i8v4"
+                              Name 402  "i16v2"
+                              Name 407  "u8v4"
+                              Name 410  "u16v2"
+                              Name 413  "i64"
+                              Name 416  "u32v2"
+                              Name 418  "u64"
+                              Name 422  "bv"
+                              Name 485  "Block"
+                              MemberName 485(Block) 0  "i32"
+                              MemberName 485(Block) 1  "i32v2"
+                              MemberName 485(Block) 2  "i32v3"
+                              MemberName 485(Block) 3  "i32v4"
+                              MemberName 485(Block) 4  "u32"
+                              MemberName 485(Block) 5  "u32v2"
+                              MemberName 485(Block) 6  "u32v3"
+                              MemberName 485(Block) 7  "u32v4"
+                              Name 487  "block"
+                              Name 488  "si32"
+                              Name 489  "su32"
+                              Name 490  "si"
+                              Name 491  "su"
+                              Name 492  "sb"
+                              MemberDecorate 27(Uniforms) 0 Offset 0
+                              Decorate 27(Uniforms) Block
+                              Decorate 29 DescriptorSet 0
+                              Decorate 29 Binding 0
+                              MemberDecorate 485(Block) 0 Offset 0
+                              MemberDecorate 485(Block) 1 Offset 8
+                              MemberDecorate 485(Block) 2 Offset 16
+                              MemberDecorate 485(Block) 3 Offset 32
+                              MemberDecorate 485(Block) 4 Offset 48
+                              MemberDecorate 485(Block) 5 Offset 56
+                              MemberDecorate 485(Block) 6 Offset 64
+                              MemberDecorate 485(Block) 7 Offset 80
+                              Decorate 485(Block) Block
+                              Decorate 487(block) DescriptorSet 0
+                              Decorate 487(block) Binding 1
+                              Decorate 488(si32) SpecId 100
+                              Decorate 489(su32) SpecId 101
+                              Decorate 490(si) SpecId 102
+                              Decorate 491(su) SpecId 103
+                              Decorate 492(sb) SpecId 104
+               2:             TypeVoid
+               3:             TypeFunction 2
+              14:             TypeInt 32 0
+              15:             TypePointer Private 14(int)
+      16(u32Max):     15(ptr) Variable Private
+              17:     14(int) Constant 4294967295
+              18:             TypeInt 32 1
+              19:             TypePointer Function 18(int)
+              21:     14(int) Constant 3
+              22:             TypeArray 18(int) 21
+              23:     18(int) Constant 4008636143
+              24:     18(int) Constant 4294967295
+              25:     18(int) Constant 536870912
+              26:          22 ConstantComposite 23 24 25
+    27(Uniforms):             TypeStruct 14(int)
+              28:             TypePointer Uniform 27(Uniforms)
+              29:     28(ptr) Variable Uniform
+              30:     18(int) Constant 0
+              31:             TypePointer Uniform 14(int)
+              34:             TypePointer Function 22
+              38:             TypePointer Function 14(int)
+              40:             TypeArray 14(int) 21
+              41:     14(int) Constant 2147483647
+              42:          40 ConstantComposite 17 17 41
+              45:             TypePointer Function 40
+              49:             TypeVector 14(int) 2
+              50:             TypePointer Function 49(ivec2)
+              52:             TypeVector 18(int) 2
+              53:             TypePointer Function 52(ivec2)
+              57:             TypeInt 64 1
+              58:             TypeVector 57(int) 2
+              59:             TypePointer Function 58(ivec2)
+              63:             TypeInt 64 0
+              64:             TypeVector 63(int) 2
+              65:             TypePointer Function 64(ivec2)
+              75:             TypeFloat 32
+              76:             TypeVector 75(float) 2
+              77:             TypePointer Function 76(fvec2)
+              81:             TypeFloat 64
+              82:             TypeVector 81(float) 2
+              83:             TypePointer Function 82(fvec2)
+              91:             TypeInt 8 1
+              92:             TypeVector 91(int) 2
+              93:             TypePointer Function 92(ivec2)
+             100:             TypeInt 16 1
+             101:             TypeVector 100(int) 2
+             102:             TypePointer Function 101(ivec2)
+             120:             TypeInt 8 0
+             121:             TypeVector 120(int) 2
+             122:             TypePointer Function 121(ivec2)
+             129:             TypeInt 16 0
+             130:             TypeVector 129(int) 2
+             131:             TypePointer Function 130(ivec2)
+             149:             TypeFloat 16
+             150:             TypeVector 149(float) 2
+             151:             TypePointer Function 150(fvec2)
+             165:             TypeBool
+             166:             TypeVector 165(bool) 2
+             167:             TypePointer Function 166(bvec2)
+             170:     18(int) Constant 1
+             171:   52(ivec2) ConstantComposite 30 30
+             172:   52(ivec2) ConstantComposite 170 170
+             175:     14(int) Constant 0
+             176:     14(int) Constant 1
+             177:   49(ivec2) ConstantComposite 175 175
+             178:   49(ivec2) ConstantComposite 176 176
+             184:             TypeVector 14(int) 3
+             185:             TypePointer Function 184(ivec3)
+             188:             TypeVector 18(int) 3
+             226:             TypePointer Function 57(int)
+             251:     14(int) Constant 2
+             259:             TypePointer Function 165(bool)
+             323:   52(ivec2) ConstantComposite 24 24
+             332:  184(ivec3) ConstantComposite 175 175 175
+             374:   165(bool) ConstantTrue
+             381:   165(bool) ConstantFalse
+             382:  166(bvec2) ConstantComposite 381 381
+             394:             TypeVector 165(bool) 3
+             395:  394(bvec3) ConstantComposite 381 381 381
+             397:             TypeVector 91(int) 4
+             398:             TypePointer Function 397(ivec4)
+             405:             TypeVector 120(int) 4
+             406:             TypePointer Function 405(ivec4)
+             417:             TypePointer Function 63(int)
+             421:             TypePointer Function 394(bvec3)
+             483:             TypeVector 18(int) 4
+             484:             TypeVector 14(int) 4
+      485(Block):             TypeStruct 18(int) 52(ivec2) 188(ivec3) 483(ivec4) 14(int) 49(ivec2) 184(ivec3) 484(ivec4)
+             486:             TypePointer Uniform 485(Block)
+      487(block):    486(ptr) Variable Uniform
+       488(si32):     18(int) SpecConstant 4294967286
+       489(su32):     14(int) SpecConstant 20
+         490(si):     18(int) SpecConstant 4294967291
+         491(su):     14(int) SpecConstant 4
+         492(sb):   165(bool) SpecConstantTrue
+         4(main):           2 Function None 3
+               5:             Label
+                              Store 16(u32Max) 17
+                              Return
+                              FunctionEnd
+     6(literal():           2 Function None 3
+               7:             Label
+         20(i32):     19(ptr) Variable Function
+   35(indexable):     34(ptr) Variable Function
+         39(u32):     38(ptr) Variable Function
+   46(indexable):     45(ptr) Variable Function
+              32:     31(ptr) AccessChain 29 30
+              33:     14(int) Load 32
+                              Store 35(indexable) 26
+              36:     19(ptr) AccessChain 35(indexable) 33
+              37:     18(int) Load 36
+                              Store 20(i32) 37
+              43:     31(ptr) AccessChain 29 30
+              44:     14(int) Load 43
+                              Store 46(indexable) 42
+              47:     38(ptr) AccessChain 46(indexable) 44
+              48:     14(int) Load 47
+                              Store 39(u32) 48
+                              Return
+                              FunctionEnd
+  8(typeCast32():           2 Function None 3
+               9:             Label
+        51(u32v):     50(ptr) Variable Function
+        54(i32v):     53(ptr) Variable Function
+        60(i64v):     59(ptr) Variable Function
+        66(u64v):     65(ptr) Variable Function
+        78(f32v):     77(ptr) Variable Function
+        84(f64v):     83(ptr) Variable Function
+         94(i8v):     93(ptr) Variable Function
+       103(i16v):    102(ptr) Variable Function
+        123(u8v):    122(ptr) Variable Function
+       132(u16v):    131(ptr) Variable Function
+       152(f16v):    151(ptr) Variable Function
+         168(bv):    167(ptr) Variable Function
+              55:   52(ivec2) Load 54(i32v)
+              56:   49(ivec2) Bitcast 55
+                              Store 51(u32v) 56
+              61:   52(ivec2) Load 54(i32v)
+              62:   58(ivec2) SConvert 61
+                              Store 60(i64v) 62
+              67:   52(ivec2) Load 54(i32v)
+              68:   58(ivec2) SConvert 67
+              69:   64(ivec2) Bitcast 68
+                              Store 66(u64v) 69
+              70:   49(ivec2) Load 51(u32v)
+              71:   58(ivec2) UConvert 70
+              72:   58(ivec2) Bitcast 71
+                              Store 60(i64v) 72
+              73:   49(ivec2) Load 51(u32v)
+              74:   64(ivec2) UConvert 73
+                              Store 66(u64v) 74
+              79:   52(ivec2) Load 54(i32v)
+              80:   76(fvec2) ConvertSToF 79
+                              Store 78(f32v) 80
+              85:   52(ivec2) Load 54(i32v)
+              86:   82(fvec2) ConvertSToF 85
+                              Store 84(f64v) 86
+              87:   49(ivec2) Load 51(u32v)
+              88:   76(fvec2) ConvertUToF 87
+                              Store 78(f32v) 88
+              89:   49(ivec2) Load 51(u32v)
+              90:   82(fvec2) ConvertUToF 89
+                              Store 84(f64v) 90
+              95:   52(ivec2) Load 54(i32v)
+              96:   92(ivec2) SConvert 95
+                              Store 94(i8v) 96
+              97:   49(ivec2) Load 51(u32v)
+              98:   92(ivec2) UConvert 97
+              99:   92(ivec2) Bitcast 98
+                              Store 94(i8v) 99
+             104:   52(ivec2) Load 54(i32v)
+             105:  101(ivec2) SConvert 104
+                              Store 103(i16v) 105
+             106:   49(ivec2) Load 51(u32v)
+             107:  101(ivec2) UConvert 106
+             108:  101(ivec2) Bitcast 107
+                              Store 103(i16v) 108
+             109:   52(ivec2) Load 54(i32v)
+             110:     18(int) CompositeExtract 109 0
+             111:     18(int) CompositeExtract 109 1
+             112:   52(ivec2) CompositeConstruct 110 111
+                              Store 54(i32v) 112
+             113:   49(ivec2) Load 51(u32v)
+             114:   52(ivec2) Bitcast 113
+                              Store 54(i32v) 114
+             115:   52(ivec2) Load 54(i32v)
+             116:   58(ivec2) SConvert 115
+                              Store 60(i64v) 116
+             117:   49(ivec2) Load 51(u32v)
+             118:   58(ivec2) UConvert 117
+             119:   58(ivec2) Bitcast 118
+                              Store 60(i64v) 119
+             124:   52(ivec2) Load 54(i32v)
+             125:   92(ivec2) SConvert 124
+             126:  121(ivec2) Bitcast 125
+                              Store 123(u8v) 126
+             127:   49(ivec2) Load 51(u32v)
+             128:  121(ivec2) UConvert 127
+                              Store 123(u8v) 128
+             133:   52(ivec2) Load 54(i32v)
+             134:  101(ivec2) SConvert 133
+             135:  130(ivec2) Bitcast 134
+                              Store 132(u16v) 135
+             136:   49(ivec2) Load 51(u32v)
+             137:  130(ivec2) UConvert 136
+                              Store 132(u16v) 137
+             138:   52(ivec2) Load 54(i32v)
+             139:   49(ivec2) Bitcast 138
+                              Store 51(u32v) 139
+             140:   49(ivec2) Load 51(u32v)
+             141:     14(int) CompositeExtract 140 0
+             142:     14(int) CompositeExtract 140 1
+             143:   49(ivec2) CompositeConstruct 141 142
+                              Store 51(u32v) 143
+             144:   52(ivec2) Load 54(i32v)
+             145:   58(ivec2) SConvert 144
+             146:   64(ivec2) Bitcast 145
+                              Store 66(u64v) 146
+             147:   49(ivec2) Load 51(u32v)
+             148:   64(ivec2) UConvert 147
+                              Store 66(u64v) 148
+             153:   52(ivec2) Load 54(i32v)
+             154:  150(fvec2) ConvertSToF 153
+                              Store 152(f16v) 154
+             155:   52(ivec2) Load 54(i32v)
+             156:   76(fvec2) ConvertSToF 155
+                              Store 78(f32v) 156
+             157:   52(ivec2) Load 54(i32v)
+             158:   82(fvec2) ConvertSToF 157
+                              Store 84(f64v) 158
+             159:   49(ivec2) Load 51(u32v)
+             160:  150(fvec2) ConvertUToF 159
+                              Store 152(f16v) 160
+             161:   49(ivec2) Load 51(u32v)
+             162:   76(fvec2) ConvertUToF 161
+                              Store 78(f32v) 162
+             163:   49(ivec2) Load 51(u32v)
+             164:   82(fvec2) ConvertUToF 163
+                              Store 84(f64v) 164
+             169:  166(bvec2) Load 168(bv)
+             173:   52(ivec2) Select 169 172 171
+                              Store 54(i32v) 173
+             174:  166(bvec2) Load 168(bv)
+             179:   49(ivec2) Select 174 178 177
+                              Store 51(u32v) 179
+             180:   52(ivec2) Load 54(i32v)
+             181:  166(bvec2) INotEqual 180 177
+                              Store 168(bv) 181
+             182:   49(ivec2) Load 51(u32v)
+             183:  166(bvec2) INotEqual 182 177
+                              Store 168(bv) 183
+                              Return
+                              FunctionEnd
+  10(operators():           2 Function None 3
+              11:             Label
+       186(u32v):    185(ptr) Variable Function
+        191(i32):     19(ptr) Variable Function
+          210(i):     19(ptr) Variable Function
+         214(uv):    185(ptr) Variable Function
+        227(i64):    226(ptr) Variable Function
+          260(b):    259(ptr) Variable Function
+             187:  184(ivec3) Load 186(u32v)
+             189:  188(ivec3) CompositeConstruct 170 170 170
+             190:  184(ivec3) IAdd 187 189
+                              Store 186(u32v) 190
+             192:     18(int) Load 191(i32)
+             193:     18(int) ISub 192 170
+                              Store 191(i32) 193
+             194:     18(int) Load 191(i32)
+             195:     18(int) IAdd 194 170
+                              Store 191(i32) 195
+             196:  184(ivec3) Load 186(u32v)
+             197:  188(ivec3) CompositeConstruct 170 170 170
+             198:  184(ivec3) ISub 196 197
+                              Store 186(u32v) 198
+             199:  184(ivec3) Load 186(u32v)
+             200:  184(ivec3) Not 199
+                              Store 186(u32v) 200
+             201:     18(int) Load 191(i32)
+                              Store 191(i32) 201
+             202:  184(ivec3) Load 186(u32v)
+             203:  184(ivec3) SNegate 202
+                              Store 186(u32v) 203
+             204:     18(int) Load 191(i32)
+             205:     18(int) Load 191(i32)
+             206:     18(int) IAdd 205 204
+                              Store 191(i32) 206
+             207:  184(ivec3) Load 186(u32v)
+             208:  184(ivec3) Load 186(u32v)
+             209:  184(ivec3) ISub 208 207
+                              Store 186(u32v) 209
+             211:     18(int) Load 191(i32)
+             212:     18(int) Load 210(i)
+             213:     18(int) IMul 212 211
+                              Store 210(i) 213
+             215:  184(ivec3) Load 186(u32v)
+             216:  184(ivec3) Load 214(uv)
+             217:  184(ivec3) UDiv 216 215
+                              Store 214(uv) 217
+             218:     18(int) Load 191(i32)
+             219:     14(int) Bitcast 218
+             220:  184(ivec3) Load 214(uv)
+             221:  184(ivec3) CompositeConstruct 219 219 219
+             222:  184(ivec3) UMod 220 221
+                              Store 214(uv) 222
+             223:  184(ivec3) Load 186(u32v)
+             224:  184(ivec3) Load 214(uv)
+             225:  184(ivec3) IAdd 223 224
+                              Store 214(uv) 225
+             228:     18(int) Load 191(i32)
+             229:     57(int) SConvert 228
+             230:     57(int) Load 227(i64)
+             231:     57(int) ISub 229 230
+                              Store 227(i64) 231
+             232:  184(ivec3) Load 186(u32v)
+             233:  184(ivec3) Load 214(uv)
+             234:  184(ivec3) IMul 232 233
+                              Store 214(uv) 234
+             235:     18(int) Load 191(i32)
+             236:     57(int) SConvert 235
+             237:     57(int) Load 227(i64)
+             238:     57(int) IMul 236 237
+                              Store 227(i64) 238
+             239:     18(int) Load 191(i32)
+             240:     18(int) Load 210(i)
+             241:     18(int) SMod 239 240
+                              Store 210(i) 241
+             242:     18(int) Load 191(i32)
+             243:  184(ivec3) Load 186(u32v)
+             244:  188(ivec3) CompositeConstruct 242 242 242
+             245:  184(ivec3) ShiftLeftLogical 243 244
+                              Store 186(u32v) 245
+             246:     38(ptr) AccessChain 186(u32v) 176
+             247:     14(int) Load 246
+             248:     18(int) Load 191(i32)
+             249:     18(int) ShiftRightArithmetic 248 247
+                              Store 191(i32) 249
+             250:     57(int) Load 227(i64)
+             252:     38(ptr) AccessChain 186(u32v) 251
+             253:     14(int) Load 252
+             254:     57(int) ShiftLeftLogical 250 253
+                              Store 227(i64) 254
+             255:  184(ivec3) Load 186(u32v)
+             256:     18(int) Load 210(i)
+             257:  188(ivec3) CompositeConstruct 256 256 256
+             258:  184(ivec3) ShiftLeftLogical 255 257
+                              Store 214(uv) 258
+             261:     38(ptr) AccessChain 186(u32v) 175
+             262:     14(int) Load 261
+             263:     18(int) Load 191(i32)
+             264:     14(int) Bitcast 263
+             265:   165(bool) INotEqual 262 264
+                              Store 260(b) 265
+             266:     18(int) Load 191(i32)
+             267:     14(int) Bitcast 266
+             268:     38(ptr) AccessChain 186(u32v) 175
+             269:     14(int) Load 268
+             270:   165(bool) IEqual 267 269
+                              Store 260(b) 270
+             271:     38(ptr) AccessChain 186(u32v) 175
+             272:     14(int) Load 271
+             273:     38(ptr) AccessChain 214(uv) 176
+             274:     14(int) Load 273
+             275:   165(bool) UGreaterThan 272 274
+                              Store 260(b) 275
+             276:     18(int) Load 191(i32)
+             277:     18(int) Load 210(i)
+             278:   165(bool) SLessThan 276 277
+                              Store 260(b) 278
+             279:     38(ptr) AccessChain 186(u32v) 176
+             280:     14(int) Load 279
+             281:     38(ptr) AccessChain 214(uv) 175
+             282:     14(int) Load 281
+             283:   165(bool) UGreaterThanEqual 280 282
+                              Store 260(b) 283
+             284:     18(int) Load 191(i32)
+             285:     18(int) Load 210(i)
+             286:   165(bool) SLessThanEqual 284 285
+                              Store 260(b) 286
+             287:     18(int) Load 191(i32)
+             288:     14(int) Bitcast 287
+             289:  184(ivec3) Load 214(uv)
+             290:  184(ivec3) CompositeConstruct 288 288 288
+             291:  184(ivec3) BitwiseOr 289 290
+                              Store 214(uv) 291
+             292:     18(int) Load 191(i32)
+             293:     18(int) Load 210(i)
+             294:     18(int) BitwiseOr 292 293
+                              Store 210(i) 294
+             295:     18(int) Load 191(i32)
+             296:     57(int) SConvert 295
+             297:     57(int) Load 227(i64)
+             298:     57(int) BitwiseAnd 297 296
+                              Store 227(i64) 298
+             299:  184(ivec3) Load 186(u32v)
+             300:  184(ivec3) Load 214(uv)
+             301:  184(ivec3) BitwiseAnd 299 300
+                              Store 214(uv) 301
+             302:     18(int) Load 191(i32)
+             303:     14(int) Bitcast 302
+             304:  184(ivec3) Load 214(uv)
+             305:  184(ivec3) CompositeConstruct 303 303 303
+             306:  184(ivec3) BitwiseXor 304 305
+                              Store 214(uv) 306
+             307:  184(ivec3) Load 186(u32v)
+             308:     18(int) Load 191(i32)
+             309:     14(int) Bitcast 308
+             310:  184(ivec3) CompositeConstruct 309 309 309
+             311:  184(ivec3) BitwiseXor 307 310
+                              Store 186(u32v) 311
+                              Return
+                              FunctionEnd
+12(builtinFuncs():           2 Function None 3
+              13:             Label
+       312(i32v):     53(ptr) Variable Function
+        315(i32):     19(ptr) Variable Function
+       325(u32v):    185(ptr) Variable Function
+        327(u32):     38(ptr) Variable Function
+       399(i8v4):    398(ptr) Variable Function
+      402(i16v2):    102(ptr) Variable Function
+       407(u8v4):    406(ptr) Variable Function
+      410(u16v2):    131(ptr) Variable Function
+        413(i64):    226(ptr) Variable Function
+      416(u32v2):     50(ptr) Variable Function
+        418(u64):    417(ptr) Variable Function
+         422(bv):    421(ptr) Variable Function
+             313:   52(ivec2) Load 312(i32v)
+             314:   52(ivec2) ExtInst 1(GLSL.std.450) 5(SAbs) 313
+                              Store 312(i32v) 314
+             316:     18(int) Load 315(i32)
+             317:     18(int) ExtInst 1(GLSL.std.450) 7(SSign) 316
+                              Store 315(i32) 317
+             318:   52(ivec2) Load 312(i32v)
+             319:     18(int) Load 315(i32)
+             320:   52(ivec2) CompositeConstruct 319 319
+             321:   52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 318 320
+                              Store 312(i32v) 321
+             322:   52(ivec2) Load 312(i32v)
+             324:   52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 322 323
+                              Store 312(i32v) 324
+             326:  184(ivec3) Load 325(u32v)
+             328:     14(int) Load 327(u32)
+             329:  184(ivec3) CompositeConstruct 328 328 328
+             330:  184(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 326 329
+                              Store 325(u32v) 330
+             331:  184(ivec3) Load 325(u32v)
+             333:  184(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 331 332
+                              Store 325(u32v) 333
+             334:   52(ivec2) Load 312(i32v)
+             335:     18(int) Load 315(i32)
+             336:   52(ivec2) CompositeConstruct 335 335
+             337:   52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 334 336
+                              Store 312(i32v) 337
+             338:   52(ivec2) Load 312(i32v)
+             339:   52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 338 323
+                              Store 312(i32v) 339
+             340:  184(ivec3) Load 325(u32v)
+             341:     14(int) Load 327(u32)
+             342:  184(ivec3) CompositeConstruct 341 341 341
+             343:  184(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 340 342
+                              Store 325(u32v) 343
+             344:  184(ivec3) Load 325(u32v)
+             345:  184(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 344 332
+                              Store 325(u32v) 345
+             346:   52(ivec2) Load 312(i32v)
+             347:     18(int) Load 315(i32)
+             348:     18(int) SNegate 347
+             349:     18(int) Load 315(i32)
+             350:   52(ivec2) CompositeConstruct 348 348
+             351:   52(ivec2) CompositeConstruct 349 349
+             352:   52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 346 350 351
+                              Store 312(i32v) 352
+             353:   52(ivec2) Load 312(i32v)
+             354:   52(ivec2) Load 312(i32v)
+             355:   52(ivec2) SNegate 354
+             356:   52(ivec2) Load 312(i32v)
+             357:   52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 353 355 356
+                              Store 312(i32v) 357
+             358:  184(ivec3) Load 325(u32v)
+             359:     14(int) Load 327(u32)
+             360:     14(int) SNegate 359
+             361:     14(int) Load 327(u32)
+             362:  184(ivec3) CompositeConstruct 360 360 360
+             363:  184(ivec3) CompositeConstruct 361 361 361
+             364:  184(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 358 362 363
+                              Store 325(u32v) 364
+             365:  184(ivec3) Load 325(u32v)
+             366:  184(ivec3) Load 325(u32v)
+             367:  184(ivec3) SNegate 366
+             368:  184(ivec3) Load 325(u32v)
+             369:  184(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 365 367 368
+                              Store 325(u32v) 369
+             370:     19(ptr) AccessChain 312(i32v) 175
+             371:     18(int) Load 370
+             372:     19(ptr) AccessChain 312(i32v) 176
+             373:     18(int) Load 372
+             375:     18(int) Select 374 373 371
+                              Store 315(i32) 375
+             376:     18(int) Load 315(i32)
+             377:   52(ivec2) CompositeConstruct 376 376
+             378:     18(int) Load 315(i32)
+             379:     18(int) SNegate 378
+             380:   52(ivec2) CompositeConstruct 379 379
+             383:   52(ivec2) Select 382 380 377
+                              Store 312(i32v) 383
+             384:     38(ptr) AccessChain 325(u32v) 175
+             385:     14(int) Load 384
+             386:     38(ptr) AccessChain 325(u32v) 176
+             387:     14(int) Load 386
+             388:     14(int) Select 374 387 385
+                              Store 327(u32) 388
+             389:     14(int) Load 327(u32)
+             390:  184(ivec3) CompositeConstruct 389 389 389
+             391:     14(int) Load 327(u32)
+             392:     14(int) SNegate 391
+             393:  184(ivec3) CompositeConstruct 392 392 392
+             396:  184(ivec3) Select 395 393 390
+                              Store 325(u32v) 396
+             400:  397(ivec4) Load 399(i8v4)
+             401:     18(int) Bitcast 400
+                              Store 315(i32) 401
+             403:  101(ivec2) Load 402(i16v2)
+             404:     18(int) Bitcast 403
+                              Store 315(i32) 404
+             408:  405(ivec4) Load 407(u8v4)
+             409:     14(int) Bitcast 408
+                              Store 327(u32) 409
+             411:  130(ivec2) Load 410(u16v2)
+             412:     14(int) Bitcast 411
+                              Store 327(u32) 412
+             414:     57(int) Load 413(i64)
+             415:   52(ivec2) Bitcast 414
+                              Store 312(i32v) 415
+             419:     63(int) Load 418(u64)
+             420:   49(ivec2) Bitcast 419
+                              Store 416(u32v2) 420
+             423:  184(ivec3) Load 325(u32v)
+             424:     14(int) Load 327(u32)
+             425:  184(ivec3) CompositeConstruct 424 424 424
+             426:  394(bvec3) ULessThan 423 425
+                              Store 422(bv) 426
+             427:   52(ivec2) Load 312(i32v)
+             428:     18(int) Load 315(i32)
+             429:   52(ivec2) CompositeConstruct 428 428
+             430:  166(bvec2) SLessThan 427 429
+             431:  394(bvec3) Load 422(bv)
+             432:  394(bvec3) VectorShuffle 431 430 3 4 2
+                              Store 422(bv) 432
+             433:  184(ivec3) Load 325(u32v)
+             434:     14(int) Load 327(u32)
+             435:  184(ivec3) CompositeConstruct 434 434 434
+             436:  394(bvec3) ULessThanEqual 433 435
+                              Store 422(bv) 436
+             437:   52(ivec2) Load 312(i32v)
+             438:     18(int) Load 315(i32)
+             439:   52(ivec2) CompositeConstruct 438 438
+             440:  166(bvec2) SLessThanEqual 437 439
+             441:  394(bvec3) Load 422(bv)
+             442:  394(bvec3) VectorShuffle 441 440 3 4 2
+                              Store 422(bv) 442
+             443:  184(ivec3) Load 325(u32v)
+             444:     14(int) Load 327(u32)
+             445:  184(ivec3) CompositeConstruct 444 444 444
+             446:  394(bvec3) UGreaterThan 443 445
+                              Store 422(bv) 446
+             447:   52(ivec2) Load 312(i32v)
+             448:     18(int) Load 315(i32)
+             449:   52(ivec2) CompositeConstruct 448 448
+             450:  166(bvec2) SGreaterThan 447 449
+             451:  394(bvec3) Load 422(bv)
+             452:  394(bvec3) VectorShuffle 451 450 3 4 2
+                              Store 422(bv) 452
+             453:  184(ivec3) Load 325(u32v)
+             454:     14(int) Load 327(u32)
+             455:  184(ivec3) CompositeConstruct 454 454 454
+             456:  394(bvec3) UGreaterThanEqual 453 455
+                              Store 422(bv) 456
+             457:   52(ivec2) Load 312(i32v)
+             458:     18(int) Load 315(i32)
+             459:   52(ivec2) CompositeConstruct 458 458
+             460:  166(bvec2) SGreaterThanEqual 457 459
+             461:  394(bvec3) Load 422(bv)
+             462:  394(bvec3) VectorShuffle 461 460 3 4 2
+                              Store 422(bv) 462
+             463:  184(ivec3) Load 325(u32v)
+             464:     14(int) Load 327(u32)
+             465:  184(ivec3) CompositeConstruct 464 464 464
+             466:  394(bvec3) IEqual 463 465
+                              Store 422(bv) 466
+             467:   52(ivec2) Load 312(i32v)
+             468:     18(int) Load 315(i32)
+             469:   52(ivec2) CompositeConstruct 468 468
+             470:  166(bvec2) IEqual 467 469
+             471:  394(bvec3) Load 422(bv)
+             472:  394(bvec3) VectorShuffle 471 470 3 4 2
+                              Store 422(bv) 472
+             473:  184(ivec3) Load 325(u32v)
+             474:     14(int) Load 327(u32)
+             475:  184(ivec3) CompositeConstruct 474 474 474
+             476:  394(bvec3) INotEqual 473 475
+                              Store 422(bv) 476
+             477:   52(ivec2) Load 312(i32v)
+             478:     18(int) Load 315(i32)
+             479:   52(ivec2) CompositeConstruct 478 478
+             480:  166(bvec2) INotEqual 477 479
+             481:  394(bvec3) Load 422(bv)
+             482:  394(bvec3) VectorShuffle 481 480 3 4 2
+                              Store 422(bv) 482
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.int64.frag.out b/Test/baseResults/spv.int64.frag.out
index 3c6dc85..598fc94 100644
--- a/Test/baseResults/spv.int64.frag.out
+++ b/Test/baseResults/spv.int64.frag.out
@@ -1,7 +1,7 @@
 spv.int64.frag
 // Module Version 10000
-// Generated by (magic number): 80002
-// Id's are bound by 480
+// Generated by (magic number): 80006
+// Id's are bound by 488
 
                               Capability Shader
                               Capability Float64
@@ -12,6 +12,7 @@
                               ExecutionMode 4 OriginUpperLeft
                               Source GLSL 450
                               SourceExtension  "GL_ARB_gpu_shader_int64"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_int64"
                               Name 4  "main"
                               Name 6  "literal("
                               Name 8  "typeCast("
@@ -36,38 +37,38 @@
                               Name 139  "i64"
                               Name 159  "i"
                               Name 166  "uv"
-                              Name 218  "b"
-                              Name 278  "i64v"
-                              Name 281  "i64"
-                              Name 291  "u64v"
-                              Name 293  "u64"
-                              Name 365  "dv"
-                              Name 384  "iv"
-                              Name 389  "uv"
-                              Name 393  "bv"
-                              Name 454  "Block"
-                              MemberName 454(Block) 0  "i64v"
-                              MemberName 454(Block) 1  "u64"
-                              Name 456  "block"
-                              Name 457  "si64"
-                              Name 458  "su64"
-                              Name 459  "si"
-                              Name 460  "su"
-                              Name 461  "sb"
+                              Name 226  "b"
+                              Name 286  "i64v"
+                              Name 289  "i64"
+                              Name 299  "u64v"
+                              Name 301  "u64"
+                              Name 373  "dv"
+                              Name 392  "iv"
+                              Name 397  "uv"
+                              Name 401  "bv"
+                              Name 462  "Block"
+                              MemberName 462(Block) 0  "i64v"
+                              MemberName 462(Block) 1  "u64"
+                              Name 464  "block"
+                              Name 465  "si64"
+                              Name 466  "su64"
+                              Name 467  "si"
+                              Name 468  "su"
+                              Name 469  "sb"
                               MemberDecorate 28(Uniforms) 0 Offset 0
                               Decorate 28(Uniforms) Block
                               Decorate 30 DescriptorSet 0
                               Decorate 30 Binding 0
-                              MemberDecorate 454(Block) 0 Offset 0
-                              MemberDecorate 454(Block) 1 Offset 24
-                              Decorate 454(Block) Block
-                              Decorate 456(block) DescriptorSet 0
-                              Decorate 456(block) Binding 1
-                              Decorate 457(si64) SpecId 100
-                              Decorate 458(su64) SpecId 101
-                              Decorate 459(si) SpecId 102
-                              Decorate 460(su) SpecId 103
-                              Decorate 461(sb) SpecId 104
+                              MemberDecorate 462(Block) 0 Offset 0
+                              MemberDecorate 462(Block) 1 Offset 24
+                              Decorate 462(Block) Block
+                              Decorate 464(block) DescriptorSet 0
+                              Decorate 464(block) Binding 1
+                              Decorate 465(si64) SpecId 100
+                              Decorate 466(su64) SpecId 101
+                              Decorate 467(si) SpecId 102
+                              Decorate 468(su) SpecId 103
+                              Decorate 469(sb) SpecId 104
                2:             TypeVoid
                3:             TypeFunction 2
               14:             TypeInt 64 0
@@ -128,52 +129,52 @@
              164:             TypeVector 21(int) 3
              165:             TypePointer Function 164(ivec3)
              199:             TypeVector 31(int) 3
-             202:     21(int) Constant 1
-             203:             TypePointer Function 21(int)
-             209:     21(int) Constant 2
-             217:             TypePointer Function 55(bool)
-             219:     21(int) Constant 0
-             289:   52(ivec2) ConstantComposite 25 25
-             298:  132(ivec3) ConstantComposite 69 69 69
-             340:    55(bool) ConstantTrue
-             347:    55(bool) ConstantFalse
-             348:   56(bvec2) ConstantComposite 347 347
-             360:             TypeVector 55(bool) 3
-             361:  360(bvec3) ConstantComposite 347 347 347
-             363:             TypeVector 94(float) 3
-             364:             TypePointer Function 363(fvec3)
-             369:             TypePointer Function 94(float)
-             380:     31(int) Constant 1
-             381:     31(int) Constant 2
-             382:   74(ivec2) ConstantComposite 380 381
-             387:   81(ivec2) ConstantComposite 209 22
-             392:             TypePointer Function 360(bvec3)
-      454(Block):             TypeStruct 136(ivec3) 14(int)
-             455:             TypePointer Uniform 454(Block)
-      456(block):    455(ptr) Variable Uniform
-       457(si64):     18(int) SpecConstant 4294967286 4294967295
-       458(su64):     14(int) SpecConstant 20 0
-         459(si):     31(int) SpecConstant 4294967291
-         460(su):     21(int) SpecConstant 4
-         461(sb):    55(bool) SpecConstantTrue
-             462:    55(bool) SpecConstantOp 171 457(si64) 69
-             463:    55(bool) SpecConstantOp 171 458(su64) 69
-             464:     18(int) SpecConstantOp 169 461(sb) 61 60
-             465:     14(int) SpecConstantOp 169 461(sb) 70 69
-             466:     31(int) SpecConstantOp 114 457(si64)
-             467:     18(int) SpecConstantOp 114 459(si)
-             468:     21(int) SpecConstantOp 113 458(su64)
-             469:     14(int) SpecConstantOp 113 460(su)
-             470:     18(int) SpecConstantOp 128 458(su64) 69
-             471:     14(int) SpecConstantOp 128 457(si64) 69
-             472:     21(int) SpecConstantOp 113 458(su64)
-             473:     31(int) SpecConstantOp 128 472 219
-             474:     18(int) SpecConstantOp 114 459(si)
-             475:     14(int) SpecConstantOp 128 474 69
-             476:     31(int) SpecConstantOp 114 457(si64)
-             477:     21(int) SpecConstantOp 128 476 219
-             478:     14(int) SpecConstantOp 113 460(su)
-             479:     18(int) SpecConstantOp 128 478 69
+             203:     21(int) Constant 1
+             204:             TypePointer Function 21(int)
+             217:     21(int) Constant 2
+             225:             TypePointer Function 55(bool)
+             227:     21(int) Constant 0
+             297:   52(ivec2) ConstantComposite 25 25
+             306:  132(ivec3) ConstantComposite 69 69 69
+             348:    55(bool) ConstantTrue
+             355:    55(bool) ConstantFalse
+             356:   56(bvec2) ConstantComposite 355 355
+             368:             TypeVector 55(bool) 3
+             369:  368(bvec3) ConstantComposite 355 355 355
+             371:             TypeVector 94(float) 3
+             372:             TypePointer Function 371(fvec3)
+             377:             TypePointer Function 94(float)
+             388:     31(int) Constant 1
+             389:     31(int) Constant 2
+             390:   74(ivec2) ConstantComposite 388 389
+             395:   81(ivec2) ConstantComposite 217 22
+             400:             TypePointer Function 368(bvec3)
+      462(Block):             TypeStruct 136(ivec3) 14(int)
+             463:             TypePointer Uniform 462(Block)
+      464(block):    463(ptr) Variable Uniform
+       465(si64):     18(int) SpecConstant 4294967286 4294967295
+       466(su64):     14(int) SpecConstant 20 0
+         467(si):     31(int) SpecConstant 4294967291
+         468(su):     21(int) SpecConstant 4
+         469(sb):    55(bool) SpecConstantTrue
+             470:    55(bool) SpecConstantOp 171 465(si64) 69
+             471:    55(bool) SpecConstantOp 171 466(su64) 69
+             472:     18(int) SpecConstantOp 169 469(sb) 61 60
+             473:     14(int) SpecConstantOp 169 469(sb) 70 69
+             474:     31(int) SpecConstantOp 114 465(si64)
+             475:     18(int) SpecConstantOp 114 467(si)
+             476:     21(int) SpecConstantOp 113 466(su64)
+             477:     14(int) SpecConstantOp 113 468(su)
+             478:     18(int) SpecConstantOp 128 466(su64) 69
+             479:     14(int) SpecConstantOp 128 465(si64) 69
+             480:     31(int) SpecConstantOp 113 466(su64)
+             481:     31(int) SpecConstantOp 128 480 227
+             482:     18(int) SpecConstantOp 114 467(si)
+             483:     14(int) SpecConstantOp 128 482 69
+             484:     31(int) SpecConstantOp 114 465(si64)
+             485:     21(int) SpecConstantOp 128 484 227
+             486:     18(int) SpecConstantOp 113 468(su)
+             487:     18(int) SpecConstantOp 128 486 69
          4(main):           2 Function None 3
                5:             Label
                               Store 16(u64Max) 17
@@ -267,11 +268,11 @@
              122:   81(ivec2) Bitcast 121
                               Store 83(uv) 122
              123:   81(ivec2) Load 83(uv)
-             124:   65(ivec2) UConvert 123
+             124:   52(ivec2) UConvert 123
              125:   52(ivec2) Bitcast 124
                               Store 54(i64v) 125
              126:   65(ivec2) Load 67(u64v)
-             127:   81(ivec2) UConvert 126
+             127:   74(ivec2) UConvert 126
              128:   74(ivec2) Bitcast 127
                               Store 76(iv) 128
              129:   74(ivec2) Load 76(iv)
@@ -286,7 +287,7 @@
         139(i64):     19(ptr) Variable Function
           159(i):    158(ptr) Variable Function
          166(uv):    165(ptr) Variable Function
-          218(b):    217(ptr) Variable Function
+          226(b):    225(ptr) Variable Function
              135:  132(ivec3) Load 134(u64v)
              137:  136(ivec3) CompositeConstruct 61 61 61
              138:  132(ivec3) IAdd 135 137
@@ -359,298 +360,308 @@
              195:     18(int) SConvert 194
              196:     18(int) SMod 193 195
                               Store 139(i64) 196
-             197:     31(int) Load 159(i)
-             198:  132(ivec3) Load 134(u64v)
-             200:  199(ivec3) CompositeConstruct 197 197 197
-             201:  132(ivec3) ShiftLeftLogical 198 200
+             197:  132(ivec3) Load 134(u64v)
+             198:     31(int) Load 159(i)
+             200:  199(ivec3) CompositeConstruct 198 198 198
+             201:  132(ivec3) ShiftLeftLogical 197 200
                               Store 134(u64v) 201
-             204:    203(ptr) AccessChain 166(uv) 202
-             205:     21(int) Load 204
-             206:     18(int) Load 139(i64)
-             207:     18(int) ShiftRightArithmetic 206 205
+             202:     18(int) Load 139(i64)
+             205:    204(ptr) AccessChain 166(uv) 203
+             206:     21(int) Load 205
+             207:     18(int) ShiftRightArithmetic 202 206
                               Store 139(i64) 207
-             208:     18(int) Load 139(i64)
-             210:     40(ptr) AccessChain 134(u64v) 209
-             211:     14(int) Load 210
-             212:     18(int) ShiftLeftLogical 208 211
-                              Store 139(i64) 212
-             213:  132(ivec3) Load 134(u64v)
+             208:     31(int) Load 159(i)
+             209:  132(ivec3) Load 134(u64v)
+             210:  199(ivec3) CompositeConstruct 208 208 208
+             211:  132(ivec3) ShiftLeftLogical 209 210
+                              Store 134(u64v) 211
+             212:    204(ptr) AccessChain 166(uv) 203
+             213:     21(int) Load 212
              214:     18(int) Load 139(i64)
-             215:  136(ivec3) CompositeConstruct 214 214 214
-             216:  132(ivec3) ShiftLeftLogical 213 215
-                              Store 134(u64v) 216
-             220:     40(ptr) AccessChain 134(u64v) 219
-             221:     14(int) Load 220
+             215:     18(int) ShiftRightArithmetic 214 213
+                              Store 139(i64) 215
+             216:     18(int) Load 139(i64)
+             218:     40(ptr) AccessChain 134(u64v) 217
+             219:     14(int) Load 218
+             220:     18(int) ShiftLeftLogical 216 219
+                              Store 139(i64) 220
+             221:  132(ivec3) Load 134(u64v)
              222:     18(int) Load 139(i64)
-             223:     14(int) Bitcast 222
-             224:    55(bool) INotEqual 221 223
-                              Store 218(b) 224
-             225:     18(int) Load 139(i64)
-             226:     14(int) Bitcast 225
-             227:     40(ptr) AccessChain 134(u64v) 219
-             228:     14(int) Load 227
-             229:    55(bool) IEqual 226 228
-                              Store 218(b) 229
-             230:     40(ptr) AccessChain 134(u64v) 219
-             231:     14(int) Load 230
-             232:    203(ptr) AccessChain 166(uv) 202
-             233:     21(int) Load 232
-             234:     14(int) UConvert 233
-             235:    55(bool) UGreaterThan 231 234
-                              Store 218(b) 235
-             236:     18(int) Load 139(i64)
-             237:     31(int) Load 159(i)
-             238:     18(int) SConvert 237
-             239:    55(bool) SLessThan 236 238
-                              Store 218(b) 239
-             240:     40(ptr) AccessChain 134(u64v) 202
-             241:     14(int) Load 240
-             242:    203(ptr) AccessChain 166(uv) 219
-             243:     21(int) Load 242
-             244:     14(int) UConvert 243
-             245:    55(bool) UGreaterThanEqual 241 244
-                              Store 218(b) 245
-             246:     18(int) Load 139(i64)
-             247:     31(int) Load 159(i)
-             248:     18(int) SConvert 247
-             249:    55(bool) SLessThanEqual 246 248
-                              Store 218(b) 249
-             250:     31(int) Load 159(i)
-             251:     18(int) SConvert 250
-             252:     14(int) Bitcast 251
-             253:  132(ivec3) Load 134(u64v)
-             254:  132(ivec3) CompositeConstruct 252 252 252
-             255:  132(ivec3) BitwiseOr 253 254
-                              Store 134(u64v) 255
-             256:     18(int) Load 139(i64)
-             257:     31(int) Load 159(i)
-             258:     18(int) SConvert 257
-             259:     18(int) BitwiseOr 256 258
-                              Store 139(i64) 259
-             260:     31(int) Load 159(i)
-             261:     18(int) SConvert 260
-             262:     18(int) Load 139(i64)
-             263:     18(int) BitwiseAnd 262 261
-                              Store 139(i64) 263
-             264:  132(ivec3) Load 134(u64v)
-             265:  164(ivec3) Load 166(uv)
-             266:  132(ivec3) UConvert 265
-             267:  132(ivec3) BitwiseAnd 264 266
-                              Store 134(u64v) 267
-             268:     18(int) Load 139(i64)
-             269:     14(int) Bitcast 268
-             270:  132(ivec3) Load 134(u64v)
-             271:  132(ivec3) CompositeConstruct 269 269 269
-             272:  132(ivec3) BitwiseXor 270 271
-                              Store 134(u64v) 272
-             273:  132(ivec3) Load 134(u64v)
-             274:     18(int) Load 139(i64)
-             275:     14(int) Bitcast 274
-             276:  132(ivec3) CompositeConstruct 275 275 275
-             277:  132(ivec3) BitwiseXor 273 276
-                              Store 134(u64v) 277
+             223:  136(ivec3) CompositeConstruct 222 222 222
+             224:  132(ivec3) ShiftLeftLogical 221 223
+                              Store 134(u64v) 224
+             228:     40(ptr) AccessChain 134(u64v) 227
+             229:     14(int) Load 228
+             230:     18(int) Load 139(i64)
+             231:     14(int) Bitcast 230
+             232:    55(bool) INotEqual 229 231
+                              Store 226(b) 232
+             233:     18(int) Load 139(i64)
+             234:     14(int) Bitcast 233
+             235:     40(ptr) AccessChain 134(u64v) 227
+             236:     14(int) Load 235
+             237:    55(bool) IEqual 234 236
+                              Store 226(b) 237
+             238:     40(ptr) AccessChain 134(u64v) 227
+             239:     14(int) Load 238
+             240:    204(ptr) AccessChain 166(uv) 203
+             241:     21(int) Load 240
+             242:     14(int) UConvert 241
+             243:    55(bool) UGreaterThan 239 242
+                              Store 226(b) 243
+             244:     18(int) Load 139(i64)
+             245:     31(int) Load 159(i)
+             246:     18(int) SConvert 245
+             247:    55(bool) SLessThan 244 246
+                              Store 226(b) 247
+             248:     40(ptr) AccessChain 134(u64v) 203
+             249:     14(int) Load 248
+             250:    204(ptr) AccessChain 166(uv) 227
+             251:     21(int) Load 250
+             252:     14(int) UConvert 251
+             253:    55(bool) UGreaterThanEqual 249 252
+                              Store 226(b) 253
+             254:     18(int) Load 139(i64)
+             255:     31(int) Load 159(i)
+             256:     18(int) SConvert 255
+             257:    55(bool) SLessThanEqual 254 256
+                              Store 226(b) 257
+             258:     31(int) Load 159(i)
+             259:     18(int) SConvert 258
+             260:     14(int) Bitcast 259
+             261:  132(ivec3) Load 134(u64v)
+             262:  132(ivec3) CompositeConstruct 260 260 260
+             263:  132(ivec3) BitwiseOr 261 262
+                              Store 134(u64v) 263
+             264:     18(int) Load 139(i64)
+             265:     31(int) Load 159(i)
+             266:     18(int) SConvert 265
+             267:     18(int) BitwiseOr 264 266
+                              Store 139(i64) 267
+             268:     31(int) Load 159(i)
+             269:     18(int) SConvert 268
+             270:     18(int) Load 139(i64)
+             271:     18(int) BitwiseAnd 270 269
+                              Store 139(i64) 271
+             272:  132(ivec3) Load 134(u64v)
+             273:  164(ivec3) Load 166(uv)
+             274:  132(ivec3) UConvert 273
+             275:  132(ivec3) BitwiseAnd 272 274
+                              Store 134(u64v) 275
+             276:     18(int) Load 139(i64)
+             277:     14(int) Bitcast 276
+             278:  132(ivec3) Load 134(u64v)
+             279:  132(ivec3) CompositeConstruct 277 277 277
+             280:  132(ivec3) BitwiseXor 278 279
+                              Store 134(u64v) 280
+             281:  132(ivec3) Load 134(u64v)
+             282:     18(int) Load 139(i64)
+             283:     14(int) Bitcast 282
+             284:  132(ivec3) CompositeConstruct 283 283 283
+             285:  132(ivec3) BitwiseXor 281 284
+                              Store 134(u64v) 285
                               Return
                               FunctionEnd
 12(builtinFuncs():           2 Function None 3
               13:             Label
-       278(i64v):     53(ptr) Variable Function
-        281(i64):     19(ptr) Variable Function
-       291(u64v):    133(ptr) Variable Function
-        293(u64):     40(ptr) Variable Function
-         365(dv):    364(ptr) Variable Function
-         384(iv):     75(ptr) Variable Function
-         389(uv):     82(ptr) Variable Function
-         393(bv):    392(ptr) Variable Function
-             279:   52(ivec2) Load 278(i64v)
-             280:   52(ivec2) ExtInst 1(GLSL.std.450) 5(SAbs) 279
-                              Store 278(i64v) 280
-             282:     18(int) Load 281(i64)
-             283:     18(int) ExtInst 1(GLSL.std.450) 7(SSign) 282
-                              Store 281(i64) 283
-             284:   52(ivec2) Load 278(i64v)
-             285:     18(int) Load 281(i64)
-             286:   52(ivec2) CompositeConstruct 285 285
-             287:   52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 284 286
-                              Store 278(i64v) 287
-             288:   52(ivec2) Load 278(i64v)
-             290:   52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 288 289
-                              Store 278(i64v) 290
-             292:  132(ivec3) Load 291(u64v)
-             294:     14(int) Load 293(u64)
-             295:  132(ivec3) CompositeConstruct 294 294 294
-             296:  132(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 292 295
-                              Store 291(u64v) 296
-             297:  132(ivec3) Load 291(u64v)
-             299:  132(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 297 298
-                              Store 291(u64v) 299
-             300:   52(ivec2) Load 278(i64v)
-             301:     18(int) Load 281(i64)
-             302:   52(ivec2) CompositeConstruct 301 301
-             303:   52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 300 302
-                              Store 278(i64v) 303
-             304:   52(ivec2) Load 278(i64v)
-             305:   52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 304 289
-                              Store 278(i64v) 305
-             306:  132(ivec3) Load 291(u64v)
-             307:     14(int) Load 293(u64)
-             308:  132(ivec3) CompositeConstruct 307 307 307
-             309:  132(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 306 308
-                              Store 291(u64v) 309
-             310:  132(ivec3) Load 291(u64v)
-             311:  132(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 310 298
-                              Store 291(u64v) 311
-             312:   52(ivec2) Load 278(i64v)
-             313:     18(int) Load 281(i64)
-             314:     18(int) SNegate 313
-             315:     18(int) Load 281(i64)
-             316:   52(ivec2) CompositeConstruct 314 314
-             317:   52(ivec2) CompositeConstruct 315 315
-             318:   52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 312 316 317
-                              Store 278(i64v) 318
-             319:   52(ivec2) Load 278(i64v)
-             320:   52(ivec2) Load 278(i64v)
-             321:   52(ivec2) SNegate 320
-             322:   52(ivec2) Load 278(i64v)
-             323:   52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 319 321 322
-                              Store 278(i64v) 323
-             324:  132(ivec3) Load 291(u64v)
-             325:     14(int) Load 293(u64)
-             326:     14(int) SNegate 325
-             327:     14(int) Load 293(u64)
-             328:  132(ivec3) CompositeConstruct 326 326 326
-             329:  132(ivec3) CompositeConstruct 327 327 327
-             330:  132(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 324 328 329
-                              Store 291(u64v) 330
-             331:  132(ivec3) Load 291(u64v)
-             332:  132(ivec3) Load 291(u64v)
-             333:  132(ivec3) SNegate 332
-             334:  132(ivec3) Load 291(u64v)
-             335:  132(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 331 333 334
-                              Store 291(u64v) 335
-             336:     19(ptr) AccessChain 278(i64v) 219
-             337:     18(int) Load 336
-             338:     19(ptr) AccessChain 278(i64v) 202
-             339:     18(int) Load 338
-             341:     18(int) Select 340 339 337
-                              Store 281(i64) 341
-             342:     18(int) Load 281(i64)
-             343:   52(ivec2) CompositeConstruct 342 342
-             344:     18(int) Load 281(i64)
-             345:     18(int) SNegate 344
-             346:   52(ivec2) CompositeConstruct 345 345
-             349:   52(ivec2) Select 348 346 343
-                              Store 278(i64v) 349
-             350:     40(ptr) AccessChain 291(u64v) 219
-             351:     14(int) Load 350
-             352:     40(ptr) AccessChain 291(u64v) 202
-             353:     14(int) Load 352
-             354:     14(int) Select 340 353 351
-                              Store 293(u64) 354
-             355:     14(int) Load 293(u64)
-             356:  132(ivec3) CompositeConstruct 355 355 355
-             357:     14(int) Load 293(u64)
-             358:     14(int) SNegate 357
-             359:  132(ivec3) CompositeConstruct 358 358 358
-             362:  132(ivec3) Select 361 359 356
-                              Store 291(u64v) 362
-             366:  363(fvec3) Load 365(dv)
-             367:   95(fvec2) VectorShuffle 366 366 0 1
-             368:   52(ivec2) Bitcast 367
-                              Store 278(i64v) 368
-             370:    369(ptr) AccessChain 365(dv) 209
-             371:   94(float) Load 370
-             372:     14(int) Bitcast 371
-             373:     40(ptr) AccessChain 291(u64v) 219
-                              Store 373 372
-             374:   52(ivec2) Load 278(i64v)
-             375:   95(fvec2) Bitcast 374
-             376:  363(fvec3) Load 365(dv)
-             377:  363(fvec3) VectorShuffle 376 375 3 4 2
-                              Store 365(dv) 377
-             378:  132(ivec3) Load 291(u64v)
-             379:  363(fvec3) Bitcast 378
-                              Store 365(dv) 379
-             383:     18(int) Bitcast 382
-                              Store 281(i64) 383
-             385:     18(int) Load 281(i64)
-             386:   74(ivec2) Bitcast 385
-                              Store 384(iv) 386
-             388:     14(int) Bitcast 387
-                              Store 293(u64) 388
-             390:     14(int) Load 293(u64)
-             391:   81(ivec2) Bitcast 390
-                              Store 389(uv) 391
-             394:  132(ivec3) Load 291(u64v)
-             395:     14(int) Load 293(u64)
-             396:  132(ivec3) CompositeConstruct 395 395 395
-             397:  360(bvec3) ULessThan 394 396
-                              Store 393(bv) 397
-             398:   52(ivec2) Load 278(i64v)
-             399:     18(int) Load 281(i64)
-             400:   52(ivec2) CompositeConstruct 399 399
-             401:   56(bvec2) SLessThan 398 400
-             402:  360(bvec3) Load 393(bv)
-             403:  360(bvec3) VectorShuffle 402 401 3 4 2
-                              Store 393(bv) 403
-             404:  132(ivec3) Load 291(u64v)
-             405:     14(int) Load 293(u64)
-             406:  132(ivec3) CompositeConstruct 405 405 405
-             407:  360(bvec3) ULessThanEqual 404 406
-                              Store 393(bv) 407
-             408:   52(ivec2) Load 278(i64v)
-             409:     18(int) Load 281(i64)
-             410:   52(ivec2) CompositeConstruct 409 409
-             411:   56(bvec2) SLessThanEqual 408 410
-             412:  360(bvec3) Load 393(bv)
-             413:  360(bvec3) VectorShuffle 412 411 3 4 2
-                              Store 393(bv) 413
-             414:  132(ivec3) Load 291(u64v)
-             415:     14(int) Load 293(u64)
-             416:  132(ivec3) CompositeConstruct 415 415 415
-             417:  360(bvec3) UGreaterThan 414 416
-                              Store 393(bv) 417
-             418:   52(ivec2) Load 278(i64v)
-             419:     18(int) Load 281(i64)
-             420:   52(ivec2) CompositeConstruct 419 419
-             421:   56(bvec2) SGreaterThan 418 420
-             422:  360(bvec3) Load 393(bv)
-             423:  360(bvec3) VectorShuffle 422 421 3 4 2
-                              Store 393(bv) 423
-             424:  132(ivec3) Load 291(u64v)
-             425:     14(int) Load 293(u64)
-             426:  132(ivec3) CompositeConstruct 425 425 425
-             427:  360(bvec3) UGreaterThanEqual 424 426
-                              Store 393(bv) 427
-             428:   52(ivec2) Load 278(i64v)
-             429:     18(int) Load 281(i64)
-             430:   52(ivec2) CompositeConstruct 429 429
-             431:   56(bvec2) SGreaterThanEqual 428 430
-             432:  360(bvec3) Load 393(bv)
-             433:  360(bvec3) VectorShuffle 432 431 3 4 2
-                              Store 393(bv) 433
-             434:  132(ivec3) Load 291(u64v)
-             435:     14(int) Load 293(u64)
-             436:  132(ivec3) CompositeConstruct 435 435 435
-             437:  360(bvec3) IEqual 434 436
-                              Store 393(bv) 437
-             438:   52(ivec2) Load 278(i64v)
-             439:     18(int) Load 281(i64)
-             440:   52(ivec2) CompositeConstruct 439 439
-             441:   56(bvec2) IEqual 438 440
-             442:  360(bvec3) Load 393(bv)
-             443:  360(bvec3) VectorShuffle 442 441 3 4 2
-                              Store 393(bv) 443
-             444:  132(ivec3) Load 291(u64v)
-             445:     14(int) Load 293(u64)
-             446:  132(ivec3) CompositeConstruct 445 445 445
-             447:  360(bvec3) INotEqual 444 446
-                              Store 393(bv) 447
-             448:   52(ivec2) Load 278(i64v)
-             449:     18(int) Load 281(i64)
-             450:   52(ivec2) CompositeConstruct 449 449
-             451:   56(bvec2) INotEqual 448 450
-             452:  360(bvec3) Load 393(bv)
-             453:  360(bvec3) VectorShuffle 452 451 3 4 2
-                              Store 393(bv) 453
+       286(i64v):     53(ptr) Variable Function
+        289(i64):     19(ptr) Variable Function
+       299(u64v):    133(ptr) Variable Function
+        301(u64):     40(ptr) Variable Function
+         373(dv):    372(ptr) Variable Function
+         392(iv):     75(ptr) Variable Function
+         397(uv):     82(ptr) Variable Function
+         401(bv):    400(ptr) Variable Function
+             287:   52(ivec2) Load 286(i64v)
+             288:   52(ivec2) ExtInst 1(GLSL.std.450) 5(SAbs) 287
+                              Store 286(i64v) 288
+             290:     18(int) Load 289(i64)
+             291:     18(int) ExtInst 1(GLSL.std.450) 7(SSign) 290
+                              Store 289(i64) 291
+             292:   52(ivec2) Load 286(i64v)
+             293:     18(int) Load 289(i64)
+             294:   52(ivec2) CompositeConstruct 293 293
+             295:   52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 292 294
+                              Store 286(i64v) 295
+             296:   52(ivec2) Load 286(i64v)
+             298:   52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 296 297
+                              Store 286(i64v) 298
+             300:  132(ivec3) Load 299(u64v)
+             302:     14(int) Load 301(u64)
+             303:  132(ivec3) CompositeConstruct 302 302 302
+             304:  132(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 300 303
+                              Store 299(u64v) 304
+             305:  132(ivec3) Load 299(u64v)
+             307:  132(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 305 306
+                              Store 299(u64v) 307
+             308:   52(ivec2) Load 286(i64v)
+             309:     18(int) Load 289(i64)
+             310:   52(ivec2) CompositeConstruct 309 309
+             311:   52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 308 310
+                              Store 286(i64v) 311
+             312:   52(ivec2) Load 286(i64v)
+             313:   52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 312 297
+                              Store 286(i64v) 313
+             314:  132(ivec3) Load 299(u64v)
+             315:     14(int) Load 301(u64)
+             316:  132(ivec3) CompositeConstruct 315 315 315
+             317:  132(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 314 316
+                              Store 299(u64v) 317
+             318:  132(ivec3) Load 299(u64v)
+             319:  132(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 318 306
+                              Store 299(u64v) 319
+             320:   52(ivec2) Load 286(i64v)
+             321:     18(int) Load 289(i64)
+             322:     18(int) SNegate 321
+             323:     18(int) Load 289(i64)
+             324:   52(ivec2) CompositeConstruct 322 322
+             325:   52(ivec2) CompositeConstruct 323 323
+             326:   52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 320 324 325
+                              Store 286(i64v) 326
+             327:   52(ivec2) Load 286(i64v)
+             328:   52(ivec2) Load 286(i64v)
+             329:   52(ivec2) SNegate 328
+             330:   52(ivec2) Load 286(i64v)
+             331:   52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 327 329 330
+                              Store 286(i64v) 331
+             332:  132(ivec3) Load 299(u64v)
+             333:     14(int) Load 301(u64)
+             334:     14(int) SNegate 333
+             335:     14(int) Load 301(u64)
+             336:  132(ivec3) CompositeConstruct 334 334 334
+             337:  132(ivec3) CompositeConstruct 335 335 335
+             338:  132(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 332 336 337
+                              Store 299(u64v) 338
+             339:  132(ivec3) Load 299(u64v)
+             340:  132(ivec3) Load 299(u64v)
+             341:  132(ivec3) SNegate 340
+             342:  132(ivec3) Load 299(u64v)
+             343:  132(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 339 341 342
+                              Store 299(u64v) 343
+             344:     19(ptr) AccessChain 286(i64v) 227
+             345:     18(int) Load 344
+             346:     19(ptr) AccessChain 286(i64v) 203
+             347:     18(int) Load 346
+             349:     18(int) Select 348 347 345
+                              Store 289(i64) 349
+             350:     18(int) Load 289(i64)
+             351:   52(ivec2) CompositeConstruct 350 350
+             352:     18(int) Load 289(i64)
+             353:     18(int) SNegate 352
+             354:   52(ivec2) CompositeConstruct 353 353
+             357:   52(ivec2) Select 356 354 351
+                              Store 286(i64v) 357
+             358:     40(ptr) AccessChain 299(u64v) 227
+             359:     14(int) Load 358
+             360:     40(ptr) AccessChain 299(u64v) 203
+             361:     14(int) Load 360
+             362:     14(int) Select 348 361 359
+                              Store 301(u64) 362
+             363:     14(int) Load 301(u64)
+             364:  132(ivec3) CompositeConstruct 363 363 363
+             365:     14(int) Load 301(u64)
+             366:     14(int) SNegate 365
+             367:  132(ivec3) CompositeConstruct 366 366 366
+             370:  132(ivec3) Select 369 367 364
+                              Store 299(u64v) 370
+             374:  371(fvec3) Load 373(dv)
+             375:   95(fvec2) VectorShuffle 374 374 0 1
+             376:   52(ivec2) Bitcast 375
+                              Store 286(i64v) 376
+             378:    377(ptr) AccessChain 373(dv) 217
+             379:   94(float) Load 378
+             380:     14(int) Bitcast 379
+             381:     40(ptr) AccessChain 299(u64v) 227
+                              Store 381 380
+             382:   52(ivec2) Load 286(i64v)
+             383:   95(fvec2) Bitcast 382
+             384:  371(fvec3) Load 373(dv)
+             385:  371(fvec3) VectorShuffle 384 383 3 4 2
+                              Store 373(dv) 385
+             386:  132(ivec3) Load 299(u64v)
+             387:  371(fvec3) Bitcast 386
+                              Store 373(dv) 387
+             391:     18(int) Bitcast 390
+                              Store 289(i64) 391
+             393:     18(int) Load 289(i64)
+             394:   74(ivec2) Bitcast 393
+                              Store 392(iv) 394
+             396:     14(int) Bitcast 395
+                              Store 301(u64) 396
+             398:     14(int) Load 301(u64)
+             399:   81(ivec2) Bitcast 398
+                              Store 397(uv) 399
+             402:  132(ivec3) Load 299(u64v)
+             403:     14(int) Load 301(u64)
+             404:  132(ivec3) CompositeConstruct 403 403 403
+             405:  368(bvec3) ULessThan 402 404
+                              Store 401(bv) 405
+             406:   52(ivec2) Load 286(i64v)
+             407:     18(int) Load 289(i64)
+             408:   52(ivec2) CompositeConstruct 407 407
+             409:   56(bvec2) SLessThan 406 408
+             410:  368(bvec3) Load 401(bv)
+             411:  368(bvec3) VectorShuffle 410 409 3 4 2
+                              Store 401(bv) 411
+             412:  132(ivec3) Load 299(u64v)
+             413:     14(int) Load 301(u64)
+             414:  132(ivec3) CompositeConstruct 413 413 413
+             415:  368(bvec3) ULessThanEqual 412 414
+                              Store 401(bv) 415
+             416:   52(ivec2) Load 286(i64v)
+             417:     18(int) Load 289(i64)
+             418:   52(ivec2) CompositeConstruct 417 417
+             419:   56(bvec2) SLessThanEqual 416 418
+             420:  368(bvec3) Load 401(bv)
+             421:  368(bvec3) VectorShuffle 420 419 3 4 2
+                              Store 401(bv) 421
+             422:  132(ivec3) Load 299(u64v)
+             423:     14(int) Load 301(u64)
+             424:  132(ivec3) CompositeConstruct 423 423 423
+             425:  368(bvec3) UGreaterThan 422 424
+                              Store 401(bv) 425
+             426:   52(ivec2) Load 286(i64v)
+             427:     18(int) Load 289(i64)
+             428:   52(ivec2) CompositeConstruct 427 427
+             429:   56(bvec2) SGreaterThan 426 428
+             430:  368(bvec3) Load 401(bv)
+             431:  368(bvec3) VectorShuffle 430 429 3 4 2
+                              Store 401(bv) 431
+             432:  132(ivec3) Load 299(u64v)
+             433:     14(int) Load 301(u64)
+             434:  132(ivec3) CompositeConstruct 433 433 433
+             435:  368(bvec3) UGreaterThanEqual 432 434
+                              Store 401(bv) 435
+             436:   52(ivec2) Load 286(i64v)
+             437:     18(int) Load 289(i64)
+             438:   52(ivec2) CompositeConstruct 437 437
+             439:   56(bvec2) SGreaterThanEqual 436 438
+             440:  368(bvec3) Load 401(bv)
+             441:  368(bvec3) VectorShuffle 440 439 3 4 2
+                              Store 401(bv) 441
+             442:  132(ivec3) Load 299(u64v)
+             443:     14(int) Load 301(u64)
+             444:  132(ivec3) CompositeConstruct 443 443 443
+             445:  368(bvec3) IEqual 442 444
+                              Store 401(bv) 445
+             446:   52(ivec2) Load 286(i64v)
+             447:     18(int) Load 289(i64)
+             448:   52(ivec2) CompositeConstruct 447 447
+             449:   56(bvec2) IEqual 446 448
+             450:  368(bvec3) Load 401(bv)
+             451:  368(bvec3) VectorShuffle 450 449 3 4 2
+                              Store 401(bv) 451
+             452:  132(ivec3) Load 299(u64v)
+             453:     14(int) Load 301(u64)
+             454:  132(ivec3) CompositeConstruct 453 453 453
+             455:  368(bvec3) INotEqual 452 454
+                              Store 401(bv) 455
+             456:   52(ivec2) Load 286(i64v)
+             457:     18(int) Load 289(i64)
+             458:   52(ivec2) CompositeConstruct 457 457
+             459:   56(bvec2) INotEqual 456 458
+             460:  368(bvec3) Load 401(bv)
+             461:  368(bvec3) VectorShuffle 460 459 3 4 2
+                              Store 401(bv) 461
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.int8.frag.out b/Test/baseResults/spv.int8.frag.out
new file mode 100644
index 0000000..1daa1a3
--- /dev/null
+++ b/Test/baseResults/spv.int8.frag.out
@@ -0,0 +1,748 @@
+spv.int8.frag
+// Module Version 10300
+// Generated by (magic number): 80006
+// Id's are bound by 531
+
+                              Capability Shader
+                              Capability Float16
+                              Capability Float64
+                              Capability Int64
+                              Capability Int16
+                              Capability Int8
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main"
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_float16"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_float32"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_float64"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_int16"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_int32"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_int64"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_int8"
+                              Name 4  "main"
+                              Name 6  "literal("
+                              Name 8  "typeCast8("
+                              Name 10  "operators("
+                              Name 12  "builtinFuncs("
+                              Name 16  "i8"
+                              Name 24  "Uniforms"
+                              MemberName 24(Uniforms) 0  "index"
+                              Name 26  ""
+                              Name 33  "indexable"
+                              Name 38  "u8"
+                              Name 46  "indexable"
+                              Name 51  "u8v"
+                              Name 54  "i8v"
+                              Name 60  "i16v"
+                              Name 68  "i32v"
+                              Name 76  "u32v"
+                              Name 83  "i64v"
+                              Name 89  "u64v"
+                              Name 103  "f16v"
+                              Name 109  "f32v"
+                              Name 115  "f64v"
+                              Name 144  "u16v"
+                              Name 174  "bv"
+                              Name 192  "u8v"
+                              Name 196  "i8"
+                              Name 216  "i"
+                              Name 223  "uv"
+                              Name 242  "i16"
+                              Name 279  "b"
+                              Name 341  "i8v"
+                              Name 344  "i8"
+                              Name 354  "u8v"
+                              Name 356  "u8"
+                              Name 430  "i16"
+                              Name 433  "i32"
+                              Name 436  "i8v4"
+                              Name 440  "u16"
+                              Name 441  "u8v2"
+                              Name 444  "u32"
+                              Name 447  "u8v4"
+                              Name 459  "bv"
+                              Name 526  "Block"
+                              MemberName 526(Block) 0  "i8"
+                              MemberName 526(Block) 1  "i8v2"
+                              MemberName 526(Block) 2  "i8v3"
+                              MemberName 526(Block) 3  "i8v4"
+                              MemberName 526(Block) 4  "u8"
+                              MemberName 526(Block) 5  "u8v2"
+                              MemberName 526(Block) 6  "u8v3"
+                              MemberName 526(Block) 7  "u8v4"
+                              Name 528  "block"
+                              Name 529  "si8"
+                              Name 530  "su8"
+                              MemberDecorate 24(Uniforms) 0 Offset 0
+                              Decorate 24(Uniforms) Block
+                              Decorate 26 DescriptorSet 0
+                              Decorate 26 Binding 0
+                              MemberDecorate 526(Block) 0 Offset 0
+                              MemberDecorate 526(Block) 1 Offset 2
+                              MemberDecorate 526(Block) 2 Offset 4
+                              MemberDecorate 526(Block) 3 Offset 8
+                              MemberDecorate 526(Block) 4 Offset 12
+                              MemberDecorate 526(Block) 5 Offset 14
+                              MemberDecorate 526(Block) 6 Offset 16
+                              MemberDecorate 526(Block) 7 Offset 20
+                              Decorate 526(Block) Block
+                              Decorate 528(block) DescriptorSet 0
+                              Decorate 528(block) Binding 1
+                              Decorate 529(si8) SpecId 100
+                              Decorate 530(su8) SpecId 101
+               2:             TypeVoid
+               3:             TypeFunction 2
+              14:             TypeInt 8 1
+              15:             TypePointer Function 14(int)
+              17:             TypeInt 32 0
+              18:     17(int) Constant 3
+              19:             TypeArray 14(int) 18
+              20:     14(int) Constant 4294967279
+              21:     14(int) Constant 4294967295
+              22:     14(int) Constant 0
+              23:          19 ConstantComposite 20 21 22
+    24(Uniforms):             TypeStruct 17(int)
+              25:             TypePointer Uniform 24(Uniforms)
+              26:     25(ptr) Variable Uniform
+              27:             TypeInt 32 1
+              28:     27(int) Constant 0
+              29:             TypePointer Uniform 17(int)
+              32:             TypePointer Function 19
+              36:             TypeInt 8 0
+              37:             TypePointer Function 36(int)
+              39:             TypeArray 36(int) 18
+              40:     36(int) Constant 255
+              41:     36(int) Constant 127
+              42:          39 ConstantComposite 40 40 41
+              45:             TypePointer Function 39
+              49:             TypeVector 36(int) 2
+              50:             TypePointer Function 49(ivec2)
+              52:             TypeVector 14(int) 2
+              53:             TypePointer Function 52(ivec2)
+              57:             TypeInt 16 1
+              58:             TypeVector 57(int) 2
+              59:             TypePointer Function 58(ivec2)
+              66:             TypeVector 27(int) 2
+              67:             TypePointer Function 66(ivec2)
+              74:             TypeVector 17(int) 2
+              75:             TypePointer Function 74(ivec2)
+              80:             TypeInt 64 1
+              81:             TypeVector 80(int) 2
+              82:             TypePointer Function 81(ivec2)
+              86:             TypeInt 64 0
+              87:             TypeVector 86(int) 2
+              88:             TypePointer Function 87(ivec2)
+             100:             TypeFloat 16
+             101:             TypeVector 100(float) 2
+             102:             TypePointer Function 101(fvec2)
+             106:             TypeFloat 32
+             107:             TypeVector 106(float) 2
+             108:             TypePointer Function 107(fvec2)
+             112:             TypeFloat 64
+             113:             TypeVector 112(float) 2
+             114:             TypePointer Function 113(fvec2)
+             141:             TypeInt 16 0
+             142:             TypeVector 141(int) 2
+             143:             TypePointer Function 142(ivec2)
+             171:             TypeBool
+             172:             TypeVector 171(bool) 2
+             173:             TypePointer Function 172(bvec2)
+             176:     14(int) Constant 1
+             177:   52(ivec2) ConstantComposite 22 22
+             178:   52(ivec2) ConstantComposite 176 176
+             181:     36(int) Constant 0
+             182:     36(int) Constant 1
+             183:   49(ivec2) ConstantComposite 181 181
+             184:   49(ivec2) ConstantComposite 182 182
+             190:             TypeVector 14(int) 3
+             191:             TypePointer Function 190(ivec3)
+             215:             TypePointer Function 27(int)
+             221:             TypeVector 17(int) 3
+             222:             TypePointer Function 221(ivec3)
+             225:             TypeVector 27(int) 3
+             241:             TypePointer Function 57(int)
+             264:     17(int) Constant 1
+             270:     17(int) Constant 2
+             278:             TypePointer Function 171(bool)
+             280:     17(int) Constant 0
+             293:             TypePointer Function 17(int)
+             352:   52(ivec2) ConstantComposite 21 21
+             358:             TypeVector 36(int) 3
+             362:  190(ivec3) ConstantComposite 22 22 22
+             404:   171(bool) ConstantTrue
+             411:   171(bool) ConstantFalse
+             412:  172(bvec2) ConstantComposite 411 411
+             427:             TypeVector 171(bool) 3
+             428:  427(bvec3) ConstantComposite 411 411 411
+             434:             TypeVector 14(int) 4
+             435:             TypePointer Function 434(ivec4)
+             439:             TypePointer Function 141(int)
+             445:             TypeVector 36(int) 4
+             446:             TypePointer Function 445(ivec4)
+             458:             TypePointer Function 427(bvec3)
+      526(Block):             TypeStruct 14(int) 52(ivec2) 190(ivec3) 434(ivec4) 36(int) 49(ivec2) 190(ivec3) 445(ivec4)
+             527:             TypePointer Uniform 526(Block)
+      528(block):    527(ptr) Variable Uniform
+        529(si8):     14(int) SpecConstant 4294967286
+        530(su8):     36(int) SpecConstant 20
+         4(main):           2 Function None 3
+               5:             Label
+                              Return
+                              FunctionEnd
+     6(literal():           2 Function None 3
+               7:             Label
+          16(i8):     15(ptr) Variable Function
+   33(indexable):     32(ptr) Variable Function
+          38(u8):     37(ptr) Variable Function
+   46(indexable):     45(ptr) Variable Function
+              30:     29(ptr) AccessChain 26 28
+              31:     17(int) Load 30
+                              Store 33(indexable) 23
+              34:     15(ptr) AccessChain 33(indexable) 31
+              35:     14(int) Load 34
+                              Store 16(i8) 35
+              43:     29(ptr) AccessChain 26 28
+              44:     17(int) Load 43
+                              Store 46(indexable) 42
+              47:     37(ptr) AccessChain 46(indexable) 44
+              48:     36(int) Load 47
+                              Store 38(u8) 48
+                              Return
+                              FunctionEnd
+   8(typeCast8():           2 Function None 3
+               9:             Label
+         51(u8v):     50(ptr) Variable Function
+         54(i8v):     53(ptr) Variable Function
+        60(i16v):     59(ptr) Variable Function
+        68(i32v):     67(ptr) Variable Function
+        76(u32v):     75(ptr) Variable Function
+        83(i64v):     82(ptr) Variable Function
+        89(u64v):     88(ptr) Variable Function
+       103(f16v):    102(ptr) Variable Function
+       109(f32v):    108(ptr) Variable Function
+       115(f64v):    114(ptr) Variable Function
+       144(u16v):    143(ptr) Variable Function
+         174(bv):    173(ptr) Variable Function
+              55:   52(ivec2) Load 54(i8v)
+              56:   49(ivec2) Bitcast 55
+                              Store 51(u8v) 56
+              61:   52(ivec2) Load 54(i8v)
+              62:   58(ivec2) SConvert 61
+                              Store 60(i16v) 62
+              63:   49(ivec2) Load 51(u8v)
+              64:   58(ivec2) UConvert 63
+              65:   58(ivec2) Bitcast 64
+                              Store 60(i16v) 65
+              69:   52(ivec2) Load 54(i8v)
+              70:   66(ivec2) SConvert 69
+                              Store 68(i32v) 70
+              71:   49(ivec2) Load 51(u8v)
+              72:   66(ivec2) UConvert 71
+              73:   66(ivec2) Bitcast 72
+                              Store 68(i32v) 73
+              77:   52(ivec2) Load 54(i8v)
+              78:   66(ivec2) SConvert 77
+              79:   74(ivec2) Bitcast 78
+                              Store 76(u32v) 79
+              84:   52(ivec2) Load 54(i8v)
+              85:   81(ivec2) SConvert 84
+                              Store 83(i64v) 85
+              90:   52(ivec2) Load 54(i8v)
+              91:   81(ivec2) SConvert 90
+              92:   87(ivec2) Bitcast 91
+                              Store 89(u64v) 92
+              93:   49(ivec2) Load 51(u8v)
+              94:   74(ivec2) UConvert 93
+                              Store 76(u32v) 94
+              95:   49(ivec2) Load 51(u8v)
+              96:   81(ivec2) UConvert 95
+              97:   81(ivec2) Bitcast 96
+                              Store 83(i64v) 97
+              98:   49(ivec2) Load 51(u8v)
+              99:   87(ivec2) UConvert 98
+                              Store 89(u64v) 99
+             104:   52(ivec2) Load 54(i8v)
+             105:  101(fvec2) ConvertSToF 104
+                              Store 103(f16v) 105
+             110:   52(ivec2) Load 54(i8v)
+             111:  107(fvec2) ConvertSToF 110
+                              Store 109(f32v) 111
+             116:   52(ivec2) Load 54(i8v)
+             117:  113(fvec2) ConvertSToF 116
+                              Store 115(f64v) 117
+             118:   49(ivec2) Load 51(u8v)
+             119:  101(fvec2) ConvertUToF 118
+                              Store 103(f16v) 119
+             120:   49(ivec2) Load 51(u8v)
+             121:  107(fvec2) ConvertUToF 120
+                              Store 109(f32v) 121
+             122:   49(ivec2) Load 51(u8v)
+             123:  113(fvec2) ConvertUToF 122
+                              Store 115(f64v) 123
+             124:   49(ivec2) Load 51(u8v)
+             125:   52(ivec2) Bitcast 124
+                              Store 54(i8v) 125
+             126:   52(ivec2) Load 54(i8v)
+             127:   58(ivec2) SConvert 126
+                              Store 60(i16v) 127
+             128:   49(ivec2) Load 51(u8v)
+             129:   58(ivec2) UConvert 128
+             130:   58(ivec2) Bitcast 129
+                              Store 60(i16v) 130
+             131:   52(ivec2) Load 54(i8v)
+             132:   66(ivec2) SConvert 131
+                              Store 68(i32v) 132
+             133:   49(ivec2) Load 51(u8v)
+             134:   66(ivec2) UConvert 133
+             135:   66(ivec2) Bitcast 134
+                              Store 68(i32v) 135
+             136:   52(ivec2) Load 54(i8v)
+             137:   81(ivec2) SConvert 136
+                              Store 83(i64v) 137
+             138:   52(ivec2) Load 54(i8v)
+             139:   81(ivec2) SConvert 138
+             140:   87(ivec2) Bitcast 139
+                              Store 89(u64v) 140
+             145:   52(ivec2) Load 54(i8v)
+             146:   58(ivec2) SConvert 145
+             147:  142(ivec2) Bitcast 146
+                              Store 144(u16v) 147
+             148:   49(ivec2) Load 51(u8v)
+             149:  142(ivec2) UConvert 148
+                              Store 144(u16v) 149
+             150:   49(ivec2) Load 51(u8v)
+             151:   74(ivec2) UConvert 150
+                              Store 76(u32v) 151
+             152:   49(ivec2) Load 51(u8v)
+             153:   81(ivec2) UConvert 152
+             154:   81(ivec2) Bitcast 153
+                              Store 83(i64v) 154
+             155:   49(ivec2) Load 51(u8v)
+             156:   81(ivec2) UConvert 155
+             157:   81(ivec2) Bitcast 156
+             158:   87(ivec2) Bitcast 157
+                              Store 89(u64v) 158
+             159:   52(ivec2) Load 54(i8v)
+             160:  101(fvec2) ConvertSToF 159
+                              Store 103(f16v) 160
+             161:   52(ivec2) Load 54(i8v)
+             162:  107(fvec2) ConvertSToF 161
+                              Store 109(f32v) 162
+             163:   52(ivec2) Load 54(i8v)
+             164:  113(fvec2) ConvertSToF 163
+                              Store 115(f64v) 164
+             165:   49(ivec2) Load 51(u8v)
+             166:  101(fvec2) ConvertUToF 165
+                              Store 103(f16v) 166
+             167:   49(ivec2) Load 51(u8v)
+             168:  107(fvec2) ConvertUToF 167
+                              Store 109(f32v) 168
+             169:   49(ivec2) Load 51(u8v)
+             170:  113(fvec2) ConvertUToF 169
+                              Store 115(f64v) 170
+             175:  172(bvec2) Load 174(bv)
+             179:   52(ivec2) Select 175 178 177
+                              Store 54(i8v) 179
+             180:  172(bvec2) Load 174(bv)
+             185:   49(ivec2) Select 180 184 183
+                              Store 51(u8v) 185
+             186:   52(ivec2) Load 54(i8v)
+             187:  172(bvec2) INotEqual 186 183
+                              Store 174(bv) 187
+             188:   49(ivec2) Load 51(u8v)
+             189:  172(bvec2) INotEqual 188 183
+                              Store 174(bv) 189
+                              Return
+                              FunctionEnd
+  10(operators():           2 Function None 3
+              11:             Label
+        192(u8v):    191(ptr) Variable Function
+         196(i8):     15(ptr) Variable Function
+          216(i):    215(ptr) Variable Function
+         223(uv):    222(ptr) Variable Function
+        242(i16):    241(ptr) Variable Function
+          279(b):    278(ptr) Variable Function
+             193:  190(ivec3) Load 192(u8v)
+             194:  190(ivec3) CompositeConstruct 176 176 176
+             195:  190(ivec3) IAdd 193 194
+                              Store 192(u8v) 195
+             197:     14(int) Load 196(i8)
+             198:     14(int) ISub 197 176
+                              Store 196(i8) 198
+             199:     14(int) Load 196(i8)
+             200:     14(int) IAdd 199 176
+                              Store 196(i8) 200
+             201:  190(ivec3) Load 192(u8v)
+             202:  190(ivec3) CompositeConstruct 176 176 176
+             203:  190(ivec3) ISub 201 202
+                              Store 192(u8v) 203
+             204:  190(ivec3) Load 192(u8v)
+             205:  190(ivec3) Not 204
+                              Store 192(u8v) 205
+             206:     14(int) Load 196(i8)
+                              Store 196(i8) 206
+             207:  190(ivec3) Load 192(u8v)
+             208:  190(ivec3) SNegate 207
+                              Store 192(u8v) 208
+             209:     14(int) Load 196(i8)
+             210:     14(int) Load 196(i8)
+             211:     14(int) IAdd 210 209
+                              Store 196(i8) 211
+             212:  190(ivec3) Load 192(u8v)
+             213:  190(ivec3) Load 192(u8v)
+             214:  190(ivec3) ISub 213 212
+                              Store 192(u8v) 214
+             217:     14(int) Load 196(i8)
+             218:     27(int) SConvert 217
+             219:     27(int) Load 216(i)
+             220:     27(int) IMul 219 218
+                              Store 216(i) 220
+             224:  190(ivec3) Load 192(u8v)
+             226:  225(ivec3) SConvert 224
+             227:  221(ivec3) Bitcast 226
+             228:  221(ivec3) Load 223(uv)
+             229:  221(ivec3) UDiv 228 227
+                              Store 223(uv) 229
+             230:     14(int) Load 196(i8)
+             231:     27(int) SConvert 230
+             232:     17(int) Bitcast 231
+             233:  221(ivec3) Load 223(uv)
+             234:  221(ivec3) CompositeConstruct 232 232 232
+             235:  221(ivec3) UMod 233 234
+                              Store 223(uv) 235
+             236:  190(ivec3) Load 192(u8v)
+             237:  225(ivec3) SConvert 236
+             238:  221(ivec3) Bitcast 237
+             239:  221(ivec3) Load 223(uv)
+             240:  221(ivec3) IAdd 238 239
+                              Store 223(uv) 240
+             243:     14(int) Load 196(i8)
+             244:     57(int) SConvert 243
+             245:     57(int) Load 242(i16)
+             246:     57(int) ISub 244 245
+                              Store 242(i16) 246
+             247:  190(ivec3) Load 192(u8v)
+             248:  225(ivec3) SConvert 247
+             249:  221(ivec3) Bitcast 248
+             250:  221(ivec3) Load 223(uv)
+             251:  221(ivec3) IMul 249 250
+                              Store 223(uv) 251
+             252:     14(int) Load 196(i8)
+             253:     57(int) SConvert 252
+             254:     57(int) Load 242(i16)
+             255:     57(int) IMul 253 254
+                              Store 242(i16) 255
+             256:     14(int) Load 196(i8)
+             257:     27(int) SConvert 256
+             258:     27(int) Load 216(i)
+             259:     27(int) SMod 257 258
+                              Store 216(i) 259
+             260:     14(int) Load 196(i8)
+             261:  190(ivec3) Load 192(u8v)
+             262:  190(ivec3) CompositeConstruct 260 260 260
+             263:  190(ivec3) ShiftLeftLogical 261 262
+                              Store 192(u8v) 263
+             265:     15(ptr) AccessChain 192(u8v) 264
+             266:     14(int) Load 265
+             267:     14(int) Load 196(i8)
+             268:     14(int) ShiftRightArithmetic 267 266
+                              Store 196(i8) 268
+             269:     14(int) Load 196(i8)
+             271:     15(ptr) AccessChain 192(u8v) 270
+             272:     14(int) Load 271
+             273:     14(int) ShiftLeftLogical 269 272
+                              Store 196(i8) 273
+             274:  190(ivec3) Load 192(u8v)
+             275:     14(int) Load 196(i8)
+             276:  190(ivec3) CompositeConstruct 275 275 275
+             277:  190(ivec3) ShiftLeftLogical 274 276
+                              Store 192(u8v) 277
+             281:     15(ptr) AccessChain 192(u8v) 280
+             282:     14(int) Load 281
+             283:     14(int) Load 196(i8)
+             284:   171(bool) INotEqual 282 283
+                              Store 279(b) 284
+             285:     14(int) Load 196(i8)
+             286:     15(ptr) AccessChain 192(u8v) 280
+             287:     14(int) Load 286
+             288:   171(bool) IEqual 285 287
+                              Store 279(b) 288
+             289:     15(ptr) AccessChain 192(u8v) 280
+             290:     14(int) Load 289
+             291:     27(int) SConvert 290
+             292:     17(int) Bitcast 291
+             294:    293(ptr) AccessChain 223(uv) 264
+             295:     17(int) Load 294
+             296:   171(bool) UGreaterThan 292 295
+                              Store 279(b) 296
+             297:     14(int) Load 196(i8)
+             298:     27(int) SConvert 297
+             299:     27(int) Load 216(i)
+             300:   171(bool) SLessThan 298 299
+                              Store 279(b) 300
+             301:     15(ptr) AccessChain 192(u8v) 264
+             302:     14(int) Load 301
+             303:     27(int) SConvert 302
+             304:     17(int) Bitcast 303
+             305:    293(ptr) AccessChain 223(uv) 280
+             306:     17(int) Load 305
+             307:   171(bool) UGreaterThanEqual 304 306
+                              Store 279(b) 307
+             308:     14(int) Load 196(i8)
+             309:     27(int) SConvert 308
+             310:     27(int) Load 216(i)
+             311:   171(bool) SLessThanEqual 309 310
+                              Store 279(b) 311
+             312:     14(int) Load 196(i8)
+             313:     27(int) SConvert 312
+             314:     17(int) Bitcast 313
+             315:  221(ivec3) Load 223(uv)
+             316:  221(ivec3) CompositeConstruct 314 314 314
+             317:  221(ivec3) BitwiseOr 315 316
+                              Store 223(uv) 317
+             318:     14(int) Load 196(i8)
+             319:     27(int) SConvert 318
+             320:     27(int) Load 216(i)
+             321:     27(int) BitwiseOr 319 320
+                              Store 216(i) 321
+             322:     14(int) Load 196(i8)
+             323:     57(int) SConvert 322
+             324:     57(int) Load 242(i16)
+             325:     57(int) BitwiseAnd 324 323
+                              Store 242(i16) 325
+             326:  190(ivec3) Load 192(u8v)
+             327:  225(ivec3) SConvert 326
+             328:  221(ivec3) Bitcast 327
+             329:  221(ivec3) Load 223(uv)
+             330:  221(ivec3) BitwiseAnd 328 329
+                              Store 223(uv) 330
+             331:     14(int) Load 196(i8)
+             332:     27(int) SConvert 331
+             333:     17(int) Bitcast 332
+             334:  221(ivec3) Load 223(uv)
+             335:  221(ivec3) CompositeConstruct 333 333 333
+             336:  221(ivec3) BitwiseXor 334 335
+                              Store 223(uv) 336
+             337:  190(ivec3) Load 192(u8v)
+             338:     14(int) Load 196(i8)
+             339:  190(ivec3) CompositeConstruct 338 338 338
+             340:  190(ivec3) BitwiseXor 337 339
+                              Store 192(u8v) 340
+                              Return
+                              FunctionEnd
+12(builtinFuncs():           2 Function None 3
+              13:             Label
+        341(i8v):     53(ptr) Variable Function
+         344(i8):     15(ptr) Variable Function
+        354(u8v):    191(ptr) Variable Function
+         356(u8):     37(ptr) Variable Function
+        430(i16):    241(ptr) Variable Function
+        433(i32):    215(ptr) Variable Function
+       436(i8v4):    435(ptr) Variable Function
+        440(u16):    439(ptr) Variable Function
+       441(u8v2):     50(ptr) Variable Function
+        444(u32):    293(ptr) Variable Function
+       447(u8v4):    446(ptr) Variable Function
+         459(bv):    458(ptr) Variable Function
+             342:   52(ivec2) Load 341(i8v)
+             343:   52(ivec2) ExtInst 1(GLSL.std.450) 5(SAbs) 342
+                              Store 341(i8v) 343
+             345:     14(int) Load 344(i8)
+             346:     14(int) ExtInst 1(GLSL.std.450) 7(SSign) 345
+                              Store 344(i8) 346
+             347:   52(ivec2) Load 341(i8v)
+             348:     14(int) Load 344(i8)
+             349:   52(ivec2) CompositeConstruct 348 348
+             350:   52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 347 349
+                              Store 341(i8v) 350
+             351:   52(ivec2) Load 341(i8v)
+             353:   52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 351 352
+                              Store 341(i8v) 353
+             355:  190(ivec3) Load 354(u8v)
+             357:     36(int) Load 356(u8)
+             359:  358(ivec3) CompositeConstruct 357 357 357
+             360:  190(ivec3) ExtInst 1(GLSL.std.450) 39(SMin) 355 359
+                              Store 354(u8v) 360
+             361:  190(ivec3) Load 354(u8v)
+             363:  190(ivec3) ExtInst 1(GLSL.std.450) 39(SMin) 361 362
+                              Store 354(u8v) 363
+             364:   52(ivec2) Load 341(i8v)
+             365:     14(int) Load 344(i8)
+             366:   52(ivec2) CompositeConstruct 365 365
+             367:   52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 364 366
+                              Store 341(i8v) 367
+             368:   52(ivec2) Load 341(i8v)
+             369:   52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 368 352
+                              Store 341(i8v) 369
+             370:  190(ivec3) Load 354(u8v)
+             371:     36(int) Load 356(u8)
+             372:  358(ivec3) CompositeConstruct 371 371 371
+             373:  190(ivec3) ExtInst 1(GLSL.std.450) 42(SMax) 370 372
+                              Store 354(u8v) 373
+             374:  190(ivec3) Load 354(u8v)
+             375:  190(ivec3) ExtInst 1(GLSL.std.450) 42(SMax) 374 362
+                              Store 354(u8v) 375
+             376:   52(ivec2) Load 341(i8v)
+             377:     14(int) Load 344(i8)
+             378:     14(int) SNegate 377
+             379:     14(int) Load 344(i8)
+             380:   52(ivec2) CompositeConstruct 378 378
+             381:   52(ivec2) CompositeConstruct 379 379
+             382:   52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 376 380 381
+                              Store 341(i8v) 382
+             383:   52(ivec2) Load 341(i8v)
+             384:   52(ivec2) Load 341(i8v)
+             385:   52(ivec2) SNegate 384
+             386:   52(ivec2) Load 341(i8v)
+             387:   52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 383 385 386
+                              Store 341(i8v) 387
+             388:  190(ivec3) Load 354(u8v)
+             389:     36(int) Load 356(u8)
+             390:     36(int) SNegate 389
+             391:     36(int) Load 356(u8)
+             392:  358(ivec3) CompositeConstruct 390 390 390
+             393:  358(ivec3) CompositeConstruct 391 391 391
+             394:  190(ivec3) ExtInst 1(GLSL.std.450) 45(SClamp) 388 392 393
+                              Store 354(u8v) 394
+             395:  190(ivec3) Load 354(u8v)
+             396:  190(ivec3) Load 354(u8v)
+             397:  190(ivec3) SNegate 396
+             398:  190(ivec3) Load 354(u8v)
+             399:  190(ivec3) ExtInst 1(GLSL.std.450) 45(SClamp) 395 397 398
+                              Store 354(u8v) 399
+             400:     15(ptr) AccessChain 341(i8v) 280
+             401:     14(int) Load 400
+             402:     15(ptr) AccessChain 341(i8v) 264
+             403:     14(int) Load 402
+             405:     14(int) Select 404 403 401
+                              Store 344(i8) 405
+             406:     14(int) Load 344(i8)
+             407:   52(ivec2) CompositeConstruct 406 406
+             408:     14(int) Load 344(i8)
+             409:     14(int) SNegate 408
+             410:   52(ivec2) CompositeConstruct 409 409
+             413:   52(ivec2) Select 412 410 407
+                              Store 341(i8v) 413
+             414:     15(ptr) AccessChain 354(u8v) 280
+             415:     14(int) Load 414
+             416:     15(ptr) AccessChain 354(u8v) 264
+             417:     14(int) Load 416
+             418:     14(int) Select 404 417 415
+             419:     36(int) Bitcast 418
+                              Store 356(u8) 419
+             420:     36(int) Load 356(u8)
+             421:     14(int) Bitcast 420
+             422:  190(ivec3) CompositeConstruct 421 421 421
+             423:     36(int) Load 356(u8)
+             424:     36(int) SNegate 423
+             425:     14(int) Bitcast 424
+             426:  190(ivec3) CompositeConstruct 425 425 425
+             429:  190(ivec3) Select 428 426 422
+                              Store 354(u8v) 429
+             431:   52(ivec2) Load 341(i8v)
+             432:     57(int) Bitcast 431
+                              Store 430(i16) 432
+             437:  434(ivec4) Load 436(i8v4)
+             438:     27(int) Bitcast 437
+                              Store 433(i32) 438
+             442:   49(ivec2) Load 441(u8v2)
+             443:    141(int) Bitcast 442
+                              Store 440(u16) 443
+             448:  445(ivec4) Load 447(u8v4)
+             449:     17(int) Bitcast 448
+                              Store 444(u32) 449
+             450:     57(int) Load 430(i16)
+             451:   52(ivec2) Bitcast 450
+                              Store 341(i8v) 451
+             452:     27(int) Load 433(i32)
+             453:  434(ivec4) Bitcast 452
+                              Store 436(i8v4) 453
+             454:    141(int) Load 440(u16)
+             455:   49(ivec2) Bitcast 454
+                              Store 441(u8v2) 455
+             456:     17(int) Load 444(u32)
+             457:  445(ivec4) Bitcast 456
+                              Store 447(u8v4) 457
+             460:  190(ivec3) Load 354(u8v)
+             461:     36(int) Load 356(u8)
+             462:     14(int) Bitcast 461
+             463:  190(ivec3) CompositeConstruct 462 462 462
+             464:  427(bvec3) SLessThan 460 463
+                              Store 459(bv) 464
+             465:   52(ivec2) Load 341(i8v)
+             466:     14(int) Load 344(i8)
+             467:   52(ivec2) CompositeConstruct 466 466
+             468:  172(bvec2) SLessThan 465 467
+             469:  427(bvec3) Load 459(bv)
+             470:  427(bvec3) VectorShuffle 469 468 3 4 2
+                              Store 459(bv) 470
+             471:  190(ivec3) Load 354(u8v)
+             472:     36(int) Load 356(u8)
+             473:     14(int) Bitcast 472
+             474:  190(ivec3) CompositeConstruct 473 473 473
+             475:  427(bvec3) SLessThanEqual 471 474
+                              Store 459(bv) 475
+             476:   52(ivec2) Load 341(i8v)
+             477:     14(int) Load 344(i8)
+             478:   52(ivec2) CompositeConstruct 477 477
+             479:  172(bvec2) SLessThanEqual 476 478
+             480:  427(bvec3) Load 459(bv)
+             481:  427(bvec3) VectorShuffle 480 479 3 4 2
+                              Store 459(bv) 481
+             482:  190(ivec3) Load 354(u8v)
+             483:     36(int) Load 356(u8)
+             484:     14(int) Bitcast 483
+             485:  190(ivec3) CompositeConstruct 484 484 484
+             486:  427(bvec3) SGreaterThan 482 485
+                              Store 459(bv) 486
+             487:   52(ivec2) Load 341(i8v)
+             488:     14(int) Load 344(i8)
+             489:   52(ivec2) CompositeConstruct 488 488
+             490:  172(bvec2) SGreaterThan 487 489
+             491:  427(bvec3) Load 459(bv)
+             492:  427(bvec3) VectorShuffle 491 490 3 4 2
+                              Store 459(bv) 492
+             493:  190(ivec3) Load 354(u8v)
+             494:     36(int) Load 356(u8)
+             495:     14(int) Bitcast 494
+             496:  190(ivec3) CompositeConstruct 495 495 495
+             497:  427(bvec3) SGreaterThanEqual 493 496
+                              Store 459(bv) 497
+             498:   52(ivec2) Load 341(i8v)
+             499:     14(int) Load 344(i8)
+             500:   52(ivec2) CompositeConstruct 499 499
+             501:  172(bvec2) SGreaterThanEqual 498 500
+             502:  427(bvec3) Load 459(bv)
+             503:  427(bvec3) VectorShuffle 502 501 3 4 2
+                              Store 459(bv) 503
+             504:  190(ivec3) Load 354(u8v)
+             505:     36(int) Load 356(u8)
+             506:     14(int) Bitcast 505
+             507:  190(ivec3) CompositeConstruct 506 506 506
+             508:  427(bvec3) IEqual 504 507
+                              Store 459(bv) 508
+             509:   52(ivec2) Load 341(i8v)
+             510:     14(int) Load 344(i8)
+             511:   52(ivec2) CompositeConstruct 510 510
+             512:  172(bvec2) IEqual 509 511
+             513:  427(bvec3) Load 459(bv)
+             514:  427(bvec3) VectorShuffle 513 512 3 4 2
+                              Store 459(bv) 514
+             515:  190(ivec3) Load 354(u8v)
+             516:     36(int) Load 356(u8)
+             517:     14(int) Bitcast 516
+             518:  190(ivec3) CompositeConstruct 517 517 517
+             519:  427(bvec3) INotEqual 515 518
+                              Store 459(bv) 519
+             520:   52(ivec2) Load 341(i8v)
+             521:     14(int) Load 344(i8)
+             522:   52(ivec2) CompositeConstruct 521 521
+             523:  172(bvec2) INotEqual 520 522
+             524:  427(bvec3) Load 459(bv)
+             525:  427(bvec3) VectorShuffle 524 523 3 4 2
+                              Store 459(bv) 525
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.intOps.vert.out b/Test/baseResults/spv.intOps.vert.out
index 33e57bf..aea8e3d 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): 80002
+// Generated by (magic number): 80006
 // 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 05e7f62..44077dd 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): 80002
+// Generated by (magic number): 80006
 // 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 3e73b84..5840ed9 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): 80002
+// Generated by (magic number): 80006
 // 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 2bb07e2..a348c84 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): 80002
+// Generated by (magic number): 80006
 // 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 b59dfd8..b5cb52c 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): 80002
+// Generated by (magic number): 80006
 // 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 7ce2c1c..8661d7f 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): 80002
+// Generated by (magic number): 80006
 // 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 a2339bd..95bf87d 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): 80002
+// Generated by (magic number): 80006
 // 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 832f38e..c7f672a 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): 80002
+// Generated by (magic number): 80006
 // 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 1ac5ad5..ec21c54 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): 80002
+// Generated by (magic number): 80006
 // 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 b6d7473..035f503 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): 80002
+// Generated by (magic number): 80006
 // 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 b1ae8df..53d6b41 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): 80002
+// Generated by (magic number): 80006
 // 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 24c0f4b..ddf175d 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): 80002
+// Generated by (magic number): 80006
 // 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 04e9c3a..ab80b2d 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): 80002
+// Generated by (magic number): 80006
 // 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 195f20f..eef3021 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): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 63
 
                               Capability Shader
diff --git a/Test/baseResults/spv.multiView.frag.out b/Test/baseResults/spv.multiView.frag.out
old mode 100755
new mode 100644
index 0633a12..7409f9d
--- a/Test/baseResults/spv.multiView.frag.out
+++ b/Test/baseResults/spv.multiView.frag.out
@@ -1,11 +1,10 @@
 spv.multiView.frag
-// Module Version 10000
-// Generated by (magic number): 80002
+// Module Version 10300
+// Generated by (magic number): 80006
 // Id's are bound by 17
 
                               Capability Shader
                               Capability MultiView
-                              Extension  "SPV_KHR_multiview"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
                               EntryPoint Fragment 4  "main" 9 12
diff --git a/Test/baseResults/spv.multiviewPerViewAttributes.tesc.out b/Test/baseResults/spv.multiviewPerViewAttributes.tesc.out
index b3ed72c..8cc9e01 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): 80002
+// Generated by (magic number): 80006
 // 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 f4a589e..e9e4f47 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): 80002
+// Generated by (magic number): 80006
 // 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 4d3f4c7..64a8941 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): 80002
+// Generated by (magic number): 80006
 // 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 6cdc321..61554bd 100644
--- a/Test/baseResults/spv.noBuiltInLoc.vert.out
+++ b/Test/baseResults/spv.noBuiltInLoc.vert.out
@@ -1,12 +1,13 @@
 spv.noBuiltInLoc.vert
 // Module Version 10000
-// Generated by (magic number): 80002
-// Id's are bound by 33
+// Generated by (magic number): 80006
+// Id's are bound by 35
 
                               Capability Shader
+                              Capability AtomicStorage
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Vertex 4  "main" 9 11 18 31 32
+                              EntryPoint Vertex 4  "main" 9 11 18 33 34
                               Source GLSL 450
                               Name 4  "main"
                               Name 9  "bar"
@@ -20,8 +21,9 @@
                               Name 24  "uv1"
                               Name 26  "uv2"
                               Name 29  "uv3"
-                              Name 31  "gl_VertexID"
-                              Name 32  "gl_InstanceID"
+                              Name 31  "a_uint"
+                              Name 33  "gl_VertexID"
+                              Name 34  "gl_InstanceID"
                               Decorate 9(bar) Location 0
                               Decorate 11(foo) Location 0
                               MemberDecorate 16(gl_PerVertex) 0 BuiltIn Position
@@ -35,8 +37,11 @@
                               Decorate 26(uv2) DescriptorSet 0
                               Decorate 29(uv3) Location 2
                               Decorate 29(uv3) DescriptorSet 0
-                              Decorate 31(gl_VertexID) BuiltIn VertexId
-                              Decorate 32(gl_InstanceID) BuiltIn InstanceId
+                              Decorate 31(a_uint) Offset 0
+                              Decorate 31(a_uint) DescriptorSet 0
+                              Decorate 31(a_uint) Binding 0
+                              Decorate 33(gl_VertexID) BuiltIn VertexId
+                              Decorate 34(gl_InstanceID) BuiltIn InstanceId
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -60,9 +65,11 @@
               27:             TypeVector 6(float) 3
               28:             TypePointer UniformConstant 27(fvec3)
          29(uv3):     28(ptr) Variable UniformConstant
-              30:             TypePointer Input 19(int)
- 31(gl_VertexID):     30(ptr) Variable Input
-32(gl_InstanceID):     30(ptr) Variable Input
+              30:             TypePointer AtomicCounter 13(int)
+      31(a_uint):     30(ptr) Variable AtomicCounter
+              32:             TypePointer Input 19(int)
+ 33(gl_VertexID):     32(ptr) Variable Input
+34(gl_InstanceID):     32(ptr) Variable Input
          4(main):           2 Function None 3
                5:             Label
               12:    7(fvec4) Load 11(foo)
diff --git a/Test/baseResults/spv.noDeadDecorations.vert.out b/Test/baseResults/spv.noDeadDecorations.vert.out
index cba32b5..37ccfd2 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): 80002
+// Generated by (magic number): 80006
 // 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 97e7119..949cb1f 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): 80002
+// Generated by (magic number): 80006
 // 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 ca47252..9fbb4cc 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): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 90
 
                               Capability Shader
diff --git a/Test/baseResults/spv.nonuniform.frag.out b/Test/baseResults/spv.nonuniform.frag.out
new file mode 100755
index 0000000..dff71cf
--- /dev/null
+++ b/Test/baseResults/spv.nonuniform.frag.out
@@ -0,0 +1,359 @@
+spv.nonuniform.frag
+// Module Version 10000
+// Generated by (magic number): 80006
+// Id's are bound by 210
+
+                              Capability Shader
+                              Capability InputAttachment
+                              Capability SampledBuffer
+                              Capability ImageBuffer
+                              Capability CapabilityShaderNonUniformEXT
+                              Capability CapabilityRuntimeDescriptorArrayEXT
+                              Capability CapabilityInputAttachmentArrayDynamicIndexingEXT
+                              Capability CapabilityUniformTexelBufferArrayDynamicIndexingEXT
+                              Capability CapabilityStorageTexelBufferArrayDynamicIndexingEXT
+                              Capability CapabilityUniformBufferArrayNonUniformIndexingEXT
+                              Capability CapabilitySampledImageArrayNonUniformIndexingEXT
+                              Capability CapabilityStorageBufferArrayNonUniformIndexingEXT
+                              Capability CapabilityStorageImageArrayNonUniformIndexingEXT
+                              Capability CapabilityInputAttachmentArrayNonUniformIndexingEXT
+                              Capability CapabilityUniformTexelBufferArrayNonUniformIndexingEXT
+                              Capability CapabilityStorageTexelBufferArrayNonUniformIndexingEXT
+                              Extension  "SPV_EXT_descriptor_indexing"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 33 90
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              SourceExtension  "GL_EXT_nonuniform_qualifier"
+                              Name 4  "main"
+                              Name 11  "foo(i1;i1;"
+                              Name 9  "nupi"
+                              Name 10  "f"
+                              Name 16  "a"
+                              Name 17  "nu_li"
+                              Name 18  "param"
+                              Name 20  "param"
+                              Name 30  "b"
+                              Name 33  "nu_inv4"
+                              Name 39  "nu_gf"
+                              Name 45  "inputAttachmentDyn"
+                              Name 46  "dyn_i"
+                              Name 62  "uniformTexelBufferDyn"
+                              Name 76  "storageTexelBufferDyn"
+                              Name 85  "uname"
+                              MemberName 85(uname) 0  "a"
+                              Name 88  "uniformBuffer"
+                              Name 90  "nu_ii"
+                              Name 97  "bname"
+                              MemberName 97(bname) 0  "b"
+                              Name 100  "storageBuffer"
+                              Name 110  "sampledImage"
+                              Name 125  "storageImage"
+                              Name 137  "inputAttachment"
+                              Name 147  "uniformTexelBuffer"
+                              Name 158  "storageTexelBuffer"
+                              Name 168  "v"
+                              Name 183  "uv"
+                              Name 193  "m"
+                              Name 201  "S"
+                              MemberName 201(S) 0  "a"
+                              Name 203  "s"
+                              Decorate 13 DecorationNonUniformEXT
+                              Decorate 17(nu_li) DecorationNonUniformEXT
+                              Decorate 19 DecorationNonUniformEXT
+                              Decorate 23 DecorationNonUniformEXT
+                              Decorate 26 DecorationNonUniformEXT
+                              Decorate 27 DecorationNonUniformEXT
+                              Decorate 33(nu_inv4) Location 0
+                              Decorate 33(nu_inv4) DecorationNonUniformEXT
+                              Decorate 38 DecorationNonUniformEXT
+                              Decorate 39(nu_gf) DecorationNonUniformEXT
+                              Decorate 40 DecorationNonUniformEXT
+                              Decorate 41 DecorationNonUniformEXT
+                              Decorate 45(inputAttachmentDyn) DescriptorSet 0
+                              Decorate 45(inputAttachmentDyn) Binding 0
+                              Decorate 45(inputAttachmentDyn) InputAttachmentIndex 0
+                              Decorate 62(uniformTexelBufferDyn) DescriptorSet 0
+                              Decorate 62(uniformTexelBufferDyn) Binding 1
+                              Decorate 76(storageTexelBufferDyn) DescriptorSet 0
+                              Decorate 76(storageTexelBufferDyn) Binding 2
+                              MemberDecorate 85(uname) 0 Offset 0
+                              Decorate 85(uname) Block
+                              Decorate 88(uniformBuffer) DescriptorSet 0
+                              Decorate 88(uniformBuffer) Binding 3
+                              Decorate 90(nu_ii) Flat
+                              Decorate 90(nu_ii) Location 1
+                              Decorate 90(nu_ii) DecorationNonUniformEXT
+                              Decorate 91 DecorationNonUniformEXT
+                              Decorate 94 DecorationNonUniformEXT
+                              MemberDecorate 97(bname) 0 Offset 0
+                              Decorate 97(bname) BufferBlock
+                              Decorate 100(storageBuffer) DescriptorSet 0
+                              Decorate 100(storageBuffer) Binding 4
+                              Decorate 101 DecorationNonUniformEXT
+                              Decorate 103 DecorationNonUniformEXT
+                              Decorate 110(sampledImage) DescriptorSet 0
+                              Decorate 110(sampledImage) Binding 5
+                              Decorate 111 DecorationNonUniformEXT
+                              Decorate 114 DecorationNonUniformEXT
+                              Decorate 125(storageImage) DescriptorSet 0
+                              Decorate 125(storageImage) Binding 6
+                              Decorate 126 DecorationNonUniformEXT
+                              Decorate 129 DecorationNonUniformEXT
+                              Decorate 137(inputAttachment) DescriptorSet 0
+                              Decorate 137(inputAttachment) Binding 7
+                              Decorate 137(inputAttachment) InputAttachmentIndex 1
+                              Decorate 138 DecorationNonUniformEXT
+                              Decorate 140 DecorationNonUniformEXT
+                              Decorate 147(uniformTexelBuffer) DescriptorSet 0
+                              Decorate 147(uniformTexelBuffer) Binding 8
+                              Decorate 148 DecorationNonUniformEXT
+                              Decorate 150 DecorationNonUniformEXT
+                              Decorate 158(storageTexelBuffer) DescriptorSet 0
+                              Decorate 158(storageTexelBuffer) Binding 9
+                              Decorate 159 DecorationNonUniformEXT
+                              Decorate 161 DecorationNonUniformEXT
+                              Decorate 168(v) DecorationNonUniformEXT
+                              Decorate 171 DecorationNonUniformEXT
+                              Decorate 173 DecorationNonUniformEXT
+                              Decorate 178 DecorationNonUniformEXT
+                              Decorate 180 DecorationNonUniformEXT
+                              Decorate 184 DecorationNonUniformEXT
+                              Decorate 186 DecorationNonUniformEXT
+                              Decorate 188 DecorationNonUniformEXT
+                              Decorate 193(m) DecorationNonUniformEXT
+                              Decorate 195 DecorationNonUniformEXT
+                              Decorate 203(s) DecorationNonUniformEXT
+                              Decorate 205 DecorationNonUniformEXT
+                              Decorate 207 DecorationNonUniformEXT
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 1
+               7:             TypePointer Function 6(int)
+               8:             TypeFunction 6(int) 7(ptr) 7(ptr)
+              25:      6(int) Constant 2
+              28:             TypeFloat 32
+              29:             TypePointer Function 28(float)
+              31:             TypeVector 28(float) 4
+              32:             TypePointer Input 31(fvec4)
+     33(nu_inv4):     32(ptr) Variable Input
+              34:             TypeInt 32 0
+              35:     34(int) Constant 0
+              36:             TypePointer Input 28(float)
+              42:             TypeImage 28(float) SubpassData nonsampled format:Unknown
+              43:             TypeRuntimeArray 42
+              44:             TypePointer UniformConstant 43
+45(inputAttachmentDyn):     44(ptr) Variable UniformConstant
+              48:             TypePointer UniformConstant 42
+              51:      6(int) Constant 0
+              52:             TypeVector 6(int) 2
+              53:   52(ivec2) ConstantComposite 51 51
+              58:             TypeImage 28(float) Buffer sampled format:Unknown
+              59:             TypeSampledImage 58
+              60:             TypeRuntimeArray 59
+              61:             TypePointer UniformConstant 60
+62(uniformTexelBufferDyn):     61(ptr) Variable UniformConstant
+              64:             TypePointer UniformConstant 59
+              67:      6(int) Constant 1
+              73:             TypeImage 28(float) Buffer nonsampled format:R32f
+              74:             TypeRuntimeArray 73
+              75:             TypePointer UniformConstant 74
+76(storageTexelBufferDyn):     75(ptr) Variable UniformConstant
+              78:             TypePointer UniformConstant 73
+       85(uname):             TypeStruct 28(float)
+              86:             TypeRuntimeArray 85(uname)
+              87:             TypePointer Uniform 86
+88(uniformBuffer):     87(ptr) Variable Uniform
+              89:             TypePointer Input 6(int)
+       90(nu_ii):     89(ptr) Variable Input
+              92:             TypePointer Uniform 28(float)
+       97(bname):             TypeStruct 28(float)
+              98:             TypeRuntimeArray 97(bname)
+              99:             TypePointer Uniform 98
+100(storageBuffer):     99(ptr) Variable Uniform
+             106:             TypeImage 28(float) 2D sampled format:Unknown
+             107:             TypeSampledImage 106
+             108:             TypeRuntimeArray 107
+             109:             TypePointer UniformConstant 108
+110(sampledImage):    109(ptr) Variable UniformConstant
+             112:             TypePointer UniformConstant 107
+             115:             TypeVector 28(float) 2
+             116:   28(float) Constant 1056964608
+             117:  115(fvec2) ConstantComposite 116 116
+             122:             TypeImage 28(float) 2D nonsampled format:R32f
+             123:             TypeRuntimeArray 122
+             124:             TypePointer UniformConstant 123
+125(storageImage):    124(ptr) Variable UniformConstant
+             127:             TypePointer UniformConstant 122
+             130:   52(ivec2) ConstantComposite 67 67
+             135:             TypeRuntimeArray 42
+             136:             TypePointer UniformConstant 135
+137(inputAttachment):    136(ptr) Variable UniformConstant
+             145:             TypeRuntimeArray 59
+             146:             TypePointer UniformConstant 145
+147(uniformTexelBuffer):    146(ptr) Variable UniformConstant
+             156:             TypeRuntimeArray 73
+             157:             TypePointer UniformConstant 156
+158(storageTexelBuffer):    157(ptr) Variable UniformConstant
+             166:             TypeVector 6(int) 4
+             167:             TypePointer Function 166(ivec4)
+             169:     34(int) Constant 1
+             176:     34(int) Constant 2
+             191:             TypeMatrix 31(fvec4) 4
+             192:             TypePointer Function 191
+          201(S):             TypeStruct 6(int)
+             202:             TypePointer Function 201(S)
+         4(main):           2 Function None 3
+               5:             Label
+           16(a):      7(ptr) Variable Function
+       17(nu_li):      7(ptr) Variable Function
+       18(param):      7(ptr) Variable Function
+       20(param):      7(ptr) Variable Function
+           30(b):     29(ptr) Variable Function
+       39(nu_gf):     29(ptr) Variable Function
+       46(dyn_i):      7(ptr) Variable Function
+          168(v):    167(ptr) Variable Function
+         183(uv):    167(ptr) Variable Function
+          193(m):    192(ptr) Variable Function
+          203(s):    202(ptr) Variable Function
+              19:      6(int) Load 17(nu_li)
+                              Store 18(param) 19
+              21:      6(int) FunctionCall 11(foo(i1;i1;) 18(param) 20(param)
+              22:      6(int) Load 20(param)
+                              Store 17(nu_li) 22
+                              Store 16(a) 21
+              23:      6(int) Load 16(a)
+              24:      6(int) Load 16(a)
+              26:      6(int) IMul 24 25
+              27:      6(int) IAdd 23 26
+                              Store 17(nu_li) 27
+              37:     36(ptr) AccessChain 33(nu_inv4) 35
+              38:   28(float) Load 37
+              40:   28(float) Load 39(nu_gf)
+              41:   28(float) FMul 38 40
+                              Store 30(b) 41
+              47:      6(int) Load 46(dyn_i)
+              49:     48(ptr) AccessChain 45(inputAttachmentDyn) 47
+              50:          42 Load 49
+              54:   31(fvec4) ImageRead 50 53
+              55:   28(float) CompositeExtract 54 0
+              56:   28(float) Load 30(b)
+              57:   28(float) FAdd 56 55
+                              Store 30(b) 57
+              63:      6(int) Load 46(dyn_i)
+              65:     64(ptr) AccessChain 62(uniformTexelBufferDyn) 63
+              66:          59 Load 65
+              68:          58 Image 66
+              69:   31(fvec4) ImageFetch 68 67
+              70:   28(float) CompositeExtract 69 0
+              71:   28(float) Load 30(b)
+              72:   28(float) FAdd 71 70
+                              Store 30(b) 72
+              77:      6(int) Load 46(dyn_i)
+              79:     78(ptr) AccessChain 76(storageTexelBufferDyn) 77
+              80:          73 Load 79
+              81:   31(fvec4) ImageRead 80 67
+              82:   28(float) CompositeExtract 81 0
+              83:   28(float) Load 30(b)
+              84:   28(float) FAdd 83 82
+                              Store 30(b) 84
+              91:      6(int) Load 90(nu_ii)
+              93:     92(ptr) AccessChain 88(uniformBuffer) 91 51
+              94:   28(float) Load 93
+              95:   28(float) Load 30(b)
+              96:   28(float) FAdd 95 94
+                              Store 30(b) 96
+             101:      6(int) Load 90(nu_ii)
+             102:     92(ptr) AccessChain 100(storageBuffer) 101 51
+             103:   28(float) Load 102
+             104:   28(float) Load 30(b)
+             105:   28(float) FAdd 104 103
+                              Store 30(b) 105
+             111:      6(int) Load 90(nu_ii)
+             113:    112(ptr) AccessChain 110(sampledImage) 111
+             114:         107 Load 113
+             118:   31(fvec4) ImageSampleImplicitLod 114 117
+             119:   28(float) CompositeExtract 118 0
+             120:   28(float) Load 30(b)
+             121:   28(float) FAdd 120 119
+                              Store 30(b) 121
+             126:      6(int) Load 90(nu_ii)
+             128:    127(ptr) AccessChain 125(storageImage) 126
+             129:         122 Load 128
+             131:   31(fvec4) ImageRead 129 130
+             132:   28(float) CompositeExtract 131 0
+             133:   28(float) Load 30(b)
+             134:   28(float) FAdd 133 132
+                              Store 30(b) 134
+             138:      6(int) Load 90(nu_ii)
+             139:     48(ptr) AccessChain 137(inputAttachment) 138
+             140:          42 Load 139
+             141:   31(fvec4) ImageRead 140 53
+             142:   28(float) CompositeExtract 141 0
+             143:   28(float) Load 30(b)
+             144:   28(float) FAdd 143 142
+                              Store 30(b) 144
+             148:      6(int) Load 90(nu_ii)
+             149:     64(ptr) AccessChain 147(uniformTexelBuffer) 148
+             150:          59 Load 149
+             151:          58 Image 150
+             152:   31(fvec4) ImageFetch 151 67
+             153:   28(float) CompositeExtract 152 0
+             154:   28(float) Load 30(b)
+             155:   28(float) FAdd 154 153
+                              Store 30(b) 155
+             159:      6(int) Load 90(nu_ii)
+             160:     78(ptr) AccessChain 158(storageTexelBuffer) 159
+             161:          73 Load 160
+             162:   31(fvec4) ImageRead 161 67
+             163:   28(float) CompositeExtract 162 0
+             164:   28(float) Load 30(b)
+             165:   28(float) FAdd 164 163
+                              Store 30(b) 165
+             170:      7(ptr) AccessChain 168(v) 169
+             171:      6(int) Load 170
+             172:     92(ptr) AccessChain 88(uniformBuffer) 171 51
+             173:   28(float) Load 172
+             174:   28(float) Load 30(b)
+             175:   28(float) FAdd 174 173
+                              Store 30(b) 175
+             177:      7(ptr) AccessChain 168(v) 176
+             178:      6(int) Load 177
+             179:     92(ptr) AccessChain 88(uniformBuffer) 178 51
+             180:   28(float) Load 179
+             181:   28(float) Load 30(b)
+             182:   28(float) FAdd 181 180
+                              Store 30(b) 182
+             184:      6(int) Load 90(nu_ii)
+             185:      7(ptr) AccessChain 183(uv) 184
+             186:      6(int) Load 185
+             187:     92(ptr) AccessChain 88(uniformBuffer) 186 51
+             188:   28(float) Load 187
+             189:   28(float) Load 30(b)
+             190:   28(float) FAdd 189 188
+                              Store 30(b) 190
+             194:     29(ptr) AccessChain 193(m) 25 176
+             195:   28(float) Load 194
+             196:      6(int) ConvertFToS 195
+             197:     92(ptr) AccessChain 88(uniformBuffer) 196 51
+             198:   28(float) Load 197
+             199:   28(float) Load 30(b)
+             200:   28(float) FAdd 199 198
+                              Store 30(b) 200
+             204:      7(ptr) AccessChain 203(s) 51
+             205:      6(int) Load 204
+             206:     92(ptr) AccessChain 88(uniformBuffer) 205 51
+             207:   28(float) Load 206
+             208:   28(float) Load 30(b)
+             209:   28(float) FAdd 208 207
+                              Store 30(b) 209
+                              Return
+                              FunctionEnd
+  11(foo(i1;i1;):      6(int) Function None 8
+         9(nupi):      7(ptr) FunctionParameter
+           10(f):      7(ptr) FunctionParameter
+              12:             Label
+              13:      6(int) Load 9(nupi)
+                              ReturnValue 13
+                              FunctionEnd
diff --git a/Test/baseResults/spv.offsets.frag.out b/Test/baseResults/spv.offsets.frag.out
index f9b0144..abb9329 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): 80002
+// Generated by (magic number): 80006
 // 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 28d96bb..e43f2fe 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): 80002
+// Generated by (magic number): 80006
 // 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 91c2f35..153e354 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): 80002
+// Generated by (magic number): 80006
 // 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 c05ced4..e8b9a3c 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): 80002
+// Generated by (magic number): 80006
 // 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 2284108..8238d9b 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): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 127
 
                               Capability Shader
diff --git a/Test/baseResults/spv.precisionNonESSamp.frag.out b/Test/baseResults/spv.precisionNonESSamp.frag.out
index 5bb1dee..0632f7d 100755
--- a/Test/baseResults/spv.precisionNonESSamp.frag.out
+++ b/Test/baseResults/spv.precisionNonESSamp.frag.out
@@ -1,6 +1,6 @@
 spv.precisionNonESSamp.frag
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 47
 
                               Capability Shader
diff --git a/Test/baseResults/spv.prepost.frag.out b/Test/baseResults/spv.prepost.frag.out
index 68a6909..e29778b 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): 80002
+// Generated by (magic number): 80006
 // 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 e86320f..5951d22 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): 80002
+// Generated by (magic number): 80006
 // 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 37e61ae..739b390 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): 80002
+// Generated by (magic number): 80006
 // 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 fa51edc..487ab5f 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): 80002
+// Generated by (magic number): 80006
 // 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 419d213..f9c0fbc 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): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 224
 
                               Capability Shader
diff --git a/Test/baseResults/spv.rankShift.comp.out b/Test/baseResults/spv.rankShift.comp.out
new file mode 100755
index 0000000..4cdb6d5
--- /dev/null
+++ b/Test/baseResults/spv.rankShift.comp.out
@@ -0,0 +1,57 @@
+spv.rankShift.comp
+// Module Version 10000
+// Generated by (magic number): 80006
+// Id's are bound by 33
+
+                              Capability Shader
+                              Capability Int64
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main"
+                              ExecutionMode 4 LocalSize 54 1 1
+                              Source GLSL 450
+                              SourceExtension  "GL_ARB_gpu_shader_int64"
+                              Name 4  "main"
+                              Name 8  "result"
+                              Name 11  "arg0"
+                              Name 15  "arg1"
+                              Decorate 11(arg0) Location 4
+                              Decorate 15(arg1) Location 5
+                              Decorate 32 BuiltIn WorkgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 64 0
+               7:             TypePointer Function 6(int)
+               9:             TypeInt 64 1
+              10:             TypePointer UniformConstant 9(int)
+        11(arg0):     10(ptr) Variable UniformConstant
+              13:             TypeInt 32 0
+              14:             TypePointer UniformConstant 13(int)
+        15(arg1):     14(ptr) Variable UniformConstant
+              29:             TypeVector 13(int) 3
+              30:     13(int) Constant 54
+              31:     13(int) Constant 1
+              32:   29(ivec3) ConstantComposite 30 31 31
+         4(main):           2 Function None 3
+               5:             Label
+       8(result):      7(ptr) Variable Function
+              12:      9(int) Load 11(arg0)
+              16:     13(int) Load 15(arg1)
+              17:      9(int) ShiftLeftLogical 12 16
+              18:      6(int) Bitcast 17
+                              Store 8(result) 18
+              19:      9(int) Load 11(arg0)
+              20:     13(int) Load 15(arg1)
+              21:      9(int) ShiftRightArithmetic 19 20
+              22:      6(int) Bitcast 21
+                              Store 8(result) 22
+              23:     13(int) Load 15(arg1)
+              24:      6(int) Load 8(result)
+              25:      6(int) ShiftLeftLogical 24 23
+                              Store 8(result) 25
+              26:     13(int) Load 15(arg1)
+              27:      6(int) Load 8(result)
+              28:      6(int) ShiftRightLogical 27 26
+                              Store 8(result) 28
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.register.autoassign-2.frag.out b/Test/baseResults/spv.register.autoassign-2.frag.out
index 14040df..042dd83 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): 80002
+// Generated by (magic number): 80006
 // 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 8540253..474ad35 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): 80002
+// Generated by (magic number): 80006
 // 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 a633993..ef38fc9 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): 80002
+// Generated by (magic number): 80006
 // 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
index 2a22326..c808a51 100644
--- a/Test/baseResults/spv.register.subpass.frag.out
+++ b/Test/baseResults/spv.register.subpass.frag.out
@@ -1,6 +1,6 @@
 spv.register.subpass.frag
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 40
 
                               Capability Shader
diff --git a/Test/baseResults/spv.rw.autoassign.frag.out b/Test/baseResults/spv.rw.autoassign.frag.out
index ecca761..6879149 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): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 42
 
                               Capability Shader
diff --git a/Test/baseResults/spv.sample.frag.out b/Test/baseResults/spv.sample.frag.out
new file mode 100755
index 0000000..4ce6bda
--- /dev/null
+++ b/Test/baseResults/spv.sample.frag.out
@@ -0,0 +1,32 @@
+spv.sample.frag
+// Module Version 10000
+// Generated by (magic number): 80006
+// Id's are bound by 13
+
+                              Capability Shader
+                              Capability SampleRateShading
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 9 11
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              Name 4  "main"
+                              Name 9  "color"
+                              Name 11  "samp"
+                              Decorate 9(color) Location 0
+                              Decorate 11(samp) Sample
+                              Decorate 11(samp) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Output 7(fvec4)
+        9(color):      8(ptr) Variable Output
+              10:             TypePointer Input 7(fvec4)
+        11(samp):     10(ptr) Variable Input
+         4(main):           2 Function None 3
+               5:             Label
+              12:    7(fvec4) Load 11(samp)
+                              Store 9(color) 12
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.sampleId.frag.out b/Test/baseResults/spv.sampleId.frag.out
new file mode 100755
index 0000000..b1309e6
--- /dev/null
+++ b/Test/baseResults/spv.sampleId.frag.out
@@ -0,0 +1,52 @@
+spv.sampleId.frag
+// Module Version 10000
+// Generated by (magic number): 80006
+// Id's are bound by 26
+
+                              Capability Shader
+                              Capability SampleRateShading
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 8 18 20
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              Name 4  "main"
+                              Name 8  "gl_SampleID"
+                              Name 18  "color"
+                              Name 20  "samp"
+                              Decorate 8(gl_SampleID) Flat
+                              Decorate 8(gl_SampleID) BuiltIn SampleId
+                              Decorate 18(color) Location 0
+                              Decorate 20(samp) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 1
+               7:             TypePointer Input 6(int)
+  8(gl_SampleID):      7(ptr) Variable Input
+              10:      6(int) Constant 3
+              11:             TypeBool
+              15:             TypeFloat 32
+              16:             TypeVector 15(float) 4
+              17:             TypePointer Output 16(fvec4)
+       18(color):     17(ptr) Variable Output
+              19:             TypePointer Input 16(fvec4)
+        20(samp):     19(ptr) Variable Input
+              23:   15(float) Constant 1073741824
+         4(main):           2 Function None 3
+               5:             Label
+               9:      6(int) Load 8(gl_SampleID)
+              12:    11(bool) SLessThan 9 10
+                              SelectionMerge 14 None
+                              BranchConditional 12 13 22
+              13:               Label
+              21:   16(fvec4)   Load 20(samp)
+                                Store 18(color) 21
+                                Branch 14
+              22:               Label
+              24:   16(fvec4)   Load 20(samp)
+              25:   16(fvec4)   VectorTimesScalar 24 23
+                                Store 18(color) 25
+                                Branch 14
+              14:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.sampleMaskOverrideCoverage.frag.out b/Test/baseResults/spv.sampleMaskOverrideCoverage.frag.out
index 3a974fb..6bb4334 100644
--- a/Test/baseResults/spv.sampleMaskOverrideCoverage.frag.out
+++ b/Test/baseResults/spv.sampleMaskOverrideCoverage.frag.out
@@ -1,10 +1,9 @@
 spv.sampleMaskOverrideCoverage.frag
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 20
 
                               Capability Shader
-                              Capability SampleRateShading
                               Extension  "SPV_NV_sample_mask_override_coverage"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
diff --git a/Test/baseResults/spv.samplePosition.frag.out b/Test/baseResults/spv.samplePosition.frag.out
new file mode 100755
index 0000000..7be96bd
--- /dev/null
+++ b/Test/baseResults/spv.samplePosition.frag.out
@@ -0,0 +1,55 @@
+spv.samplePosition.frag
+// Module Version 10000
+// Generated by (magic number): 80006
+// Id's are bound by 30
+
+                              Capability Shader
+                              Capability SampleRateShading
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 9 22 24
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              Name 4  "main"
+                              Name 9  "gl_SamplePosition"
+                              Name 22  "color"
+                              Name 24  "samp"
+                              Decorate 9(gl_SamplePosition) BuiltIn SamplePosition
+                              Decorate 22(color) Location 0
+                              Decorate 24(samp) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 2
+               8:             TypePointer Input 7(fvec2)
+9(gl_SamplePosition):      8(ptr) Variable Input
+              10:             TypeInt 32 0
+              11:     10(int) Constant 1
+              12:             TypePointer Input 6(float)
+              15:    6(float) Constant 1056964608
+              16:             TypeBool
+              20:             TypeVector 6(float) 4
+              21:             TypePointer Output 20(fvec4)
+       22(color):     21(ptr) Variable Output
+              23:             TypePointer Input 20(fvec4)
+        24(samp):     23(ptr) Variable Input
+              27:    6(float) Constant 1073741824
+         4(main):           2 Function None 3
+               5:             Label
+              13:     12(ptr) AccessChain 9(gl_SamplePosition) 11
+              14:    6(float) Load 13
+              17:    16(bool) FOrdLessThan 14 15
+                              SelectionMerge 19 None
+                              BranchConditional 17 18 26
+              18:               Label
+              25:   20(fvec4)   Load 24(samp)
+                                Store 22(color) 25
+                                Branch 19
+              26:               Label
+              28:   20(fvec4)   Load 24(samp)
+              29:   20(fvec4)   VectorTimesScalar 28 27
+                                Store 22(color) 29
+                                Branch 19
+              19:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.separate.frag.out b/Test/baseResults/spv.separate.frag.out
index 0e6243b..8a17bdb 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): 80002
+// Generated by (magic number): 80006
 // 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 530b554..3067927 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): 80002
+// Generated by (magic number): 80006
 // 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 8be7a06..96d14ae 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): 80002
+// Generated by (magic number): 80006
 // 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 51a52f3..9aba3c5 100644
--- a/Test/baseResults/spv.shaderBallotAMD.comp.out
+++ b/Test/baseResults/spv.shaderBallotAMD.comp.out
@@ -1,16 +1,18 @@
 spv.shaderBallotAMD.comp
 // Module Version 10000
-// Generated by (magic number): 80002
-// Id's are bound by 1048
+// Generated by (magic number): 80006
+// Id's are bound by 1343
 
                               Capability Shader
                               Capability Float16
                               Capability Float64
                               Capability Int64
                               Capability Groups
+                              Capability Int16
                               Capability StorageUniformBufferBlock16
                               Capability StorageUniform16
                               Extension  "SPV_AMD_gpu_shader_half_float"
+                              Extension  "SPV_AMD_gpu_shader_int16"
                               Extension  "SPV_AMD_shader_ballot"
                               Extension  "SPV_KHR_16bit_storage"
                1:             ExtInstImport  "GLSL.std.450"
@@ -19,29 +21,34 @@
                               ExecutionMode 4 LocalSize 8 8 1
                               Source GLSL 450
                               SourceExtension  "GL_AMD_gpu_shader_half_float"
+                              SourceExtension  "GL_AMD_gpu_shader_int16"
                               SourceExtension  "GL_AMD_shader_ballot"
                               SourceExtension  "GL_ARB_gpu_shader_int64"
                               Name 4  "main"
-                              Name 18  "Buffers"
-                              MemberName 18(Buffers) 0  "i"
-                              MemberName 18(Buffers) 1  "uv"
-                              MemberName 18(Buffers) 2  "fv"
-                              MemberName 18(Buffers) 3  "dv"
-                              MemberName 18(Buffers) 4  "i64"
-                              MemberName 18(Buffers) 5  "u64v"
-                              MemberName 18(Buffers) 6  "f16v"
-                              Name 20  ""
-                              MemberDecorate 18(Buffers) 0 Offset 0
-                              MemberDecorate 18(Buffers) 1 Offset 8
-                              MemberDecorate 18(Buffers) 2 Offset 16
-                              MemberDecorate 18(Buffers) 3 Offset 32
-                              MemberDecorate 18(Buffers) 4 Offset 64
-                              MemberDecorate 18(Buffers) 5 Offset 80
-                              MemberDecorate 18(Buffers) 6 Offset 96
-                              Decorate 18(Buffers) BufferBlock
-                              Decorate 20 DescriptorSet 0
-                              Decorate 20 Binding 0
-                              Decorate 1047 BuiltIn WorkgroupSize
+                              Name 21  "Buffers"
+                              MemberName 21(Buffers) 0  "i"
+                              MemberName 21(Buffers) 1  "uv"
+                              MemberName 21(Buffers) 2  "fv"
+                              MemberName 21(Buffers) 3  "dv"
+                              MemberName 21(Buffers) 4  "i64"
+                              MemberName 21(Buffers) 5  "u64v"
+                              MemberName 21(Buffers) 6  "f16v"
+                              MemberName 21(Buffers) 7  "i16v"
+                              MemberName 21(Buffers) 8  "u16"
+                              Name 23  ""
+                              MemberDecorate 21(Buffers) 0 Offset 0
+                              MemberDecorate 21(Buffers) 1 Offset 8
+                              MemberDecorate 21(Buffers) 2 Offset 16
+                              MemberDecorate 21(Buffers) 3 Offset 32
+                              MemberDecorate 21(Buffers) 4 Offset 64
+                              MemberDecorate 21(Buffers) 5 Offset 80
+                              MemberDecorate 21(Buffers) 6 Offset 96
+                              MemberDecorate 21(Buffers) 7 Offset 104
+                              MemberDecorate 21(Buffers) 8 Offset 112
+                              Decorate 21(Buffers) BufferBlock
+                              Decorate 23 DescriptorSet 0
+                              Decorate 23 Binding 0
+                              Decorate 1342 BuiltIn WorkgroupSize
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 1
@@ -56,1163 +63,1494 @@
               15:             TypeVector 14(int) 2
               16:             TypeFloat 16
               17:             TypeVector 16(float) 3
-     18(Buffers):             TypeStruct 6(int) 8(ivec2) 10(fvec3) 12(fvec4) 13(int) 15(ivec2) 17(fvec3)
-              19:             TypePointer Uniform 18(Buffers)
-              20:     19(ptr) Variable Uniform
-              21:      6(int) Constant 0
-              22:             TypePointer Uniform 6(int)
-              25:      7(int) Constant 3
-              28:      6(int) Constant 1
-              29:             TypePointer Uniform 8(ivec2)
-              38:      6(int) Constant 2
-              39:             TypePointer Uniform 10(fvec3)
-              50:      6(int) Constant 3
-              51:             TypePointer Uniform 12(fvec4)
-              64:      6(int) Constant 4
-              65:             TypePointer Uniform 13(int)
-              70:      6(int) Constant 5
-              71:             TypePointer Uniform 15(ivec2)
-              80:      6(int) Constant 6
-              81:             TypePointer Uniform 17(fvec3)
-            1044:             TypeVector 7(int) 3
-            1045:      7(int) Constant 8
-            1046:      7(int) Constant 1
-            1047: 1044(ivec3) ConstantComposite 1045 1045 1046
+              18:             TypeInt 16 1
+              19:             TypeVector 18(int) 4
+              20:             TypeInt 16 0
+     21(Buffers):             TypeStruct 6(int) 8(ivec2) 10(fvec3) 12(fvec4) 13(int) 15(ivec2) 17(fvec3) 19(ivec4) 20(int)
+              22:             TypePointer Uniform 21(Buffers)
+              23:     22(ptr) Variable Uniform
+              24:      6(int) Constant 0
+              25:             TypePointer Uniform 6(int)
+              28:      7(int) Constant 3
+              31:      6(int) Constant 1
+              32:             TypePointer Uniform 8(ivec2)
+              41:      6(int) Constant 2
+              42:             TypePointer Uniform 10(fvec3)
+              53:      6(int) Constant 3
+              54:             TypePointer Uniform 12(fvec4)
+              67:      6(int) Constant 4
+              68:             TypePointer Uniform 13(int)
+              73:      6(int) Constant 5
+              74:             TypePointer Uniform 15(ivec2)
+              83:      6(int) Constant 6
+              84:             TypePointer Uniform 17(fvec3)
+              95:      6(int) Constant 7
+              96:             TypePointer Uniform 19(ivec4)
+             109:      6(int) Constant 8
+             110:             TypePointer Uniform 20(int)
+            1339:             TypeVector 7(int) 3
+            1340:      7(int) Constant 8
+            1341:      7(int) Constant 1
+            1342: 1339(ivec3) ConstantComposite 1340 1340 1341
          4(main):           2 Function None 3
                5:             Label
-              23:     22(ptr) AccessChain 20 21
-              24:      6(int) Load 23
-              26:      6(int) GroupSMin 25 Reduce 24
-              27:     22(ptr) AccessChain 20 21
-                              Store 27 26
-              30:     29(ptr) AccessChain 20 28
-              31:    8(ivec2) Load 30
-              32:      7(int) CompositeExtract 31 0
-              33:      7(int) GroupUMin 25 Reduce 32
-              34:      7(int) CompositeExtract 31 1
-              35:      7(int) GroupUMin 25 Reduce 34
-              36:    8(ivec2) CompositeConstruct 33 35
-              37:     29(ptr) AccessChain 20 28
-                              Store 37 36
-              40:     39(ptr) AccessChain 20 38
-              41:   10(fvec3) Load 40
-              42:    9(float) CompositeExtract 41 0
-              43:    9(float) GroupFMin 25 Reduce 42
-              44:    9(float) CompositeExtract 41 1
-              45:    9(float) GroupFMin 25 Reduce 44
-              46:    9(float) CompositeExtract 41 2
-              47:    9(float) GroupFMin 25 Reduce 46
-              48:   10(fvec3) CompositeConstruct 43 45 47
-              49:     39(ptr) AccessChain 20 38
-                              Store 49 48
-              52:     51(ptr) AccessChain 20 50
-              53:   12(fvec4) Load 52
-              54:   11(float) CompositeExtract 53 0
-              55:   11(float) GroupFMin 25 Reduce 54
-              56:   11(float) CompositeExtract 53 1
-              57:   11(float) GroupFMin 25 Reduce 56
-              58:   11(float) CompositeExtract 53 2
-              59:   11(float) GroupFMin 25 Reduce 58
-              60:   11(float) CompositeExtract 53 3
-              61:   11(float) GroupFMin 25 Reduce 60
-              62:   12(fvec4) CompositeConstruct 55 57 59 61
-              63:     51(ptr) AccessChain 20 50
-                              Store 63 62
-              66:     65(ptr) AccessChain 20 64
-              67:     13(int) Load 66
-              68:     13(int) GroupSMin 25 Reduce 67
-              69:     65(ptr) AccessChain 20 64
-                              Store 69 68
-              72:     71(ptr) AccessChain 20 70
-              73:   15(ivec2) Load 72
-              74:     14(int) CompositeExtract 73 0
-              75:     14(int) GroupUMin 25 Reduce 74
-              76:     14(int) CompositeExtract 73 1
-              77:     14(int) GroupUMin 25 Reduce 76
-              78:   15(ivec2) CompositeConstruct 75 77
-              79:     71(ptr) AccessChain 20 70
-                              Store 79 78
-              82:     81(ptr) AccessChain 20 80
-              83:   17(fvec3) Load 82
-              84:   16(float) CompositeExtract 83 0
-              85:   16(float) GroupFMin 25 Reduce 84
-              86:   16(float) CompositeExtract 83 1
-              87:   16(float) GroupFMin 25 Reduce 86
-              88:   16(float) CompositeExtract 83 2
-              89:   16(float) GroupFMin 25 Reduce 88
-              90:   17(fvec3) CompositeConstruct 85 87 89
-              91:     81(ptr) AccessChain 20 80
-                              Store 91 90
-              92:     22(ptr) AccessChain 20 21
-              93:      6(int) Load 92
-              94:      6(int) GroupSMax 25 Reduce 93
-              95:     22(ptr) AccessChain 20 21
-                              Store 95 94
-              96:     29(ptr) AccessChain 20 28
-              97:    8(ivec2) Load 96
-              98:      7(int) CompositeExtract 97 0
-              99:      7(int) GroupUMax 25 Reduce 98
-             100:      7(int) CompositeExtract 97 1
-             101:      7(int) GroupUMax 25 Reduce 100
-             102:    8(ivec2) CompositeConstruct 99 101
-             103:     29(ptr) AccessChain 20 28
-                              Store 103 102
-             104:     39(ptr) AccessChain 20 38
-             105:   10(fvec3) Load 104
-             106:    9(float) CompositeExtract 105 0
-             107:    9(float) GroupFMax 25 Reduce 106
-             108:    9(float) CompositeExtract 105 1
-             109:    9(float) GroupFMax 25 Reduce 108
-             110:    9(float) CompositeExtract 105 2
-             111:    9(float) GroupFMax 25 Reduce 110
-             112:   10(fvec3) CompositeConstruct 107 109 111
-             113:     39(ptr) AccessChain 20 38
-                              Store 113 112
-             114:     51(ptr) AccessChain 20 50
-             115:   12(fvec4) Load 114
-             116:   11(float) CompositeExtract 115 0
-             117:   11(float) GroupFMax 25 Reduce 116
-             118:   11(float) CompositeExtract 115 1
-             119:   11(float) GroupFMax 25 Reduce 118
-             120:   11(float) CompositeExtract 115 2
-             121:   11(float) GroupFMax 25 Reduce 120
-             122:   11(float) CompositeExtract 115 3
-             123:   11(float) GroupFMax 25 Reduce 122
-             124:   12(fvec4) CompositeConstruct 117 119 121 123
-             125:     51(ptr) AccessChain 20 50
-                              Store 125 124
-             126:     65(ptr) AccessChain 20 64
-             127:     13(int) Load 126
-             128:     13(int) GroupSMax 25 Reduce 127
-             129:     65(ptr) AccessChain 20 64
-                              Store 129 128
-             130:     71(ptr) AccessChain 20 70
-             131:   15(ivec2) Load 130
-             132:     14(int) CompositeExtract 131 0
-             133:     14(int) GroupUMax 25 Reduce 132
-             134:     14(int) CompositeExtract 131 1
-             135:     14(int) GroupUMax 25 Reduce 134
-             136:   15(ivec2) CompositeConstruct 133 135
-             137:     71(ptr) AccessChain 20 70
-                              Store 137 136
-             138:     81(ptr) AccessChain 20 80
-             139:   17(fvec3) Load 138
-             140:   16(float) CompositeExtract 139 0
-             141:   16(float) GroupFMax 25 Reduce 140
-             142:   16(float) CompositeExtract 139 1
-             143:   16(float) GroupFMax 25 Reduce 142
-             144:   16(float) CompositeExtract 139 2
-             145:   16(float) GroupFMax 25 Reduce 144
-             146:   17(fvec3) CompositeConstruct 141 143 145
-             147:     81(ptr) AccessChain 20 80
-                              Store 147 146
-             148:     22(ptr) AccessChain 20 21
-             149:      6(int) Load 148
-             150:      6(int) GroupIAdd 25 Reduce 149
-             151:     22(ptr) AccessChain 20 21
-                              Store 151 150
-             152:     29(ptr) AccessChain 20 28
-             153:    8(ivec2) Load 152
-             154:      7(int) CompositeExtract 153 0
-             155:      7(int) GroupIAdd 25 Reduce 154
-             156:      7(int) CompositeExtract 153 1
-             157:      7(int) GroupIAdd 25 Reduce 156
-             158:    8(ivec2) CompositeConstruct 155 157
-             159:     29(ptr) AccessChain 20 28
-                              Store 159 158
-             160:     39(ptr) AccessChain 20 38
-             161:   10(fvec3) Load 160
-             162:    9(float) CompositeExtract 161 0
-             163:    9(float) GroupFAdd 25 Reduce 162
-             164:    9(float) CompositeExtract 161 1
-             165:    9(float) GroupFAdd 25 Reduce 164
-             166:    9(float) CompositeExtract 161 2
-             167:    9(float) GroupFAdd 25 Reduce 166
-             168:   10(fvec3) CompositeConstruct 163 165 167
-             169:     39(ptr) AccessChain 20 38
-                              Store 169 168
-             170:     51(ptr) AccessChain 20 50
-             171:   12(fvec4) Load 170
-             172:   11(float) CompositeExtract 171 0
-             173:   11(float) GroupFAdd 25 Reduce 172
-             174:   11(float) CompositeExtract 171 1
-             175:   11(float) GroupFAdd 25 Reduce 174
-             176:   11(float) CompositeExtract 171 2
-             177:   11(float) GroupFAdd 25 Reduce 176
-             178:   11(float) CompositeExtract 171 3
-             179:   11(float) GroupFAdd 25 Reduce 178
-             180:   12(fvec4) CompositeConstruct 173 175 177 179
-             181:     51(ptr) AccessChain 20 50
-                              Store 181 180
-             182:     65(ptr) AccessChain 20 64
-             183:     13(int) Load 182
-             184:     13(int) GroupIAdd 25 Reduce 183
-             185:     65(ptr) AccessChain 20 64
-                              Store 185 184
-             186:     71(ptr) AccessChain 20 70
-             187:   15(ivec2) Load 186
-             188:     14(int) CompositeExtract 187 0
-             189:     14(int) GroupIAdd 25 Reduce 188
-             190:     14(int) CompositeExtract 187 1
-             191:     14(int) GroupIAdd 25 Reduce 190
-             192:   15(ivec2) CompositeConstruct 189 191
-             193:     71(ptr) AccessChain 20 70
-                              Store 193 192
-             194:     81(ptr) AccessChain 20 80
-             195:   17(fvec3) Load 194
-             196:   16(float) CompositeExtract 195 0
-             197:   16(float) GroupFAdd 25 Reduce 196
-             198:   16(float) CompositeExtract 195 1
-             199:   16(float) GroupFAdd 25 Reduce 198
-             200:   16(float) CompositeExtract 195 2
-             201:   16(float) GroupFAdd 25 Reduce 200
-             202:   17(fvec3) CompositeConstruct 197 199 201
-             203:     81(ptr) AccessChain 20 80
-                              Store 203 202
-             204:     22(ptr) AccessChain 20 21
-             205:      6(int) Load 204
-             206:      6(int) GroupSMinNonUniformAMD 25 Reduce 205
-             207:     22(ptr) AccessChain 20 21
-                              Store 207 206
-             208:     29(ptr) AccessChain 20 28
-             209:    8(ivec2) Load 208
-             210:      7(int) CompositeExtract 209 0
-             211:      7(int) GroupUMinNonUniformAMD 25 Reduce 210
-             212:      7(int) CompositeExtract 209 1
-             213:      7(int) GroupUMinNonUniformAMD 25 Reduce 212
-             214:    8(ivec2) CompositeConstruct 211 213
-             215:     29(ptr) AccessChain 20 28
-                              Store 215 214
-             216:     39(ptr) AccessChain 20 38
-             217:   10(fvec3) Load 216
-             218:    9(float) CompositeExtract 217 0
-             219:    9(float) GroupFMinNonUniformAMD 25 Reduce 218
-             220:    9(float) CompositeExtract 217 1
-             221:    9(float) GroupFMinNonUniformAMD 25 Reduce 220
-             222:    9(float) CompositeExtract 217 2
-             223:    9(float) GroupFMinNonUniformAMD 25 Reduce 222
-             224:   10(fvec3) CompositeConstruct 219 221 223
-             225:     39(ptr) AccessChain 20 38
-                              Store 225 224
-             226:     51(ptr) AccessChain 20 50
-             227:   12(fvec4) Load 226
-             228:   11(float) CompositeExtract 227 0
-             229:   11(float) GroupFMinNonUniformAMD 25 Reduce 228
-             230:   11(float) CompositeExtract 227 1
-             231:   11(float) GroupFMinNonUniformAMD 25 Reduce 230
-             232:   11(float) CompositeExtract 227 2
-             233:   11(float) GroupFMinNonUniformAMD 25 Reduce 232
-             234:   11(float) CompositeExtract 227 3
-             235:   11(float) GroupFMinNonUniformAMD 25 Reduce 234
-             236:   12(fvec4) CompositeConstruct 229 231 233 235
-             237:     51(ptr) AccessChain 20 50
-                              Store 237 236
-             238:     65(ptr) AccessChain 20 64
-             239:     13(int) Load 238
-             240:     13(int) GroupSMinNonUniformAMD 25 Reduce 239
-             241:     65(ptr) AccessChain 20 64
-                              Store 241 240
-             242:     71(ptr) AccessChain 20 70
-             243:   15(ivec2) Load 242
-             244:     14(int) CompositeExtract 243 0
-             245:     14(int) GroupUMinNonUniformAMD 25 Reduce 244
-             246:     14(int) CompositeExtract 243 1
-             247:     14(int) GroupUMinNonUniformAMD 25 Reduce 246
-             248:   15(ivec2) CompositeConstruct 245 247
-             249:     71(ptr) AccessChain 20 70
-                              Store 249 248
-             250:     81(ptr) AccessChain 20 80
-             251:   17(fvec3) Load 250
-             252:   16(float) CompositeExtract 251 0
-             253:   16(float) GroupFMinNonUniformAMD 25 Reduce 252
-             254:   16(float) CompositeExtract 251 1
-             255:   16(float) GroupFMinNonUniformAMD 25 Reduce 254
-             256:   16(float) CompositeExtract 251 2
-             257:   16(float) GroupFMinNonUniformAMD 25 Reduce 256
-             258:   17(fvec3) CompositeConstruct 253 255 257
-             259:     81(ptr) AccessChain 20 80
-                              Store 259 258
-             260:     22(ptr) AccessChain 20 21
-             261:      6(int) Load 260
-             262:      6(int) GroupSMaxNonUniformAMD 25 Reduce 261
-             263:     22(ptr) AccessChain 20 21
-                              Store 263 262
-             264:     29(ptr) AccessChain 20 28
-             265:    8(ivec2) Load 264
-             266:      7(int) CompositeExtract 265 0
-             267:      7(int) GroupUMaxNonUniformAMD 25 Reduce 266
-             268:      7(int) CompositeExtract 265 1
-             269:      7(int) GroupUMaxNonUniformAMD 25 Reduce 268
-             270:    8(ivec2) CompositeConstruct 267 269
-             271:     29(ptr) AccessChain 20 28
-                              Store 271 270
-             272:     39(ptr) AccessChain 20 38
-             273:   10(fvec3) Load 272
-             274:    9(float) CompositeExtract 273 0
-             275:    9(float) GroupFMaxNonUniformAMD 25 Reduce 274
-             276:    9(float) CompositeExtract 273 1
-             277:    9(float) GroupFMaxNonUniformAMD 25 Reduce 276
-             278:    9(float) CompositeExtract 273 2
-             279:    9(float) GroupFMaxNonUniformAMD 25 Reduce 278
-             280:   10(fvec3) CompositeConstruct 275 277 279
-             281:     39(ptr) AccessChain 20 38
-                              Store 281 280
-             282:     51(ptr) AccessChain 20 50
-             283:   12(fvec4) Load 282
-             284:   11(float) CompositeExtract 283 0
-             285:   11(float) GroupFMaxNonUniformAMD 25 Reduce 284
-             286:   11(float) CompositeExtract 283 1
-             287:   11(float) GroupFMaxNonUniformAMD 25 Reduce 286
-             288:   11(float) CompositeExtract 283 2
-             289:   11(float) GroupFMaxNonUniformAMD 25 Reduce 288
-             290:   11(float) CompositeExtract 283 3
-             291:   11(float) GroupFMaxNonUniformAMD 25 Reduce 290
-             292:   12(fvec4) CompositeConstruct 285 287 289 291
-             293:     51(ptr) AccessChain 20 50
-                              Store 293 292
-             294:     65(ptr) AccessChain 20 64
-             295:     13(int) Load 294
-             296:     13(int) GroupSMaxNonUniformAMD 25 Reduce 295
-             297:     65(ptr) AccessChain 20 64
-                              Store 297 296
-             298:     71(ptr) AccessChain 20 70
-             299:   15(ivec2) Load 298
-             300:     14(int) CompositeExtract 299 0
-             301:     14(int) GroupUMaxNonUniformAMD 25 Reduce 300
-             302:     14(int) CompositeExtract 299 1
-             303:     14(int) GroupUMaxNonUniformAMD 25 Reduce 302
-             304:   15(ivec2) CompositeConstruct 301 303
-             305:     71(ptr) AccessChain 20 70
-                              Store 305 304
-             306:     81(ptr) AccessChain 20 80
-             307:   17(fvec3) Load 306
-             308:   16(float) CompositeExtract 307 0
-             309:   16(float) GroupFMaxNonUniformAMD 25 Reduce 308
-             310:   16(float) CompositeExtract 307 1
-             311:   16(float) GroupFMaxNonUniformAMD 25 Reduce 310
-             312:   16(float) CompositeExtract 307 2
-             313:   16(float) GroupFMaxNonUniformAMD 25 Reduce 312
-             314:   17(fvec3) CompositeConstruct 309 311 313
-             315:     81(ptr) AccessChain 20 80
-                              Store 315 314
-             316:     22(ptr) AccessChain 20 21
-             317:      6(int) Load 316
-             318:      6(int) GroupIAddNonUniformAMD 25 Reduce 317
-             319:     22(ptr) AccessChain 20 21
-                              Store 319 318
-             320:     29(ptr) AccessChain 20 28
-             321:    8(ivec2) Load 320
-             322:      7(int) CompositeExtract 321 0
-             323:      7(int) GroupIAddNonUniformAMD 25 Reduce 322
-             324:      7(int) CompositeExtract 321 1
-             325:      7(int) GroupIAddNonUniformAMD 25 Reduce 324
-             326:    8(ivec2) CompositeConstruct 323 325
-             327:     29(ptr) AccessChain 20 28
-                              Store 327 326
-             328:     39(ptr) AccessChain 20 38
-             329:   10(fvec3) Load 328
-             330:    9(float) CompositeExtract 329 0
-             331:    9(float) GroupFAddNonUniformAMD 25 Reduce 330
-             332:    9(float) CompositeExtract 329 1
-             333:    9(float) GroupFAddNonUniformAMD 25 Reduce 332
-             334:    9(float) CompositeExtract 329 2
-             335:    9(float) GroupFAddNonUniformAMD 25 Reduce 334
-             336:   10(fvec3) CompositeConstruct 331 333 335
-             337:     39(ptr) AccessChain 20 38
-                              Store 337 336
-             338:     51(ptr) AccessChain 20 50
-             339:   12(fvec4) Load 338
-             340:   11(float) CompositeExtract 339 0
-             341:   11(float) GroupFAddNonUniformAMD 25 Reduce 340
-             342:   11(float) CompositeExtract 339 1
-             343:   11(float) GroupFAddNonUniformAMD 25 Reduce 342
-             344:   11(float) CompositeExtract 339 2
-             345:   11(float) GroupFAddNonUniformAMD 25 Reduce 344
-             346:   11(float) CompositeExtract 339 3
-             347:   11(float) GroupFAddNonUniformAMD 25 Reduce 346
-             348:   12(fvec4) CompositeConstruct 341 343 345 347
-             349:     51(ptr) AccessChain 20 50
-                              Store 349 348
-             350:     65(ptr) AccessChain 20 64
-             351:     13(int) Load 350
-             352:     13(int) GroupIAddNonUniformAMD 25 Reduce 351
-             353:     65(ptr) AccessChain 20 64
-                              Store 353 352
-             354:     71(ptr) AccessChain 20 70
-             355:   15(ivec2) Load 354
-             356:     14(int) CompositeExtract 355 0
-             357:     14(int) GroupIAddNonUniformAMD 25 Reduce 356
-             358:     14(int) CompositeExtract 355 1
-             359:     14(int) GroupIAddNonUniformAMD 25 Reduce 358
-             360:   15(ivec2) CompositeConstruct 357 359
-             361:     71(ptr) AccessChain 20 70
-                              Store 361 360
-             362:     81(ptr) AccessChain 20 80
-             363:   17(fvec3) Load 362
-             364:   16(float) CompositeExtract 363 0
-             365:   16(float) GroupFAddNonUniformAMD 25 Reduce 364
-             366:   16(float) CompositeExtract 363 1
-             367:   16(float) GroupFAddNonUniformAMD 25 Reduce 366
-             368:   16(float) CompositeExtract 363 2
-             369:   16(float) GroupFAddNonUniformAMD 25 Reduce 368
-             370:   17(fvec3) CompositeConstruct 365 367 369
-             371:     81(ptr) AccessChain 20 80
-                              Store 371 370
-             372:     22(ptr) AccessChain 20 21
-             373:      6(int) Load 372
-             374:      6(int) GroupSMin 25 InclusiveScan 373
-             375:     22(ptr) AccessChain 20 21
-                              Store 375 374
-             376:     29(ptr) AccessChain 20 28
-             377:    8(ivec2) Load 376
-             378:      7(int) CompositeExtract 377 0
-             379:      7(int) GroupUMin 25 InclusiveScan 378
-             380:      7(int) CompositeExtract 377 1
-             381:      7(int) GroupUMin 25 InclusiveScan 380
-             382:    8(ivec2) CompositeConstruct 379 381
-             383:     29(ptr) AccessChain 20 28
-                              Store 383 382
-             384:     39(ptr) AccessChain 20 38
-             385:   10(fvec3) Load 384
-             386:    9(float) CompositeExtract 385 0
-             387:    9(float) GroupFMin 25 InclusiveScan 386
-             388:    9(float) CompositeExtract 385 1
-             389:    9(float) GroupFMin 25 InclusiveScan 388
-             390:    9(float) CompositeExtract 385 2
-             391:    9(float) GroupFMin 25 InclusiveScan 390
-             392:   10(fvec3) CompositeConstruct 387 389 391
-             393:     39(ptr) AccessChain 20 38
-                              Store 393 392
-             394:     51(ptr) AccessChain 20 50
-             395:   12(fvec4) Load 394
-             396:   11(float) CompositeExtract 395 0
-             397:   11(float) GroupFMin 25 InclusiveScan 396
-             398:   11(float) CompositeExtract 395 1
-             399:   11(float) GroupFMin 25 InclusiveScan 398
-             400:   11(float) CompositeExtract 395 2
-             401:   11(float) GroupFMin 25 InclusiveScan 400
-             402:   11(float) CompositeExtract 395 3
-             403:   11(float) GroupFMin 25 InclusiveScan 402
-             404:   12(fvec4) CompositeConstruct 397 399 401 403
-             405:     51(ptr) AccessChain 20 50
-                              Store 405 404
-             406:     65(ptr) AccessChain 20 64
-             407:     13(int) Load 406
-             408:     13(int) GroupSMin 25 InclusiveScan 407
-             409:     65(ptr) AccessChain 20 64
-                              Store 409 408
-             410:     71(ptr) AccessChain 20 70
-             411:   15(ivec2) Load 410
-             412:     14(int) CompositeExtract 411 0
-             413:     14(int) GroupUMin 25 InclusiveScan 412
-             414:     14(int) CompositeExtract 411 1
-             415:     14(int) GroupUMin 25 InclusiveScan 414
-             416:   15(ivec2) CompositeConstruct 413 415
-             417:     71(ptr) AccessChain 20 70
-                              Store 417 416
-             418:     81(ptr) AccessChain 20 80
-             419:   17(fvec3) Load 418
-             420:   16(float) CompositeExtract 419 0
-             421:   16(float) GroupFMin 25 InclusiveScan 420
-             422:   16(float) CompositeExtract 419 1
-             423:   16(float) GroupFMin 25 InclusiveScan 422
-             424:   16(float) CompositeExtract 419 2
-             425:   16(float) GroupFMin 25 InclusiveScan 424
-             426:   17(fvec3) CompositeConstruct 421 423 425
-             427:     81(ptr) AccessChain 20 80
-                              Store 427 426
-             428:     22(ptr) AccessChain 20 21
-             429:      6(int) Load 428
-             430:      6(int) GroupSMax 25 InclusiveScan 429
-             431:     22(ptr) AccessChain 20 21
-                              Store 431 430
-             432:     29(ptr) AccessChain 20 28
-             433:    8(ivec2) Load 432
-             434:      7(int) CompositeExtract 433 0
-             435:      7(int) GroupUMax 25 InclusiveScan 434
-             436:      7(int) CompositeExtract 433 1
-             437:      7(int) GroupUMax 25 InclusiveScan 436
-             438:    8(ivec2) CompositeConstruct 435 437
-             439:     29(ptr) AccessChain 20 28
-                              Store 439 438
-             440:     39(ptr) AccessChain 20 38
-             441:   10(fvec3) Load 440
-             442:    9(float) CompositeExtract 441 0
-             443:    9(float) GroupFMax 25 InclusiveScan 442
-             444:    9(float) CompositeExtract 441 1
-             445:    9(float) GroupFMax 25 InclusiveScan 444
-             446:    9(float) CompositeExtract 441 2
-             447:    9(float) GroupFMax 25 InclusiveScan 446
-             448:   10(fvec3) CompositeConstruct 443 445 447
-             449:     39(ptr) AccessChain 20 38
-                              Store 449 448
-             450:     51(ptr) AccessChain 20 50
-             451:   12(fvec4) Load 450
-             452:   11(float) CompositeExtract 451 0
-             453:   11(float) GroupFMax 25 InclusiveScan 452
-             454:   11(float) CompositeExtract 451 1
-             455:   11(float) GroupFMax 25 InclusiveScan 454
-             456:   11(float) CompositeExtract 451 2
-             457:   11(float) GroupFMax 25 InclusiveScan 456
-             458:   11(float) CompositeExtract 451 3
-             459:   11(float) GroupFMax 25 InclusiveScan 458
-             460:   12(fvec4) CompositeConstruct 453 455 457 459
-             461:     51(ptr) AccessChain 20 50
-                              Store 461 460
-             462:     65(ptr) AccessChain 20 64
-             463:     13(int) Load 462
-             464:     13(int) GroupSMax 25 InclusiveScan 463
-             465:     65(ptr) AccessChain 20 64
-                              Store 465 464
-             466:     71(ptr) AccessChain 20 70
-             467:   15(ivec2) Load 466
-             468:     14(int) CompositeExtract 467 0
-             469:     14(int) GroupUMax 25 InclusiveScan 468
-             470:     14(int) CompositeExtract 467 1
-             471:     14(int) GroupUMax 25 InclusiveScan 470
-             472:   15(ivec2) CompositeConstruct 469 471
-             473:     71(ptr) AccessChain 20 70
-                              Store 473 472
-             474:     81(ptr) AccessChain 20 80
-             475:   17(fvec3) Load 474
-             476:   16(float) CompositeExtract 475 0
-             477:   16(float) GroupFMax 25 InclusiveScan 476
-             478:   16(float) CompositeExtract 475 1
-             479:   16(float) GroupFMax 25 InclusiveScan 478
-             480:   16(float) CompositeExtract 475 2
-             481:   16(float) GroupFMax 25 InclusiveScan 480
-             482:   17(fvec3) CompositeConstruct 477 479 481
-             483:     81(ptr) AccessChain 20 80
-                              Store 483 482
-             484:     22(ptr) AccessChain 20 21
-             485:      6(int) Load 484
-             486:      6(int) GroupIAdd 25 InclusiveScan 485
-             487:     22(ptr) AccessChain 20 21
-                              Store 487 486
-             488:     29(ptr) AccessChain 20 28
-             489:    8(ivec2) Load 488
-             490:      7(int) CompositeExtract 489 0
-             491:      7(int) GroupIAdd 25 InclusiveScan 490
-             492:      7(int) CompositeExtract 489 1
-             493:      7(int) GroupIAdd 25 InclusiveScan 492
-             494:    8(ivec2) CompositeConstruct 491 493
-             495:     29(ptr) AccessChain 20 28
-                              Store 495 494
-             496:     39(ptr) AccessChain 20 38
-             497:   10(fvec3) Load 496
-             498:    9(float) CompositeExtract 497 0
-             499:    9(float) GroupFAdd 25 InclusiveScan 498
-             500:    9(float) CompositeExtract 497 1
-             501:    9(float) GroupFAdd 25 InclusiveScan 500
-             502:    9(float) CompositeExtract 497 2
-             503:    9(float) GroupFAdd 25 InclusiveScan 502
-             504:   10(fvec3) CompositeConstruct 499 501 503
-             505:     39(ptr) AccessChain 20 38
-                              Store 505 504
-             506:     51(ptr) AccessChain 20 50
-             507:   12(fvec4) Load 506
-             508:   11(float) CompositeExtract 507 0
-             509:   11(float) GroupFAdd 25 InclusiveScan 508
-             510:   11(float) CompositeExtract 507 1
-             511:   11(float) GroupFAdd 25 InclusiveScan 510
-             512:   11(float) CompositeExtract 507 2
-             513:   11(float) GroupFAdd 25 InclusiveScan 512
-             514:   11(float) CompositeExtract 507 3
-             515:   11(float) GroupFAdd 25 InclusiveScan 514
-             516:   12(fvec4) CompositeConstruct 509 511 513 515
-             517:     51(ptr) AccessChain 20 50
-                              Store 517 516
-             518:     65(ptr) AccessChain 20 64
-             519:     13(int) Load 518
-             520:     13(int) GroupIAdd 25 InclusiveScan 519
-             521:     65(ptr) AccessChain 20 64
-                              Store 521 520
-             522:     71(ptr) AccessChain 20 70
-             523:   15(ivec2) Load 522
-             524:     14(int) CompositeExtract 523 0
-             525:     14(int) GroupIAdd 25 InclusiveScan 524
-             526:     14(int) CompositeExtract 523 1
-             527:     14(int) GroupIAdd 25 InclusiveScan 526
-             528:   15(ivec2) CompositeConstruct 525 527
-             529:     71(ptr) AccessChain 20 70
-                              Store 529 528
-             530:     81(ptr) AccessChain 20 80
-             531:   17(fvec3) Load 530
-             532:   16(float) CompositeExtract 531 0
-             533:   16(float) GroupFAdd 25 InclusiveScan 532
-             534:   16(float) CompositeExtract 531 1
-             535:   16(float) GroupFAdd 25 InclusiveScan 534
-             536:   16(float) CompositeExtract 531 2
-             537:   16(float) GroupFAdd 25 InclusiveScan 536
-             538:   17(fvec3) CompositeConstruct 533 535 537
-             539:     81(ptr) AccessChain 20 80
-                              Store 539 538
-             540:     22(ptr) AccessChain 20 21
-             541:      6(int) Load 540
-             542:      6(int) GroupSMin 25 ExclusiveScan 541
-             543:     22(ptr) AccessChain 20 21
-                              Store 543 542
-             544:     29(ptr) AccessChain 20 28
-             545:    8(ivec2) Load 544
-             546:      7(int) CompositeExtract 545 0
-             547:      7(int) GroupUMin 25 ExclusiveScan 546
-             548:      7(int) CompositeExtract 545 1
-             549:      7(int) GroupUMin 25 ExclusiveScan 548
-             550:    8(ivec2) CompositeConstruct 547 549
-             551:     29(ptr) AccessChain 20 28
-                              Store 551 550
-             552:     39(ptr) AccessChain 20 38
-             553:   10(fvec3) Load 552
-             554:    9(float) CompositeExtract 553 0
-             555:    9(float) GroupFMin 25 ExclusiveScan 554
-             556:    9(float) CompositeExtract 553 1
-             557:    9(float) GroupFMin 25 ExclusiveScan 556
-             558:    9(float) CompositeExtract 553 2
-             559:    9(float) GroupFMin 25 ExclusiveScan 558
-             560:   10(fvec3) CompositeConstruct 555 557 559
-             561:     39(ptr) AccessChain 20 38
-                              Store 561 560
-             562:     51(ptr) AccessChain 20 50
-             563:   12(fvec4) Load 562
-             564:   11(float) CompositeExtract 563 0
-             565:   11(float) GroupFMin 25 ExclusiveScan 564
-             566:   11(float) CompositeExtract 563 1
-             567:   11(float) GroupFMin 25 ExclusiveScan 566
-             568:   11(float) CompositeExtract 563 2
-             569:   11(float) GroupFMin 25 ExclusiveScan 568
-             570:   11(float) CompositeExtract 563 3
-             571:   11(float) GroupFMin 25 ExclusiveScan 570
-             572:   12(fvec4) CompositeConstruct 565 567 569 571
-             573:     51(ptr) AccessChain 20 50
-                              Store 573 572
-             574:     65(ptr) AccessChain 20 64
-             575:     13(int) Load 574
-             576:     13(int) GroupSMin 25 ExclusiveScan 575
-             577:     65(ptr) AccessChain 20 64
-                              Store 577 576
-             578:     71(ptr) AccessChain 20 70
-             579:   15(ivec2) Load 578
-             580:     14(int) CompositeExtract 579 0
-             581:     14(int) GroupUMin 25 ExclusiveScan 580
-             582:     14(int) CompositeExtract 579 1
-             583:     14(int) GroupUMin 25 ExclusiveScan 582
-             584:   15(ivec2) CompositeConstruct 581 583
-             585:     71(ptr) AccessChain 20 70
-                              Store 585 584
-             586:     81(ptr) AccessChain 20 80
-             587:   17(fvec3) Load 586
-             588:   16(float) CompositeExtract 587 0
-             589:   16(float) GroupFMin 25 ExclusiveScan 588
-             590:   16(float) CompositeExtract 587 1
-             591:   16(float) GroupFMin 25 ExclusiveScan 590
-             592:   16(float) CompositeExtract 587 2
-             593:   16(float) GroupFMin 25 ExclusiveScan 592
-             594:   17(fvec3) CompositeConstruct 589 591 593
-             595:     81(ptr) AccessChain 20 80
-                              Store 595 594
-             596:     22(ptr) AccessChain 20 21
-             597:      6(int) Load 596
-             598:      6(int) GroupSMax 25 ExclusiveScan 597
-             599:     22(ptr) AccessChain 20 21
-                              Store 599 598
-             600:     29(ptr) AccessChain 20 28
-             601:    8(ivec2) Load 600
-             602:      7(int) CompositeExtract 601 0
-             603:      7(int) GroupUMax 25 ExclusiveScan 602
-             604:      7(int) CompositeExtract 601 1
-             605:      7(int) GroupUMax 25 ExclusiveScan 604
-             606:    8(ivec2) CompositeConstruct 603 605
-             607:     29(ptr) AccessChain 20 28
-                              Store 607 606
-             608:     39(ptr) AccessChain 20 38
-             609:   10(fvec3) Load 608
-             610:    9(float) CompositeExtract 609 0
-             611:    9(float) GroupFMax 25 ExclusiveScan 610
-             612:    9(float) CompositeExtract 609 1
-             613:    9(float) GroupFMax 25 ExclusiveScan 612
-             614:    9(float) CompositeExtract 609 2
-             615:    9(float) GroupFMax 25 ExclusiveScan 614
-             616:   10(fvec3) CompositeConstruct 611 613 615
-             617:     39(ptr) AccessChain 20 38
-                              Store 617 616
-             618:     51(ptr) AccessChain 20 50
-             619:   12(fvec4) Load 618
-             620:   11(float) CompositeExtract 619 0
-             621:   11(float) GroupFMax 25 ExclusiveScan 620
-             622:   11(float) CompositeExtract 619 1
-             623:   11(float) GroupFMax 25 ExclusiveScan 622
-             624:   11(float) CompositeExtract 619 2
-             625:   11(float) GroupFMax 25 ExclusiveScan 624
-             626:   11(float) CompositeExtract 619 3
-             627:   11(float) GroupFMax 25 ExclusiveScan 626
-             628:   12(fvec4) CompositeConstruct 621 623 625 627
-             629:     51(ptr) AccessChain 20 50
-                              Store 629 628
-             630:     65(ptr) AccessChain 20 64
-             631:     13(int) Load 630
-             632:     13(int) GroupSMax 25 ExclusiveScan 631
-             633:     65(ptr) AccessChain 20 64
-                              Store 633 632
-             634:     71(ptr) AccessChain 20 70
-             635:   15(ivec2) Load 634
-             636:     14(int) CompositeExtract 635 0
-             637:     14(int) GroupUMax 25 ExclusiveScan 636
-             638:     14(int) CompositeExtract 635 1
-             639:     14(int) GroupUMax 25 ExclusiveScan 638
-             640:   15(ivec2) CompositeConstruct 637 639
-             641:     71(ptr) AccessChain 20 70
-                              Store 641 640
-             642:     81(ptr) AccessChain 20 80
-             643:   17(fvec3) Load 642
-             644:   16(float) CompositeExtract 643 0
-             645:   16(float) GroupFMax 25 ExclusiveScan 644
-             646:   16(float) CompositeExtract 643 1
-             647:   16(float) GroupFMax 25 ExclusiveScan 646
-             648:   16(float) CompositeExtract 643 2
-             649:   16(float) GroupFMax 25 ExclusiveScan 648
-             650:   17(fvec3) CompositeConstruct 645 647 649
-             651:     81(ptr) AccessChain 20 80
-                              Store 651 650
-             652:     22(ptr) AccessChain 20 21
-             653:      6(int) Load 652
-             654:      6(int) GroupIAdd 25 ExclusiveScan 653
-             655:     22(ptr) AccessChain 20 21
-                              Store 655 654
-             656:     29(ptr) AccessChain 20 28
-             657:    8(ivec2) Load 656
-             658:      7(int) CompositeExtract 657 0
-             659:      7(int) GroupIAdd 25 ExclusiveScan 658
-             660:      7(int) CompositeExtract 657 1
-             661:      7(int) GroupIAdd 25 ExclusiveScan 660
-             662:    8(ivec2) CompositeConstruct 659 661
-             663:     29(ptr) AccessChain 20 28
-                              Store 663 662
-             664:     39(ptr) AccessChain 20 38
-             665:   10(fvec3) Load 664
-             666:    9(float) CompositeExtract 665 0
-             667:    9(float) GroupFAdd 25 ExclusiveScan 666
-             668:    9(float) CompositeExtract 665 1
-             669:    9(float) GroupFAdd 25 ExclusiveScan 668
-             670:    9(float) CompositeExtract 665 2
-             671:    9(float) GroupFAdd 25 ExclusiveScan 670
-             672:   10(fvec3) CompositeConstruct 667 669 671
-             673:     39(ptr) AccessChain 20 38
-                              Store 673 672
-             674:     51(ptr) AccessChain 20 50
-             675:   12(fvec4) Load 674
-             676:   11(float) CompositeExtract 675 0
-             677:   11(float) GroupFAdd 25 ExclusiveScan 676
-             678:   11(float) CompositeExtract 675 1
-             679:   11(float) GroupFAdd 25 ExclusiveScan 678
-             680:   11(float) CompositeExtract 675 2
-             681:   11(float) GroupFAdd 25 ExclusiveScan 680
-             682:   11(float) CompositeExtract 675 3
-             683:   11(float) GroupFAdd 25 ExclusiveScan 682
-             684:   12(fvec4) CompositeConstruct 677 679 681 683
-             685:     51(ptr) AccessChain 20 50
-                              Store 685 684
-             686:     65(ptr) AccessChain 20 64
-             687:     13(int) Load 686
-             688:     13(int) GroupIAdd 25 ExclusiveScan 687
-             689:     65(ptr) AccessChain 20 64
-                              Store 689 688
-             690:     71(ptr) AccessChain 20 70
-             691:   15(ivec2) Load 690
-             692:     14(int) CompositeExtract 691 0
-             693:     14(int) GroupIAdd 25 ExclusiveScan 692
-             694:     14(int) CompositeExtract 691 1
-             695:     14(int) GroupIAdd 25 ExclusiveScan 694
-             696:   15(ivec2) CompositeConstruct 693 695
-             697:     71(ptr) AccessChain 20 70
-                              Store 697 696
-             698:     81(ptr) AccessChain 20 80
-             699:   17(fvec3) Load 698
-             700:   16(float) CompositeExtract 699 0
-             701:   16(float) GroupFAdd 25 ExclusiveScan 700
-             702:   16(float) CompositeExtract 699 1
-             703:   16(float) GroupFAdd 25 ExclusiveScan 702
-             704:   16(float) CompositeExtract 699 2
-             705:   16(float) GroupFAdd 25 ExclusiveScan 704
-             706:   17(fvec3) CompositeConstruct 701 703 705
-             707:     81(ptr) AccessChain 20 80
-                              Store 707 706
-             708:     22(ptr) AccessChain 20 21
-             709:      6(int) Load 708
-             710:      6(int) GroupSMinNonUniformAMD 25 InclusiveScan 709
-             711:     22(ptr) AccessChain 20 21
-                              Store 711 710
-             712:     29(ptr) AccessChain 20 28
-             713:    8(ivec2) Load 712
-             714:      7(int) CompositeExtract 713 0
-             715:      7(int) GroupUMinNonUniformAMD 25 InclusiveScan 714
-             716:      7(int) CompositeExtract 713 1
-             717:      7(int) GroupUMinNonUniformAMD 25 InclusiveScan 716
-             718:    8(ivec2) CompositeConstruct 715 717
-             719:     29(ptr) AccessChain 20 28
-                              Store 719 718
-             720:     39(ptr) AccessChain 20 38
-             721:   10(fvec3) Load 720
-             722:    9(float) CompositeExtract 721 0
-             723:    9(float) GroupFMinNonUniformAMD 25 InclusiveScan 722
-             724:    9(float) CompositeExtract 721 1
-             725:    9(float) GroupFMinNonUniformAMD 25 InclusiveScan 724
-             726:    9(float) CompositeExtract 721 2
-             727:    9(float) GroupFMinNonUniformAMD 25 InclusiveScan 726
-             728:   10(fvec3) CompositeConstruct 723 725 727
-             729:     39(ptr) AccessChain 20 38
-                              Store 729 728
-             730:     51(ptr) AccessChain 20 50
-             731:   12(fvec4) Load 730
-             732:   11(float) CompositeExtract 731 0
-             733:   11(float) GroupFMinNonUniformAMD 25 InclusiveScan 732
-             734:   11(float) CompositeExtract 731 1
-             735:   11(float) GroupFMinNonUniformAMD 25 InclusiveScan 734
-             736:   11(float) CompositeExtract 731 2
-             737:   11(float) GroupFMinNonUniformAMD 25 InclusiveScan 736
-             738:   11(float) CompositeExtract 731 3
-             739:   11(float) GroupFMinNonUniformAMD 25 InclusiveScan 738
-             740:   12(fvec4) CompositeConstruct 733 735 737 739
-             741:     51(ptr) AccessChain 20 50
-                              Store 741 740
-             742:     65(ptr) AccessChain 20 64
-             743:     13(int) Load 742
-             744:     13(int) GroupSMinNonUniformAMD 25 InclusiveScan 743
-             745:     65(ptr) AccessChain 20 64
-                              Store 745 744
-             746:     71(ptr) AccessChain 20 70
-             747:   15(ivec2) Load 746
-             748:     14(int) CompositeExtract 747 0
-             749:     14(int) GroupUMinNonUniformAMD 25 InclusiveScan 748
-             750:     14(int) CompositeExtract 747 1
-             751:     14(int) GroupUMinNonUniformAMD 25 InclusiveScan 750
-             752:   15(ivec2) CompositeConstruct 749 751
-             753:     71(ptr) AccessChain 20 70
-                              Store 753 752
-             754:     81(ptr) AccessChain 20 80
-             755:   17(fvec3) Load 754
-             756:   16(float) CompositeExtract 755 0
-             757:   16(float) GroupFMinNonUniformAMD 25 InclusiveScan 756
-             758:   16(float) CompositeExtract 755 1
-             759:   16(float) GroupFMinNonUniformAMD 25 InclusiveScan 758
-             760:   16(float) CompositeExtract 755 2
-             761:   16(float) GroupFMinNonUniformAMD 25 InclusiveScan 760
-             762:   17(fvec3) CompositeConstruct 757 759 761
-             763:     81(ptr) AccessChain 20 80
-                              Store 763 762
-             764:     22(ptr) AccessChain 20 21
-             765:      6(int) Load 764
-             766:      6(int) GroupSMaxNonUniformAMD 25 InclusiveScan 765
-             767:     22(ptr) AccessChain 20 21
-                              Store 767 766
-             768:     29(ptr) AccessChain 20 28
-             769:    8(ivec2) Load 768
-             770:      7(int) CompositeExtract 769 0
-             771:      7(int) GroupUMaxNonUniformAMD 25 InclusiveScan 770
-             772:      7(int) CompositeExtract 769 1
-             773:      7(int) GroupUMaxNonUniformAMD 25 InclusiveScan 772
-             774:    8(ivec2) CompositeConstruct 771 773
-             775:     29(ptr) AccessChain 20 28
-                              Store 775 774
-             776:     39(ptr) AccessChain 20 38
-             777:   10(fvec3) Load 776
-             778:    9(float) CompositeExtract 777 0
-             779:    9(float) GroupFMaxNonUniformAMD 25 InclusiveScan 778
-             780:    9(float) CompositeExtract 777 1
-             781:    9(float) GroupFMaxNonUniformAMD 25 InclusiveScan 780
-             782:    9(float) CompositeExtract 777 2
-             783:    9(float) GroupFMaxNonUniformAMD 25 InclusiveScan 782
-             784:   10(fvec3) CompositeConstruct 779 781 783
-             785:     39(ptr) AccessChain 20 38
-                              Store 785 784
-             786:     51(ptr) AccessChain 20 50
-             787:   12(fvec4) Load 786
-             788:   11(float) CompositeExtract 787 0
-             789:   11(float) GroupFMaxNonUniformAMD 25 InclusiveScan 788
-             790:   11(float) CompositeExtract 787 1
-             791:   11(float) GroupFMaxNonUniformAMD 25 InclusiveScan 790
-             792:   11(float) CompositeExtract 787 2
-             793:   11(float) GroupFMaxNonUniformAMD 25 InclusiveScan 792
-             794:   11(float) CompositeExtract 787 3
-             795:   11(float) GroupFMaxNonUniformAMD 25 InclusiveScan 794
-             796:   12(fvec4) CompositeConstruct 789 791 793 795
-             797:     51(ptr) AccessChain 20 50
-                              Store 797 796
-             798:     65(ptr) AccessChain 20 64
-             799:     13(int) Load 798
-             800:     13(int) GroupSMaxNonUniformAMD 25 InclusiveScan 799
-             801:     65(ptr) AccessChain 20 64
-                              Store 801 800
-             802:     71(ptr) AccessChain 20 70
-             803:   15(ivec2) Load 802
-             804:     14(int) CompositeExtract 803 0
-             805:     14(int) GroupUMaxNonUniformAMD 25 InclusiveScan 804
-             806:     14(int) CompositeExtract 803 1
-             807:     14(int) GroupUMaxNonUniformAMD 25 InclusiveScan 806
-             808:   15(ivec2) CompositeConstruct 805 807
-             809:     71(ptr) AccessChain 20 70
-                              Store 809 808
-             810:     81(ptr) AccessChain 20 80
-             811:   17(fvec3) Load 810
-             812:   16(float) CompositeExtract 811 0
-             813:   16(float) GroupFMaxNonUniformAMD 25 InclusiveScan 812
-             814:   16(float) CompositeExtract 811 1
-             815:   16(float) GroupFMaxNonUniformAMD 25 InclusiveScan 814
-             816:   16(float) CompositeExtract 811 2
-             817:   16(float) GroupFMaxNonUniformAMD 25 InclusiveScan 816
-             818:   17(fvec3) CompositeConstruct 813 815 817
-             819:     81(ptr) AccessChain 20 80
-                              Store 819 818
-             820:     22(ptr) AccessChain 20 21
-             821:      6(int) Load 820
-             822:      6(int) GroupIAddNonUniformAMD 25 InclusiveScan 821
-             823:     22(ptr) AccessChain 20 21
-                              Store 823 822
-             824:     29(ptr) AccessChain 20 28
-             825:    8(ivec2) Load 824
-             826:      7(int) CompositeExtract 825 0
-             827:      7(int) GroupIAddNonUniformAMD 25 InclusiveScan 826
-             828:      7(int) CompositeExtract 825 1
-             829:      7(int) GroupIAddNonUniformAMD 25 InclusiveScan 828
-             830:    8(ivec2) CompositeConstruct 827 829
-             831:     29(ptr) AccessChain 20 28
-                              Store 831 830
-             832:     39(ptr) AccessChain 20 38
-             833:   10(fvec3) Load 832
-             834:    9(float) CompositeExtract 833 0
-             835:    9(float) GroupFAddNonUniformAMD 25 InclusiveScan 834
-             836:    9(float) CompositeExtract 833 1
-             837:    9(float) GroupFAddNonUniformAMD 25 InclusiveScan 836
-             838:    9(float) CompositeExtract 833 2
-             839:    9(float) GroupFAddNonUniformAMD 25 InclusiveScan 838
-             840:   10(fvec3) CompositeConstruct 835 837 839
-             841:     39(ptr) AccessChain 20 38
-                              Store 841 840
-             842:     51(ptr) AccessChain 20 50
-             843:   12(fvec4) Load 842
-             844:   11(float) CompositeExtract 843 0
-             845:   11(float) GroupFAddNonUniformAMD 25 InclusiveScan 844
-             846:   11(float) CompositeExtract 843 1
-             847:   11(float) GroupFAddNonUniformAMD 25 InclusiveScan 846
-             848:   11(float) CompositeExtract 843 2
-             849:   11(float) GroupFAddNonUniformAMD 25 InclusiveScan 848
-             850:   11(float) CompositeExtract 843 3
-             851:   11(float) GroupFAddNonUniformAMD 25 InclusiveScan 850
-             852:   12(fvec4) CompositeConstruct 845 847 849 851
-             853:     51(ptr) AccessChain 20 50
-                              Store 853 852
-             854:     65(ptr) AccessChain 20 64
-             855:     13(int) Load 854
-             856:     13(int) GroupIAddNonUniformAMD 25 InclusiveScan 855
-             857:     65(ptr) AccessChain 20 64
-                              Store 857 856
-             858:     71(ptr) AccessChain 20 70
-             859:   15(ivec2) Load 858
-             860:     14(int) CompositeExtract 859 0
-             861:     14(int) GroupIAddNonUniformAMD 25 InclusiveScan 860
-             862:     14(int) CompositeExtract 859 1
-             863:     14(int) GroupIAddNonUniformAMD 25 InclusiveScan 862
-             864:   15(ivec2) CompositeConstruct 861 863
-             865:     71(ptr) AccessChain 20 70
-                              Store 865 864
-             866:     81(ptr) AccessChain 20 80
-             867:   17(fvec3) Load 866
-             868:   16(float) CompositeExtract 867 0
-             869:   16(float) GroupFAddNonUniformAMD 25 InclusiveScan 868
-             870:   16(float) CompositeExtract 867 1
-             871:   16(float) GroupFAddNonUniformAMD 25 InclusiveScan 870
-             872:   16(float) CompositeExtract 867 2
-             873:   16(float) GroupFAddNonUniformAMD 25 InclusiveScan 872
-             874:   17(fvec3) CompositeConstruct 869 871 873
-             875:     81(ptr) AccessChain 20 80
-                              Store 875 874
-             876:     22(ptr) AccessChain 20 21
-             877:      6(int) Load 876
-             878:      6(int) GroupSMinNonUniformAMD 25 ExclusiveScan 877
-             879:     22(ptr) AccessChain 20 21
-                              Store 879 878
-             880:     29(ptr) AccessChain 20 28
-             881:    8(ivec2) Load 880
-             882:      7(int) CompositeExtract 881 0
-             883:      7(int) GroupUMinNonUniformAMD 25 ExclusiveScan 882
-             884:      7(int) CompositeExtract 881 1
-             885:      7(int) GroupUMinNonUniformAMD 25 ExclusiveScan 884
-             886:    8(ivec2) CompositeConstruct 883 885
-             887:     29(ptr) AccessChain 20 28
-                              Store 887 886
-             888:     39(ptr) AccessChain 20 38
-             889:   10(fvec3) Load 888
-             890:    9(float) CompositeExtract 889 0
-             891:    9(float) GroupFMinNonUniformAMD 25 ExclusiveScan 890
-             892:    9(float) CompositeExtract 889 1
-             893:    9(float) GroupFMinNonUniformAMD 25 ExclusiveScan 892
-             894:    9(float) CompositeExtract 889 2
-             895:    9(float) GroupFMinNonUniformAMD 25 ExclusiveScan 894
-             896:   10(fvec3) CompositeConstruct 891 893 895
-             897:     39(ptr) AccessChain 20 38
-                              Store 897 896
-             898:     51(ptr) AccessChain 20 50
-             899:   12(fvec4) Load 898
-             900:   11(float) CompositeExtract 899 0
-             901:   11(float) GroupFMinNonUniformAMD 25 ExclusiveScan 900
-             902:   11(float) CompositeExtract 899 1
-             903:   11(float) GroupFMinNonUniformAMD 25 ExclusiveScan 902
-             904:   11(float) CompositeExtract 899 2
-             905:   11(float) GroupFMinNonUniformAMD 25 ExclusiveScan 904
-             906:   11(float) CompositeExtract 899 3
-             907:   11(float) GroupFMinNonUniformAMD 25 ExclusiveScan 906
-             908:   12(fvec4) CompositeConstruct 901 903 905 907
-             909:     51(ptr) AccessChain 20 50
-                              Store 909 908
-             910:     65(ptr) AccessChain 20 64
-             911:     13(int) Load 910
-             912:     13(int) GroupSMinNonUniformAMD 25 ExclusiveScan 911
-             913:     65(ptr) AccessChain 20 64
-                              Store 913 912
-             914:     71(ptr) AccessChain 20 70
-             915:   15(ivec2) Load 914
-             916:     14(int) CompositeExtract 915 0
-             917:     14(int) GroupUMinNonUniformAMD 25 ExclusiveScan 916
-             918:     14(int) CompositeExtract 915 1
-             919:     14(int) GroupUMinNonUniformAMD 25 ExclusiveScan 918
-             920:   15(ivec2) CompositeConstruct 917 919
-             921:     71(ptr) AccessChain 20 70
-                              Store 921 920
-             922:     81(ptr) AccessChain 20 80
-             923:   17(fvec3) Load 922
-             924:   16(float) CompositeExtract 923 0
-             925:   16(float) GroupFMinNonUniformAMD 25 ExclusiveScan 924
-             926:   16(float) CompositeExtract 923 1
-             927:   16(float) GroupFMinNonUniformAMD 25 ExclusiveScan 926
-             928:   16(float) CompositeExtract 923 2
-             929:   16(float) GroupFMinNonUniformAMD 25 ExclusiveScan 928
-             930:   17(fvec3) CompositeConstruct 925 927 929
-             931:     81(ptr) AccessChain 20 80
-                              Store 931 930
-             932:     22(ptr) AccessChain 20 21
-             933:      6(int) Load 932
-             934:      6(int) GroupSMaxNonUniformAMD 25 ExclusiveScan 933
-             935:     22(ptr) AccessChain 20 21
-                              Store 935 934
-             936:     29(ptr) AccessChain 20 28
-             937:    8(ivec2) Load 936
-             938:      7(int) CompositeExtract 937 0
-             939:      7(int) GroupUMaxNonUniformAMD 25 ExclusiveScan 938
-             940:      7(int) CompositeExtract 937 1
-             941:      7(int) GroupUMaxNonUniformAMD 25 ExclusiveScan 940
-             942:    8(ivec2) CompositeConstruct 939 941
-             943:     29(ptr) AccessChain 20 28
-                              Store 943 942
-             944:     39(ptr) AccessChain 20 38
-             945:   10(fvec3) Load 944
-             946:    9(float) CompositeExtract 945 0
-             947:    9(float) GroupFMaxNonUniformAMD 25 ExclusiveScan 946
-             948:    9(float) CompositeExtract 945 1
-             949:    9(float) GroupFMaxNonUniformAMD 25 ExclusiveScan 948
-             950:    9(float) CompositeExtract 945 2
-             951:    9(float) GroupFMaxNonUniformAMD 25 ExclusiveScan 950
-             952:   10(fvec3) CompositeConstruct 947 949 951
-             953:     39(ptr) AccessChain 20 38
-                              Store 953 952
-             954:     51(ptr) AccessChain 20 50
-             955:   12(fvec4) Load 954
-             956:   11(float) CompositeExtract 955 0
-             957:   11(float) GroupFMaxNonUniformAMD 25 ExclusiveScan 956
-             958:   11(float) CompositeExtract 955 1
-             959:   11(float) GroupFMaxNonUniformAMD 25 ExclusiveScan 958
-             960:   11(float) CompositeExtract 955 2
-             961:   11(float) GroupFMaxNonUniformAMD 25 ExclusiveScan 960
-             962:   11(float) CompositeExtract 955 3
-             963:   11(float) GroupFMaxNonUniformAMD 25 ExclusiveScan 962
-             964:   12(fvec4) CompositeConstruct 957 959 961 963
-             965:     51(ptr) AccessChain 20 50
-                              Store 965 964
-             966:     65(ptr) AccessChain 20 64
-             967:     13(int) Load 966
-             968:     13(int) GroupSMaxNonUniformAMD 25 ExclusiveScan 967
-             969:     65(ptr) AccessChain 20 64
-                              Store 969 968
-             970:     71(ptr) AccessChain 20 70
-             971:   15(ivec2) Load 970
-             972:     14(int) CompositeExtract 971 0
-             973:     14(int) GroupUMaxNonUniformAMD 25 ExclusiveScan 972
-             974:     14(int) CompositeExtract 971 1
-             975:     14(int) GroupUMaxNonUniformAMD 25 ExclusiveScan 974
-             976:   15(ivec2) CompositeConstruct 973 975
-             977:     71(ptr) AccessChain 20 70
-                              Store 977 976
-             978:     81(ptr) AccessChain 20 80
-             979:   17(fvec3) Load 978
-             980:   16(float) CompositeExtract 979 0
-             981:   16(float) GroupFMaxNonUniformAMD 25 ExclusiveScan 980
-             982:   16(float) CompositeExtract 979 1
-             983:   16(float) GroupFMaxNonUniformAMD 25 ExclusiveScan 982
-             984:   16(float) CompositeExtract 979 2
-             985:   16(float) GroupFMaxNonUniformAMD 25 ExclusiveScan 984
-             986:   17(fvec3) CompositeConstruct 981 983 985
-             987:     81(ptr) AccessChain 20 80
-                              Store 987 986
-             988:     22(ptr) AccessChain 20 21
-             989:      6(int) Load 988
-             990:      6(int) GroupIAddNonUniformAMD 25 ExclusiveScan 989
-             991:     22(ptr) AccessChain 20 21
-                              Store 991 990
-             992:     29(ptr) AccessChain 20 28
-             993:    8(ivec2) Load 992
-             994:      7(int) CompositeExtract 993 0
-             995:      7(int) GroupIAddNonUniformAMD 25 ExclusiveScan 994
-             996:      7(int) CompositeExtract 993 1
-             997:      7(int) GroupIAddNonUniformAMD 25 ExclusiveScan 996
-             998:    8(ivec2) CompositeConstruct 995 997
-             999:     29(ptr) AccessChain 20 28
-                              Store 999 998
-            1000:     39(ptr) AccessChain 20 38
-            1001:   10(fvec3) Load 1000
-            1002:    9(float) CompositeExtract 1001 0
-            1003:    9(float) GroupFAddNonUniformAMD 25 ExclusiveScan 1002
-            1004:    9(float) CompositeExtract 1001 1
-            1005:    9(float) GroupFAddNonUniformAMD 25 ExclusiveScan 1004
-            1006:    9(float) CompositeExtract 1001 2
-            1007:    9(float) GroupFAddNonUniformAMD 25 ExclusiveScan 1006
-            1008:   10(fvec3) CompositeConstruct 1003 1005 1007
-            1009:     39(ptr) AccessChain 20 38
-                              Store 1009 1008
-            1010:     51(ptr) AccessChain 20 50
-            1011:   12(fvec4) Load 1010
-            1012:   11(float) CompositeExtract 1011 0
-            1013:   11(float) GroupFAddNonUniformAMD 25 ExclusiveScan 1012
-            1014:   11(float) CompositeExtract 1011 1
-            1015:   11(float) GroupFAddNonUniformAMD 25 ExclusiveScan 1014
-            1016:   11(float) CompositeExtract 1011 2
-            1017:   11(float) GroupFAddNonUniformAMD 25 ExclusiveScan 1016
-            1018:   11(float) CompositeExtract 1011 3
-            1019:   11(float) GroupFAddNonUniformAMD 25 ExclusiveScan 1018
-            1020:   12(fvec4) CompositeConstruct 1013 1015 1017 1019
-            1021:     51(ptr) AccessChain 20 50
-                              Store 1021 1020
-            1022:     65(ptr) AccessChain 20 64
-            1023:     13(int) Load 1022
-            1024:     13(int) GroupIAddNonUniformAMD 25 ExclusiveScan 1023
-            1025:     65(ptr) AccessChain 20 64
-                              Store 1025 1024
-            1026:     71(ptr) AccessChain 20 70
-            1027:   15(ivec2) Load 1026
-            1028:     14(int) CompositeExtract 1027 0
-            1029:     14(int) GroupIAddNonUniformAMD 25 ExclusiveScan 1028
-            1030:     14(int) CompositeExtract 1027 1
-            1031:     14(int) GroupIAddNonUniformAMD 25 ExclusiveScan 1030
-            1032:   15(ivec2) CompositeConstruct 1029 1031
-            1033:     71(ptr) AccessChain 20 70
-                              Store 1033 1032
-            1034:     81(ptr) AccessChain 20 80
-            1035:   17(fvec3) Load 1034
-            1036:   16(float) CompositeExtract 1035 0
-            1037:   16(float) GroupFAddNonUniformAMD 25 ExclusiveScan 1036
-            1038:   16(float) CompositeExtract 1035 1
-            1039:   16(float) GroupFAddNonUniformAMD 25 ExclusiveScan 1038
-            1040:   16(float) CompositeExtract 1035 2
-            1041:   16(float) GroupFAddNonUniformAMD 25 ExclusiveScan 1040
-            1042:   17(fvec3) CompositeConstruct 1037 1039 1041
-            1043:     81(ptr) AccessChain 20 80
-                              Store 1043 1042
+              26:     25(ptr) AccessChain 23 24
+              27:      6(int) Load 26
+              29:      6(int) GroupSMin 28 Reduce 27
+              30:     25(ptr) AccessChain 23 24
+                              Store 30 29
+              33:     32(ptr) AccessChain 23 31
+              34:    8(ivec2) Load 33
+              35:      7(int) CompositeExtract 34 0
+              36:      7(int) GroupUMin 28 Reduce 35
+              37:      7(int) CompositeExtract 34 1
+              38:      7(int) GroupUMin 28 Reduce 37
+              39:    8(ivec2) CompositeConstruct 36 38
+              40:     32(ptr) AccessChain 23 31
+                              Store 40 39
+              43:     42(ptr) AccessChain 23 41
+              44:   10(fvec3) Load 43
+              45:    9(float) CompositeExtract 44 0
+              46:    9(float) GroupFMin 28 Reduce 45
+              47:    9(float) CompositeExtract 44 1
+              48:    9(float) GroupFMin 28 Reduce 47
+              49:    9(float) CompositeExtract 44 2
+              50:    9(float) GroupFMin 28 Reduce 49
+              51:   10(fvec3) CompositeConstruct 46 48 50
+              52:     42(ptr) AccessChain 23 41
+                              Store 52 51
+              55:     54(ptr) AccessChain 23 53
+              56:   12(fvec4) Load 55
+              57:   11(float) CompositeExtract 56 0
+              58:   11(float) GroupFMin 28 Reduce 57
+              59:   11(float) CompositeExtract 56 1
+              60:   11(float) GroupFMin 28 Reduce 59
+              61:   11(float) CompositeExtract 56 2
+              62:   11(float) GroupFMin 28 Reduce 61
+              63:   11(float) CompositeExtract 56 3
+              64:   11(float) GroupFMin 28 Reduce 63
+              65:   12(fvec4) CompositeConstruct 58 60 62 64
+              66:     54(ptr) AccessChain 23 53
+                              Store 66 65
+              69:     68(ptr) AccessChain 23 67
+              70:     13(int) Load 69
+              71:     13(int) GroupSMin 28 Reduce 70
+              72:     68(ptr) AccessChain 23 67
+                              Store 72 71
+              75:     74(ptr) AccessChain 23 73
+              76:   15(ivec2) Load 75
+              77:     14(int) CompositeExtract 76 0
+              78:     14(int) GroupUMin 28 Reduce 77
+              79:     14(int) CompositeExtract 76 1
+              80:     14(int) GroupUMin 28 Reduce 79
+              81:   15(ivec2) CompositeConstruct 78 80
+              82:     74(ptr) AccessChain 23 73
+                              Store 82 81
+              85:     84(ptr) AccessChain 23 83
+              86:   17(fvec3) Load 85
+              87:   16(float) CompositeExtract 86 0
+              88:   16(float) GroupFMin 28 Reduce 87
+              89:   16(float) CompositeExtract 86 1
+              90:   16(float) GroupFMin 28 Reduce 89
+              91:   16(float) CompositeExtract 86 2
+              92:   16(float) GroupFMin 28 Reduce 91
+              93:   17(fvec3) CompositeConstruct 88 90 92
+              94:     84(ptr) AccessChain 23 83
+                              Store 94 93
+              97:     96(ptr) AccessChain 23 95
+              98:   19(ivec4) Load 97
+              99:     18(int) CompositeExtract 98 0
+             100:     18(int) GroupSMin 28 Reduce 99
+             101:     18(int) CompositeExtract 98 1
+             102:     18(int) GroupSMin 28 Reduce 101
+             103:     18(int) CompositeExtract 98 2
+             104:     18(int) GroupSMin 28 Reduce 103
+             105:     18(int) CompositeExtract 98 3
+             106:     18(int) GroupSMin 28 Reduce 105
+             107:   19(ivec4) CompositeConstruct 100 102 104 106
+             108:     96(ptr) AccessChain 23 95
+                              Store 108 107
+             111:    110(ptr) AccessChain 23 109
+             112:     20(int) Load 111
+             113:     20(int) GroupUMin 28 Reduce 112
+             114:    110(ptr) AccessChain 23 109
+                              Store 114 113
+             115:     25(ptr) AccessChain 23 24
+             116:      6(int) Load 115
+             117:      6(int) GroupSMax 28 Reduce 116
+             118:     25(ptr) AccessChain 23 24
+                              Store 118 117
+             119:     32(ptr) AccessChain 23 31
+             120:    8(ivec2) Load 119
+             121:      7(int) CompositeExtract 120 0
+             122:      7(int) GroupUMax 28 Reduce 121
+             123:      7(int) CompositeExtract 120 1
+             124:      7(int) GroupUMax 28 Reduce 123
+             125:    8(ivec2) CompositeConstruct 122 124
+             126:     32(ptr) AccessChain 23 31
+                              Store 126 125
+             127:     42(ptr) AccessChain 23 41
+             128:   10(fvec3) Load 127
+             129:    9(float) CompositeExtract 128 0
+             130:    9(float) GroupFMax 28 Reduce 129
+             131:    9(float) CompositeExtract 128 1
+             132:    9(float) GroupFMax 28 Reduce 131
+             133:    9(float) CompositeExtract 128 2
+             134:    9(float) GroupFMax 28 Reduce 133
+             135:   10(fvec3) CompositeConstruct 130 132 134
+             136:     42(ptr) AccessChain 23 41
+                              Store 136 135
+             137:     54(ptr) AccessChain 23 53
+             138:   12(fvec4) Load 137
+             139:   11(float) CompositeExtract 138 0
+             140:   11(float) GroupFMax 28 Reduce 139
+             141:   11(float) CompositeExtract 138 1
+             142:   11(float) GroupFMax 28 Reduce 141
+             143:   11(float) CompositeExtract 138 2
+             144:   11(float) GroupFMax 28 Reduce 143
+             145:   11(float) CompositeExtract 138 3
+             146:   11(float) GroupFMax 28 Reduce 145
+             147:   12(fvec4) CompositeConstruct 140 142 144 146
+             148:     54(ptr) AccessChain 23 53
+                              Store 148 147
+             149:     68(ptr) AccessChain 23 67
+             150:     13(int) Load 149
+             151:     13(int) GroupSMax 28 Reduce 150
+             152:     68(ptr) AccessChain 23 67
+                              Store 152 151
+             153:     74(ptr) AccessChain 23 73
+             154:   15(ivec2) Load 153
+             155:     14(int) CompositeExtract 154 0
+             156:     14(int) GroupUMax 28 Reduce 155
+             157:     14(int) CompositeExtract 154 1
+             158:     14(int) GroupUMax 28 Reduce 157
+             159:   15(ivec2) CompositeConstruct 156 158
+             160:     74(ptr) AccessChain 23 73
+                              Store 160 159
+             161:     84(ptr) AccessChain 23 83
+             162:   17(fvec3) Load 161
+             163:   16(float) CompositeExtract 162 0
+             164:   16(float) GroupFMax 28 Reduce 163
+             165:   16(float) CompositeExtract 162 1
+             166:   16(float) GroupFMax 28 Reduce 165
+             167:   16(float) CompositeExtract 162 2
+             168:   16(float) GroupFMax 28 Reduce 167
+             169:   17(fvec3) CompositeConstruct 164 166 168
+             170:     84(ptr) AccessChain 23 83
+                              Store 170 169
+             171:     96(ptr) AccessChain 23 95
+             172:   19(ivec4) Load 171
+             173:     18(int) CompositeExtract 172 0
+             174:     18(int) GroupSMax 28 Reduce 173
+             175:     18(int) CompositeExtract 172 1
+             176:     18(int) GroupSMax 28 Reduce 175
+             177:     18(int) CompositeExtract 172 2
+             178:     18(int) GroupSMax 28 Reduce 177
+             179:     18(int) CompositeExtract 172 3
+             180:     18(int) GroupSMax 28 Reduce 179
+             181:   19(ivec4) CompositeConstruct 174 176 178 180
+             182:     96(ptr) AccessChain 23 95
+                              Store 182 181
+             183:    110(ptr) AccessChain 23 109
+             184:     20(int) Load 183
+             185:     20(int) GroupUMax 28 Reduce 184
+             186:    110(ptr) AccessChain 23 109
+                              Store 186 185
+             187:     25(ptr) AccessChain 23 24
+             188:      6(int) Load 187
+             189:      6(int) GroupIAdd 28 Reduce 188
+             190:     25(ptr) AccessChain 23 24
+                              Store 190 189
+             191:     32(ptr) AccessChain 23 31
+             192:    8(ivec2) Load 191
+             193:      7(int) CompositeExtract 192 0
+             194:      7(int) GroupIAdd 28 Reduce 193
+             195:      7(int) CompositeExtract 192 1
+             196:      7(int) GroupIAdd 28 Reduce 195
+             197:    8(ivec2) CompositeConstruct 194 196
+             198:     32(ptr) AccessChain 23 31
+                              Store 198 197
+             199:     42(ptr) AccessChain 23 41
+             200:   10(fvec3) Load 199
+             201:    9(float) CompositeExtract 200 0
+             202:    9(float) GroupFAdd 28 Reduce 201
+             203:    9(float) CompositeExtract 200 1
+             204:    9(float) GroupFAdd 28 Reduce 203
+             205:    9(float) CompositeExtract 200 2
+             206:    9(float) GroupFAdd 28 Reduce 205
+             207:   10(fvec3) CompositeConstruct 202 204 206
+             208:     42(ptr) AccessChain 23 41
+                              Store 208 207
+             209:     54(ptr) AccessChain 23 53
+             210:   12(fvec4) Load 209
+             211:   11(float) CompositeExtract 210 0
+             212:   11(float) GroupFAdd 28 Reduce 211
+             213:   11(float) CompositeExtract 210 1
+             214:   11(float) GroupFAdd 28 Reduce 213
+             215:   11(float) CompositeExtract 210 2
+             216:   11(float) GroupFAdd 28 Reduce 215
+             217:   11(float) CompositeExtract 210 3
+             218:   11(float) GroupFAdd 28 Reduce 217
+             219:   12(fvec4) CompositeConstruct 212 214 216 218
+             220:     54(ptr) AccessChain 23 53
+                              Store 220 219
+             221:     68(ptr) AccessChain 23 67
+             222:     13(int) Load 221
+             223:     13(int) GroupIAdd 28 Reduce 222
+             224:     68(ptr) AccessChain 23 67
+                              Store 224 223
+             225:     74(ptr) AccessChain 23 73
+             226:   15(ivec2) Load 225
+             227:     14(int) CompositeExtract 226 0
+             228:     14(int) GroupIAdd 28 Reduce 227
+             229:     14(int) CompositeExtract 226 1
+             230:     14(int) GroupIAdd 28 Reduce 229
+             231:   15(ivec2) CompositeConstruct 228 230
+             232:     74(ptr) AccessChain 23 73
+                              Store 232 231
+             233:     84(ptr) AccessChain 23 83
+             234:   17(fvec3) Load 233
+             235:   16(float) CompositeExtract 234 0
+             236:   16(float) GroupFAdd 28 Reduce 235
+             237:   16(float) CompositeExtract 234 1
+             238:   16(float) GroupFAdd 28 Reduce 237
+             239:   16(float) CompositeExtract 234 2
+             240:   16(float) GroupFAdd 28 Reduce 239
+             241:   17(fvec3) CompositeConstruct 236 238 240
+             242:     84(ptr) AccessChain 23 83
+                              Store 242 241
+             243:     96(ptr) AccessChain 23 95
+             244:   19(ivec4) Load 243
+             245:     18(int) CompositeExtract 244 0
+             246:     18(int) GroupIAdd 28 Reduce 245
+             247:     18(int) CompositeExtract 244 1
+             248:     18(int) GroupIAdd 28 Reduce 247
+             249:     18(int) CompositeExtract 244 2
+             250:     18(int) GroupIAdd 28 Reduce 249
+             251:     18(int) CompositeExtract 244 3
+             252:     18(int) GroupIAdd 28 Reduce 251
+             253:   19(ivec4) CompositeConstruct 246 248 250 252
+             254:     96(ptr) AccessChain 23 95
+                              Store 254 253
+             255:    110(ptr) AccessChain 23 109
+             256:     20(int) Load 255
+             257:     20(int) GroupIAdd 28 Reduce 256
+             258:    110(ptr) AccessChain 23 109
+                              Store 258 257
+             259:     25(ptr) AccessChain 23 24
+             260:      6(int) Load 259
+             261:      6(int) GroupSMinNonUniformAMD 28 Reduce 260
+             262:     25(ptr) AccessChain 23 24
+                              Store 262 261
+             263:     32(ptr) AccessChain 23 31
+             264:    8(ivec2) Load 263
+             265:      7(int) CompositeExtract 264 0
+             266:      7(int) GroupUMinNonUniformAMD 28 Reduce 265
+             267:      7(int) CompositeExtract 264 1
+             268:      7(int) GroupUMinNonUniformAMD 28 Reduce 267
+             269:    8(ivec2) CompositeConstruct 266 268
+             270:     32(ptr) AccessChain 23 31
+                              Store 270 269
+             271:     42(ptr) AccessChain 23 41
+             272:   10(fvec3) Load 271
+             273:    9(float) CompositeExtract 272 0
+             274:    9(float) GroupFMinNonUniformAMD 28 Reduce 273
+             275:    9(float) CompositeExtract 272 1
+             276:    9(float) GroupFMinNonUniformAMD 28 Reduce 275
+             277:    9(float) CompositeExtract 272 2
+             278:    9(float) GroupFMinNonUniformAMD 28 Reduce 277
+             279:   10(fvec3) CompositeConstruct 274 276 278
+             280:     42(ptr) AccessChain 23 41
+                              Store 280 279
+             281:     54(ptr) AccessChain 23 53
+             282:   12(fvec4) Load 281
+             283:   11(float) CompositeExtract 282 0
+             284:   11(float) GroupFMinNonUniformAMD 28 Reduce 283
+             285:   11(float) CompositeExtract 282 1
+             286:   11(float) GroupFMinNonUniformAMD 28 Reduce 285
+             287:   11(float) CompositeExtract 282 2
+             288:   11(float) GroupFMinNonUniformAMD 28 Reduce 287
+             289:   11(float) CompositeExtract 282 3
+             290:   11(float) GroupFMinNonUniformAMD 28 Reduce 289
+             291:   12(fvec4) CompositeConstruct 284 286 288 290
+             292:     54(ptr) AccessChain 23 53
+                              Store 292 291
+             293:     68(ptr) AccessChain 23 67
+             294:     13(int) Load 293
+             295:     13(int) GroupSMinNonUniformAMD 28 Reduce 294
+             296:     68(ptr) AccessChain 23 67
+                              Store 296 295
+             297:     74(ptr) AccessChain 23 73
+             298:   15(ivec2) Load 297
+             299:     14(int) CompositeExtract 298 0
+             300:     14(int) GroupUMinNonUniformAMD 28 Reduce 299
+             301:     14(int) CompositeExtract 298 1
+             302:     14(int) GroupUMinNonUniformAMD 28 Reduce 301
+             303:   15(ivec2) CompositeConstruct 300 302
+             304:     74(ptr) AccessChain 23 73
+                              Store 304 303
+             305:     84(ptr) AccessChain 23 83
+             306:   17(fvec3) Load 305
+             307:   16(float) CompositeExtract 306 0
+             308:   16(float) GroupFMinNonUniformAMD 28 Reduce 307
+             309:   16(float) CompositeExtract 306 1
+             310:   16(float) GroupFMinNonUniformAMD 28 Reduce 309
+             311:   16(float) CompositeExtract 306 2
+             312:   16(float) GroupFMinNonUniformAMD 28 Reduce 311
+             313:   17(fvec3) CompositeConstruct 308 310 312
+             314:     84(ptr) AccessChain 23 83
+                              Store 314 313
+             315:     96(ptr) AccessChain 23 95
+             316:   19(ivec4) Load 315
+             317:     18(int) CompositeExtract 316 0
+             318:     18(int) GroupSMinNonUniformAMD 28 Reduce 317
+             319:     18(int) CompositeExtract 316 1
+             320:     18(int) GroupSMinNonUniformAMD 28 Reduce 319
+             321:     18(int) CompositeExtract 316 2
+             322:     18(int) GroupSMinNonUniformAMD 28 Reduce 321
+             323:     18(int) CompositeExtract 316 3
+             324:     18(int) GroupSMinNonUniformAMD 28 Reduce 323
+             325:   19(ivec4) CompositeConstruct 318 320 322 324
+             326:     96(ptr) AccessChain 23 95
+                              Store 326 325
+             327:    110(ptr) AccessChain 23 109
+             328:     20(int) Load 327
+             329:     20(int) GroupUMinNonUniformAMD 28 Reduce 328
+             330:    110(ptr) AccessChain 23 109
+                              Store 330 329
+             331:     25(ptr) AccessChain 23 24
+             332:      6(int) Load 331
+             333:      6(int) GroupSMaxNonUniformAMD 28 Reduce 332
+             334:     25(ptr) AccessChain 23 24
+                              Store 334 333
+             335:     32(ptr) AccessChain 23 31
+             336:    8(ivec2) Load 335
+             337:      7(int) CompositeExtract 336 0
+             338:      7(int) GroupUMaxNonUniformAMD 28 Reduce 337
+             339:      7(int) CompositeExtract 336 1
+             340:      7(int) GroupUMaxNonUniformAMD 28 Reduce 339
+             341:    8(ivec2) CompositeConstruct 338 340
+             342:     32(ptr) AccessChain 23 31
+                              Store 342 341
+             343:     42(ptr) AccessChain 23 41
+             344:   10(fvec3) Load 343
+             345:    9(float) CompositeExtract 344 0
+             346:    9(float) GroupFMaxNonUniformAMD 28 Reduce 345
+             347:    9(float) CompositeExtract 344 1
+             348:    9(float) GroupFMaxNonUniformAMD 28 Reduce 347
+             349:    9(float) CompositeExtract 344 2
+             350:    9(float) GroupFMaxNonUniformAMD 28 Reduce 349
+             351:   10(fvec3) CompositeConstruct 346 348 350
+             352:     42(ptr) AccessChain 23 41
+                              Store 352 351
+             353:     54(ptr) AccessChain 23 53
+             354:   12(fvec4) Load 353
+             355:   11(float) CompositeExtract 354 0
+             356:   11(float) GroupFMaxNonUniformAMD 28 Reduce 355
+             357:   11(float) CompositeExtract 354 1
+             358:   11(float) GroupFMaxNonUniformAMD 28 Reduce 357
+             359:   11(float) CompositeExtract 354 2
+             360:   11(float) GroupFMaxNonUniformAMD 28 Reduce 359
+             361:   11(float) CompositeExtract 354 3
+             362:   11(float) GroupFMaxNonUniformAMD 28 Reduce 361
+             363:   12(fvec4) CompositeConstruct 356 358 360 362
+             364:     54(ptr) AccessChain 23 53
+                              Store 364 363
+             365:     68(ptr) AccessChain 23 67
+             366:     13(int) Load 365
+             367:     13(int) GroupSMaxNonUniformAMD 28 Reduce 366
+             368:     68(ptr) AccessChain 23 67
+                              Store 368 367
+             369:     74(ptr) AccessChain 23 73
+             370:   15(ivec2) Load 369
+             371:     14(int) CompositeExtract 370 0
+             372:     14(int) GroupUMaxNonUniformAMD 28 Reduce 371
+             373:     14(int) CompositeExtract 370 1
+             374:     14(int) GroupUMaxNonUniformAMD 28 Reduce 373
+             375:   15(ivec2) CompositeConstruct 372 374
+             376:     74(ptr) AccessChain 23 73
+                              Store 376 375
+             377:     84(ptr) AccessChain 23 83
+             378:   17(fvec3) Load 377
+             379:   16(float) CompositeExtract 378 0
+             380:   16(float) GroupFMaxNonUniformAMD 28 Reduce 379
+             381:   16(float) CompositeExtract 378 1
+             382:   16(float) GroupFMaxNonUniformAMD 28 Reduce 381
+             383:   16(float) CompositeExtract 378 2
+             384:   16(float) GroupFMaxNonUniformAMD 28 Reduce 383
+             385:   17(fvec3) CompositeConstruct 380 382 384
+             386:     84(ptr) AccessChain 23 83
+                              Store 386 385
+             387:     96(ptr) AccessChain 23 95
+             388:   19(ivec4) Load 387
+             389:     18(int) CompositeExtract 388 0
+             390:     18(int) GroupSMaxNonUniformAMD 28 Reduce 389
+             391:     18(int) CompositeExtract 388 1
+             392:     18(int) GroupSMaxNonUniformAMD 28 Reduce 391
+             393:     18(int) CompositeExtract 388 2
+             394:     18(int) GroupSMaxNonUniformAMD 28 Reduce 393
+             395:     18(int) CompositeExtract 388 3
+             396:     18(int) GroupSMaxNonUniformAMD 28 Reduce 395
+             397:   19(ivec4) CompositeConstruct 390 392 394 396
+             398:     96(ptr) AccessChain 23 95
+                              Store 398 397
+             399:    110(ptr) AccessChain 23 109
+             400:     20(int) Load 399
+             401:     20(int) GroupUMaxNonUniformAMD 28 Reduce 400
+             402:    110(ptr) AccessChain 23 109
+                              Store 402 401
+             403:     25(ptr) AccessChain 23 24
+             404:      6(int) Load 403
+             405:      6(int) GroupIAddNonUniformAMD 28 Reduce 404
+             406:     25(ptr) AccessChain 23 24
+                              Store 406 405
+             407:     32(ptr) AccessChain 23 31
+             408:    8(ivec2) Load 407
+             409:      7(int) CompositeExtract 408 0
+             410:      7(int) GroupIAddNonUniformAMD 28 Reduce 409
+             411:      7(int) CompositeExtract 408 1
+             412:      7(int) GroupIAddNonUniformAMD 28 Reduce 411
+             413:    8(ivec2) CompositeConstruct 410 412
+             414:     32(ptr) AccessChain 23 31
+                              Store 414 413
+             415:     42(ptr) AccessChain 23 41
+             416:   10(fvec3) Load 415
+             417:    9(float) CompositeExtract 416 0
+             418:    9(float) GroupFAddNonUniformAMD 28 Reduce 417
+             419:    9(float) CompositeExtract 416 1
+             420:    9(float) GroupFAddNonUniformAMD 28 Reduce 419
+             421:    9(float) CompositeExtract 416 2
+             422:    9(float) GroupFAddNonUniformAMD 28 Reduce 421
+             423:   10(fvec3) CompositeConstruct 418 420 422
+             424:     42(ptr) AccessChain 23 41
+                              Store 424 423
+             425:     54(ptr) AccessChain 23 53
+             426:   12(fvec4) Load 425
+             427:   11(float) CompositeExtract 426 0
+             428:   11(float) GroupFAddNonUniformAMD 28 Reduce 427
+             429:   11(float) CompositeExtract 426 1
+             430:   11(float) GroupFAddNonUniformAMD 28 Reduce 429
+             431:   11(float) CompositeExtract 426 2
+             432:   11(float) GroupFAddNonUniformAMD 28 Reduce 431
+             433:   11(float) CompositeExtract 426 3
+             434:   11(float) GroupFAddNonUniformAMD 28 Reduce 433
+             435:   12(fvec4) CompositeConstruct 428 430 432 434
+             436:     54(ptr) AccessChain 23 53
+                              Store 436 435
+             437:     68(ptr) AccessChain 23 67
+             438:     13(int) Load 437
+             439:     13(int) GroupIAddNonUniformAMD 28 Reduce 438
+             440:     68(ptr) AccessChain 23 67
+                              Store 440 439
+             441:     74(ptr) AccessChain 23 73
+             442:   15(ivec2) Load 441
+             443:     14(int) CompositeExtract 442 0
+             444:     14(int) GroupIAddNonUniformAMD 28 Reduce 443
+             445:     14(int) CompositeExtract 442 1
+             446:     14(int) GroupIAddNonUniformAMD 28 Reduce 445
+             447:   15(ivec2) CompositeConstruct 444 446
+             448:     74(ptr) AccessChain 23 73
+                              Store 448 447
+             449:     84(ptr) AccessChain 23 83
+             450:   17(fvec3) Load 449
+             451:   16(float) CompositeExtract 450 0
+             452:   16(float) GroupFAddNonUniformAMD 28 Reduce 451
+             453:   16(float) CompositeExtract 450 1
+             454:   16(float) GroupFAddNonUniformAMD 28 Reduce 453
+             455:   16(float) CompositeExtract 450 2
+             456:   16(float) GroupFAddNonUniformAMD 28 Reduce 455
+             457:   17(fvec3) CompositeConstruct 452 454 456
+             458:     84(ptr) AccessChain 23 83
+                              Store 458 457
+             459:     96(ptr) AccessChain 23 95
+             460:   19(ivec4) Load 459
+             461:     18(int) CompositeExtract 460 0
+             462:     18(int) GroupIAddNonUniformAMD 28 Reduce 461
+             463:     18(int) CompositeExtract 460 1
+             464:     18(int) GroupIAddNonUniformAMD 28 Reduce 463
+             465:     18(int) CompositeExtract 460 2
+             466:     18(int) GroupIAddNonUniformAMD 28 Reduce 465
+             467:     18(int) CompositeExtract 460 3
+             468:     18(int) GroupIAddNonUniformAMD 28 Reduce 467
+             469:   19(ivec4) CompositeConstruct 462 464 466 468
+             470:     96(ptr) AccessChain 23 95
+                              Store 470 469
+             471:    110(ptr) AccessChain 23 109
+             472:     20(int) Load 471
+             473:     20(int) GroupIAddNonUniformAMD 28 Reduce 472
+             474:    110(ptr) AccessChain 23 109
+                              Store 474 473
+             475:     25(ptr) AccessChain 23 24
+             476:      6(int) Load 475
+             477:      6(int) GroupSMin 28 InclusiveScan 476
+             478:     25(ptr) AccessChain 23 24
+                              Store 478 477
+             479:     32(ptr) AccessChain 23 31
+             480:    8(ivec2) Load 479
+             481:      7(int) CompositeExtract 480 0
+             482:      7(int) GroupUMin 28 InclusiveScan 481
+             483:      7(int) CompositeExtract 480 1
+             484:      7(int) GroupUMin 28 InclusiveScan 483
+             485:    8(ivec2) CompositeConstruct 482 484
+             486:     32(ptr) AccessChain 23 31
+                              Store 486 485
+             487:     42(ptr) AccessChain 23 41
+             488:   10(fvec3) Load 487
+             489:    9(float) CompositeExtract 488 0
+             490:    9(float) GroupFMin 28 InclusiveScan 489
+             491:    9(float) CompositeExtract 488 1
+             492:    9(float) GroupFMin 28 InclusiveScan 491
+             493:    9(float) CompositeExtract 488 2
+             494:    9(float) GroupFMin 28 InclusiveScan 493
+             495:   10(fvec3) CompositeConstruct 490 492 494
+             496:     42(ptr) AccessChain 23 41
+                              Store 496 495
+             497:     54(ptr) AccessChain 23 53
+             498:   12(fvec4) Load 497
+             499:   11(float) CompositeExtract 498 0
+             500:   11(float) GroupFMin 28 InclusiveScan 499
+             501:   11(float) CompositeExtract 498 1
+             502:   11(float) GroupFMin 28 InclusiveScan 501
+             503:   11(float) CompositeExtract 498 2
+             504:   11(float) GroupFMin 28 InclusiveScan 503
+             505:   11(float) CompositeExtract 498 3
+             506:   11(float) GroupFMin 28 InclusiveScan 505
+             507:   12(fvec4) CompositeConstruct 500 502 504 506
+             508:     54(ptr) AccessChain 23 53
+                              Store 508 507
+             509:     68(ptr) AccessChain 23 67
+             510:     13(int) Load 509
+             511:     13(int) GroupSMin 28 InclusiveScan 510
+             512:     68(ptr) AccessChain 23 67
+                              Store 512 511
+             513:     74(ptr) AccessChain 23 73
+             514:   15(ivec2) Load 513
+             515:     14(int) CompositeExtract 514 0
+             516:     14(int) GroupUMin 28 InclusiveScan 515
+             517:     14(int) CompositeExtract 514 1
+             518:     14(int) GroupUMin 28 InclusiveScan 517
+             519:   15(ivec2) CompositeConstruct 516 518
+             520:     74(ptr) AccessChain 23 73
+                              Store 520 519
+             521:     84(ptr) AccessChain 23 83
+             522:   17(fvec3) Load 521
+             523:   16(float) CompositeExtract 522 0
+             524:   16(float) GroupFMin 28 InclusiveScan 523
+             525:   16(float) CompositeExtract 522 1
+             526:   16(float) GroupFMin 28 InclusiveScan 525
+             527:   16(float) CompositeExtract 522 2
+             528:   16(float) GroupFMin 28 InclusiveScan 527
+             529:   17(fvec3) CompositeConstruct 524 526 528
+             530:     84(ptr) AccessChain 23 83
+                              Store 530 529
+             531:     96(ptr) AccessChain 23 95
+             532:   19(ivec4) Load 531
+             533:     18(int) CompositeExtract 532 0
+             534:     18(int) GroupSMin 28 InclusiveScan 533
+             535:     18(int) CompositeExtract 532 1
+             536:     18(int) GroupSMin 28 InclusiveScan 535
+             537:     18(int) CompositeExtract 532 2
+             538:     18(int) GroupSMin 28 InclusiveScan 537
+             539:     18(int) CompositeExtract 532 3
+             540:     18(int) GroupSMin 28 InclusiveScan 539
+             541:   19(ivec4) CompositeConstruct 534 536 538 540
+             542:     96(ptr) AccessChain 23 95
+                              Store 542 541
+             543:    110(ptr) AccessChain 23 109
+             544:     20(int) Load 543
+             545:     20(int) GroupUMin 28 InclusiveScan 544
+             546:    110(ptr) AccessChain 23 109
+                              Store 546 545
+             547:     25(ptr) AccessChain 23 24
+             548:      6(int) Load 547
+             549:      6(int) GroupSMax 28 InclusiveScan 548
+             550:     25(ptr) AccessChain 23 24
+                              Store 550 549
+             551:     32(ptr) AccessChain 23 31
+             552:    8(ivec2) Load 551
+             553:      7(int) CompositeExtract 552 0
+             554:      7(int) GroupUMax 28 InclusiveScan 553
+             555:      7(int) CompositeExtract 552 1
+             556:      7(int) GroupUMax 28 InclusiveScan 555
+             557:    8(ivec2) CompositeConstruct 554 556
+             558:     32(ptr) AccessChain 23 31
+                              Store 558 557
+             559:     42(ptr) AccessChain 23 41
+             560:   10(fvec3) Load 559
+             561:    9(float) CompositeExtract 560 0
+             562:    9(float) GroupFMax 28 InclusiveScan 561
+             563:    9(float) CompositeExtract 560 1
+             564:    9(float) GroupFMax 28 InclusiveScan 563
+             565:    9(float) CompositeExtract 560 2
+             566:    9(float) GroupFMax 28 InclusiveScan 565
+             567:   10(fvec3) CompositeConstruct 562 564 566
+             568:     42(ptr) AccessChain 23 41
+                              Store 568 567
+             569:     54(ptr) AccessChain 23 53
+             570:   12(fvec4) Load 569
+             571:   11(float) CompositeExtract 570 0
+             572:   11(float) GroupFMax 28 InclusiveScan 571
+             573:   11(float) CompositeExtract 570 1
+             574:   11(float) GroupFMax 28 InclusiveScan 573
+             575:   11(float) CompositeExtract 570 2
+             576:   11(float) GroupFMax 28 InclusiveScan 575
+             577:   11(float) CompositeExtract 570 3
+             578:   11(float) GroupFMax 28 InclusiveScan 577
+             579:   12(fvec4) CompositeConstruct 572 574 576 578
+             580:     54(ptr) AccessChain 23 53
+                              Store 580 579
+             581:     68(ptr) AccessChain 23 67
+             582:     13(int) Load 581
+             583:     13(int) GroupSMax 28 InclusiveScan 582
+             584:     68(ptr) AccessChain 23 67
+                              Store 584 583
+             585:     74(ptr) AccessChain 23 73
+             586:   15(ivec2) Load 585
+             587:     14(int) CompositeExtract 586 0
+             588:     14(int) GroupUMax 28 InclusiveScan 587
+             589:     14(int) CompositeExtract 586 1
+             590:     14(int) GroupUMax 28 InclusiveScan 589
+             591:   15(ivec2) CompositeConstruct 588 590
+             592:     74(ptr) AccessChain 23 73
+                              Store 592 591
+             593:     84(ptr) AccessChain 23 83
+             594:   17(fvec3) Load 593
+             595:   16(float) CompositeExtract 594 0
+             596:   16(float) GroupFMax 28 InclusiveScan 595
+             597:   16(float) CompositeExtract 594 1
+             598:   16(float) GroupFMax 28 InclusiveScan 597
+             599:   16(float) CompositeExtract 594 2
+             600:   16(float) GroupFMax 28 InclusiveScan 599
+             601:   17(fvec3) CompositeConstruct 596 598 600
+             602:     84(ptr) AccessChain 23 83
+                              Store 602 601
+             603:     96(ptr) AccessChain 23 95
+             604:   19(ivec4) Load 603
+             605:     18(int) CompositeExtract 604 0
+             606:     18(int) GroupSMax 28 InclusiveScan 605
+             607:     18(int) CompositeExtract 604 1
+             608:     18(int) GroupSMax 28 InclusiveScan 607
+             609:     18(int) CompositeExtract 604 2
+             610:     18(int) GroupSMax 28 InclusiveScan 609
+             611:     18(int) CompositeExtract 604 3
+             612:     18(int) GroupSMax 28 InclusiveScan 611
+             613:   19(ivec4) CompositeConstruct 606 608 610 612
+             614:     96(ptr) AccessChain 23 95
+                              Store 614 613
+             615:    110(ptr) AccessChain 23 109
+             616:     20(int) Load 615
+             617:     20(int) GroupUMax 28 InclusiveScan 616
+             618:    110(ptr) AccessChain 23 109
+                              Store 618 617
+             619:     25(ptr) AccessChain 23 24
+             620:      6(int) Load 619
+             621:      6(int) GroupIAdd 28 InclusiveScan 620
+             622:     25(ptr) AccessChain 23 24
+                              Store 622 621
+             623:     32(ptr) AccessChain 23 31
+             624:    8(ivec2) Load 623
+             625:      7(int) CompositeExtract 624 0
+             626:      7(int) GroupIAdd 28 InclusiveScan 625
+             627:      7(int) CompositeExtract 624 1
+             628:      7(int) GroupIAdd 28 InclusiveScan 627
+             629:    8(ivec2) CompositeConstruct 626 628
+             630:     32(ptr) AccessChain 23 31
+                              Store 630 629
+             631:     42(ptr) AccessChain 23 41
+             632:   10(fvec3) Load 631
+             633:    9(float) CompositeExtract 632 0
+             634:    9(float) GroupFAdd 28 InclusiveScan 633
+             635:    9(float) CompositeExtract 632 1
+             636:    9(float) GroupFAdd 28 InclusiveScan 635
+             637:    9(float) CompositeExtract 632 2
+             638:    9(float) GroupFAdd 28 InclusiveScan 637
+             639:   10(fvec3) CompositeConstruct 634 636 638
+             640:     42(ptr) AccessChain 23 41
+                              Store 640 639
+             641:     54(ptr) AccessChain 23 53
+             642:   12(fvec4) Load 641
+             643:   11(float) CompositeExtract 642 0
+             644:   11(float) GroupFAdd 28 InclusiveScan 643
+             645:   11(float) CompositeExtract 642 1
+             646:   11(float) GroupFAdd 28 InclusiveScan 645
+             647:   11(float) CompositeExtract 642 2
+             648:   11(float) GroupFAdd 28 InclusiveScan 647
+             649:   11(float) CompositeExtract 642 3
+             650:   11(float) GroupFAdd 28 InclusiveScan 649
+             651:   12(fvec4) CompositeConstruct 644 646 648 650
+             652:     54(ptr) AccessChain 23 53
+                              Store 652 651
+             653:     68(ptr) AccessChain 23 67
+             654:     13(int) Load 653
+             655:     13(int) GroupIAdd 28 InclusiveScan 654
+             656:     68(ptr) AccessChain 23 67
+                              Store 656 655
+             657:     74(ptr) AccessChain 23 73
+             658:   15(ivec2) Load 657
+             659:     14(int) CompositeExtract 658 0
+             660:     14(int) GroupIAdd 28 InclusiveScan 659
+             661:     14(int) CompositeExtract 658 1
+             662:     14(int) GroupIAdd 28 InclusiveScan 661
+             663:   15(ivec2) CompositeConstruct 660 662
+             664:     74(ptr) AccessChain 23 73
+                              Store 664 663
+             665:     84(ptr) AccessChain 23 83
+             666:   17(fvec3) Load 665
+             667:   16(float) CompositeExtract 666 0
+             668:   16(float) GroupFAdd 28 InclusiveScan 667
+             669:   16(float) CompositeExtract 666 1
+             670:   16(float) GroupFAdd 28 InclusiveScan 669
+             671:   16(float) CompositeExtract 666 2
+             672:   16(float) GroupFAdd 28 InclusiveScan 671
+             673:   17(fvec3) CompositeConstruct 668 670 672
+             674:     84(ptr) AccessChain 23 83
+                              Store 674 673
+             675:     96(ptr) AccessChain 23 95
+             676:   19(ivec4) Load 675
+             677:     18(int) CompositeExtract 676 0
+             678:     18(int) GroupIAdd 28 InclusiveScan 677
+             679:     18(int) CompositeExtract 676 1
+             680:     18(int) GroupIAdd 28 InclusiveScan 679
+             681:     18(int) CompositeExtract 676 2
+             682:     18(int) GroupIAdd 28 InclusiveScan 681
+             683:     18(int) CompositeExtract 676 3
+             684:     18(int) GroupIAdd 28 InclusiveScan 683
+             685:   19(ivec4) CompositeConstruct 678 680 682 684
+             686:     96(ptr) AccessChain 23 95
+                              Store 686 685
+             687:    110(ptr) AccessChain 23 109
+             688:     20(int) Load 687
+             689:     20(int) GroupIAdd 28 InclusiveScan 688
+             690:    110(ptr) AccessChain 23 109
+                              Store 690 689
+             691:     25(ptr) AccessChain 23 24
+             692:      6(int) Load 691
+             693:      6(int) GroupSMin 28 ExclusiveScan 692
+             694:     25(ptr) AccessChain 23 24
+                              Store 694 693
+             695:     32(ptr) AccessChain 23 31
+             696:    8(ivec2) Load 695
+             697:      7(int) CompositeExtract 696 0
+             698:      7(int) GroupUMin 28 ExclusiveScan 697
+             699:      7(int) CompositeExtract 696 1
+             700:      7(int) GroupUMin 28 ExclusiveScan 699
+             701:    8(ivec2) CompositeConstruct 698 700
+             702:     32(ptr) AccessChain 23 31
+                              Store 702 701
+             703:     42(ptr) AccessChain 23 41
+             704:   10(fvec3) Load 703
+             705:    9(float) CompositeExtract 704 0
+             706:    9(float) GroupFMin 28 ExclusiveScan 705
+             707:    9(float) CompositeExtract 704 1
+             708:    9(float) GroupFMin 28 ExclusiveScan 707
+             709:    9(float) CompositeExtract 704 2
+             710:    9(float) GroupFMin 28 ExclusiveScan 709
+             711:   10(fvec3) CompositeConstruct 706 708 710
+             712:     42(ptr) AccessChain 23 41
+                              Store 712 711
+             713:     54(ptr) AccessChain 23 53
+             714:   12(fvec4) Load 713
+             715:   11(float) CompositeExtract 714 0
+             716:   11(float) GroupFMin 28 ExclusiveScan 715
+             717:   11(float) CompositeExtract 714 1
+             718:   11(float) GroupFMin 28 ExclusiveScan 717
+             719:   11(float) CompositeExtract 714 2
+             720:   11(float) GroupFMin 28 ExclusiveScan 719
+             721:   11(float) CompositeExtract 714 3
+             722:   11(float) GroupFMin 28 ExclusiveScan 721
+             723:   12(fvec4) CompositeConstruct 716 718 720 722
+             724:     54(ptr) AccessChain 23 53
+                              Store 724 723
+             725:     68(ptr) AccessChain 23 67
+             726:     13(int) Load 725
+             727:     13(int) GroupSMin 28 ExclusiveScan 726
+             728:     68(ptr) AccessChain 23 67
+                              Store 728 727
+             729:     74(ptr) AccessChain 23 73
+             730:   15(ivec2) Load 729
+             731:     14(int) CompositeExtract 730 0
+             732:     14(int) GroupUMin 28 ExclusiveScan 731
+             733:     14(int) CompositeExtract 730 1
+             734:     14(int) GroupUMin 28 ExclusiveScan 733
+             735:   15(ivec2) CompositeConstruct 732 734
+             736:     74(ptr) AccessChain 23 73
+                              Store 736 735
+             737:     84(ptr) AccessChain 23 83
+             738:   17(fvec3) Load 737
+             739:   16(float) CompositeExtract 738 0
+             740:   16(float) GroupFMin 28 ExclusiveScan 739
+             741:   16(float) CompositeExtract 738 1
+             742:   16(float) GroupFMin 28 ExclusiveScan 741
+             743:   16(float) CompositeExtract 738 2
+             744:   16(float) GroupFMin 28 ExclusiveScan 743
+             745:   17(fvec3) CompositeConstruct 740 742 744
+             746:     84(ptr) AccessChain 23 83
+                              Store 746 745
+             747:     96(ptr) AccessChain 23 95
+             748:   19(ivec4) Load 747
+             749:     18(int) CompositeExtract 748 0
+             750:     18(int) GroupSMin 28 ExclusiveScan 749
+             751:     18(int) CompositeExtract 748 1
+             752:     18(int) GroupSMin 28 ExclusiveScan 751
+             753:     18(int) CompositeExtract 748 2
+             754:     18(int) GroupSMin 28 ExclusiveScan 753
+             755:     18(int) CompositeExtract 748 3
+             756:     18(int) GroupSMin 28 ExclusiveScan 755
+             757:   19(ivec4) CompositeConstruct 750 752 754 756
+             758:     96(ptr) AccessChain 23 95
+                              Store 758 757
+             759:    110(ptr) AccessChain 23 109
+             760:     20(int) Load 759
+             761:     20(int) GroupUMin 28 ExclusiveScan 760
+             762:    110(ptr) AccessChain 23 109
+                              Store 762 761
+             763:     25(ptr) AccessChain 23 24
+             764:      6(int) Load 763
+             765:      6(int) GroupSMax 28 ExclusiveScan 764
+             766:     25(ptr) AccessChain 23 24
+                              Store 766 765
+             767:     32(ptr) AccessChain 23 31
+             768:    8(ivec2) Load 767
+             769:      7(int) CompositeExtract 768 0
+             770:      7(int) GroupUMax 28 ExclusiveScan 769
+             771:      7(int) CompositeExtract 768 1
+             772:      7(int) GroupUMax 28 ExclusiveScan 771
+             773:    8(ivec2) CompositeConstruct 770 772
+             774:     32(ptr) AccessChain 23 31
+                              Store 774 773
+             775:     42(ptr) AccessChain 23 41
+             776:   10(fvec3) Load 775
+             777:    9(float) CompositeExtract 776 0
+             778:    9(float) GroupFMax 28 ExclusiveScan 777
+             779:    9(float) CompositeExtract 776 1
+             780:    9(float) GroupFMax 28 ExclusiveScan 779
+             781:    9(float) CompositeExtract 776 2
+             782:    9(float) GroupFMax 28 ExclusiveScan 781
+             783:   10(fvec3) CompositeConstruct 778 780 782
+             784:     42(ptr) AccessChain 23 41
+                              Store 784 783
+             785:     54(ptr) AccessChain 23 53
+             786:   12(fvec4) Load 785
+             787:   11(float) CompositeExtract 786 0
+             788:   11(float) GroupFMax 28 ExclusiveScan 787
+             789:   11(float) CompositeExtract 786 1
+             790:   11(float) GroupFMax 28 ExclusiveScan 789
+             791:   11(float) CompositeExtract 786 2
+             792:   11(float) GroupFMax 28 ExclusiveScan 791
+             793:   11(float) CompositeExtract 786 3
+             794:   11(float) GroupFMax 28 ExclusiveScan 793
+             795:   12(fvec4) CompositeConstruct 788 790 792 794
+             796:     54(ptr) AccessChain 23 53
+                              Store 796 795
+             797:     68(ptr) AccessChain 23 67
+             798:     13(int) Load 797
+             799:     13(int) GroupSMax 28 ExclusiveScan 798
+             800:     68(ptr) AccessChain 23 67
+                              Store 800 799
+             801:     74(ptr) AccessChain 23 73
+             802:   15(ivec2) Load 801
+             803:     14(int) CompositeExtract 802 0
+             804:     14(int) GroupUMax 28 ExclusiveScan 803
+             805:     14(int) CompositeExtract 802 1
+             806:     14(int) GroupUMax 28 ExclusiveScan 805
+             807:   15(ivec2) CompositeConstruct 804 806
+             808:     74(ptr) AccessChain 23 73
+                              Store 808 807
+             809:     84(ptr) AccessChain 23 83
+             810:   17(fvec3) Load 809
+             811:   16(float) CompositeExtract 810 0
+             812:   16(float) GroupFMax 28 ExclusiveScan 811
+             813:   16(float) CompositeExtract 810 1
+             814:   16(float) GroupFMax 28 ExclusiveScan 813
+             815:   16(float) CompositeExtract 810 2
+             816:   16(float) GroupFMax 28 ExclusiveScan 815
+             817:   17(fvec3) CompositeConstruct 812 814 816
+             818:     84(ptr) AccessChain 23 83
+                              Store 818 817
+             819:     96(ptr) AccessChain 23 95
+             820:   19(ivec4) Load 819
+             821:     18(int) CompositeExtract 820 0
+             822:     18(int) GroupSMax 28 ExclusiveScan 821
+             823:     18(int) CompositeExtract 820 1
+             824:     18(int) GroupSMax 28 ExclusiveScan 823
+             825:     18(int) CompositeExtract 820 2
+             826:     18(int) GroupSMax 28 ExclusiveScan 825
+             827:     18(int) CompositeExtract 820 3
+             828:     18(int) GroupSMax 28 ExclusiveScan 827
+             829:   19(ivec4) CompositeConstruct 822 824 826 828
+             830:     96(ptr) AccessChain 23 95
+                              Store 830 829
+             831:    110(ptr) AccessChain 23 109
+             832:     20(int) Load 831
+             833:     20(int) GroupUMax 28 ExclusiveScan 832
+             834:    110(ptr) AccessChain 23 109
+                              Store 834 833
+             835:     25(ptr) AccessChain 23 24
+             836:      6(int) Load 835
+             837:      6(int) GroupIAdd 28 ExclusiveScan 836
+             838:     25(ptr) AccessChain 23 24
+                              Store 838 837
+             839:     32(ptr) AccessChain 23 31
+             840:    8(ivec2) Load 839
+             841:      7(int) CompositeExtract 840 0
+             842:      7(int) GroupIAdd 28 ExclusiveScan 841
+             843:      7(int) CompositeExtract 840 1
+             844:      7(int) GroupIAdd 28 ExclusiveScan 843
+             845:    8(ivec2) CompositeConstruct 842 844
+             846:     32(ptr) AccessChain 23 31
+                              Store 846 845
+             847:     42(ptr) AccessChain 23 41
+             848:   10(fvec3) Load 847
+             849:    9(float) CompositeExtract 848 0
+             850:    9(float) GroupFAdd 28 ExclusiveScan 849
+             851:    9(float) CompositeExtract 848 1
+             852:    9(float) GroupFAdd 28 ExclusiveScan 851
+             853:    9(float) CompositeExtract 848 2
+             854:    9(float) GroupFAdd 28 ExclusiveScan 853
+             855:   10(fvec3) CompositeConstruct 850 852 854
+             856:     42(ptr) AccessChain 23 41
+                              Store 856 855
+             857:     54(ptr) AccessChain 23 53
+             858:   12(fvec4) Load 857
+             859:   11(float) CompositeExtract 858 0
+             860:   11(float) GroupFAdd 28 ExclusiveScan 859
+             861:   11(float) CompositeExtract 858 1
+             862:   11(float) GroupFAdd 28 ExclusiveScan 861
+             863:   11(float) CompositeExtract 858 2
+             864:   11(float) GroupFAdd 28 ExclusiveScan 863
+             865:   11(float) CompositeExtract 858 3
+             866:   11(float) GroupFAdd 28 ExclusiveScan 865
+             867:   12(fvec4) CompositeConstruct 860 862 864 866
+             868:     54(ptr) AccessChain 23 53
+                              Store 868 867
+             869:     68(ptr) AccessChain 23 67
+             870:     13(int) Load 869
+             871:     13(int) GroupIAdd 28 ExclusiveScan 870
+             872:     68(ptr) AccessChain 23 67
+                              Store 872 871
+             873:     74(ptr) AccessChain 23 73
+             874:   15(ivec2) Load 873
+             875:     14(int) CompositeExtract 874 0
+             876:     14(int) GroupIAdd 28 ExclusiveScan 875
+             877:     14(int) CompositeExtract 874 1
+             878:     14(int) GroupIAdd 28 ExclusiveScan 877
+             879:   15(ivec2) CompositeConstruct 876 878
+             880:     74(ptr) AccessChain 23 73
+                              Store 880 879
+             881:     84(ptr) AccessChain 23 83
+             882:   17(fvec3) Load 881
+             883:   16(float) CompositeExtract 882 0
+             884:   16(float) GroupFAdd 28 ExclusiveScan 883
+             885:   16(float) CompositeExtract 882 1
+             886:   16(float) GroupFAdd 28 ExclusiveScan 885
+             887:   16(float) CompositeExtract 882 2
+             888:   16(float) GroupFAdd 28 ExclusiveScan 887
+             889:   17(fvec3) CompositeConstruct 884 886 888
+             890:     84(ptr) AccessChain 23 83
+                              Store 890 889
+             891:     96(ptr) AccessChain 23 95
+             892:   19(ivec4) Load 891
+             893:     18(int) CompositeExtract 892 0
+             894:     18(int) GroupIAdd 28 ExclusiveScan 893
+             895:     18(int) CompositeExtract 892 1
+             896:     18(int) GroupIAdd 28 ExclusiveScan 895
+             897:     18(int) CompositeExtract 892 2
+             898:     18(int) GroupIAdd 28 ExclusiveScan 897
+             899:     18(int) CompositeExtract 892 3
+             900:     18(int) GroupIAdd 28 ExclusiveScan 899
+             901:   19(ivec4) CompositeConstruct 894 896 898 900
+             902:     96(ptr) AccessChain 23 95
+                              Store 902 901
+             903:    110(ptr) AccessChain 23 109
+             904:     20(int) Load 903
+             905:     20(int) GroupIAdd 28 ExclusiveScan 904
+             906:    110(ptr) AccessChain 23 109
+                              Store 906 905
+             907:     25(ptr) AccessChain 23 24
+             908:      6(int) Load 907
+             909:      6(int) GroupSMinNonUniformAMD 28 InclusiveScan 908
+             910:     25(ptr) AccessChain 23 24
+                              Store 910 909
+             911:     32(ptr) AccessChain 23 31
+             912:    8(ivec2) Load 911
+             913:      7(int) CompositeExtract 912 0
+             914:      7(int) GroupUMinNonUniformAMD 28 InclusiveScan 913
+             915:      7(int) CompositeExtract 912 1
+             916:      7(int) GroupUMinNonUniformAMD 28 InclusiveScan 915
+             917:    8(ivec2) CompositeConstruct 914 916
+             918:     32(ptr) AccessChain 23 31
+                              Store 918 917
+             919:     42(ptr) AccessChain 23 41
+             920:   10(fvec3) Load 919
+             921:    9(float) CompositeExtract 920 0
+             922:    9(float) GroupFMinNonUniformAMD 28 InclusiveScan 921
+             923:    9(float) CompositeExtract 920 1
+             924:    9(float) GroupFMinNonUniformAMD 28 InclusiveScan 923
+             925:    9(float) CompositeExtract 920 2
+             926:    9(float) GroupFMinNonUniformAMD 28 InclusiveScan 925
+             927:   10(fvec3) CompositeConstruct 922 924 926
+             928:     42(ptr) AccessChain 23 41
+                              Store 928 927
+             929:     54(ptr) AccessChain 23 53
+             930:   12(fvec4) Load 929
+             931:   11(float) CompositeExtract 930 0
+             932:   11(float) GroupFMinNonUniformAMD 28 InclusiveScan 931
+             933:   11(float) CompositeExtract 930 1
+             934:   11(float) GroupFMinNonUniformAMD 28 InclusiveScan 933
+             935:   11(float) CompositeExtract 930 2
+             936:   11(float) GroupFMinNonUniformAMD 28 InclusiveScan 935
+             937:   11(float) CompositeExtract 930 3
+             938:   11(float) GroupFMinNonUniformAMD 28 InclusiveScan 937
+             939:   12(fvec4) CompositeConstruct 932 934 936 938
+             940:     54(ptr) AccessChain 23 53
+                              Store 940 939
+             941:     68(ptr) AccessChain 23 67
+             942:     13(int) Load 941
+             943:     13(int) GroupSMinNonUniformAMD 28 InclusiveScan 942
+             944:     68(ptr) AccessChain 23 67
+                              Store 944 943
+             945:     74(ptr) AccessChain 23 73
+             946:   15(ivec2) Load 945
+             947:     14(int) CompositeExtract 946 0
+             948:     14(int) GroupUMinNonUniformAMD 28 InclusiveScan 947
+             949:     14(int) CompositeExtract 946 1
+             950:     14(int) GroupUMinNonUniformAMD 28 InclusiveScan 949
+             951:   15(ivec2) CompositeConstruct 948 950
+             952:     74(ptr) AccessChain 23 73
+                              Store 952 951
+             953:     84(ptr) AccessChain 23 83
+             954:   17(fvec3) Load 953
+             955:   16(float) CompositeExtract 954 0
+             956:   16(float) GroupFMinNonUniformAMD 28 InclusiveScan 955
+             957:   16(float) CompositeExtract 954 1
+             958:   16(float) GroupFMinNonUniformAMD 28 InclusiveScan 957
+             959:   16(float) CompositeExtract 954 2
+             960:   16(float) GroupFMinNonUniformAMD 28 InclusiveScan 959
+             961:   17(fvec3) CompositeConstruct 956 958 960
+             962:     84(ptr) AccessChain 23 83
+                              Store 962 961
+             963:     96(ptr) AccessChain 23 95
+             964:   19(ivec4) Load 963
+             965:     18(int) CompositeExtract 964 0
+             966:     18(int) GroupSMinNonUniformAMD 28 InclusiveScan 965
+             967:     18(int) CompositeExtract 964 1
+             968:     18(int) GroupSMinNonUniformAMD 28 InclusiveScan 967
+             969:     18(int) CompositeExtract 964 2
+             970:     18(int) GroupSMinNonUniformAMD 28 InclusiveScan 969
+             971:     18(int) CompositeExtract 964 3
+             972:     18(int) GroupSMinNonUniformAMD 28 InclusiveScan 971
+             973:   19(ivec4) CompositeConstruct 966 968 970 972
+             974:     96(ptr) AccessChain 23 95
+                              Store 974 973
+             975:    110(ptr) AccessChain 23 109
+             976:     20(int) Load 975
+             977:     20(int) GroupUMinNonUniformAMD 28 InclusiveScan 976
+             978:    110(ptr) AccessChain 23 109
+                              Store 978 977
+             979:     25(ptr) AccessChain 23 24
+             980:      6(int) Load 979
+             981:      6(int) GroupSMaxNonUniformAMD 28 InclusiveScan 980
+             982:     25(ptr) AccessChain 23 24
+                              Store 982 981
+             983:     32(ptr) AccessChain 23 31
+             984:    8(ivec2) Load 983
+             985:      7(int) CompositeExtract 984 0
+             986:      7(int) GroupUMaxNonUniformAMD 28 InclusiveScan 985
+             987:      7(int) CompositeExtract 984 1
+             988:      7(int) GroupUMaxNonUniformAMD 28 InclusiveScan 987
+             989:    8(ivec2) CompositeConstruct 986 988
+             990:     32(ptr) AccessChain 23 31
+                              Store 990 989
+             991:     42(ptr) AccessChain 23 41
+             992:   10(fvec3) Load 991
+             993:    9(float) CompositeExtract 992 0
+             994:    9(float) GroupFMaxNonUniformAMD 28 InclusiveScan 993
+             995:    9(float) CompositeExtract 992 1
+             996:    9(float) GroupFMaxNonUniformAMD 28 InclusiveScan 995
+             997:    9(float) CompositeExtract 992 2
+             998:    9(float) GroupFMaxNonUniformAMD 28 InclusiveScan 997
+             999:   10(fvec3) CompositeConstruct 994 996 998
+            1000:     42(ptr) AccessChain 23 41
+                              Store 1000 999
+            1001:     54(ptr) AccessChain 23 53
+            1002:   12(fvec4) Load 1001
+            1003:   11(float) CompositeExtract 1002 0
+            1004:   11(float) GroupFMaxNonUniformAMD 28 InclusiveScan 1003
+            1005:   11(float) CompositeExtract 1002 1
+            1006:   11(float) GroupFMaxNonUniformAMD 28 InclusiveScan 1005
+            1007:   11(float) CompositeExtract 1002 2
+            1008:   11(float) GroupFMaxNonUniformAMD 28 InclusiveScan 1007
+            1009:   11(float) CompositeExtract 1002 3
+            1010:   11(float) GroupFMaxNonUniformAMD 28 InclusiveScan 1009
+            1011:   12(fvec4) CompositeConstruct 1004 1006 1008 1010
+            1012:     54(ptr) AccessChain 23 53
+                              Store 1012 1011
+            1013:     68(ptr) AccessChain 23 67
+            1014:     13(int) Load 1013
+            1015:     13(int) GroupSMaxNonUniformAMD 28 InclusiveScan 1014
+            1016:     68(ptr) AccessChain 23 67
+                              Store 1016 1015
+            1017:     74(ptr) AccessChain 23 73
+            1018:   15(ivec2) Load 1017
+            1019:     14(int) CompositeExtract 1018 0
+            1020:     14(int) GroupUMaxNonUniformAMD 28 InclusiveScan 1019
+            1021:     14(int) CompositeExtract 1018 1
+            1022:     14(int) GroupUMaxNonUniformAMD 28 InclusiveScan 1021
+            1023:   15(ivec2) CompositeConstruct 1020 1022
+            1024:     74(ptr) AccessChain 23 73
+                              Store 1024 1023
+            1025:     84(ptr) AccessChain 23 83
+            1026:   17(fvec3) Load 1025
+            1027:   16(float) CompositeExtract 1026 0
+            1028:   16(float) GroupFMaxNonUniformAMD 28 InclusiveScan 1027
+            1029:   16(float) CompositeExtract 1026 1
+            1030:   16(float) GroupFMaxNonUniformAMD 28 InclusiveScan 1029
+            1031:   16(float) CompositeExtract 1026 2
+            1032:   16(float) GroupFMaxNonUniformAMD 28 InclusiveScan 1031
+            1033:   17(fvec3) CompositeConstruct 1028 1030 1032
+            1034:     84(ptr) AccessChain 23 83
+                              Store 1034 1033
+            1035:     96(ptr) AccessChain 23 95
+            1036:   19(ivec4) Load 1035
+            1037:     18(int) CompositeExtract 1036 0
+            1038:     18(int) GroupSMaxNonUniformAMD 28 InclusiveScan 1037
+            1039:     18(int) CompositeExtract 1036 1
+            1040:     18(int) GroupSMaxNonUniformAMD 28 InclusiveScan 1039
+            1041:     18(int) CompositeExtract 1036 2
+            1042:     18(int) GroupSMaxNonUniformAMD 28 InclusiveScan 1041
+            1043:     18(int) CompositeExtract 1036 3
+            1044:     18(int) GroupSMaxNonUniformAMD 28 InclusiveScan 1043
+            1045:   19(ivec4) CompositeConstruct 1038 1040 1042 1044
+            1046:     96(ptr) AccessChain 23 95
+                              Store 1046 1045
+            1047:    110(ptr) AccessChain 23 109
+            1048:     20(int) Load 1047
+            1049:     20(int) GroupUMaxNonUniformAMD 28 InclusiveScan 1048
+            1050:    110(ptr) AccessChain 23 109
+                              Store 1050 1049
+            1051:     25(ptr) AccessChain 23 24
+            1052:      6(int) Load 1051
+            1053:      6(int) GroupIAddNonUniformAMD 28 InclusiveScan 1052
+            1054:     25(ptr) AccessChain 23 24
+                              Store 1054 1053
+            1055:     32(ptr) AccessChain 23 31
+            1056:    8(ivec2) Load 1055
+            1057:      7(int) CompositeExtract 1056 0
+            1058:      7(int) GroupIAddNonUniformAMD 28 InclusiveScan 1057
+            1059:      7(int) CompositeExtract 1056 1
+            1060:      7(int) GroupIAddNonUniformAMD 28 InclusiveScan 1059
+            1061:    8(ivec2) CompositeConstruct 1058 1060
+            1062:     32(ptr) AccessChain 23 31
+                              Store 1062 1061
+            1063:     42(ptr) AccessChain 23 41
+            1064:   10(fvec3) Load 1063
+            1065:    9(float) CompositeExtract 1064 0
+            1066:    9(float) GroupFAddNonUniformAMD 28 InclusiveScan 1065
+            1067:    9(float) CompositeExtract 1064 1
+            1068:    9(float) GroupFAddNonUniformAMD 28 InclusiveScan 1067
+            1069:    9(float) CompositeExtract 1064 2
+            1070:    9(float) GroupFAddNonUniformAMD 28 InclusiveScan 1069
+            1071:   10(fvec3) CompositeConstruct 1066 1068 1070
+            1072:     42(ptr) AccessChain 23 41
+                              Store 1072 1071
+            1073:     54(ptr) AccessChain 23 53
+            1074:   12(fvec4) Load 1073
+            1075:   11(float) CompositeExtract 1074 0
+            1076:   11(float) GroupFAddNonUniformAMD 28 InclusiveScan 1075
+            1077:   11(float) CompositeExtract 1074 1
+            1078:   11(float) GroupFAddNonUniformAMD 28 InclusiveScan 1077
+            1079:   11(float) CompositeExtract 1074 2
+            1080:   11(float) GroupFAddNonUniformAMD 28 InclusiveScan 1079
+            1081:   11(float) CompositeExtract 1074 3
+            1082:   11(float) GroupFAddNonUniformAMD 28 InclusiveScan 1081
+            1083:   12(fvec4) CompositeConstruct 1076 1078 1080 1082
+            1084:     54(ptr) AccessChain 23 53
+                              Store 1084 1083
+            1085:     68(ptr) AccessChain 23 67
+            1086:     13(int) Load 1085
+            1087:     13(int) GroupIAddNonUniformAMD 28 InclusiveScan 1086
+            1088:     68(ptr) AccessChain 23 67
+                              Store 1088 1087
+            1089:     74(ptr) AccessChain 23 73
+            1090:   15(ivec2) Load 1089
+            1091:     14(int) CompositeExtract 1090 0
+            1092:     14(int) GroupIAddNonUniformAMD 28 InclusiveScan 1091
+            1093:     14(int) CompositeExtract 1090 1
+            1094:     14(int) GroupIAddNonUniformAMD 28 InclusiveScan 1093
+            1095:   15(ivec2) CompositeConstruct 1092 1094
+            1096:     74(ptr) AccessChain 23 73
+                              Store 1096 1095
+            1097:     84(ptr) AccessChain 23 83
+            1098:   17(fvec3) Load 1097
+            1099:   16(float) CompositeExtract 1098 0
+            1100:   16(float) GroupFAddNonUniformAMD 28 InclusiveScan 1099
+            1101:   16(float) CompositeExtract 1098 1
+            1102:   16(float) GroupFAddNonUniformAMD 28 InclusiveScan 1101
+            1103:   16(float) CompositeExtract 1098 2
+            1104:   16(float) GroupFAddNonUniformAMD 28 InclusiveScan 1103
+            1105:   17(fvec3) CompositeConstruct 1100 1102 1104
+            1106:     84(ptr) AccessChain 23 83
+                              Store 1106 1105
+            1107:     96(ptr) AccessChain 23 95
+            1108:   19(ivec4) Load 1107
+            1109:     18(int) CompositeExtract 1108 0
+            1110:     18(int) GroupIAddNonUniformAMD 28 InclusiveScan 1109
+            1111:     18(int) CompositeExtract 1108 1
+            1112:     18(int) GroupIAddNonUniformAMD 28 InclusiveScan 1111
+            1113:     18(int) CompositeExtract 1108 2
+            1114:     18(int) GroupIAddNonUniformAMD 28 InclusiveScan 1113
+            1115:     18(int) CompositeExtract 1108 3
+            1116:     18(int) GroupIAddNonUniformAMD 28 InclusiveScan 1115
+            1117:   19(ivec4) CompositeConstruct 1110 1112 1114 1116
+            1118:     96(ptr) AccessChain 23 95
+                              Store 1118 1117
+            1119:    110(ptr) AccessChain 23 109
+            1120:     20(int) Load 1119
+            1121:     20(int) GroupIAddNonUniformAMD 28 InclusiveScan 1120
+            1122:    110(ptr) AccessChain 23 109
+                              Store 1122 1121
+            1123:     25(ptr) AccessChain 23 24
+            1124:      6(int) Load 1123
+            1125:      6(int) GroupSMinNonUniformAMD 28 ExclusiveScan 1124
+            1126:     25(ptr) AccessChain 23 24
+                              Store 1126 1125
+            1127:     32(ptr) AccessChain 23 31
+            1128:    8(ivec2) Load 1127
+            1129:      7(int) CompositeExtract 1128 0
+            1130:      7(int) GroupUMinNonUniformAMD 28 ExclusiveScan 1129
+            1131:      7(int) CompositeExtract 1128 1
+            1132:      7(int) GroupUMinNonUniformAMD 28 ExclusiveScan 1131
+            1133:    8(ivec2) CompositeConstruct 1130 1132
+            1134:     32(ptr) AccessChain 23 31
+                              Store 1134 1133
+            1135:     42(ptr) AccessChain 23 41
+            1136:   10(fvec3) Load 1135
+            1137:    9(float) CompositeExtract 1136 0
+            1138:    9(float) GroupFMinNonUniformAMD 28 ExclusiveScan 1137
+            1139:    9(float) CompositeExtract 1136 1
+            1140:    9(float) GroupFMinNonUniformAMD 28 ExclusiveScan 1139
+            1141:    9(float) CompositeExtract 1136 2
+            1142:    9(float) GroupFMinNonUniformAMD 28 ExclusiveScan 1141
+            1143:   10(fvec3) CompositeConstruct 1138 1140 1142
+            1144:     42(ptr) AccessChain 23 41
+                              Store 1144 1143
+            1145:     54(ptr) AccessChain 23 53
+            1146:   12(fvec4) Load 1145
+            1147:   11(float) CompositeExtract 1146 0
+            1148:   11(float) GroupFMinNonUniformAMD 28 ExclusiveScan 1147
+            1149:   11(float) CompositeExtract 1146 1
+            1150:   11(float) GroupFMinNonUniformAMD 28 ExclusiveScan 1149
+            1151:   11(float) CompositeExtract 1146 2
+            1152:   11(float) GroupFMinNonUniformAMD 28 ExclusiveScan 1151
+            1153:   11(float) CompositeExtract 1146 3
+            1154:   11(float) GroupFMinNonUniformAMD 28 ExclusiveScan 1153
+            1155:   12(fvec4) CompositeConstruct 1148 1150 1152 1154
+            1156:     54(ptr) AccessChain 23 53
+                              Store 1156 1155
+            1157:     68(ptr) AccessChain 23 67
+            1158:     13(int) Load 1157
+            1159:     13(int) GroupSMinNonUniformAMD 28 ExclusiveScan 1158
+            1160:     68(ptr) AccessChain 23 67
+                              Store 1160 1159
+            1161:     74(ptr) AccessChain 23 73
+            1162:   15(ivec2) Load 1161
+            1163:     14(int) CompositeExtract 1162 0
+            1164:     14(int) GroupUMinNonUniformAMD 28 ExclusiveScan 1163
+            1165:     14(int) CompositeExtract 1162 1
+            1166:     14(int) GroupUMinNonUniformAMD 28 ExclusiveScan 1165
+            1167:   15(ivec2) CompositeConstruct 1164 1166
+            1168:     74(ptr) AccessChain 23 73
+                              Store 1168 1167
+            1169:     84(ptr) AccessChain 23 83
+            1170:   17(fvec3) Load 1169
+            1171:   16(float) CompositeExtract 1170 0
+            1172:   16(float) GroupFMinNonUniformAMD 28 ExclusiveScan 1171
+            1173:   16(float) CompositeExtract 1170 1
+            1174:   16(float) GroupFMinNonUniformAMD 28 ExclusiveScan 1173
+            1175:   16(float) CompositeExtract 1170 2
+            1176:   16(float) GroupFMinNonUniformAMD 28 ExclusiveScan 1175
+            1177:   17(fvec3) CompositeConstruct 1172 1174 1176
+            1178:     84(ptr) AccessChain 23 83
+                              Store 1178 1177
+            1179:     96(ptr) AccessChain 23 95
+            1180:   19(ivec4) Load 1179
+            1181:     18(int) CompositeExtract 1180 0
+            1182:     18(int) GroupSMinNonUniformAMD 28 ExclusiveScan 1181
+            1183:     18(int) CompositeExtract 1180 1
+            1184:     18(int) GroupSMinNonUniformAMD 28 ExclusiveScan 1183
+            1185:     18(int) CompositeExtract 1180 2
+            1186:     18(int) GroupSMinNonUniformAMD 28 ExclusiveScan 1185
+            1187:     18(int) CompositeExtract 1180 3
+            1188:     18(int) GroupSMinNonUniformAMD 28 ExclusiveScan 1187
+            1189:   19(ivec4) CompositeConstruct 1182 1184 1186 1188
+            1190:     96(ptr) AccessChain 23 95
+                              Store 1190 1189
+            1191:    110(ptr) AccessChain 23 109
+            1192:     20(int) Load 1191
+            1193:     20(int) GroupUMinNonUniformAMD 28 ExclusiveScan 1192
+            1194:    110(ptr) AccessChain 23 109
+                              Store 1194 1193
+            1195:     25(ptr) AccessChain 23 24
+            1196:      6(int) Load 1195
+            1197:      6(int) GroupSMaxNonUniformAMD 28 ExclusiveScan 1196
+            1198:     25(ptr) AccessChain 23 24
+                              Store 1198 1197
+            1199:     32(ptr) AccessChain 23 31
+            1200:    8(ivec2) Load 1199
+            1201:      7(int) CompositeExtract 1200 0
+            1202:      7(int) GroupUMaxNonUniformAMD 28 ExclusiveScan 1201
+            1203:      7(int) CompositeExtract 1200 1
+            1204:      7(int) GroupUMaxNonUniformAMD 28 ExclusiveScan 1203
+            1205:    8(ivec2) CompositeConstruct 1202 1204
+            1206:     32(ptr) AccessChain 23 31
+                              Store 1206 1205
+            1207:     42(ptr) AccessChain 23 41
+            1208:   10(fvec3) Load 1207
+            1209:    9(float) CompositeExtract 1208 0
+            1210:    9(float) GroupFMaxNonUniformAMD 28 ExclusiveScan 1209
+            1211:    9(float) CompositeExtract 1208 1
+            1212:    9(float) GroupFMaxNonUniformAMD 28 ExclusiveScan 1211
+            1213:    9(float) CompositeExtract 1208 2
+            1214:    9(float) GroupFMaxNonUniformAMD 28 ExclusiveScan 1213
+            1215:   10(fvec3) CompositeConstruct 1210 1212 1214
+            1216:     42(ptr) AccessChain 23 41
+                              Store 1216 1215
+            1217:     54(ptr) AccessChain 23 53
+            1218:   12(fvec4) Load 1217
+            1219:   11(float) CompositeExtract 1218 0
+            1220:   11(float) GroupFMaxNonUniformAMD 28 ExclusiveScan 1219
+            1221:   11(float) CompositeExtract 1218 1
+            1222:   11(float) GroupFMaxNonUniformAMD 28 ExclusiveScan 1221
+            1223:   11(float) CompositeExtract 1218 2
+            1224:   11(float) GroupFMaxNonUniformAMD 28 ExclusiveScan 1223
+            1225:   11(float) CompositeExtract 1218 3
+            1226:   11(float) GroupFMaxNonUniformAMD 28 ExclusiveScan 1225
+            1227:   12(fvec4) CompositeConstruct 1220 1222 1224 1226
+            1228:     54(ptr) AccessChain 23 53
+                              Store 1228 1227
+            1229:     68(ptr) AccessChain 23 67
+            1230:     13(int) Load 1229
+            1231:     13(int) GroupSMaxNonUniformAMD 28 ExclusiveScan 1230
+            1232:     68(ptr) AccessChain 23 67
+                              Store 1232 1231
+            1233:     74(ptr) AccessChain 23 73
+            1234:   15(ivec2) Load 1233
+            1235:     14(int) CompositeExtract 1234 0
+            1236:     14(int) GroupUMaxNonUniformAMD 28 ExclusiveScan 1235
+            1237:     14(int) CompositeExtract 1234 1
+            1238:     14(int) GroupUMaxNonUniformAMD 28 ExclusiveScan 1237
+            1239:   15(ivec2) CompositeConstruct 1236 1238
+            1240:     74(ptr) AccessChain 23 73
+                              Store 1240 1239
+            1241:     84(ptr) AccessChain 23 83
+            1242:   17(fvec3) Load 1241
+            1243:   16(float) CompositeExtract 1242 0
+            1244:   16(float) GroupFMaxNonUniformAMD 28 ExclusiveScan 1243
+            1245:   16(float) CompositeExtract 1242 1
+            1246:   16(float) GroupFMaxNonUniformAMD 28 ExclusiveScan 1245
+            1247:   16(float) CompositeExtract 1242 2
+            1248:   16(float) GroupFMaxNonUniformAMD 28 ExclusiveScan 1247
+            1249:   17(fvec3) CompositeConstruct 1244 1246 1248
+            1250:     84(ptr) AccessChain 23 83
+                              Store 1250 1249
+            1251:     96(ptr) AccessChain 23 95
+            1252:   19(ivec4) Load 1251
+            1253:     18(int) CompositeExtract 1252 0
+            1254:     18(int) GroupSMaxNonUniformAMD 28 ExclusiveScan 1253
+            1255:     18(int) CompositeExtract 1252 1
+            1256:     18(int) GroupSMaxNonUniformAMD 28 ExclusiveScan 1255
+            1257:     18(int) CompositeExtract 1252 2
+            1258:     18(int) GroupSMaxNonUniformAMD 28 ExclusiveScan 1257
+            1259:     18(int) CompositeExtract 1252 3
+            1260:     18(int) GroupSMaxNonUniformAMD 28 ExclusiveScan 1259
+            1261:   19(ivec4) CompositeConstruct 1254 1256 1258 1260
+            1262:     96(ptr) AccessChain 23 95
+                              Store 1262 1261
+            1263:    110(ptr) AccessChain 23 109
+            1264:     20(int) Load 1263
+            1265:     20(int) GroupUMaxNonUniformAMD 28 ExclusiveScan 1264
+            1266:    110(ptr) AccessChain 23 109
+                              Store 1266 1265
+            1267:     25(ptr) AccessChain 23 24
+            1268:      6(int) Load 1267
+            1269:      6(int) GroupIAddNonUniformAMD 28 ExclusiveScan 1268
+            1270:     25(ptr) AccessChain 23 24
+                              Store 1270 1269
+            1271:     32(ptr) AccessChain 23 31
+            1272:    8(ivec2) Load 1271
+            1273:      7(int) CompositeExtract 1272 0
+            1274:      7(int) GroupIAddNonUniformAMD 28 ExclusiveScan 1273
+            1275:      7(int) CompositeExtract 1272 1
+            1276:      7(int) GroupIAddNonUniformAMD 28 ExclusiveScan 1275
+            1277:    8(ivec2) CompositeConstruct 1274 1276
+            1278:     32(ptr) AccessChain 23 31
+                              Store 1278 1277
+            1279:     42(ptr) AccessChain 23 41
+            1280:   10(fvec3) Load 1279
+            1281:    9(float) CompositeExtract 1280 0
+            1282:    9(float) GroupFAddNonUniformAMD 28 ExclusiveScan 1281
+            1283:    9(float) CompositeExtract 1280 1
+            1284:    9(float) GroupFAddNonUniformAMD 28 ExclusiveScan 1283
+            1285:    9(float) CompositeExtract 1280 2
+            1286:    9(float) GroupFAddNonUniformAMD 28 ExclusiveScan 1285
+            1287:   10(fvec3) CompositeConstruct 1282 1284 1286
+            1288:     42(ptr) AccessChain 23 41
+                              Store 1288 1287
+            1289:     54(ptr) AccessChain 23 53
+            1290:   12(fvec4) Load 1289
+            1291:   11(float) CompositeExtract 1290 0
+            1292:   11(float) GroupFAddNonUniformAMD 28 ExclusiveScan 1291
+            1293:   11(float) CompositeExtract 1290 1
+            1294:   11(float) GroupFAddNonUniformAMD 28 ExclusiveScan 1293
+            1295:   11(float) CompositeExtract 1290 2
+            1296:   11(float) GroupFAddNonUniformAMD 28 ExclusiveScan 1295
+            1297:   11(float) CompositeExtract 1290 3
+            1298:   11(float) GroupFAddNonUniformAMD 28 ExclusiveScan 1297
+            1299:   12(fvec4) CompositeConstruct 1292 1294 1296 1298
+            1300:     54(ptr) AccessChain 23 53
+                              Store 1300 1299
+            1301:     68(ptr) AccessChain 23 67
+            1302:     13(int) Load 1301
+            1303:     13(int) GroupIAddNonUniformAMD 28 ExclusiveScan 1302
+            1304:     68(ptr) AccessChain 23 67
+                              Store 1304 1303
+            1305:     74(ptr) AccessChain 23 73
+            1306:   15(ivec2) Load 1305
+            1307:     14(int) CompositeExtract 1306 0
+            1308:     14(int) GroupIAddNonUniformAMD 28 ExclusiveScan 1307
+            1309:     14(int) CompositeExtract 1306 1
+            1310:     14(int) GroupIAddNonUniformAMD 28 ExclusiveScan 1309
+            1311:   15(ivec2) CompositeConstruct 1308 1310
+            1312:     74(ptr) AccessChain 23 73
+                              Store 1312 1311
+            1313:     84(ptr) AccessChain 23 83
+            1314:   17(fvec3) Load 1313
+            1315:   16(float) CompositeExtract 1314 0
+            1316:   16(float) GroupFAddNonUniformAMD 28 ExclusiveScan 1315
+            1317:   16(float) CompositeExtract 1314 1
+            1318:   16(float) GroupFAddNonUniformAMD 28 ExclusiveScan 1317
+            1319:   16(float) CompositeExtract 1314 2
+            1320:   16(float) GroupFAddNonUniformAMD 28 ExclusiveScan 1319
+            1321:   17(fvec3) CompositeConstruct 1316 1318 1320
+            1322:     84(ptr) AccessChain 23 83
+                              Store 1322 1321
+            1323:     96(ptr) AccessChain 23 95
+            1324:   19(ivec4) Load 1323
+            1325:     18(int) CompositeExtract 1324 0
+            1326:     18(int) GroupIAddNonUniformAMD 28 ExclusiveScan 1325
+            1327:     18(int) CompositeExtract 1324 1
+            1328:     18(int) GroupIAddNonUniformAMD 28 ExclusiveScan 1327
+            1329:     18(int) CompositeExtract 1324 2
+            1330:     18(int) GroupIAddNonUniformAMD 28 ExclusiveScan 1329
+            1331:     18(int) CompositeExtract 1324 3
+            1332:     18(int) GroupIAddNonUniformAMD 28 ExclusiveScan 1331
+            1333:   19(ivec4) CompositeConstruct 1326 1328 1330 1332
+            1334:     96(ptr) AccessChain 23 95
+                              Store 1334 1333
+            1335:    110(ptr) AccessChain 23 109
+            1336:     20(int) Load 1335
+            1337:     20(int) GroupIAddNonUniformAMD 28 ExclusiveScan 1336
+            1338:    110(ptr) AccessChain 23 109
+                              Store 1338 1337
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.shaderDrawParams.vert.out b/Test/baseResults/spv.shaderDrawParams.vert.out
index 36c5ca5..c87a54b 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): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 53
 
                               Capability Shader
diff --git a/Test/baseResults/spv.shaderFragMaskAMD.frag.out b/Test/baseResults/spv.shaderFragMaskAMD.frag.out
index 56081b1..2c08fce 100644
--- a/Test/baseResults/spv.shaderFragMaskAMD.frag.out
+++ b/Test/baseResults/spv.shaderFragMaskAMD.frag.out
@@ -1,6 +1,6 @@
 spv.shaderFragMaskAMD.frag
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 80
 
                               Capability Shader
diff --git a/Test/baseResults/spv.shaderGroupVote.comp.out b/Test/baseResults/spv.shaderGroupVote.comp.out
index abd1804..2c400e9 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): 80002
+// Generated by (magic number): 80006
 // 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 a126e96..c560c0b 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): 80002
+// Generated by (magic number): 80006
 // 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 b2bfcad..72e4d6f 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): 80002
+// Generated by (magic number): 80006
 // 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 33eec77..9f3bca2 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): 80002
+// Generated by (magic number): 80006
 // 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 62b4255..0b27a0f 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): 80002
+// Generated by (magic number): 80006
 // 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 56933e4..2416667 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): 80002
+// Generated by (magic number): 80006
 // 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 376a874..ca0d81e 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): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 438
 
                               Capability Shader
@@ -182,14 +182,14 @@
       414(i2DMS):    413(ptr) Variable UniformConstant
              422:             TypePointer Output 11(fvec4)
    423(outColor):    422(ptr) Variable Output
-             426:             TypeBool
+             425:             TypeBool
          4(main):           2 Function None 3
                5:             Label
      8(resident):      7(ptr) Variable Function
        13(texel):     12(ptr) Variable Function
       18(itexel):     17(ptr) Variable Function
       23(utexel):     22(ptr) Variable Function
-             424:     12(ptr) Variable Function
+             427:     12(ptr) Variable Function
                               Store 8(resident) 9
                               Store 13(texel) 15
                               Store 18(itexel) 19
@@ -565,13 +565,13 @@
              420:      6(int) Load 8(resident)
              421:      6(int) BitwiseOr 420 419
                               Store 8(resident) 421
-             425:      6(int) Load 8(resident)
-             427:   426(bool) ImageSparseTexelsResident 425
+             424:      6(int) Load 8(resident)
+             426:   425(bool) ImageSparseTexelsResident 424
                               SelectionMerge 429 None
-                              BranchConditional 427 428 431
+                              BranchConditional 426 428 431
              428:               Label
              430:   11(fvec4)   Load 13(texel)
-                                Store 424 430
+                                Store 427 430
                                 Branch 429
              431:               Label
              432:   16(ivec4)   Load 18(itexel)
@@ -579,10 +579,10 @@
              434:   21(ivec4)   Load 23(utexel)
              435:   11(fvec4)   ConvertUToF 434
              436:   11(fvec4)   FAdd 433 435
-                                Store 424 436
+                                Store 427 436
                                 Branch 429
              429:             Label
-             437:   11(fvec4) Load 424
+             437:   11(fvec4) Load 427
                               Store 423(outColor) 437
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.sparseTextureClamp.frag.out b/Test/baseResults/spv.sparseTextureClamp.frag.out
index 21f9583..5933bd7 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): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 360
 
                               Capability Shader
@@ -145,14 +145,14 @@
              310:  157(ivec2) ConstantComposite 143 143
              344:             TypePointer Output 11(fvec4)
    345(outColor):    344(ptr) Variable Output
-             348:             TypeBool
+             347:             TypeBool
          4(main):           2 Function None 3
                5:             Label
      8(resident):      7(ptr) Variable Function
        13(texel):     12(ptr) Variable Function
       18(itexel):     17(ptr) Variable Function
       23(utexel):     22(ptr) Variable Function
-             346:     12(ptr) Variable Function
+             349:     12(ptr) Variable Function
                               Store 8(resident) 9
                               Store 13(texel) 15
                               Store 18(itexel) 19
@@ -442,13 +442,13 @@
              342:   16(ivec4) Load 18(itexel)
              343:   16(ivec4) IAdd 342 341
                               Store 18(itexel) 343
-             347:      6(int) Load 8(resident)
-             349:   348(bool) ImageSparseTexelsResident 347
+             346:      6(int) Load 8(resident)
+             348:   347(bool) ImageSparseTexelsResident 346
                               SelectionMerge 351 None
-                              BranchConditional 349 350 353
+                              BranchConditional 348 350 353
              350:               Label
              352:   11(fvec4)   Load 13(texel)
-                                Store 346 352
+                                Store 349 352
                                 Branch 351
              353:               Label
              354:   16(ivec4)   Load 18(itexel)
@@ -456,10 +456,10 @@
              356:   21(ivec4)   Load 23(utexel)
              357:   11(fvec4)   ConvertUToF 356
              358:   11(fvec4)   FAdd 355 357
-                                Store 346 358
+                                Store 349 358
                                 Branch 351
              351:             Label
-             359:   11(fvec4) Load 346
+             359:   11(fvec4) Load 349
                               Store 345(outColor) 359
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.specConst.vert.out b/Test/baseResults/spv.specConst.vert.out
index 766bdaf..2511856 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): 80002
+// Generated by (magic number): 80006
 // 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 de8411b..9f68d69 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): 80002
+// Generated by (magic number): 80006
 // 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 156497b..8280051 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): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 81
 
                               Capability Shader
@@ -11,7 +11,7 @@
                               Source GLSL 400
                               Name 4  "main"
                               Name 9  "arraySize"
-                              Name 14  "foo(vf4[s1522];"
+                              Name 14  "foo(vf4[s2468];"
                               Name 13  "p"
                               Name 17  "builtin_spec_constant("
                               Name 20  "color"
@@ -102,10 +102,10 @@
                               Store 20(color) 46
               48:          10 Load 22(ucol)
                               Store 47(param) 48
-              49:           2 FunctionCall 14(foo(vf4[s1522];) 47(param)
+              49:           2 FunctionCall 14(foo(vf4[s2468];) 47(param)
                               Return
                               FunctionEnd
-14(foo(vf4[s1522];):           2 Function None 12
+14(foo(vf4[s2468];):           2 Function None 12
            13(p):     11(ptr) FunctionParameter
               15:             Label
               54:     24(ptr) AccessChain 53(dupUcol) 23
diff --git a/Test/baseResults/spv.specConstantComposite.vert.out b/Test/baseResults/spv.specConstantComposite.vert.out
index 194f567..31b93f7 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): 80002
+// Generated by (magic number): 80006
 // 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 429e068..216028e 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): 80002
+// Generated by (magic number): 80006
 // 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 02de2cb..cece3b9 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): 80002
+// Generated by (magic number): 80006
 // 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 876646d..c507031 100755
--- a/Test/baseResults/spv.ssboAlias.frag.out
+++ b/Test/baseResults/spv.ssboAlias.frag.out
@@ -1,12 +1,12 @@
 spv.ssboAlias.frag
 // Module Version 10000
-// Generated by (magic number): 80002
-// Id's are bound by 46
+// Generated by (magic number): 80006
+// Id's are bound by 44
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 43
+                              EntryPoint Fragment 4  "main" 41
                               ExecutionMode 4 OriginUpperLeft
                               Source HLSL 500
                               Name 4  "main"
@@ -17,10 +17,10 @@
                               Name 18  "Buf1@count"
                               MemberName 18(Buf1@count) 0  "@count"
                               Name 20  "Buf1@count"
-                              Name 30  "Buf2"
-                              Name 31  "Buf2@count"
-                              Name 43  "@entryPointOutput"
-                              Name 45  "Buf3"
+                              Name 28  "Buf2"
+                              Name 29  "Buf2@count"
+                              Name 41  "@entryPointOutput"
+                              Name 43  "Buf3"
                               Decorate 12 ArrayStride 4
                               MemberDecorate 13(Buf1) 0 Offset 0
                               Decorate 13(Buf1) BufferBlock
@@ -30,13 +30,13 @@
                               Decorate 18(Buf1@count) BufferBlock
                               Decorate 20(Buf1@count) DescriptorSet 0
                               Decorate 20(Buf1@count) Binding 83
-                              Decorate 30(Buf2) DescriptorSet 0
-                              Decorate 30(Buf2) Binding 85
-                              Decorate 31(Buf2@count) DescriptorSet 0
-                              Decorate 31(Buf2@count) Binding 86
-                              Decorate 43(@entryPointOutput) Location 0
-                              Decorate 45(Buf3) DescriptorSet 0
-                              Decorate 45(Buf3) Binding 84
+                              Decorate 28(Buf2) DescriptorSet 0
+                              Decorate 28(Buf2) Binding 85
+                              Decorate 29(Buf2@count) DescriptorSet 0
+                              Decorate 29(Buf2@count) Binding 86
+                              Decorate 41(@entryPointOutput) Location 0
+                              Decorate 43(Buf3) DescriptorSet 0
+                              Decorate 43(Buf3) Binding 84
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -49,40 +49,38 @@
         15(Buf1):     14(ptr) Variable Uniform
               16:             TypeInt 32 1
               17:     16(int) Constant 0
-  18(Buf1@count):             TypeStruct 16(int)
+  18(Buf1@count):             TypeStruct 11(int)
               19:             TypePointer Uniform 18(Buf1@count)
   20(Buf1@count):     19(ptr) Variable Uniform
-              21:             TypePointer Uniform 16(int)
-              23:     16(int) Constant 1
-              24:     11(int) Constant 1
-              25:     11(int) Constant 0
-              27:     11(int) Constant 10
-              28:             TypePointer Uniform 11(int)
-        30(Buf2):     14(ptr) Variable Uniform
-  31(Buf2@count):     19(ptr) Variable Uniform
-              34:     11(int) Constant 20
-              36:    6(float) Constant 1065353216
-              37:    6(float) Constant 1077936128
-              38:    6(float) Constant 1084227584
-              39:    7(fvec4) ConstantComposite 36 37 38 36
-              42:             TypePointer Output 7(fvec4)
-43(@entryPointOutput):     42(ptr) Variable Output
-        45(Buf3):     14(ptr) Variable Uniform
+              21:             TypePointer Uniform 11(int)
+              23:     11(int) Constant 1
+              24:     11(int) Constant 0
+              26:     11(int) Constant 10
+        28(Buf2):     14(ptr) Variable Uniform
+  29(Buf2@count):     19(ptr) Variable Uniform
+              32:     11(int) Constant 20
+              34:    6(float) Constant 1065353216
+              35:    6(float) Constant 1077936128
+              36:    6(float) Constant 1084227584
+              37:    7(fvec4) ConstantComposite 34 35 36 34
+              40:             TypePointer Output 7(fvec4)
+41(@entryPointOutput):     40(ptr) Variable Output
+        43(Buf3):     14(ptr) Variable Uniform
          4(main):           2 Function None 3
                5:             Label
-              44:    7(fvec4) FunctionCall 9(@main()
-                              Store 43(@entryPointOutput) 44
+              42:    7(fvec4) FunctionCall 9(@main()
+                              Store 41(@entryPointOutput) 42
                               Return
                               FunctionEnd
        9(@main():    7(fvec4) Function None 8
               10:             Label
               22:     21(ptr) AccessChain 20(Buf1@count) 17
-              26:     11(int) AtomicIAdd 22 24 25 23
-              29:     28(ptr) AccessChain 15(Buf1) 17 26
-                              Store 29 27
-              32:     21(ptr) AccessChain 31(Buf2@count) 17
-              33:     11(int) AtomicIAdd 32 24 25 23
-              35:     28(ptr) AccessChain 30(Buf2) 17 33
-                              Store 35 34
-                              ReturnValue 39
+              25:     11(int) AtomicIAdd 22 23 24 23
+              27:     21(ptr) AccessChain 15(Buf1) 17 25
+                              Store 27 26
+              30:     21(ptr) AccessChain 29(Buf2@count) 17
+              31:     11(int) AtomicIAdd 30 23 24 23
+              33:     21(ptr) AccessChain 28(Buf2) 17 31
+                              Store 33 32
+                              ReturnValue 37
                               FunctionEnd
diff --git a/Test/baseResults/spv.stereoViewRendering.tesc.out b/Test/baseResults/spv.stereoViewRendering.tesc.out
index b2c9b39..528d993 100644
--- a/Test/baseResults/spv.stereoViewRendering.tesc.out
+++ b/Test/baseResults/spv.stereoViewRendering.tesc.out
@@ -1,6 +1,6 @@
 spv.stereoViewRendering.tesc
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 38
 
                               Capability Geometry
diff --git a/Test/baseResults/spv.stereoViewRendering.vert.out b/Test/baseResults/spv.stereoViewRendering.vert.out
index f2b22d5..c30b6d5 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): 80002
+// Generated by (magic number): 80006
 // 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 b8b7e94..d4de7cc 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): 80002
+// Generated by (magic number): 80006
 // 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 b107de2..1124215 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): 80002
+// Generated by (magic number): 80006
 // 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 fb55c71..b038b16 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): 80002
+// Generated by (magic number): 80006
 // 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 5672196..e2fd3f1 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): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 60
 
                               Capability Shader
diff --git a/Test/baseResults/spv.subgroup.frag.out b/Test/baseResults/spv.subgroup.frag.out
new file mode 100644
index 0000000..d1c5212
--- /dev/null
+++ b/Test/baseResults/spv.subgroup.frag.out
@@ -0,0 +1,44 @@
+spv.subgroup.frag
+// Module Version 10300
+// Generated by (magic number): 80006
+// Id's are bound by 17
+
+                              Capability Shader
+                              Capability GroupNonUniform
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 9 11 13
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              SourceExtension  "GL_KHR_shader_subgroup_basic"
+                              Name 4  "main"
+                              Name 9  "data"
+                              Name 11  "gl_SubgroupSize"
+                              Name 13  "gl_SubgroupInvocationID"
+                              Decorate 9(data) Location 0
+                              Decorate 11(gl_SubgroupSize) RelaxedPrecision
+                              Decorate 11(gl_SubgroupSize) Flat
+                              Decorate 11(gl_SubgroupSize) BuiltIn SubgroupSize
+                              Decorate 12 RelaxedPrecision
+                              Decorate 13(gl_SubgroupInvocationID) RelaxedPrecision
+                              Decorate 13(gl_SubgroupInvocationID) Flat
+                              Decorate 13(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId
+                              Decorate 14 RelaxedPrecision
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypeVector 6(int) 4
+               8:             TypePointer Output 7(ivec4)
+         9(data):      8(ptr) Variable Output
+              10:             TypePointer Input 6(int)
+11(gl_SubgroupSize):     10(ptr) Variable Input
+13(gl_SubgroupInvocationID):     10(ptr) Variable Input
+              15:      6(int) Constant 0
+         4(main):           2 Function None 3
+               5:             Label
+              12:      6(int) Load 11(gl_SubgroupSize)
+              14:      6(int) Load 13(gl_SubgroupInvocationID)
+              16:    7(ivec4) CompositeConstruct 12 14 15 15
+                              Store 9(data) 16
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.subgroup.geom.out b/Test/baseResults/spv.subgroup.geom.out
new file mode 100644
index 0000000..9d42a8c
--- /dev/null
+++ b/Test/baseResults/spv.subgroup.geom.out
@@ -0,0 +1,62 @@
+spv.subgroup.geom
+// Module Version 10300
+// Generated by (magic number): 80006
+// Id's are bound by 26
+
+                              Capability Geometry
+                              Capability GroupNonUniform
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Geometry 4  "main" 15 18 20
+                              ExecutionMode 4 InputPoints
+                              ExecutionMode 4 Invocations 1
+                              ExecutionMode 4 OutputPoints
+                              ExecutionMode 4 OutputVertices 1
+                              Source GLSL 450
+                              SourceExtension  "GL_KHR_shader_subgroup_basic"
+                              Name 4  "main"
+                              Name 9  "Output"
+                              MemberName 9(Output) 0  "result"
+                              Name 11  ""
+                              Name 15  "gl_PrimitiveIDIn"
+                              Name 18  "gl_SubgroupSize"
+                              Name 20  "gl_SubgroupInvocationID"
+                              Decorate 8 ArrayStride 16
+                              MemberDecorate 9(Output) 0 Offset 0
+                              Decorate 9(Output) BufferBlock
+                              Decorate 11 DescriptorSet 0
+                              Decorate 11 Binding 0
+                              Decorate 15(gl_PrimitiveIDIn) BuiltIn PrimitiveId
+                              Decorate 18(gl_SubgroupSize) RelaxedPrecision
+                              Decorate 18(gl_SubgroupSize) BuiltIn SubgroupSize
+                              Decorate 19 RelaxedPrecision
+                              Decorate 20(gl_SubgroupInvocationID) RelaxedPrecision
+                              Decorate 20(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId
+                              Decorate 21 RelaxedPrecision
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypeVector 6(int) 4
+               8:             TypeRuntimeArray 7(ivec4)
+       9(Output):             TypeStruct 8
+              10:             TypePointer Uniform 9(Output)
+              11:     10(ptr) Variable Uniform
+              12:             TypeInt 32 1
+              13:     12(int) Constant 0
+              14:             TypePointer Input 12(int)
+15(gl_PrimitiveIDIn):     14(ptr) Variable Input
+              17:             TypePointer Input 6(int)
+18(gl_SubgroupSize):     17(ptr) Variable Input
+20(gl_SubgroupInvocationID):     17(ptr) Variable Input
+              22:      6(int) Constant 0
+              24:             TypePointer Uniform 7(ivec4)
+         4(main):           2 Function None 3
+               5:             Label
+              16:     12(int) Load 15(gl_PrimitiveIDIn)
+              19:      6(int) Load 18(gl_SubgroupSize)
+              21:      6(int) Load 20(gl_SubgroupInvocationID)
+              23:    7(ivec4) CompositeConstruct 19 21 22 22
+              25:     24(ptr) AccessChain 11 13 16
+                              Store 25 23
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.subgroup.tesc.out b/Test/baseResults/spv.subgroup.tesc.out
new file mode 100644
index 0000000..72799cd
--- /dev/null
+++ b/Test/baseResults/spv.subgroup.tesc.out
@@ -0,0 +1,59 @@
+spv.subgroup.tesc
+// Module Version 10300
+// Generated by (magic number): 80006
+// Id's are bound by 26
+
+                              Capability Tessellation
+                              Capability GroupNonUniform
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint TessellationControl 4  "main" 15 18 20
+                              ExecutionMode 4 OutputVertices 1
+                              Source GLSL 450
+                              SourceExtension  "GL_KHR_shader_subgroup_basic"
+                              Name 4  "main"
+                              Name 9  "Output"
+                              MemberName 9(Output) 0  "result"
+                              Name 11  ""
+                              Name 15  "gl_PrimitiveID"
+                              Name 18  "gl_SubgroupSize"
+                              Name 20  "gl_SubgroupInvocationID"
+                              Decorate 8 ArrayStride 16
+                              MemberDecorate 9(Output) 0 Offset 0
+                              Decorate 9(Output) BufferBlock
+                              Decorate 11 DescriptorSet 0
+                              Decorate 11 Binding 0
+                              Decorate 15(gl_PrimitiveID) BuiltIn PrimitiveId
+                              Decorate 18(gl_SubgroupSize) RelaxedPrecision
+                              Decorate 18(gl_SubgroupSize) BuiltIn SubgroupSize
+                              Decorate 19 RelaxedPrecision
+                              Decorate 20(gl_SubgroupInvocationID) RelaxedPrecision
+                              Decorate 20(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId
+                              Decorate 21 RelaxedPrecision
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypeVector 6(int) 4
+               8:             TypeRuntimeArray 7(ivec4)
+       9(Output):             TypeStruct 8
+              10:             TypePointer Uniform 9(Output)
+              11:     10(ptr) Variable Uniform
+              12:             TypeInt 32 1
+              13:     12(int) Constant 0
+              14:             TypePointer Input 12(int)
+15(gl_PrimitiveID):     14(ptr) Variable Input
+              17:             TypePointer Input 6(int)
+18(gl_SubgroupSize):     17(ptr) Variable Input
+20(gl_SubgroupInvocationID):     17(ptr) Variable Input
+              22:      6(int) Constant 0
+              24:             TypePointer Uniform 7(ivec4)
+         4(main):           2 Function None 3
+               5:             Label
+              16:     12(int) Load 15(gl_PrimitiveID)
+              19:      6(int) Load 18(gl_SubgroupSize)
+              21:      6(int) Load 20(gl_SubgroupInvocationID)
+              23:    7(ivec4) CompositeConstruct 19 21 22 22
+              25:     24(ptr) AccessChain 11 13 16
+                              Store 25 23
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.subgroup.tese.out b/Test/baseResults/spv.subgroup.tese.out
new file mode 100644
index 0000000..d8c3bef
--- /dev/null
+++ b/Test/baseResults/spv.subgroup.tese.out
@@ -0,0 +1,61 @@
+spv.subgroup.tese
+// Module Version 10300
+// Generated by (magic number): 80006
+// Id's are bound by 26
+
+                              Capability Tessellation
+                              Capability GroupNonUniform
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint TessellationEvaluation 4  "main" 15 18 20
+                              ExecutionMode 4 Isolines
+                              ExecutionMode 4 SpacingEqual
+                              ExecutionMode 4 VertexOrderCcw
+                              Source GLSL 450
+                              SourceExtension  "GL_KHR_shader_subgroup_basic"
+                              Name 4  "main"
+                              Name 9  "Output"
+                              MemberName 9(Output) 0  "result"
+                              Name 11  ""
+                              Name 15  "gl_PrimitiveID"
+                              Name 18  "gl_SubgroupSize"
+                              Name 20  "gl_SubgroupInvocationID"
+                              Decorate 8 ArrayStride 16
+                              MemberDecorate 9(Output) 0 Offset 0
+                              Decorate 9(Output) BufferBlock
+                              Decorate 11 DescriptorSet 0
+                              Decorate 11 Binding 0
+                              Decorate 15(gl_PrimitiveID) BuiltIn PrimitiveId
+                              Decorate 18(gl_SubgroupSize) RelaxedPrecision
+                              Decorate 18(gl_SubgroupSize) BuiltIn SubgroupSize
+                              Decorate 19 RelaxedPrecision
+                              Decorate 20(gl_SubgroupInvocationID) RelaxedPrecision
+                              Decorate 20(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId
+                              Decorate 21 RelaxedPrecision
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypeVector 6(int) 4
+               8:             TypeRuntimeArray 7(ivec4)
+       9(Output):             TypeStruct 8
+              10:             TypePointer Uniform 9(Output)
+              11:     10(ptr) Variable Uniform
+              12:             TypeInt 32 1
+              13:     12(int) Constant 0
+              14:             TypePointer Input 12(int)
+15(gl_PrimitiveID):     14(ptr) Variable Input
+              17:             TypePointer Input 6(int)
+18(gl_SubgroupSize):     17(ptr) Variable Input
+20(gl_SubgroupInvocationID):     17(ptr) Variable Input
+              22:      6(int) Constant 0
+              24:             TypePointer Uniform 7(ivec4)
+         4(main):           2 Function None 3
+               5:             Label
+              16:     12(int) Load 15(gl_PrimitiveID)
+              19:      6(int) Load 18(gl_SubgroupSize)
+              21:      6(int) Load 20(gl_SubgroupInvocationID)
+              23:    7(ivec4) CompositeConstruct 19 21 22 22
+              25:     24(ptr) AccessChain 11 13 16
+                              Store 25 23
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.subgroup.vert.out b/Test/baseResults/spv.subgroup.vert.out
new file mode 100644
index 0000000..d1e8786
--- /dev/null
+++ b/Test/baseResults/spv.subgroup.vert.out
@@ -0,0 +1,58 @@
+spv.subgroup.vert
+// Module Version 10300
+// Generated by (magic number): 80006
+// Id's are bound by 26
+
+                              Capability Shader
+                              Capability GroupNonUniform
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4  "main" 15 18 20
+                              Source GLSL 450
+                              SourceExtension  "GL_KHR_shader_subgroup_basic"
+                              Name 4  "main"
+                              Name 9  "Output"
+                              MemberName 9(Output) 0  "result"
+                              Name 11  ""
+                              Name 15  "gl_VertexIndex"
+                              Name 18  "gl_SubgroupSize"
+                              Name 20  "gl_SubgroupInvocationID"
+                              Decorate 8 ArrayStride 16
+                              MemberDecorate 9(Output) 0 Offset 0
+                              Decorate 9(Output) BufferBlock
+                              Decorate 11 DescriptorSet 0
+                              Decorate 11 Binding 0
+                              Decorate 15(gl_VertexIndex) BuiltIn VertexIndex
+                              Decorate 18(gl_SubgroupSize) RelaxedPrecision
+                              Decorate 18(gl_SubgroupSize) BuiltIn SubgroupSize
+                              Decorate 19 RelaxedPrecision
+                              Decorate 20(gl_SubgroupInvocationID) RelaxedPrecision
+                              Decorate 20(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId
+                              Decorate 21 RelaxedPrecision
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypeVector 6(int) 4
+               8:             TypeRuntimeArray 7(ivec4)
+       9(Output):             TypeStruct 8
+              10:             TypePointer Uniform 9(Output)
+              11:     10(ptr) Variable Uniform
+              12:             TypeInt 32 1
+              13:     12(int) Constant 0
+              14:             TypePointer Input 12(int)
+15(gl_VertexIndex):     14(ptr) Variable Input
+              17:             TypePointer Input 6(int)
+18(gl_SubgroupSize):     17(ptr) Variable Input
+20(gl_SubgroupInvocationID):     17(ptr) Variable Input
+              22:      6(int) Constant 0
+              24:             TypePointer Uniform 7(ivec4)
+         4(main):           2 Function None 3
+               5:             Label
+              16:     12(int) Load 15(gl_VertexIndex)
+              19:      6(int) Load 18(gl_SubgroupSize)
+              21:      6(int) Load 20(gl_SubgroupInvocationID)
+              23:    7(ivec4) CompositeConstruct 19 21 22 22
+              25:     24(ptr) AccessChain 11 13 16
+                              Store 25 23
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.subgroupArithmetic.comp.out b/Test/baseResults/spv.subgroupArithmetic.comp.out
new file mode 100644
index 0000000..07bcb81
--- /dev/null
+++ b/Test/baseResults/spv.subgroupArithmetic.comp.out
@@ -0,0 +1,2428 @@
+spv.subgroupArithmetic.comp
+// Module Version 10300
+// Generated by (magic number): 80006
+// Id's are bound by 2085
+
+                              Capability Shader
+                              Capability Float64
+                              Capability GroupNonUniform
+                              Capability GroupNonUniformArithmetic
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main" 10 12
+                              ExecutionMode 4 LocalSize 8 1 1
+                              Source GLSL 450
+                              SourceExtension  "GL_KHR_shader_subgroup_arithmetic"
+                              SourceExtension  "GL_KHR_shader_subgroup_basic"
+                              Name 4  "main"
+                              Name 8  "invocation"
+                              Name 10  "gl_SubgroupInvocationID"
+                              Name 12  "gl_SubgroupSize"
+                              Name 24  "Buffers"
+                              MemberName 24(Buffers) 0  "f4"
+                              MemberName 24(Buffers) 1  "i4"
+                              MemberName 24(Buffers) 2  "u4"
+                              MemberName 24(Buffers) 3  "d4"
+                              Name 27  "data"
+                              Decorate 10(gl_SubgroupInvocationID) RelaxedPrecision
+                              Decorate 10(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId
+                              Decorate 11 RelaxedPrecision
+                              Decorate 12(gl_SubgroupSize) RelaxedPrecision
+                              Decorate 12(gl_SubgroupSize) BuiltIn SubgroupSize
+                              Decorate 13 RelaxedPrecision
+                              Decorate 14 RelaxedPrecision
+                              Decorate 16 RelaxedPrecision
+                              MemberDecorate 24(Buffers) 0 Offset 0
+                              MemberDecorate 24(Buffers) 1 Offset 16
+                              MemberDecorate 24(Buffers) 2 Offset 32
+                              MemberDecorate 24(Buffers) 3 Offset 64
+                              Decorate 24(Buffers) BufferBlock
+                              Decorate 27(data) DescriptorSet 0
+                              Decorate 27(data) Binding 0
+                              Decorate 2084 BuiltIn WorkgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypePointer Function 6(int)
+               9:             TypePointer Input 6(int)
+10(gl_SubgroupInvocationID):      9(ptr) Variable Input
+12(gl_SubgroupSize):      9(ptr) Variable Input
+              15:      6(int) Constant 4
+              17:             TypeFloat 32
+              18:             TypeVector 17(float) 4
+              19:             TypeInt 32 1
+              20:             TypeVector 19(int) 4
+              21:             TypeVector 6(int) 4
+              22:             TypeFloat 64
+              23:             TypeVector 22(float) 4
+     24(Buffers):             TypeStruct 18(fvec4) 20(ivec4) 21(ivec4) 23(fvec4)
+              25:             TypeArray 24(Buffers) 15
+              26:             TypePointer Uniform 25
+        27(data):     26(ptr) Variable Uniform
+              29:     19(int) Constant 0
+              30:      6(int) Constant 0
+              31:             TypePointer Uniform 17(float)
+              34:      6(int) Constant 3
+              38:     19(int) Constant 1
+              39:             TypeVector 17(float) 2
+              40:             TypePointer Uniform 18(fvec4)
+              49:     19(int) Constant 2
+              50:             TypeVector 17(float) 3
+              59:     19(int) Constant 3
+              65:             TypePointer Uniform 19(int)
+              71:             TypeVector 19(int) 2
+              72:             TypePointer Uniform 20(ivec4)
+              81:             TypeVector 19(int) 3
+              95:             TypePointer Uniform 6(int)
+             101:             TypeVector 6(int) 2
+             102:             TypePointer Uniform 21(ivec4)
+             111:             TypeVector 6(int) 3
+             125:             TypePointer Uniform 22(float)
+             131:             TypeVector 22(float) 2
+             132:             TypePointer Uniform 23(fvec4)
+             141:             TypeVector 22(float) 3
+             521:             TypeBool
+             530:   71(ivec2) ConstantComposite 29 29
+             531:             TypeVector 521(bool) 2
+             534:   71(ivec2) ConstantComposite 38 38
+             543:   81(ivec3) ConstantComposite 29 29 29
+             544:             TypeVector 521(bool) 3
+             547:   81(ivec3) ConstantComposite 38 38 38
+             555:   20(ivec4) ConstantComposite 29 29 29 29
+             556:             TypeVector 521(bool) 4
+             559:   20(ivec4) ConstantComposite 38 38 38 38
+            2082:      6(int) Constant 8
+            2083:      6(int) Constant 1
+            2084:  111(ivec3) ConstantComposite 2082 2083 2083
+         4(main):           2 Function None 3
+               5:             Label
+   8(invocation):      7(ptr) Variable Function
+              11:      6(int) Load 10(gl_SubgroupInvocationID)
+              13:      6(int) Load 12(gl_SubgroupSize)
+              14:      6(int) IAdd 11 13
+              16:      6(int) UMod 14 15
+                              Store 8(invocation) 16
+              28:      6(int) Load 8(invocation)
+              32:     31(ptr) AccessChain 27(data) 29 29 30
+              33:   17(float) Load 32
+              35:   17(float) GroupNonUniformFAdd 34 Reduce 33
+              36:     31(ptr) AccessChain 27(data) 28 29 30
+                              Store 36 35
+              37:      6(int) Load 8(invocation)
+              41:     40(ptr) AccessChain 27(data) 38 29
+              42:   18(fvec4) Load 41
+              43:   39(fvec2) VectorShuffle 42 42 0 1
+              44:   39(fvec2) GroupNonUniformFAdd 34 Reduce 43
+              45:     40(ptr) AccessChain 27(data) 37 29
+              46:   18(fvec4) Load 45
+              47:   18(fvec4) VectorShuffle 46 44 4 5 2 3
+                              Store 45 47
+              48:      6(int) Load 8(invocation)
+              51:     40(ptr) AccessChain 27(data) 49 29
+              52:   18(fvec4) Load 51
+              53:   50(fvec3) VectorShuffle 52 52 0 1 2
+              54:   50(fvec3) GroupNonUniformFAdd 34 Reduce 53
+              55:     40(ptr) AccessChain 27(data) 48 29
+              56:   18(fvec4) Load 55
+              57:   18(fvec4) VectorShuffle 56 54 4 5 6 3
+                              Store 55 57
+              58:      6(int) Load 8(invocation)
+              60:     40(ptr) AccessChain 27(data) 59 29
+              61:   18(fvec4) Load 60
+              62:   18(fvec4) GroupNonUniformFAdd 34 Reduce 61
+              63:     40(ptr) AccessChain 27(data) 58 29
+                              Store 63 62
+              64:      6(int) Load 8(invocation)
+              66:     65(ptr) AccessChain 27(data) 29 38 30
+              67:     19(int) Load 66
+              68:     19(int) GroupNonUniformIAdd 34 Reduce 67
+              69:     65(ptr) AccessChain 27(data) 64 38 30
+                              Store 69 68
+              70:      6(int) Load 8(invocation)
+              73:     72(ptr) AccessChain 27(data) 38 38
+              74:   20(ivec4) Load 73
+              75:   71(ivec2) VectorShuffle 74 74 0 1
+              76:   71(ivec2) GroupNonUniformIAdd 34 Reduce 75
+              77:     72(ptr) AccessChain 27(data) 70 38
+              78:   20(ivec4) Load 77
+              79:   20(ivec4) VectorShuffle 78 76 4 5 2 3
+                              Store 77 79
+              80:      6(int) Load 8(invocation)
+              82:     72(ptr) AccessChain 27(data) 49 38
+              83:   20(ivec4) Load 82
+              84:   81(ivec3) VectorShuffle 83 83 0 1 2
+              85:   81(ivec3) GroupNonUniformIAdd 34 Reduce 84
+              86:     72(ptr) AccessChain 27(data) 80 38
+              87:   20(ivec4) Load 86
+              88:   20(ivec4) VectorShuffle 87 85 4 5 6 3
+                              Store 86 88
+              89:      6(int) Load 8(invocation)
+              90:     72(ptr) AccessChain 27(data) 59 38
+              91:   20(ivec4) Load 90
+              92:   20(ivec4) GroupNonUniformIAdd 34 Reduce 91
+              93:     72(ptr) AccessChain 27(data) 89 38
+                              Store 93 92
+              94:      6(int) Load 8(invocation)
+              96:     95(ptr) AccessChain 27(data) 29 49 30
+              97:      6(int) Load 96
+              98:      6(int) GroupNonUniformIAdd 34 Reduce 97
+              99:     95(ptr) AccessChain 27(data) 94 49 30
+                              Store 99 98
+             100:      6(int) Load 8(invocation)
+             103:    102(ptr) AccessChain 27(data) 38 49
+             104:   21(ivec4) Load 103
+             105:  101(ivec2) VectorShuffle 104 104 0 1
+             106:  101(ivec2) GroupNonUniformIAdd 34 Reduce 105
+             107:    102(ptr) AccessChain 27(data) 100 49
+             108:   21(ivec4) Load 107
+             109:   21(ivec4) VectorShuffle 108 106 4 5 2 3
+                              Store 107 109
+             110:      6(int) Load 8(invocation)
+             112:    102(ptr) AccessChain 27(data) 49 49
+             113:   21(ivec4) Load 112
+             114:  111(ivec3) VectorShuffle 113 113 0 1 2
+             115:  111(ivec3) GroupNonUniformIAdd 34 Reduce 114
+             116:    102(ptr) AccessChain 27(data) 110 49
+             117:   21(ivec4) Load 116
+             118:   21(ivec4) VectorShuffle 117 115 4 5 6 3
+                              Store 116 118
+             119:      6(int) Load 8(invocation)
+             120:    102(ptr) AccessChain 27(data) 59 49
+             121:   21(ivec4) Load 120
+             122:   21(ivec4) GroupNonUniformIAdd 34 Reduce 121
+             123:    102(ptr) AccessChain 27(data) 119 49
+                              Store 123 122
+             124:      6(int) Load 8(invocation)
+             126:    125(ptr) AccessChain 27(data) 29 59 30
+             127:   22(float) Load 126
+             128:   22(float) GroupNonUniformFAdd 34 Reduce 127
+             129:    125(ptr) AccessChain 27(data) 124 59 30
+                              Store 129 128
+             130:      6(int) Load 8(invocation)
+             133:    132(ptr) AccessChain 27(data) 38 59
+             134:   23(fvec4) Load 133
+             135:  131(fvec2) VectorShuffle 134 134 0 1
+             136:  131(fvec2) GroupNonUniformFAdd 34 Reduce 135
+             137:    132(ptr) AccessChain 27(data) 130 59
+             138:   23(fvec4) Load 137
+             139:   23(fvec4) VectorShuffle 138 136 4 5 2 3
+                              Store 137 139
+             140:      6(int) Load 8(invocation)
+             142:    132(ptr) AccessChain 27(data) 49 59
+             143:   23(fvec4) Load 142
+             144:  141(fvec3) VectorShuffle 143 143 0 1 2
+             145:  141(fvec3) GroupNonUniformFAdd 34 Reduce 144
+             146:    132(ptr) AccessChain 27(data) 140 59
+             147:   23(fvec4) Load 146
+             148:   23(fvec4) VectorShuffle 147 145 4 5 6 3
+                              Store 146 148
+             149:      6(int) Load 8(invocation)
+             150:    132(ptr) AccessChain 27(data) 59 59
+             151:   23(fvec4) Load 150
+             152:   23(fvec4) GroupNonUniformFAdd 34 Reduce 151
+             153:    132(ptr) AccessChain 27(data) 149 59
+                              Store 153 152
+             154:      6(int) Load 8(invocation)
+             155:     31(ptr) AccessChain 27(data) 29 29 30
+             156:   17(float) Load 155
+             157:   17(float) GroupNonUniformFMul 34 Reduce 156
+             158:     31(ptr) AccessChain 27(data) 154 29 30
+                              Store 158 157
+             159:      6(int) Load 8(invocation)
+             160:     40(ptr) AccessChain 27(data) 38 29
+             161:   18(fvec4) Load 160
+             162:   39(fvec2) VectorShuffle 161 161 0 1
+             163:   39(fvec2) GroupNonUniformFMul 34 Reduce 162
+             164:     40(ptr) AccessChain 27(data) 159 29
+             165:   18(fvec4) Load 164
+             166:   18(fvec4) VectorShuffle 165 163 4 5 2 3
+                              Store 164 166
+             167:      6(int) Load 8(invocation)
+             168:     40(ptr) AccessChain 27(data) 49 29
+             169:   18(fvec4) Load 168
+             170:   50(fvec3) VectorShuffle 169 169 0 1 2
+             171:   50(fvec3) GroupNonUniformFMul 34 Reduce 170
+             172:     40(ptr) AccessChain 27(data) 167 29
+             173:   18(fvec4) Load 172
+             174:   18(fvec4) VectorShuffle 173 171 4 5 6 3
+                              Store 172 174
+             175:      6(int) Load 8(invocation)
+             176:     40(ptr) AccessChain 27(data) 59 29
+             177:   18(fvec4) Load 176
+             178:   18(fvec4) GroupNonUniformFMul 34 Reduce 177
+             179:     40(ptr) AccessChain 27(data) 175 29
+                              Store 179 178
+             180:      6(int) Load 8(invocation)
+             181:     65(ptr) AccessChain 27(data) 29 38 30
+             182:     19(int) Load 181
+             183:     19(int) GroupNonUniformIMul 34 Reduce 182
+             184:     65(ptr) AccessChain 27(data) 180 38 30
+                              Store 184 183
+             185:      6(int) Load 8(invocation)
+             186:     72(ptr) AccessChain 27(data) 38 38
+             187:   20(ivec4) Load 186
+             188:   71(ivec2) VectorShuffle 187 187 0 1
+             189:   71(ivec2) GroupNonUniformIMul 34 Reduce 188
+             190:     72(ptr) AccessChain 27(data) 185 38
+             191:   20(ivec4) Load 190
+             192:   20(ivec4) VectorShuffle 191 189 4 5 2 3
+                              Store 190 192
+             193:      6(int) Load 8(invocation)
+             194:     72(ptr) AccessChain 27(data) 49 38
+             195:   20(ivec4) Load 194
+             196:   81(ivec3) VectorShuffle 195 195 0 1 2
+             197:   81(ivec3) GroupNonUniformIMul 34 Reduce 196
+             198:     72(ptr) AccessChain 27(data) 193 38
+             199:   20(ivec4) Load 198
+             200:   20(ivec4) VectorShuffle 199 197 4 5 6 3
+                              Store 198 200
+             201:      6(int) Load 8(invocation)
+             202:     72(ptr) AccessChain 27(data) 59 38
+             203:   20(ivec4) Load 202
+             204:   20(ivec4) GroupNonUniformIMul 34 Reduce 203
+             205:     72(ptr) AccessChain 27(data) 201 38
+                              Store 205 204
+             206:      6(int) Load 8(invocation)
+             207:     95(ptr) AccessChain 27(data) 29 49 30
+             208:      6(int) Load 207
+             209:      6(int) GroupNonUniformIMul 34 Reduce 208
+             210:     95(ptr) AccessChain 27(data) 206 49 30
+                              Store 210 209
+             211:      6(int) Load 8(invocation)
+             212:    102(ptr) AccessChain 27(data) 38 49
+             213:   21(ivec4) Load 212
+             214:  101(ivec2) VectorShuffle 213 213 0 1
+             215:  101(ivec2) GroupNonUniformIMul 34 Reduce 214
+             216:    102(ptr) AccessChain 27(data) 211 49
+             217:   21(ivec4) Load 216
+             218:   21(ivec4) VectorShuffle 217 215 4 5 2 3
+                              Store 216 218
+             219:      6(int) Load 8(invocation)
+             220:    102(ptr) AccessChain 27(data) 49 49
+             221:   21(ivec4) Load 220
+             222:  111(ivec3) VectorShuffle 221 221 0 1 2
+             223:  111(ivec3) GroupNonUniformIMul 34 Reduce 222
+             224:    102(ptr) AccessChain 27(data) 219 49
+             225:   21(ivec4) Load 224
+             226:   21(ivec4) VectorShuffle 225 223 4 5 6 3
+                              Store 224 226
+             227:      6(int) Load 8(invocation)
+             228:    102(ptr) AccessChain 27(data) 59 49
+             229:   21(ivec4) Load 228
+             230:   21(ivec4) GroupNonUniformIMul 34 Reduce 229
+             231:    102(ptr) AccessChain 27(data) 227 49
+                              Store 231 230
+             232:      6(int) Load 8(invocation)
+             233:    125(ptr) AccessChain 27(data) 29 59 30
+             234:   22(float) Load 233
+             235:   22(float) GroupNonUniformFMul 34 Reduce 234
+             236:    125(ptr) AccessChain 27(data) 232 59 30
+                              Store 236 235
+             237:      6(int) Load 8(invocation)
+             238:    132(ptr) AccessChain 27(data) 38 59
+             239:   23(fvec4) Load 238
+             240:  131(fvec2) VectorShuffle 239 239 0 1
+             241:  131(fvec2) GroupNonUniformFMul 34 Reduce 240
+             242:    132(ptr) AccessChain 27(data) 237 59
+             243:   23(fvec4) Load 242
+             244:   23(fvec4) VectorShuffle 243 241 4 5 2 3
+                              Store 242 244
+             245:      6(int) Load 8(invocation)
+             246:    132(ptr) AccessChain 27(data) 49 59
+             247:   23(fvec4) Load 246
+             248:  141(fvec3) VectorShuffle 247 247 0 1 2
+             249:  141(fvec3) GroupNonUniformFMul 34 Reduce 248
+             250:    132(ptr) AccessChain 27(data) 245 59
+             251:   23(fvec4) Load 250
+             252:   23(fvec4) VectorShuffle 251 249 4 5 6 3
+                              Store 250 252
+             253:      6(int) Load 8(invocation)
+             254:    132(ptr) AccessChain 27(data) 59 59
+             255:   23(fvec4) Load 254
+             256:   23(fvec4) GroupNonUniformFMul 34 Reduce 255
+             257:    132(ptr) AccessChain 27(data) 253 59
+                              Store 257 256
+             258:      6(int) Load 8(invocation)
+             259:     31(ptr) AccessChain 27(data) 29 29 30
+             260:   17(float) Load 259
+             261:   17(float) GroupNonUniformFMin 34 Reduce 260
+             262:     31(ptr) AccessChain 27(data) 258 29 30
+                              Store 262 261
+             263:      6(int) Load 8(invocation)
+             264:     40(ptr) AccessChain 27(data) 38 29
+             265:   18(fvec4) Load 264
+             266:   39(fvec2) VectorShuffle 265 265 0 1
+             267:   39(fvec2) GroupNonUniformFMin 34 Reduce 266
+             268:     40(ptr) AccessChain 27(data) 263 29
+             269:   18(fvec4) Load 268
+             270:   18(fvec4) VectorShuffle 269 267 4 5 2 3
+                              Store 268 270
+             271:      6(int) Load 8(invocation)
+             272:     40(ptr) AccessChain 27(data) 49 29
+             273:   18(fvec4) Load 272
+             274:   50(fvec3) VectorShuffle 273 273 0 1 2
+             275:   50(fvec3) GroupNonUniformFMin 34 Reduce 274
+             276:     40(ptr) AccessChain 27(data) 271 29
+             277:   18(fvec4) Load 276
+             278:   18(fvec4) VectorShuffle 277 275 4 5 6 3
+                              Store 276 278
+             279:      6(int) Load 8(invocation)
+             280:     40(ptr) AccessChain 27(data) 59 29
+             281:   18(fvec4) Load 280
+             282:   18(fvec4) GroupNonUniformFMin 34 Reduce 281
+             283:     40(ptr) AccessChain 27(data) 279 29
+                              Store 283 282
+             284:      6(int) Load 8(invocation)
+             285:     65(ptr) AccessChain 27(data) 29 38 30
+             286:     19(int) Load 285
+             287:     19(int) GroupNonUniformSMin 34 Reduce 286
+             288:     65(ptr) AccessChain 27(data) 284 38 30
+                              Store 288 287
+             289:      6(int) Load 8(invocation)
+             290:     72(ptr) AccessChain 27(data) 38 38
+             291:   20(ivec4) Load 290
+             292:   71(ivec2) VectorShuffle 291 291 0 1
+             293:   71(ivec2) GroupNonUniformSMin 34 Reduce 292
+             294:     72(ptr) AccessChain 27(data) 289 38
+             295:   20(ivec4) Load 294
+             296:   20(ivec4) VectorShuffle 295 293 4 5 2 3
+                              Store 294 296
+             297:      6(int) Load 8(invocation)
+             298:     72(ptr) AccessChain 27(data) 49 38
+             299:   20(ivec4) Load 298
+             300:   81(ivec3) VectorShuffle 299 299 0 1 2
+             301:   81(ivec3) GroupNonUniformSMin 34 Reduce 300
+             302:     72(ptr) AccessChain 27(data) 297 38
+             303:   20(ivec4) Load 302
+             304:   20(ivec4) VectorShuffle 303 301 4 5 6 3
+                              Store 302 304
+             305:      6(int) Load 8(invocation)
+             306:     72(ptr) AccessChain 27(data) 59 38
+             307:   20(ivec4) Load 306
+             308:   20(ivec4) GroupNonUniformSMin 34 Reduce 307
+             309:     72(ptr) AccessChain 27(data) 305 38
+                              Store 309 308
+             310:      6(int) Load 8(invocation)
+             311:     95(ptr) AccessChain 27(data) 29 49 30
+             312:      6(int) Load 311
+             313:      6(int) GroupNonUniformUMin 34 Reduce 312
+             314:     95(ptr) AccessChain 27(data) 310 49 30
+                              Store 314 313
+             315:      6(int) Load 8(invocation)
+             316:    102(ptr) AccessChain 27(data) 38 49
+             317:   21(ivec4) Load 316
+             318:  101(ivec2) VectorShuffle 317 317 0 1
+             319:  101(ivec2) GroupNonUniformUMin 34 Reduce 318
+             320:    102(ptr) AccessChain 27(data) 315 49
+             321:   21(ivec4) Load 320
+             322:   21(ivec4) VectorShuffle 321 319 4 5 2 3
+                              Store 320 322
+             323:      6(int) Load 8(invocation)
+             324:    102(ptr) AccessChain 27(data) 49 49
+             325:   21(ivec4) Load 324
+             326:  111(ivec3) VectorShuffle 325 325 0 1 2
+             327:  111(ivec3) GroupNonUniformUMin 34 Reduce 326
+             328:    102(ptr) AccessChain 27(data) 323 49
+             329:   21(ivec4) Load 328
+             330:   21(ivec4) VectorShuffle 329 327 4 5 6 3
+                              Store 328 330
+             331:      6(int) Load 8(invocation)
+             332:    102(ptr) AccessChain 27(data) 59 49
+             333:   21(ivec4) Load 332
+             334:   21(ivec4) GroupNonUniformUMin 34 Reduce 333
+             335:    102(ptr) AccessChain 27(data) 331 49
+                              Store 335 334
+             336:      6(int) Load 8(invocation)
+             337:    125(ptr) AccessChain 27(data) 29 59 30
+             338:   22(float) Load 337
+             339:   22(float) GroupNonUniformFMin 34 Reduce 338
+             340:    125(ptr) AccessChain 27(data) 336 59 30
+                              Store 340 339
+             341:      6(int) Load 8(invocation)
+             342:    132(ptr) AccessChain 27(data) 38 59
+             343:   23(fvec4) Load 342
+             344:  131(fvec2) VectorShuffle 343 343 0 1
+             345:  131(fvec2) GroupNonUniformFMin 34 Reduce 344
+             346:    132(ptr) AccessChain 27(data) 341 59
+             347:   23(fvec4) Load 346
+             348:   23(fvec4) VectorShuffle 347 345 4 5 2 3
+                              Store 346 348
+             349:      6(int) Load 8(invocation)
+             350:    132(ptr) AccessChain 27(data) 49 59
+             351:   23(fvec4) Load 350
+             352:  141(fvec3) VectorShuffle 351 351 0 1 2
+             353:  141(fvec3) GroupNonUniformFMin 34 Reduce 352
+             354:    132(ptr) AccessChain 27(data) 349 59
+             355:   23(fvec4) Load 354
+             356:   23(fvec4) VectorShuffle 355 353 4 5 6 3
+                              Store 354 356
+             357:      6(int) Load 8(invocation)
+             358:    132(ptr) AccessChain 27(data) 59 59
+             359:   23(fvec4) Load 358
+             360:   23(fvec4) GroupNonUniformFMin 34 Reduce 359
+             361:    132(ptr) AccessChain 27(data) 357 59
+                              Store 361 360
+             362:      6(int) Load 8(invocation)
+             363:     31(ptr) AccessChain 27(data) 29 29 30
+             364:   17(float) Load 363
+             365:   17(float) GroupNonUniformFMax 34 Reduce 364
+             366:     31(ptr) AccessChain 27(data) 362 29 30
+                              Store 366 365
+             367:      6(int) Load 8(invocation)
+             368:     40(ptr) AccessChain 27(data) 38 29
+             369:   18(fvec4) Load 368
+             370:   39(fvec2) VectorShuffle 369 369 0 1
+             371:   39(fvec2) GroupNonUniformFMax 34 Reduce 370
+             372:     40(ptr) AccessChain 27(data) 367 29
+             373:   18(fvec4) Load 372
+             374:   18(fvec4) VectorShuffle 373 371 4 5 2 3
+                              Store 372 374
+             375:      6(int) Load 8(invocation)
+             376:     40(ptr) AccessChain 27(data) 49 29
+             377:   18(fvec4) Load 376
+             378:   50(fvec3) VectorShuffle 377 377 0 1 2
+             379:   50(fvec3) GroupNonUniformFMax 34 Reduce 378
+             380:     40(ptr) AccessChain 27(data) 375 29
+             381:   18(fvec4) Load 380
+             382:   18(fvec4) VectorShuffle 381 379 4 5 6 3
+                              Store 380 382
+             383:      6(int) Load 8(invocation)
+             384:     40(ptr) AccessChain 27(data) 59 29
+             385:   18(fvec4) Load 384
+             386:   18(fvec4) GroupNonUniformFMax 34 Reduce 385
+             387:     40(ptr) AccessChain 27(data) 383 29
+                              Store 387 386
+             388:      6(int) Load 8(invocation)
+             389:     65(ptr) AccessChain 27(data) 29 38 30
+             390:     19(int) Load 389
+             391:     19(int) GroupNonUniformSMax 34 Reduce 390
+             392:     65(ptr) AccessChain 27(data) 388 38 30
+                              Store 392 391
+             393:      6(int) Load 8(invocation)
+             394:     72(ptr) AccessChain 27(data) 38 38
+             395:   20(ivec4) Load 394
+             396:   71(ivec2) VectorShuffle 395 395 0 1
+             397:   71(ivec2) GroupNonUniformSMax 34 Reduce 396
+             398:     72(ptr) AccessChain 27(data) 393 38
+             399:   20(ivec4) Load 398
+             400:   20(ivec4) VectorShuffle 399 397 4 5 2 3
+                              Store 398 400
+             401:      6(int) Load 8(invocation)
+             402:     72(ptr) AccessChain 27(data) 49 38
+             403:   20(ivec4) Load 402
+             404:   81(ivec3) VectorShuffle 403 403 0 1 2
+             405:   81(ivec3) GroupNonUniformSMax 34 Reduce 404
+             406:     72(ptr) AccessChain 27(data) 401 38
+             407:   20(ivec4) Load 406
+             408:   20(ivec4) VectorShuffle 407 405 4 5 6 3
+                              Store 406 408
+             409:      6(int) Load 8(invocation)
+             410:     72(ptr) AccessChain 27(data) 59 38
+             411:   20(ivec4) Load 410
+             412:   20(ivec4) GroupNonUniformSMax 34 Reduce 411
+             413:     72(ptr) AccessChain 27(data) 409 38
+                              Store 413 412
+             414:      6(int) Load 8(invocation)
+             415:     95(ptr) AccessChain 27(data) 29 49 30
+             416:      6(int) Load 415
+             417:      6(int) GroupNonUniformUMax 34 Reduce 416
+             418:     95(ptr) AccessChain 27(data) 414 49 30
+                              Store 418 417
+             419:      6(int) Load 8(invocation)
+             420:    102(ptr) AccessChain 27(data) 38 49
+             421:   21(ivec4) Load 420
+             422:  101(ivec2) VectorShuffle 421 421 0 1
+             423:  101(ivec2) GroupNonUniformUMax 34 Reduce 422
+             424:    102(ptr) AccessChain 27(data) 419 49
+             425:   21(ivec4) Load 424
+             426:   21(ivec4) VectorShuffle 425 423 4 5 2 3
+                              Store 424 426
+             427:      6(int) Load 8(invocation)
+             428:    102(ptr) AccessChain 27(data) 49 49
+             429:   21(ivec4) Load 428
+             430:  111(ivec3) VectorShuffle 429 429 0 1 2
+             431:  111(ivec3) GroupNonUniformUMax 34 Reduce 430
+             432:    102(ptr) AccessChain 27(data) 427 49
+             433:   21(ivec4) Load 432
+             434:   21(ivec4) VectorShuffle 433 431 4 5 6 3
+                              Store 432 434
+             435:      6(int) Load 8(invocation)
+             436:    102(ptr) AccessChain 27(data) 59 49
+             437:   21(ivec4) Load 436
+             438:   21(ivec4) GroupNonUniformUMax 34 Reduce 437
+             439:    102(ptr) AccessChain 27(data) 435 49
+                              Store 439 438
+             440:      6(int) Load 8(invocation)
+             441:    125(ptr) AccessChain 27(data) 29 59 30
+             442:   22(float) Load 441
+             443:   22(float) GroupNonUniformFMax 34 Reduce 442
+             444:    125(ptr) AccessChain 27(data) 440 59 30
+                              Store 444 443
+             445:      6(int) Load 8(invocation)
+             446:    132(ptr) AccessChain 27(data) 38 59
+             447:   23(fvec4) Load 446
+             448:  131(fvec2) VectorShuffle 447 447 0 1
+             449:  131(fvec2) GroupNonUniformFMax 34 Reduce 448
+             450:    132(ptr) AccessChain 27(data) 445 59
+             451:   23(fvec4) Load 450
+             452:   23(fvec4) VectorShuffle 451 449 4 5 2 3
+                              Store 450 452
+             453:      6(int) Load 8(invocation)
+             454:    132(ptr) AccessChain 27(data) 49 59
+             455:   23(fvec4) Load 454
+             456:  141(fvec3) VectorShuffle 455 455 0 1 2
+             457:  141(fvec3) GroupNonUniformFMax 34 Reduce 456
+             458:    132(ptr) AccessChain 27(data) 453 59
+             459:   23(fvec4) Load 458
+             460:   23(fvec4) VectorShuffle 459 457 4 5 6 3
+                              Store 458 460
+             461:      6(int) Load 8(invocation)
+             462:    132(ptr) AccessChain 27(data) 59 59
+             463:   23(fvec4) Load 462
+             464:   23(fvec4) GroupNonUniformFMax 34 Reduce 463
+             465:    132(ptr) AccessChain 27(data) 461 59
+                              Store 465 464
+             466:      6(int) Load 8(invocation)
+             467:     65(ptr) AccessChain 27(data) 29 38 30
+             468:     19(int) Load 467
+             469:     19(int) GroupNonUniformBitwiseAnd 34 Reduce 468
+             470:     65(ptr) AccessChain 27(data) 466 38 30
+                              Store 470 469
+             471:      6(int) Load 8(invocation)
+             472:     72(ptr) AccessChain 27(data) 38 38
+             473:   20(ivec4) Load 472
+             474:   71(ivec2) VectorShuffle 473 473 0 1
+             475:   71(ivec2) GroupNonUniformBitwiseAnd 34 Reduce 474
+             476:     72(ptr) AccessChain 27(data) 471 38
+             477:   20(ivec4) Load 476
+             478:   20(ivec4) VectorShuffle 477 475 4 5 2 3
+                              Store 476 478
+             479:      6(int) Load 8(invocation)
+             480:     72(ptr) AccessChain 27(data) 49 38
+             481:   20(ivec4) Load 480
+             482:   81(ivec3) VectorShuffle 481 481 0 1 2
+             483:   81(ivec3) GroupNonUniformBitwiseAnd 34 Reduce 482
+             484:     72(ptr) AccessChain 27(data) 479 38
+             485:   20(ivec4) Load 484
+             486:   20(ivec4) VectorShuffle 485 483 4 5 6 3
+                              Store 484 486
+             487:      6(int) Load 8(invocation)
+             488:     72(ptr) AccessChain 27(data) 59 38
+             489:   20(ivec4) Load 488
+             490:   20(ivec4) GroupNonUniformBitwiseAnd 34 Reduce 489
+             491:     72(ptr) AccessChain 27(data) 487 38
+                              Store 491 490
+             492:      6(int) Load 8(invocation)
+             493:     95(ptr) AccessChain 27(data) 29 49 30
+             494:      6(int) Load 493
+             495:      6(int) GroupNonUniformBitwiseAnd 34 Reduce 494
+             496:     95(ptr) AccessChain 27(data) 492 49 30
+                              Store 496 495
+             497:      6(int) Load 8(invocation)
+             498:    102(ptr) AccessChain 27(data) 38 49
+             499:   21(ivec4) Load 498
+             500:  101(ivec2) VectorShuffle 499 499 0 1
+             501:  101(ivec2) GroupNonUniformBitwiseAnd 34 Reduce 500
+             502:    102(ptr) AccessChain 27(data) 497 49
+             503:   21(ivec4) Load 502
+             504:   21(ivec4) VectorShuffle 503 501 4 5 2 3
+                              Store 502 504
+             505:      6(int) Load 8(invocation)
+             506:    102(ptr) AccessChain 27(data) 49 49
+             507:   21(ivec4) Load 506
+             508:  111(ivec3) VectorShuffle 507 507 0 1 2
+             509:  111(ivec3) GroupNonUniformBitwiseAnd 34 Reduce 508
+             510:    102(ptr) AccessChain 27(data) 505 49
+             511:   21(ivec4) Load 510
+             512:   21(ivec4) VectorShuffle 511 509 4 5 6 3
+                              Store 510 512
+             513:      6(int) Load 8(invocation)
+             514:    102(ptr) AccessChain 27(data) 59 49
+             515:   21(ivec4) Load 514
+             516:   21(ivec4) GroupNonUniformBitwiseAnd 34 Reduce 515
+             517:    102(ptr) AccessChain 27(data) 513 49
+                              Store 517 516
+             518:      6(int) Load 8(invocation)
+             519:     65(ptr) AccessChain 27(data) 29 38 30
+             520:     19(int) Load 519
+             522:   521(bool) SLessThan 520 29
+             523:   521(bool) GroupNonUniformLogicalAnd 34 Reduce 522
+             524:     19(int) Select 523 38 29
+             525:     65(ptr) AccessChain 27(data) 518 38 30
+                              Store 525 524
+             526:      6(int) Load 8(invocation)
+             527:     72(ptr) AccessChain 27(data) 38 38
+             528:   20(ivec4) Load 527
+             529:   71(ivec2) VectorShuffle 528 528 0 1
+             532:  531(bvec2) SLessThan 529 530
+             533:  531(bvec2) GroupNonUniformLogicalAnd 34 Reduce 532
+             535:   71(ivec2) Select 533 534 530
+             536:     72(ptr) AccessChain 27(data) 526 38
+             537:   20(ivec4) Load 536
+             538:   20(ivec4) VectorShuffle 537 535 4 5 2 3
+                              Store 536 538
+             539:      6(int) Load 8(invocation)
+             540:     72(ptr) AccessChain 27(data) 38 38
+             541:   20(ivec4) Load 540
+             542:   81(ivec3) VectorShuffle 541 541 0 1 2
+             545:  544(bvec3) SLessThan 542 543
+             546:  544(bvec3) GroupNonUniformLogicalAnd 34 Reduce 545
+             548:   81(ivec3) Select 546 547 543
+             549:     72(ptr) AccessChain 27(data) 539 38
+             550:   20(ivec4) Load 549
+             551:   20(ivec4) VectorShuffle 550 548 4 5 6 3
+                              Store 549 551
+             552:      6(int) Load 8(invocation)
+             553:     72(ptr) AccessChain 27(data) 38 38
+             554:   20(ivec4) Load 553
+             557:  556(bvec4) SLessThan 554 555
+             558:  556(bvec4) GroupNonUniformLogicalAnd 34 Reduce 557
+             560:   20(ivec4) Select 558 559 555
+             561:     72(ptr) AccessChain 27(data) 552 38
+                              Store 561 560
+             562:      6(int) Load 8(invocation)
+             563:     65(ptr) AccessChain 27(data) 29 38 30
+             564:     19(int) Load 563
+             565:     19(int) GroupNonUniformBitwiseOr 34 Reduce 564
+             566:     65(ptr) AccessChain 27(data) 562 38 30
+                              Store 566 565
+             567:      6(int) Load 8(invocation)
+             568:     72(ptr) AccessChain 27(data) 38 38
+             569:   20(ivec4) Load 568
+             570:   71(ivec2) VectorShuffle 569 569 0 1
+             571:   71(ivec2) GroupNonUniformBitwiseOr 34 Reduce 570
+             572:     72(ptr) AccessChain 27(data) 567 38
+             573:   20(ivec4) Load 572
+             574:   20(ivec4) VectorShuffle 573 571 4 5 2 3
+                              Store 572 574
+             575:      6(int) Load 8(invocation)
+             576:     72(ptr) AccessChain 27(data) 49 38
+             577:   20(ivec4) Load 576
+             578:   81(ivec3) VectorShuffle 577 577 0 1 2
+             579:   81(ivec3) GroupNonUniformBitwiseOr 34 Reduce 578
+             580:     72(ptr) AccessChain 27(data) 575 38
+             581:   20(ivec4) Load 580
+             582:   20(ivec4) VectorShuffle 581 579 4 5 6 3
+                              Store 580 582
+             583:      6(int) Load 8(invocation)
+             584:     72(ptr) AccessChain 27(data) 59 38
+             585:   20(ivec4) Load 584
+             586:   20(ivec4) GroupNonUniformBitwiseOr 34 Reduce 585
+             587:     72(ptr) AccessChain 27(data) 583 38
+                              Store 587 586
+             588:      6(int) Load 8(invocation)
+             589:     95(ptr) AccessChain 27(data) 29 49 30
+             590:      6(int) Load 589
+             591:      6(int) GroupNonUniformBitwiseOr 34 Reduce 590
+             592:     95(ptr) AccessChain 27(data) 588 49 30
+                              Store 592 591
+             593:      6(int) Load 8(invocation)
+             594:    102(ptr) AccessChain 27(data) 38 49
+             595:   21(ivec4) Load 594
+             596:  101(ivec2) VectorShuffle 595 595 0 1
+             597:  101(ivec2) GroupNonUniformBitwiseOr 34 Reduce 596
+             598:    102(ptr) AccessChain 27(data) 593 49
+             599:   21(ivec4) Load 598
+             600:   21(ivec4) VectorShuffle 599 597 4 5 2 3
+                              Store 598 600
+             601:      6(int) Load 8(invocation)
+             602:    102(ptr) AccessChain 27(data) 49 49
+             603:   21(ivec4) Load 602
+             604:  111(ivec3) VectorShuffle 603 603 0 1 2
+             605:  111(ivec3) GroupNonUniformBitwiseOr 34 Reduce 604
+             606:    102(ptr) AccessChain 27(data) 601 49
+             607:   21(ivec4) Load 606
+             608:   21(ivec4) VectorShuffle 607 605 4 5 6 3
+                              Store 606 608
+             609:      6(int) Load 8(invocation)
+             610:    102(ptr) AccessChain 27(data) 59 49
+             611:   21(ivec4) Load 610
+             612:   21(ivec4) GroupNonUniformBitwiseOr 34 Reduce 611
+             613:    102(ptr) AccessChain 27(data) 609 49
+                              Store 613 612
+             614:      6(int) Load 8(invocation)
+             615:     65(ptr) AccessChain 27(data) 29 38 30
+             616:     19(int) Load 615
+             617:   521(bool) SLessThan 616 29
+             618:   521(bool) GroupNonUniformLogicalOr 34 Reduce 617
+             619:     19(int) Select 618 38 29
+             620:     65(ptr) AccessChain 27(data) 614 38 30
+                              Store 620 619
+             621:      6(int) Load 8(invocation)
+             622:     72(ptr) AccessChain 27(data) 38 38
+             623:   20(ivec4) Load 622
+             624:   71(ivec2) VectorShuffle 623 623 0 1
+             625:  531(bvec2) SLessThan 624 530
+             626:  531(bvec2) GroupNonUniformLogicalOr 34 Reduce 625
+             627:   71(ivec2) Select 626 534 530
+             628:     72(ptr) AccessChain 27(data) 621 38
+             629:   20(ivec4) Load 628
+             630:   20(ivec4) VectorShuffle 629 627 4 5 2 3
+                              Store 628 630
+             631:      6(int) Load 8(invocation)
+             632:     72(ptr) AccessChain 27(data) 38 38
+             633:   20(ivec4) Load 632
+             634:   81(ivec3) VectorShuffle 633 633 0 1 2
+             635:  544(bvec3) SLessThan 634 543
+             636:  544(bvec3) GroupNonUniformLogicalOr 34 Reduce 635
+             637:   81(ivec3) Select 636 547 543
+             638:     72(ptr) AccessChain 27(data) 631 38
+             639:   20(ivec4) Load 638
+             640:   20(ivec4) VectorShuffle 639 637 4 5 6 3
+                              Store 638 640
+             641:      6(int) Load 8(invocation)
+             642:     72(ptr) AccessChain 27(data) 38 38
+             643:   20(ivec4) Load 642
+             644:  556(bvec4) SLessThan 643 555
+             645:  556(bvec4) GroupNonUniformLogicalOr 34 Reduce 644
+             646:   20(ivec4) Select 645 559 555
+             647:     72(ptr) AccessChain 27(data) 641 38
+                              Store 647 646
+             648:      6(int) Load 8(invocation)
+             649:     65(ptr) AccessChain 27(data) 29 38 30
+             650:     19(int) Load 649
+             651:     19(int) GroupNonUniformBitwiseXor 34 Reduce 650
+             652:     65(ptr) AccessChain 27(data) 648 38 30
+                              Store 652 651
+             653:      6(int) Load 8(invocation)
+             654:     72(ptr) AccessChain 27(data) 38 38
+             655:   20(ivec4) Load 654
+             656:   71(ivec2) VectorShuffle 655 655 0 1
+             657:   71(ivec2) GroupNonUniformBitwiseXor 34 Reduce 656
+             658:     72(ptr) AccessChain 27(data) 653 38
+             659:   20(ivec4) Load 658
+             660:   20(ivec4) VectorShuffle 659 657 4 5 2 3
+                              Store 658 660
+             661:      6(int) Load 8(invocation)
+             662:     72(ptr) AccessChain 27(data) 49 38
+             663:   20(ivec4) Load 662
+             664:   81(ivec3) VectorShuffle 663 663 0 1 2
+             665:   81(ivec3) GroupNonUniformBitwiseXor 34 Reduce 664
+             666:     72(ptr) AccessChain 27(data) 661 38
+             667:   20(ivec4) Load 666
+             668:   20(ivec4) VectorShuffle 667 665 4 5 6 3
+                              Store 666 668
+             669:      6(int) Load 8(invocation)
+             670:     72(ptr) AccessChain 27(data) 59 38
+             671:   20(ivec4) Load 670
+             672:   20(ivec4) GroupNonUniformBitwiseXor 34 Reduce 671
+             673:     72(ptr) AccessChain 27(data) 669 38
+                              Store 673 672
+             674:      6(int) Load 8(invocation)
+             675:     95(ptr) AccessChain 27(data) 29 49 30
+             676:      6(int) Load 675
+             677:      6(int) GroupNonUniformBitwiseXor 34 Reduce 676
+             678:     95(ptr) AccessChain 27(data) 674 49 30
+                              Store 678 677
+             679:      6(int) Load 8(invocation)
+             680:    102(ptr) AccessChain 27(data) 38 49
+             681:   21(ivec4) Load 680
+             682:  101(ivec2) VectorShuffle 681 681 0 1
+             683:  101(ivec2) GroupNonUniformBitwiseXor 34 Reduce 682
+             684:    102(ptr) AccessChain 27(data) 679 49
+             685:   21(ivec4) Load 684
+             686:   21(ivec4) VectorShuffle 685 683 4 5 2 3
+                              Store 684 686
+             687:      6(int) Load 8(invocation)
+             688:    102(ptr) AccessChain 27(data) 49 49
+             689:   21(ivec4) Load 688
+             690:  111(ivec3) VectorShuffle 689 689 0 1 2
+             691:  111(ivec3) GroupNonUniformBitwiseXor 34 Reduce 690
+             692:    102(ptr) AccessChain 27(data) 687 49
+             693:   21(ivec4) Load 692
+             694:   21(ivec4) VectorShuffle 693 691 4 5 6 3
+                              Store 692 694
+             695:      6(int) Load 8(invocation)
+             696:    102(ptr) AccessChain 27(data) 59 49
+             697:   21(ivec4) Load 696
+             698:   21(ivec4) GroupNonUniformBitwiseXor 34 Reduce 697
+             699:    102(ptr) AccessChain 27(data) 695 49
+                              Store 699 698
+             700:      6(int) Load 8(invocation)
+             701:     65(ptr) AccessChain 27(data) 29 38 30
+             702:     19(int) Load 701
+             703:   521(bool) SLessThan 702 29
+             704:   521(bool) GroupNonUniformLogicalXor 34 Reduce 703
+             705:     19(int) Select 704 38 29
+             706:     65(ptr) AccessChain 27(data) 700 38 30
+                              Store 706 705
+             707:      6(int) Load 8(invocation)
+             708:     72(ptr) AccessChain 27(data) 38 38
+             709:   20(ivec4) Load 708
+             710:   71(ivec2) VectorShuffle 709 709 0 1
+             711:  531(bvec2) SLessThan 710 530
+             712:  531(bvec2) GroupNonUniformLogicalXor 34 Reduce 711
+             713:   71(ivec2) Select 712 534 530
+             714:     72(ptr) AccessChain 27(data) 707 38
+             715:   20(ivec4) Load 714
+             716:   20(ivec4) VectorShuffle 715 713 4 5 2 3
+                              Store 714 716
+             717:      6(int) Load 8(invocation)
+             718:     72(ptr) AccessChain 27(data) 38 38
+             719:   20(ivec4) Load 718
+             720:   81(ivec3) VectorShuffle 719 719 0 1 2
+             721:  544(bvec3) SLessThan 720 543
+             722:  544(bvec3) GroupNonUniformLogicalXor 34 Reduce 721
+             723:   81(ivec3) Select 722 547 543
+             724:     72(ptr) AccessChain 27(data) 717 38
+             725:   20(ivec4) Load 724
+             726:   20(ivec4) VectorShuffle 725 723 4 5 6 3
+                              Store 724 726
+             727:      6(int) Load 8(invocation)
+             728:     72(ptr) AccessChain 27(data) 38 38
+             729:   20(ivec4) Load 728
+             730:  556(bvec4) SLessThan 729 555
+             731:  556(bvec4) GroupNonUniformLogicalXor 34 Reduce 730
+             732:   20(ivec4) Select 731 559 555
+             733:     72(ptr) AccessChain 27(data) 727 38
+                              Store 733 732
+             734:      6(int) Load 8(invocation)
+             735:     31(ptr) AccessChain 27(data) 29 29 30
+             736:   17(float) Load 735
+             737:   17(float) GroupNonUniformFAdd 34 InclusiveScan 736
+             738:     31(ptr) AccessChain 27(data) 734 29 30
+                              Store 738 737
+             739:      6(int) Load 8(invocation)
+             740:     40(ptr) AccessChain 27(data) 38 29
+             741:   18(fvec4) Load 740
+             742:   39(fvec2) VectorShuffle 741 741 0 1
+             743:   39(fvec2) GroupNonUniformFAdd 34 InclusiveScan 742
+             744:     40(ptr) AccessChain 27(data) 739 29
+             745:   18(fvec4) Load 744
+             746:   18(fvec4) VectorShuffle 745 743 4 5 2 3
+                              Store 744 746
+             747:      6(int) Load 8(invocation)
+             748:     40(ptr) AccessChain 27(data) 49 29
+             749:   18(fvec4) Load 748
+             750:   50(fvec3) VectorShuffle 749 749 0 1 2
+             751:   50(fvec3) GroupNonUniformFAdd 34 InclusiveScan 750
+             752:     40(ptr) AccessChain 27(data) 747 29
+             753:   18(fvec4) Load 752
+             754:   18(fvec4) VectorShuffle 753 751 4 5 6 3
+                              Store 752 754
+             755:      6(int) Load 8(invocation)
+             756:     40(ptr) AccessChain 27(data) 59 29
+             757:   18(fvec4) Load 756
+             758:   18(fvec4) GroupNonUniformFAdd 34 InclusiveScan 757
+             759:     40(ptr) AccessChain 27(data) 755 29
+                              Store 759 758
+             760:      6(int) Load 8(invocation)
+             761:     65(ptr) AccessChain 27(data) 29 38 30
+             762:     19(int) Load 761
+             763:     19(int) GroupNonUniformIAdd 34 InclusiveScan 762
+             764:     65(ptr) AccessChain 27(data) 760 38 30
+                              Store 764 763
+             765:      6(int) Load 8(invocation)
+             766:     72(ptr) AccessChain 27(data) 38 38
+             767:   20(ivec4) Load 766
+             768:   71(ivec2) VectorShuffle 767 767 0 1
+             769:   71(ivec2) GroupNonUniformIAdd 34 InclusiveScan 768
+             770:     72(ptr) AccessChain 27(data) 765 38
+             771:   20(ivec4) Load 770
+             772:   20(ivec4) VectorShuffle 771 769 4 5 2 3
+                              Store 770 772
+             773:      6(int) Load 8(invocation)
+             774:     72(ptr) AccessChain 27(data) 49 38
+             775:   20(ivec4) Load 774
+             776:   81(ivec3) VectorShuffle 775 775 0 1 2
+             777:   81(ivec3) GroupNonUniformIAdd 34 InclusiveScan 776
+             778:     72(ptr) AccessChain 27(data) 773 38
+             779:   20(ivec4) Load 778
+             780:   20(ivec4) VectorShuffle 779 777 4 5 6 3
+                              Store 778 780
+             781:      6(int) Load 8(invocation)
+             782:     72(ptr) AccessChain 27(data) 59 38
+             783:   20(ivec4) Load 782
+             784:   20(ivec4) GroupNonUniformIAdd 34 InclusiveScan 783
+             785:     72(ptr) AccessChain 27(data) 781 38
+                              Store 785 784
+             786:      6(int) Load 8(invocation)
+             787:     95(ptr) AccessChain 27(data) 29 49 30
+             788:      6(int) Load 787
+             789:      6(int) GroupNonUniformIAdd 34 InclusiveScan 788
+             790:     95(ptr) AccessChain 27(data) 786 49 30
+                              Store 790 789
+             791:      6(int) Load 8(invocation)
+             792:    102(ptr) AccessChain 27(data) 38 49
+             793:   21(ivec4) Load 792
+             794:  101(ivec2) VectorShuffle 793 793 0 1
+             795:  101(ivec2) GroupNonUniformIAdd 34 InclusiveScan 794
+             796:    102(ptr) AccessChain 27(data) 791 49
+             797:   21(ivec4) Load 796
+             798:   21(ivec4) VectorShuffle 797 795 4 5 2 3
+                              Store 796 798
+             799:      6(int) Load 8(invocation)
+             800:    102(ptr) AccessChain 27(data) 49 49
+             801:   21(ivec4) Load 800
+             802:  111(ivec3) VectorShuffle 801 801 0 1 2
+             803:  111(ivec3) GroupNonUniformIAdd 34 InclusiveScan 802
+             804:    102(ptr) AccessChain 27(data) 799 49
+             805:   21(ivec4) Load 804
+             806:   21(ivec4) VectorShuffle 805 803 4 5 6 3
+                              Store 804 806
+             807:      6(int) Load 8(invocation)
+             808:    102(ptr) AccessChain 27(data) 59 49
+             809:   21(ivec4) Load 808
+             810:   21(ivec4) GroupNonUniformIAdd 34 InclusiveScan 809
+             811:    102(ptr) AccessChain 27(data) 807 49
+                              Store 811 810
+             812:      6(int) Load 8(invocation)
+             813:    125(ptr) AccessChain 27(data) 29 59 30
+             814:   22(float) Load 813
+             815:   22(float) GroupNonUniformFAdd 34 InclusiveScan 814
+             816:    125(ptr) AccessChain 27(data) 812 59 30
+                              Store 816 815
+             817:      6(int) Load 8(invocation)
+             818:    132(ptr) AccessChain 27(data) 38 59
+             819:   23(fvec4) Load 818
+             820:  131(fvec2) VectorShuffle 819 819 0 1
+             821:  131(fvec2) GroupNonUniformFAdd 34 InclusiveScan 820
+             822:    132(ptr) AccessChain 27(data) 817 59
+             823:   23(fvec4) Load 822
+             824:   23(fvec4) VectorShuffle 823 821 4 5 2 3
+                              Store 822 824
+             825:      6(int) Load 8(invocation)
+             826:    132(ptr) AccessChain 27(data) 49 59
+             827:   23(fvec4) Load 826
+             828:  141(fvec3) VectorShuffle 827 827 0 1 2
+             829:  141(fvec3) GroupNonUniformFAdd 34 InclusiveScan 828
+             830:    132(ptr) AccessChain 27(data) 825 59
+             831:   23(fvec4) Load 830
+             832:   23(fvec4) VectorShuffle 831 829 4 5 6 3
+                              Store 830 832
+             833:      6(int) Load 8(invocation)
+             834:    132(ptr) AccessChain 27(data) 59 59
+             835:   23(fvec4) Load 834
+             836:   23(fvec4) GroupNonUniformFAdd 34 InclusiveScan 835
+             837:    132(ptr) AccessChain 27(data) 833 59
+                              Store 837 836
+             838:      6(int) Load 8(invocation)
+             839:     31(ptr) AccessChain 27(data) 29 29 30
+             840:   17(float) Load 839
+             841:   17(float) GroupNonUniformFMul 34 InclusiveScan 840
+             842:     31(ptr) AccessChain 27(data) 838 29 30
+                              Store 842 841
+             843:      6(int) Load 8(invocation)
+             844:     40(ptr) AccessChain 27(data) 38 29
+             845:   18(fvec4) Load 844
+             846:   39(fvec2) VectorShuffle 845 845 0 1
+             847:   39(fvec2) GroupNonUniformFMul 34 InclusiveScan 846
+             848:     40(ptr) AccessChain 27(data) 843 29
+             849:   18(fvec4) Load 848
+             850:   18(fvec4) VectorShuffle 849 847 4 5 2 3
+                              Store 848 850
+             851:      6(int) Load 8(invocation)
+             852:     40(ptr) AccessChain 27(data) 49 29
+             853:   18(fvec4) Load 852
+             854:   50(fvec3) VectorShuffle 853 853 0 1 2
+             855:   50(fvec3) GroupNonUniformFMul 34 InclusiveScan 854
+             856:     40(ptr) AccessChain 27(data) 851 29
+             857:   18(fvec4) Load 856
+             858:   18(fvec4) VectorShuffle 857 855 4 5 6 3
+                              Store 856 858
+             859:      6(int) Load 8(invocation)
+             860:     40(ptr) AccessChain 27(data) 59 29
+             861:   18(fvec4) Load 860
+             862:   18(fvec4) GroupNonUniformFMul 34 InclusiveScan 861
+             863:     40(ptr) AccessChain 27(data) 859 29
+                              Store 863 862
+             864:      6(int) Load 8(invocation)
+             865:     65(ptr) AccessChain 27(data) 29 38 30
+             866:     19(int) Load 865
+             867:     19(int) GroupNonUniformIMul 34 InclusiveScan 866
+             868:     65(ptr) AccessChain 27(data) 864 38 30
+                              Store 868 867
+             869:      6(int) Load 8(invocation)
+             870:     72(ptr) AccessChain 27(data) 38 38
+             871:   20(ivec4) Load 870
+             872:   71(ivec2) VectorShuffle 871 871 0 1
+             873:   71(ivec2) GroupNonUniformIMul 34 InclusiveScan 872
+             874:     72(ptr) AccessChain 27(data) 869 38
+             875:   20(ivec4) Load 874
+             876:   20(ivec4) VectorShuffle 875 873 4 5 2 3
+                              Store 874 876
+             877:      6(int) Load 8(invocation)
+             878:     72(ptr) AccessChain 27(data) 49 38
+             879:   20(ivec4) Load 878
+             880:   81(ivec3) VectorShuffle 879 879 0 1 2
+             881:   81(ivec3) GroupNonUniformIMul 34 InclusiveScan 880
+             882:     72(ptr) AccessChain 27(data) 877 38
+             883:   20(ivec4) Load 882
+             884:   20(ivec4) VectorShuffle 883 881 4 5 6 3
+                              Store 882 884
+             885:      6(int) Load 8(invocation)
+             886:     72(ptr) AccessChain 27(data) 59 38
+             887:   20(ivec4) Load 886
+             888:   20(ivec4) GroupNonUniformIMul 34 InclusiveScan 887
+             889:     72(ptr) AccessChain 27(data) 885 38
+                              Store 889 888
+             890:      6(int) Load 8(invocation)
+             891:     95(ptr) AccessChain 27(data) 29 49 30
+             892:      6(int) Load 891
+             893:      6(int) GroupNonUniformIMul 34 InclusiveScan 892
+             894:     95(ptr) AccessChain 27(data) 890 49 30
+                              Store 894 893
+             895:      6(int) Load 8(invocation)
+             896:    102(ptr) AccessChain 27(data) 38 49
+             897:   21(ivec4) Load 896
+             898:  101(ivec2) VectorShuffle 897 897 0 1
+             899:  101(ivec2) GroupNonUniformIMul 34 InclusiveScan 898
+             900:    102(ptr) AccessChain 27(data) 895 49
+             901:   21(ivec4) Load 900
+             902:   21(ivec4) VectorShuffle 901 899 4 5 2 3
+                              Store 900 902
+             903:      6(int) Load 8(invocation)
+             904:    102(ptr) AccessChain 27(data) 49 49
+             905:   21(ivec4) Load 904
+             906:  111(ivec3) VectorShuffle 905 905 0 1 2
+             907:  111(ivec3) GroupNonUniformIMul 34 InclusiveScan 906
+             908:    102(ptr) AccessChain 27(data) 903 49
+             909:   21(ivec4) Load 908
+             910:   21(ivec4) VectorShuffle 909 907 4 5 6 3
+                              Store 908 910
+             911:      6(int) Load 8(invocation)
+             912:    102(ptr) AccessChain 27(data) 59 49
+             913:   21(ivec4) Load 912
+             914:   21(ivec4) GroupNonUniformIMul 34 InclusiveScan 913
+             915:    102(ptr) AccessChain 27(data) 911 49
+                              Store 915 914
+             916:      6(int) Load 8(invocation)
+             917:    125(ptr) AccessChain 27(data) 29 59 30
+             918:   22(float) Load 917
+             919:   22(float) GroupNonUniformFMul 34 InclusiveScan 918
+             920:    125(ptr) AccessChain 27(data) 916 59 30
+                              Store 920 919
+             921:      6(int) Load 8(invocation)
+             922:    132(ptr) AccessChain 27(data) 38 59
+             923:   23(fvec4) Load 922
+             924:  131(fvec2) VectorShuffle 923 923 0 1
+             925:  131(fvec2) GroupNonUniformFMul 34 InclusiveScan 924
+             926:    132(ptr) AccessChain 27(data) 921 59
+             927:   23(fvec4) Load 926
+             928:   23(fvec4) VectorShuffle 927 925 4 5 2 3
+                              Store 926 928
+             929:      6(int) Load 8(invocation)
+             930:    132(ptr) AccessChain 27(data) 49 59
+             931:   23(fvec4) Load 930
+             932:  141(fvec3) VectorShuffle 931 931 0 1 2
+             933:  141(fvec3) GroupNonUniformFMul 34 InclusiveScan 932
+             934:    132(ptr) AccessChain 27(data) 929 59
+             935:   23(fvec4) Load 934
+             936:   23(fvec4) VectorShuffle 935 933 4 5 6 3
+                              Store 934 936
+             937:      6(int) Load 8(invocation)
+             938:    132(ptr) AccessChain 27(data) 59 59
+             939:   23(fvec4) Load 938
+             940:   23(fvec4) GroupNonUniformFMul 34 InclusiveScan 939
+             941:    132(ptr) AccessChain 27(data) 937 59
+                              Store 941 940
+             942:      6(int) Load 8(invocation)
+             943:     31(ptr) AccessChain 27(data) 29 29 30
+             944:   17(float) Load 943
+             945:   17(float) GroupNonUniformFMin 34 InclusiveScan 944
+             946:     31(ptr) AccessChain 27(data) 942 29 30
+                              Store 946 945
+             947:      6(int) Load 8(invocation)
+             948:     40(ptr) AccessChain 27(data) 38 29
+             949:   18(fvec4) Load 948
+             950:   39(fvec2) VectorShuffle 949 949 0 1
+             951:   39(fvec2) GroupNonUniformFMin 34 InclusiveScan 950
+             952:     40(ptr) AccessChain 27(data) 947 29
+             953:   18(fvec4) Load 952
+             954:   18(fvec4) VectorShuffle 953 951 4 5 2 3
+                              Store 952 954
+             955:      6(int) Load 8(invocation)
+             956:     40(ptr) AccessChain 27(data) 49 29
+             957:   18(fvec4) Load 956
+             958:   50(fvec3) VectorShuffle 957 957 0 1 2
+             959:   50(fvec3) GroupNonUniformFMin 34 InclusiveScan 958
+             960:     40(ptr) AccessChain 27(data) 955 29
+             961:   18(fvec4) Load 960
+             962:   18(fvec4) VectorShuffle 961 959 4 5 6 3
+                              Store 960 962
+             963:      6(int) Load 8(invocation)
+             964:     40(ptr) AccessChain 27(data) 59 29
+             965:   18(fvec4) Load 964
+             966:   18(fvec4) GroupNonUniformFMin 34 InclusiveScan 965
+             967:     40(ptr) AccessChain 27(data) 963 29
+                              Store 967 966
+             968:      6(int) Load 8(invocation)
+             969:     65(ptr) AccessChain 27(data) 29 38 30
+             970:     19(int) Load 969
+             971:     19(int) GroupNonUniformSMin 34 InclusiveScan 970
+             972:     65(ptr) AccessChain 27(data) 968 38 30
+                              Store 972 971
+             973:      6(int) Load 8(invocation)
+             974:     72(ptr) AccessChain 27(data) 38 38
+             975:   20(ivec4) Load 974
+             976:   71(ivec2) VectorShuffle 975 975 0 1
+             977:   71(ivec2) GroupNonUniformSMin 34 InclusiveScan 976
+             978:     72(ptr) AccessChain 27(data) 973 38
+             979:   20(ivec4) Load 978
+             980:   20(ivec4) VectorShuffle 979 977 4 5 2 3
+                              Store 978 980
+             981:      6(int) Load 8(invocation)
+             982:     72(ptr) AccessChain 27(data) 49 38
+             983:   20(ivec4) Load 982
+             984:   81(ivec3) VectorShuffle 983 983 0 1 2
+             985:   81(ivec3) GroupNonUniformSMin 34 InclusiveScan 984
+             986:     72(ptr) AccessChain 27(data) 981 38
+             987:   20(ivec4) Load 986
+             988:   20(ivec4) VectorShuffle 987 985 4 5 6 3
+                              Store 986 988
+             989:      6(int) Load 8(invocation)
+             990:     72(ptr) AccessChain 27(data) 59 38
+             991:   20(ivec4) Load 990
+             992:   20(ivec4) GroupNonUniformSMin 34 InclusiveScan 991
+             993:     72(ptr) AccessChain 27(data) 989 38
+                              Store 993 992
+             994:      6(int) Load 8(invocation)
+             995:     95(ptr) AccessChain 27(data) 29 49 30
+             996:      6(int) Load 995
+             997:      6(int) GroupNonUniformUMin 34 InclusiveScan 996
+             998:     95(ptr) AccessChain 27(data) 994 49 30
+                              Store 998 997
+             999:      6(int) Load 8(invocation)
+            1000:    102(ptr) AccessChain 27(data) 38 49
+            1001:   21(ivec4) Load 1000
+            1002:  101(ivec2) VectorShuffle 1001 1001 0 1
+            1003:  101(ivec2) GroupNonUniformUMin 34 InclusiveScan 1002
+            1004:    102(ptr) AccessChain 27(data) 999 49
+            1005:   21(ivec4) Load 1004
+            1006:   21(ivec4) VectorShuffle 1005 1003 4 5 2 3
+                              Store 1004 1006
+            1007:      6(int) Load 8(invocation)
+            1008:    102(ptr) AccessChain 27(data) 49 49
+            1009:   21(ivec4) Load 1008
+            1010:  111(ivec3) VectorShuffle 1009 1009 0 1 2
+            1011:  111(ivec3) GroupNonUniformUMin 34 InclusiveScan 1010
+            1012:    102(ptr) AccessChain 27(data) 1007 49
+            1013:   21(ivec4) Load 1012
+            1014:   21(ivec4) VectorShuffle 1013 1011 4 5 6 3
+                              Store 1012 1014
+            1015:      6(int) Load 8(invocation)
+            1016:    102(ptr) AccessChain 27(data) 59 49
+            1017:   21(ivec4) Load 1016
+            1018:   21(ivec4) GroupNonUniformUMin 34 InclusiveScan 1017
+            1019:    102(ptr) AccessChain 27(data) 1015 49
+                              Store 1019 1018
+            1020:      6(int) Load 8(invocation)
+            1021:    125(ptr) AccessChain 27(data) 29 59 30
+            1022:   22(float) Load 1021
+            1023:   22(float) GroupNonUniformFMin 34 InclusiveScan 1022
+            1024:    125(ptr) AccessChain 27(data) 1020 59 30
+                              Store 1024 1023
+            1025:      6(int) Load 8(invocation)
+            1026:    132(ptr) AccessChain 27(data) 38 59
+            1027:   23(fvec4) Load 1026
+            1028:  131(fvec2) VectorShuffle 1027 1027 0 1
+            1029:  131(fvec2) GroupNonUniformFMin 34 InclusiveScan 1028
+            1030:    132(ptr) AccessChain 27(data) 1025 59
+            1031:   23(fvec4) Load 1030
+            1032:   23(fvec4) VectorShuffle 1031 1029 4 5 2 3
+                              Store 1030 1032
+            1033:      6(int) Load 8(invocation)
+            1034:    132(ptr) AccessChain 27(data) 49 59
+            1035:   23(fvec4) Load 1034
+            1036:  141(fvec3) VectorShuffle 1035 1035 0 1 2
+            1037:  141(fvec3) GroupNonUniformFMin 34 InclusiveScan 1036
+            1038:    132(ptr) AccessChain 27(data) 1033 59
+            1039:   23(fvec4) Load 1038
+            1040:   23(fvec4) VectorShuffle 1039 1037 4 5 6 3
+                              Store 1038 1040
+            1041:      6(int) Load 8(invocation)
+            1042:    132(ptr) AccessChain 27(data) 59 59
+            1043:   23(fvec4) Load 1042
+            1044:   23(fvec4) GroupNonUniformFMin 34 InclusiveScan 1043
+            1045:    132(ptr) AccessChain 27(data) 1041 59
+                              Store 1045 1044
+            1046:      6(int) Load 8(invocation)
+            1047:     31(ptr) AccessChain 27(data) 29 29 30
+            1048:   17(float) Load 1047
+            1049:   17(float) GroupNonUniformFMax 34 InclusiveScan 1048
+            1050:     31(ptr) AccessChain 27(data) 1046 29 30
+                              Store 1050 1049
+            1051:      6(int) Load 8(invocation)
+            1052:     40(ptr) AccessChain 27(data) 38 29
+            1053:   18(fvec4) Load 1052
+            1054:   39(fvec2) VectorShuffle 1053 1053 0 1
+            1055:   39(fvec2) GroupNonUniformFMax 34 InclusiveScan 1054
+            1056:     40(ptr) AccessChain 27(data) 1051 29
+            1057:   18(fvec4) Load 1056
+            1058:   18(fvec4) VectorShuffle 1057 1055 4 5 2 3
+                              Store 1056 1058
+            1059:      6(int) Load 8(invocation)
+            1060:     40(ptr) AccessChain 27(data) 49 29
+            1061:   18(fvec4) Load 1060
+            1062:   50(fvec3) VectorShuffle 1061 1061 0 1 2
+            1063:   50(fvec3) GroupNonUniformFMax 34 InclusiveScan 1062
+            1064:     40(ptr) AccessChain 27(data) 1059 29
+            1065:   18(fvec4) Load 1064
+            1066:   18(fvec4) VectorShuffle 1065 1063 4 5 6 3
+                              Store 1064 1066
+            1067:      6(int) Load 8(invocation)
+            1068:     40(ptr) AccessChain 27(data) 59 29
+            1069:   18(fvec4) Load 1068
+            1070:   18(fvec4) GroupNonUniformFMax 34 InclusiveScan 1069
+            1071:     40(ptr) AccessChain 27(data) 1067 29
+                              Store 1071 1070
+            1072:      6(int) Load 8(invocation)
+            1073:     65(ptr) AccessChain 27(data) 29 38 30
+            1074:     19(int) Load 1073
+            1075:     19(int) GroupNonUniformSMax 34 InclusiveScan 1074
+            1076:     65(ptr) AccessChain 27(data) 1072 38 30
+                              Store 1076 1075
+            1077:      6(int) Load 8(invocation)
+            1078:     72(ptr) AccessChain 27(data) 38 38
+            1079:   20(ivec4) Load 1078
+            1080:   71(ivec2) VectorShuffle 1079 1079 0 1
+            1081:   71(ivec2) GroupNonUniformSMax 34 InclusiveScan 1080
+            1082:     72(ptr) AccessChain 27(data) 1077 38
+            1083:   20(ivec4) Load 1082
+            1084:   20(ivec4) VectorShuffle 1083 1081 4 5 2 3
+                              Store 1082 1084
+            1085:      6(int) Load 8(invocation)
+            1086:     72(ptr) AccessChain 27(data) 49 38
+            1087:   20(ivec4) Load 1086
+            1088:   81(ivec3) VectorShuffle 1087 1087 0 1 2
+            1089:   81(ivec3) GroupNonUniformSMax 34 InclusiveScan 1088
+            1090:     72(ptr) AccessChain 27(data) 1085 38
+            1091:   20(ivec4) Load 1090
+            1092:   20(ivec4) VectorShuffle 1091 1089 4 5 6 3
+                              Store 1090 1092
+            1093:      6(int) Load 8(invocation)
+            1094:     72(ptr) AccessChain 27(data) 59 38
+            1095:   20(ivec4) Load 1094
+            1096:   20(ivec4) GroupNonUniformSMax 34 InclusiveScan 1095
+            1097:     72(ptr) AccessChain 27(data) 1093 38
+                              Store 1097 1096
+            1098:      6(int) Load 8(invocation)
+            1099:     95(ptr) AccessChain 27(data) 29 49 30
+            1100:      6(int) Load 1099
+            1101:      6(int) GroupNonUniformUMax 34 InclusiveScan 1100
+            1102:     95(ptr) AccessChain 27(data) 1098 49 30
+                              Store 1102 1101
+            1103:      6(int) Load 8(invocation)
+            1104:    102(ptr) AccessChain 27(data) 38 49
+            1105:   21(ivec4) Load 1104
+            1106:  101(ivec2) VectorShuffle 1105 1105 0 1
+            1107:  101(ivec2) GroupNonUniformUMax 34 InclusiveScan 1106
+            1108:    102(ptr) AccessChain 27(data) 1103 49
+            1109:   21(ivec4) Load 1108
+            1110:   21(ivec4) VectorShuffle 1109 1107 4 5 2 3
+                              Store 1108 1110
+            1111:      6(int) Load 8(invocation)
+            1112:    102(ptr) AccessChain 27(data) 49 49
+            1113:   21(ivec4) Load 1112
+            1114:  111(ivec3) VectorShuffle 1113 1113 0 1 2
+            1115:  111(ivec3) GroupNonUniformUMax 34 InclusiveScan 1114
+            1116:    102(ptr) AccessChain 27(data) 1111 49
+            1117:   21(ivec4) Load 1116
+            1118:   21(ivec4) VectorShuffle 1117 1115 4 5 6 3
+                              Store 1116 1118
+            1119:      6(int) Load 8(invocation)
+            1120:    102(ptr) AccessChain 27(data) 59 49
+            1121:   21(ivec4) Load 1120
+            1122:   21(ivec4) GroupNonUniformUMax 34 InclusiveScan 1121
+            1123:    102(ptr) AccessChain 27(data) 1119 49
+                              Store 1123 1122
+            1124:      6(int) Load 8(invocation)
+            1125:    125(ptr) AccessChain 27(data) 29 59 30
+            1126:   22(float) Load 1125
+            1127:   22(float) GroupNonUniformFMax 34 InclusiveScan 1126
+            1128:    125(ptr) AccessChain 27(data) 1124 59 30
+                              Store 1128 1127
+            1129:      6(int) Load 8(invocation)
+            1130:    132(ptr) AccessChain 27(data) 38 59
+            1131:   23(fvec4) Load 1130
+            1132:  131(fvec2) VectorShuffle 1131 1131 0 1
+            1133:  131(fvec2) GroupNonUniformFMax 34 InclusiveScan 1132
+            1134:    132(ptr) AccessChain 27(data) 1129 59
+            1135:   23(fvec4) Load 1134
+            1136:   23(fvec4) VectorShuffle 1135 1133 4 5 2 3
+                              Store 1134 1136
+            1137:      6(int) Load 8(invocation)
+            1138:    132(ptr) AccessChain 27(data) 49 59
+            1139:   23(fvec4) Load 1138
+            1140:  141(fvec3) VectorShuffle 1139 1139 0 1 2
+            1141:  141(fvec3) GroupNonUniformFMax 34 InclusiveScan 1140
+            1142:    132(ptr) AccessChain 27(data) 1137 59
+            1143:   23(fvec4) Load 1142
+            1144:   23(fvec4) VectorShuffle 1143 1141 4 5 6 3
+                              Store 1142 1144
+            1145:      6(int) Load 8(invocation)
+            1146:    132(ptr) AccessChain 27(data) 59 59
+            1147:   23(fvec4) Load 1146
+            1148:   23(fvec4) GroupNonUniformFMax 34 InclusiveScan 1147
+            1149:    132(ptr) AccessChain 27(data) 1145 59
+                              Store 1149 1148
+            1150:      6(int) Load 8(invocation)
+            1151:     65(ptr) AccessChain 27(data) 29 38 30
+            1152:     19(int) Load 1151
+            1153:     19(int) GroupNonUniformBitwiseAnd 34 InclusiveScan 1152
+            1154:     65(ptr) AccessChain 27(data) 1150 38 30
+                              Store 1154 1153
+            1155:      6(int) Load 8(invocation)
+            1156:     72(ptr) AccessChain 27(data) 38 38
+            1157:   20(ivec4) Load 1156
+            1158:   71(ivec2) VectorShuffle 1157 1157 0 1
+            1159:   71(ivec2) GroupNonUniformBitwiseAnd 34 InclusiveScan 1158
+            1160:     72(ptr) AccessChain 27(data) 1155 38
+            1161:   20(ivec4) Load 1160
+            1162:   20(ivec4) VectorShuffle 1161 1159 4 5 2 3
+                              Store 1160 1162
+            1163:      6(int) Load 8(invocation)
+            1164:     72(ptr) AccessChain 27(data) 49 38
+            1165:   20(ivec4) Load 1164
+            1166:   81(ivec3) VectorShuffle 1165 1165 0 1 2
+            1167:   81(ivec3) GroupNonUniformBitwiseAnd 34 InclusiveScan 1166
+            1168:     72(ptr) AccessChain 27(data) 1163 38
+            1169:   20(ivec4) Load 1168
+            1170:   20(ivec4) VectorShuffle 1169 1167 4 5 6 3
+                              Store 1168 1170
+            1171:      6(int) Load 8(invocation)
+            1172:     72(ptr) AccessChain 27(data) 59 38
+            1173:   20(ivec4) Load 1172
+            1174:   20(ivec4) GroupNonUniformBitwiseAnd 34 InclusiveScan 1173
+            1175:     72(ptr) AccessChain 27(data) 1171 38
+                              Store 1175 1174
+            1176:      6(int) Load 8(invocation)
+            1177:     95(ptr) AccessChain 27(data) 29 49 30
+            1178:      6(int) Load 1177
+            1179:      6(int) GroupNonUniformBitwiseAnd 34 InclusiveScan 1178
+            1180:     95(ptr) AccessChain 27(data) 1176 49 30
+                              Store 1180 1179
+            1181:      6(int) Load 8(invocation)
+            1182:    102(ptr) AccessChain 27(data) 38 49
+            1183:   21(ivec4) Load 1182
+            1184:  101(ivec2) VectorShuffle 1183 1183 0 1
+            1185:  101(ivec2) GroupNonUniformBitwiseAnd 34 InclusiveScan 1184
+            1186:    102(ptr) AccessChain 27(data) 1181 49
+            1187:   21(ivec4) Load 1186
+            1188:   21(ivec4) VectorShuffle 1187 1185 4 5 2 3
+                              Store 1186 1188
+            1189:      6(int) Load 8(invocation)
+            1190:    102(ptr) AccessChain 27(data) 49 49
+            1191:   21(ivec4) Load 1190
+            1192:  111(ivec3) VectorShuffle 1191 1191 0 1 2
+            1193:  111(ivec3) GroupNonUniformBitwiseAnd 34 InclusiveScan 1192
+            1194:    102(ptr) AccessChain 27(data) 1189 49
+            1195:   21(ivec4) Load 1194
+            1196:   21(ivec4) VectorShuffle 1195 1193 4 5 6 3
+                              Store 1194 1196
+            1197:      6(int) Load 8(invocation)
+            1198:    102(ptr) AccessChain 27(data) 59 49
+            1199:   21(ivec4) Load 1198
+            1200:   21(ivec4) GroupNonUniformBitwiseAnd 34 InclusiveScan 1199
+            1201:    102(ptr) AccessChain 27(data) 1197 49
+                              Store 1201 1200
+            1202:      6(int) Load 8(invocation)
+            1203:     65(ptr) AccessChain 27(data) 29 38 30
+            1204:     19(int) Load 1203
+            1205:   521(bool) SLessThan 1204 29
+            1206:   521(bool) GroupNonUniformLogicalAnd 34 InclusiveScan 1205
+            1207:     19(int) Select 1206 38 29
+            1208:     65(ptr) AccessChain 27(data) 1202 38 30
+                              Store 1208 1207
+            1209:      6(int) Load 8(invocation)
+            1210:     72(ptr) AccessChain 27(data) 38 38
+            1211:   20(ivec4) Load 1210
+            1212:   71(ivec2) VectorShuffle 1211 1211 0 1
+            1213:  531(bvec2) SLessThan 1212 530
+            1214:  531(bvec2) GroupNonUniformLogicalAnd 34 InclusiveScan 1213
+            1215:   71(ivec2) Select 1214 534 530
+            1216:     72(ptr) AccessChain 27(data) 1209 38
+            1217:   20(ivec4) Load 1216
+            1218:   20(ivec4) VectorShuffle 1217 1215 4 5 2 3
+                              Store 1216 1218
+            1219:      6(int) Load 8(invocation)
+            1220:     72(ptr) AccessChain 27(data) 38 38
+            1221:   20(ivec4) Load 1220
+            1222:   81(ivec3) VectorShuffle 1221 1221 0 1 2
+            1223:  544(bvec3) SLessThan 1222 543
+            1224:  544(bvec3) GroupNonUniformLogicalAnd 34 InclusiveScan 1223
+            1225:   81(ivec3) Select 1224 547 543
+            1226:     72(ptr) AccessChain 27(data) 1219 38
+            1227:   20(ivec4) Load 1226
+            1228:   20(ivec4) VectorShuffle 1227 1225 4 5 6 3
+                              Store 1226 1228
+            1229:      6(int) Load 8(invocation)
+            1230:     72(ptr) AccessChain 27(data) 38 38
+            1231:   20(ivec4) Load 1230
+            1232:  556(bvec4) SLessThan 1231 555
+            1233:  556(bvec4) GroupNonUniformLogicalAnd 34 InclusiveScan 1232
+            1234:   20(ivec4) Select 1233 559 555
+            1235:     72(ptr) AccessChain 27(data) 1229 38
+                              Store 1235 1234
+            1236:      6(int) Load 8(invocation)
+            1237:     65(ptr) AccessChain 27(data) 29 38 30
+            1238:     19(int) Load 1237
+            1239:     19(int) GroupNonUniformBitwiseOr 34 InclusiveScan 1238
+            1240:     65(ptr) AccessChain 27(data) 1236 38 30
+                              Store 1240 1239
+            1241:      6(int) Load 8(invocation)
+            1242:     72(ptr) AccessChain 27(data) 38 38
+            1243:   20(ivec4) Load 1242
+            1244:   71(ivec2) VectorShuffle 1243 1243 0 1
+            1245:   71(ivec2) GroupNonUniformBitwiseOr 34 InclusiveScan 1244
+            1246:     72(ptr) AccessChain 27(data) 1241 38
+            1247:   20(ivec4) Load 1246
+            1248:   20(ivec4) VectorShuffle 1247 1245 4 5 2 3
+                              Store 1246 1248
+            1249:      6(int) Load 8(invocation)
+            1250:     72(ptr) AccessChain 27(data) 49 38
+            1251:   20(ivec4) Load 1250
+            1252:   81(ivec3) VectorShuffle 1251 1251 0 1 2
+            1253:   81(ivec3) GroupNonUniformBitwiseOr 34 InclusiveScan 1252
+            1254:     72(ptr) AccessChain 27(data) 1249 38
+            1255:   20(ivec4) Load 1254
+            1256:   20(ivec4) VectorShuffle 1255 1253 4 5 6 3
+                              Store 1254 1256
+            1257:      6(int) Load 8(invocation)
+            1258:     72(ptr) AccessChain 27(data) 59 38
+            1259:   20(ivec4) Load 1258
+            1260:   20(ivec4) GroupNonUniformBitwiseOr 34 InclusiveScan 1259
+            1261:     72(ptr) AccessChain 27(data) 1257 38
+                              Store 1261 1260
+            1262:      6(int) Load 8(invocation)
+            1263:     95(ptr) AccessChain 27(data) 29 49 30
+            1264:      6(int) Load 1263
+            1265:      6(int) GroupNonUniformBitwiseOr 34 InclusiveScan 1264
+            1266:     95(ptr) AccessChain 27(data) 1262 49 30
+                              Store 1266 1265
+            1267:      6(int) Load 8(invocation)
+            1268:    102(ptr) AccessChain 27(data) 38 49
+            1269:   21(ivec4) Load 1268
+            1270:  101(ivec2) VectorShuffle 1269 1269 0 1
+            1271:  101(ivec2) GroupNonUniformBitwiseOr 34 InclusiveScan 1270
+            1272:    102(ptr) AccessChain 27(data) 1267 49
+            1273:   21(ivec4) Load 1272
+            1274:   21(ivec4) VectorShuffle 1273 1271 4 5 2 3
+                              Store 1272 1274
+            1275:      6(int) Load 8(invocation)
+            1276:    102(ptr) AccessChain 27(data) 49 49
+            1277:   21(ivec4) Load 1276
+            1278:  111(ivec3) VectorShuffle 1277 1277 0 1 2
+            1279:  111(ivec3) GroupNonUniformBitwiseOr 34 InclusiveScan 1278
+            1280:    102(ptr) AccessChain 27(data) 1275 49
+            1281:   21(ivec4) Load 1280
+            1282:   21(ivec4) VectorShuffle 1281 1279 4 5 6 3
+                              Store 1280 1282
+            1283:      6(int) Load 8(invocation)
+            1284:    102(ptr) AccessChain 27(data) 59 49
+            1285:   21(ivec4) Load 1284
+            1286:   21(ivec4) GroupNonUniformBitwiseOr 34 InclusiveScan 1285
+            1287:    102(ptr) AccessChain 27(data) 1283 49
+                              Store 1287 1286
+            1288:      6(int) Load 8(invocation)
+            1289:     65(ptr) AccessChain 27(data) 29 38 30
+            1290:     19(int) Load 1289
+            1291:   521(bool) SLessThan 1290 29
+            1292:   521(bool) GroupNonUniformLogicalOr 34 InclusiveScan 1291
+            1293:     19(int) Select 1292 38 29
+            1294:     65(ptr) AccessChain 27(data) 1288 38 30
+                              Store 1294 1293
+            1295:      6(int) Load 8(invocation)
+            1296:     72(ptr) AccessChain 27(data) 38 38
+            1297:   20(ivec4) Load 1296
+            1298:   71(ivec2) VectorShuffle 1297 1297 0 1
+            1299:  531(bvec2) SLessThan 1298 530
+            1300:  531(bvec2) GroupNonUniformLogicalOr 34 InclusiveScan 1299
+            1301:   71(ivec2) Select 1300 534 530
+            1302:     72(ptr) AccessChain 27(data) 1295 38
+            1303:   20(ivec4) Load 1302
+            1304:   20(ivec4) VectorShuffle 1303 1301 4 5 2 3
+                              Store 1302 1304
+            1305:      6(int) Load 8(invocation)
+            1306:     72(ptr) AccessChain 27(data) 38 38
+            1307:   20(ivec4) Load 1306
+            1308:   81(ivec3) VectorShuffle 1307 1307 0 1 2
+            1309:  544(bvec3) SLessThan 1308 543
+            1310:  544(bvec3) GroupNonUniformLogicalOr 34 InclusiveScan 1309
+            1311:   81(ivec3) Select 1310 547 543
+            1312:     72(ptr) AccessChain 27(data) 1305 38
+            1313:   20(ivec4) Load 1312
+            1314:   20(ivec4) VectorShuffle 1313 1311 4 5 6 3
+                              Store 1312 1314
+            1315:      6(int) Load 8(invocation)
+            1316:     72(ptr) AccessChain 27(data) 38 38
+            1317:   20(ivec4) Load 1316
+            1318:  556(bvec4) SLessThan 1317 555
+            1319:  556(bvec4) GroupNonUniformLogicalOr 34 InclusiveScan 1318
+            1320:   20(ivec4) Select 1319 559 555
+            1321:     72(ptr) AccessChain 27(data) 1315 38
+                              Store 1321 1320
+            1322:      6(int) Load 8(invocation)
+            1323:     65(ptr) AccessChain 27(data) 29 38 30
+            1324:     19(int) Load 1323
+            1325:     19(int) GroupNonUniformBitwiseXor 34 InclusiveScan 1324
+            1326:     65(ptr) AccessChain 27(data) 1322 38 30
+                              Store 1326 1325
+            1327:      6(int) Load 8(invocation)
+            1328:     72(ptr) AccessChain 27(data) 38 38
+            1329:   20(ivec4) Load 1328
+            1330:   71(ivec2) VectorShuffle 1329 1329 0 1
+            1331:   71(ivec2) GroupNonUniformBitwiseXor 34 InclusiveScan 1330
+            1332:     72(ptr) AccessChain 27(data) 1327 38
+            1333:   20(ivec4) Load 1332
+            1334:   20(ivec4) VectorShuffle 1333 1331 4 5 2 3
+                              Store 1332 1334
+            1335:      6(int) Load 8(invocation)
+            1336:     72(ptr) AccessChain 27(data) 49 38
+            1337:   20(ivec4) Load 1336
+            1338:   81(ivec3) VectorShuffle 1337 1337 0 1 2
+            1339:   81(ivec3) GroupNonUniformBitwiseXor 34 InclusiveScan 1338
+            1340:     72(ptr) AccessChain 27(data) 1335 38
+            1341:   20(ivec4) Load 1340
+            1342:   20(ivec4) VectorShuffle 1341 1339 4 5 6 3
+                              Store 1340 1342
+            1343:      6(int) Load 8(invocation)
+            1344:     72(ptr) AccessChain 27(data) 59 38
+            1345:   20(ivec4) Load 1344
+            1346:   20(ivec4) GroupNonUniformBitwiseXor 34 InclusiveScan 1345
+            1347:     72(ptr) AccessChain 27(data) 1343 38
+                              Store 1347 1346
+            1348:      6(int) Load 8(invocation)
+            1349:     95(ptr) AccessChain 27(data) 29 49 30
+            1350:      6(int) Load 1349
+            1351:      6(int) GroupNonUniformBitwiseXor 34 InclusiveScan 1350
+            1352:     95(ptr) AccessChain 27(data) 1348 49 30
+                              Store 1352 1351
+            1353:      6(int) Load 8(invocation)
+            1354:    102(ptr) AccessChain 27(data) 38 49
+            1355:   21(ivec4) Load 1354
+            1356:  101(ivec2) VectorShuffle 1355 1355 0 1
+            1357:  101(ivec2) GroupNonUniformBitwiseXor 34 InclusiveScan 1356
+            1358:    102(ptr) AccessChain 27(data) 1353 49
+            1359:   21(ivec4) Load 1358
+            1360:   21(ivec4) VectorShuffle 1359 1357 4 5 2 3
+                              Store 1358 1360
+            1361:      6(int) Load 8(invocation)
+            1362:    102(ptr) AccessChain 27(data) 49 49
+            1363:   21(ivec4) Load 1362
+            1364:  111(ivec3) VectorShuffle 1363 1363 0 1 2
+            1365:  111(ivec3) GroupNonUniformBitwiseXor 34 InclusiveScan 1364
+            1366:    102(ptr) AccessChain 27(data) 1361 49
+            1367:   21(ivec4) Load 1366
+            1368:   21(ivec4) VectorShuffle 1367 1365 4 5 6 3
+                              Store 1366 1368
+            1369:      6(int) Load 8(invocation)
+            1370:    102(ptr) AccessChain 27(data) 59 49
+            1371:   21(ivec4) Load 1370
+            1372:   21(ivec4) GroupNonUniformBitwiseXor 34 InclusiveScan 1371
+            1373:    102(ptr) AccessChain 27(data) 1369 49
+                              Store 1373 1372
+            1374:      6(int) Load 8(invocation)
+            1375:     65(ptr) AccessChain 27(data) 29 38 30
+            1376:     19(int) Load 1375
+            1377:   521(bool) SLessThan 1376 29
+            1378:   521(bool) GroupNonUniformLogicalXor 34 InclusiveScan 1377
+            1379:     19(int) Select 1378 38 29
+            1380:     65(ptr) AccessChain 27(data) 1374 38 30
+                              Store 1380 1379
+            1381:      6(int) Load 8(invocation)
+            1382:     72(ptr) AccessChain 27(data) 38 38
+            1383:   20(ivec4) Load 1382
+            1384:   71(ivec2) VectorShuffle 1383 1383 0 1
+            1385:  531(bvec2) SLessThan 1384 530
+            1386:  531(bvec2) GroupNonUniformLogicalXor 34 InclusiveScan 1385
+            1387:   71(ivec2) Select 1386 534 530
+            1388:     72(ptr) AccessChain 27(data) 1381 38
+            1389:   20(ivec4) Load 1388
+            1390:   20(ivec4) VectorShuffle 1389 1387 4 5 2 3
+                              Store 1388 1390
+            1391:      6(int) Load 8(invocation)
+            1392:     72(ptr) AccessChain 27(data) 38 38
+            1393:   20(ivec4) Load 1392
+            1394:   81(ivec3) VectorShuffle 1393 1393 0 1 2
+            1395:  544(bvec3) SLessThan 1394 543
+            1396:  544(bvec3) GroupNonUniformLogicalXor 34 InclusiveScan 1395
+            1397:   81(ivec3) Select 1396 547 543
+            1398:     72(ptr) AccessChain 27(data) 1391 38
+            1399:   20(ivec4) Load 1398
+            1400:   20(ivec4) VectorShuffle 1399 1397 4 5 6 3
+                              Store 1398 1400
+            1401:      6(int) Load 8(invocation)
+            1402:     72(ptr) AccessChain 27(data) 38 38
+            1403:   20(ivec4) Load 1402
+            1404:  556(bvec4) SLessThan 1403 555
+            1405:  556(bvec4) GroupNonUniformLogicalXor 34 InclusiveScan 1404
+            1406:   20(ivec4) Select 1405 559 555
+            1407:     72(ptr) AccessChain 27(data) 1401 38
+                              Store 1407 1406
+            1408:      6(int) Load 8(invocation)
+            1409:     31(ptr) AccessChain 27(data) 29 29 30
+            1410:   17(float) Load 1409
+            1411:   17(float) GroupNonUniformFAdd 34 ExclusiveScan 1410
+            1412:     31(ptr) AccessChain 27(data) 1408 29 30
+                              Store 1412 1411
+            1413:      6(int) Load 8(invocation)
+            1414:     40(ptr) AccessChain 27(data) 38 29
+            1415:   18(fvec4) Load 1414
+            1416:   39(fvec2) VectorShuffle 1415 1415 0 1
+            1417:   39(fvec2) GroupNonUniformFAdd 34 ExclusiveScan 1416
+            1418:     40(ptr) AccessChain 27(data) 1413 29
+            1419:   18(fvec4) Load 1418
+            1420:   18(fvec4) VectorShuffle 1419 1417 4 5 2 3
+                              Store 1418 1420
+            1421:      6(int) Load 8(invocation)
+            1422:     40(ptr) AccessChain 27(data) 49 29
+            1423:   18(fvec4) Load 1422
+            1424:   50(fvec3) VectorShuffle 1423 1423 0 1 2
+            1425:   50(fvec3) GroupNonUniformFAdd 34 ExclusiveScan 1424
+            1426:     40(ptr) AccessChain 27(data) 1421 29
+            1427:   18(fvec4) Load 1426
+            1428:   18(fvec4) VectorShuffle 1427 1425 4 5 6 3
+                              Store 1426 1428
+            1429:      6(int) Load 8(invocation)
+            1430:     40(ptr) AccessChain 27(data) 59 29
+            1431:   18(fvec4) Load 1430
+            1432:   18(fvec4) GroupNonUniformFAdd 34 ExclusiveScan 1431
+            1433:     40(ptr) AccessChain 27(data) 1429 29
+                              Store 1433 1432
+            1434:      6(int) Load 8(invocation)
+            1435:     65(ptr) AccessChain 27(data) 29 38 30
+            1436:     19(int) Load 1435
+            1437:     19(int) GroupNonUniformIAdd 34 ExclusiveScan 1436
+            1438:     65(ptr) AccessChain 27(data) 1434 38 30
+                              Store 1438 1437
+            1439:      6(int) Load 8(invocation)
+            1440:     72(ptr) AccessChain 27(data) 38 38
+            1441:   20(ivec4) Load 1440
+            1442:   71(ivec2) VectorShuffle 1441 1441 0 1
+            1443:   71(ivec2) GroupNonUniformIAdd 34 ExclusiveScan 1442
+            1444:     72(ptr) AccessChain 27(data) 1439 38
+            1445:   20(ivec4) Load 1444
+            1446:   20(ivec4) VectorShuffle 1445 1443 4 5 2 3
+                              Store 1444 1446
+            1447:      6(int) Load 8(invocation)
+            1448:     72(ptr) AccessChain 27(data) 49 38
+            1449:   20(ivec4) Load 1448
+            1450:   81(ivec3) VectorShuffle 1449 1449 0 1 2
+            1451:   81(ivec3) GroupNonUniformIAdd 34 ExclusiveScan 1450
+            1452:     72(ptr) AccessChain 27(data) 1447 38
+            1453:   20(ivec4) Load 1452
+            1454:   20(ivec4) VectorShuffle 1453 1451 4 5 6 3
+                              Store 1452 1454
+            1455:      6(int) Load 8(invocation)
+            1456:     72(ptr) AccessChain 27(data) 59 38
+            1457:   20(ivec4) Load 1456
+            1458:   20(ivec4) GroupNonUniformIAdd 34 ExclusiveScan 1457
+            1459:     72(ptr) AccessChain 27(data) 1455 38
+                              Store 1459 1458
+            1460:      6(int) Load 8(invocation)
+            1461:     95(ptr) AccessChain 27(data) 29 49 30
+            1462:      6(int) Load 1461
+            1463:      6(int) GroupNonUniformIAdd 34 ExclusiveScan 1462
+            1464:     95(ptr) AccessChain 27(data) 1460 49 30
+                              Store 1464 1463
+            1465:      6(int) Load 8(invocation)
+            1466:    102(ptr) AccessChain 27(data) 38 49
+            1467:   21(ivec4) Load 1466
+            1468:  101(ivec2) VectorShuffle 1467 1467 0 1
+            1469:  101(ivec2) GroupNonUniformIAdd 34 ExclusiveScan 1468
+            1470:    102(ptr) AccessChain 27(data) 1465 49
+            1471:   21(ivec4) Load 1470
+            1472:   21(ivec4) VectorShuffle 1471 1469 4 5 2 3
+                              Store 1470 1472
+            1473:      6(int) Load 8(invocation)
+            1474:    102(ptr) AccessChain 27(data) 49 49
+            1475:   21(ivec4) Load 1474
+            1476:  111(ivec3) VectorShuffle 1475 1475 0 1 2
+            1477:  111(ivec3) GroupNonUniformIAdd 34 ExclusiveScan 1476
+            1478:    102(ptr) AccessChain 27(data) 1473 49
+            1479:   21(ivec4) Load 1478
+            1480:   21(ivec4) VectorShuffle 1479 1477 4 5 6 3
+                              Store 1478 1480
+            1481:      6(int) Load 8(invocation)
+            1482:    102(ptr) AccessChain 27(data) 59 49
+            1483:   21(ivec4) Load 1482
+            1484:   21(ivec4) GroupNonUniformIAdd 34 ExclusiveScan 1483
+            1485:    102(ptr) AccessChain 27(data) 1481 49
+                              Store 1485 1484
+            1486:      6(int) Load 8(invocation)
+            1487:    125(ptr) AccessChain 27(data) 29 59 30
+            1488:   22(float) Load 1487
+            1489:   22(float) GroupNonUniformFAdd 34 ExclusiveScan 1488
+            1490:    125(ptr) AccessChain 27(data) 1486 59 30
+                              Store 1490 1489
+            1491:      6(int) Load 8(invocation)
+            1492:    132(ptr) AccessChain 27(data) 38 59
+            1493:   23(fvec4) Load 1492
+            1494:  131(fvec2) VectorShuffle 1493 1493 0 1
+            1495:  131(fvec2) GroupNonUniformFAdd 34 ExclusiveScan 1494
+            1496:    132(ptr) AccessChain 27(data) 1491 59
+            1497:   23(fvec4) Load 1496
+            1498:   23(fvec4) VectorShuffle 1497 1495 4 5 2 3
+                              Store 1496 1498
+            1499:      6(int) Load 8(invocation)
+            1500:    132(ptr) AccessChain 27(data) 49 59
+            1501:   23(fvec4) Load 1500
+            1502:  141(fvec3) VectorShuffle 1501 1501 0 1 2
+            1503:  141(fvec3) GroupNonUniformFAdd 34 ExclusiveScan 1502
+            1504:    132(ptr) AccessChain 27(data) 1499 59
+            1505:   23(fvec4) Load 1504
+            1506:   23(fvec4) VectorShuffle 1505 1503 4 5 6 3
+                              Store 1504 1506
+            1507:      6(int) Load 8(invocation)
+            1508:    132(ptr) AccessChain 27(data) 59 59
+            1509:   23(fvec4) Load 1508
+            1510:   23(fvec4) GroupNonUniformFAdd 34 ExclusiveScan 1509
+            1511:    132(ptr) AccessChain 27(data) 1507 59
+                              Store 1511 1510
+            1512:      6(int) Load 8(invocation)
+            1513:     31(ptr) AccessChain 27(data) 29 29 30
+            1514:   17(float) Load 1513
+            1515:   17(float) GroupNonUniformFMul 34 ExclusiveScan 1514
+            1516:     31(ptr) AccessChain 27(data) 1512 29 30
+                              Store 1516 1515
+            1517:      6(int) Load 8(invocation)
+            1518:     40(ptr) AccessChain 27(data) 38 29
+            1519:   18(fvec4) Load 1518
+            1520:   39(fvec2) VectorShuffle 1519 1519 0 1
+            1521:   39(fvec2) GroupNonUniformFMul 34 ExclusiveScan 1520
+            1522:     40(ptr) AccessChain 27(data) 1517 29
+            1523:   18(fvec4) Load 1522
+            1524:   18(fvec4) VectorShuffle 1523 1521 4 5 2 3
+                              Store 1522 1524
+            1525:      6(int) Load 8(invocation)
+            1526:     40(ptr) AccessChain 27(data) 49 29
+            1527:   18(fvec4) Load 1526
+            1528:   50(fvec3) VectorShuffle 1527 1527 0 1 2
+            1529:   50(fvec3) GroupNonUniformFMul 34 ExclusiveScan 1528
+            1530:     40(ptr) AccessChain 27(data) 1525 29
+            1531:   18(fvec4) Load 1530
+            1532:   18(fvec4) VectorShuffle 1531 1529 4 5 6 3
+                              Store 1530 1532
+            1533:      6(int) Load 8(invocation)
+            1534:     40(ptr) AccessChain 27(data) 59 29
+            1535:   18(fvec4) Load 1534
+            1536:   18(fvec4) GroupNonUniformFMul 34 ExclusiveScan 1535
+            1537:     40(ptr) AccessChain 27(data) 1533 29
+                              Store 1537 1536
+            1538:      6(int) Load 8(invocation)
+            1539:     65(ptr) AccessChain 27(data) 29 38 30
+            1540:     19(int) Load 1539
+            1541:     19(int) GroupNonUniformIMul 34 ExclusiveScan 1540
+            1542:     65(ptr) AccessChain 27(data) 1538 38 30
+                              Store 1542 1541
+            1543:      6(int) Load 8(invocation)
+            1544:     72(ptr) AccessChain 27(data) 38 38
+            1545:   20(ivec4) Load 1544
+            1546:   71(ivec2) VectorShuffle 1545 1545 0 1
+            1547:   71(ivec2) GroupNonUniformIMul 34 ExclusiveScan 1546
+            1548:     72(ptr) AccessChain 27(data) 1543 38
+            1549:   20(ivec4) Load 1548
+            1550:   20(ivec4) VectorShuffle 1549 1547 4 5 2 3
+                              Store 1548 1550
+            1551:      6(int) Load 8(invocation)
+            1552:     72(ptr) AccessChain 27(data) 49 38
+            1553:   20(ivec4) Load 1552
+            1554:   81(ivec3) VectorShuffle 1553 1553 0 1 2
+            1555:   81(ivec3) GroupNonUniformIMul 34 ExclusiveScan 1554
+            1556:     72(ptr) AccessChain 27(data) 1551 38
+            1557:   20(ivec4) Load 1556
+            1558:   20(ivec4) VectorShuffle 1557 1555 4 5 6 3
+                              Store 1556 1558
+            1559:      6(int) Load 8(invocation)
+            1560:     72(ptr) AccessChain 27(data) 59 38
+            1561:   20(ivec4) Load 1560
+            1562:   20(ivec4) GroupNonUniformIMul 34 ExclusiveScan 1561
+            1563:     72(ptr) AccessChain 27(data) 1559 38
+                              Store 1563 1562
+            1564:      6(int) Load 8(invocation)
+            1565:     95(ptr) AccessChain 27(data) 29 49 30
+            1566:      6(int) Load 1565
+            1567:      6(int) GroupNonUniformIMul 34 ExclusiveScan 1566
+            1568:     95(ptr) AccessChain 27(data) 1564 49 30
+                              Store 1568 1567
+            1569:      6(int) Load 8(invocation)
+            1570:    102(ptr) AccessChain 27(data) 38 49
+            1571:   21(ivec4) Load 1570
+            1572:  101(ivec2) VectorShuffle 1571 1571 0 1
+            1573:  101(ivec2) GroupNonUniformIMul 34 ExclusiveScan 1572
+            1574:    102(ptr) AccessChain 27(data) 1569 49
+            1575:   21(ivec4) Load 1574
+            1576:   21(ivec4) VectorShuffle 1575 1573 4 5 2 3
+                              Store 1574 1576
+            1577:      6(int) Load 8(invocation)
+            1578:    102(ptr) AccessChain 27(data) 49 49
+            1579:   21(ivec4) Load 1578
+            1580:  111(ivec3) VectorShuffle 1579 1579 0 1 2
+            1581:  111(ivec3) GroupNonUniformIMul 34 ExclusiveScan 1580
+            1582:    102(ptr) AccessChain 27(data) 1577 49
+            1583:   21(ivec4) Load 1582
+            1584:   21(ivec4) VectorShuffle 1583 1581 4 5 6 3
+                              Store 1582 1584
+            1585:      6(int) Load 8(invocation)
+            1586:    102(ptr) AccessChain 27(data) 59 49
+            1587:   21(ivec4) Load 1586
+            1588:   21(ivec4) GroupNonUniformIMul 34 ExclusiveScan 1587
+            1589:    102(ptr) AccessChain 27(data) 1585 49
+                              Store 1589 1588
+            1590:      6(int) Load 8(invocation)
+            1591:    125(ptr) AccessChain 27(data) 29 59 30
+            1592:   22(float) Load 1591
+            1593:   22(float) GroupNonUniformFMul 34 ExclusiveScan 1592
+            1594:    125(ptr) AccessChain 27(data) 1590 59 30
+                              Store 1594 1593
+            1595:      6(int) Load 8(invocation)
+            1596:    132(ptr) AccessChain 27(data) 38 59
+            1597:   23(fvec4) Load 1596
+            1598:  131(fvec2) VectorShuffle 1597 1597 0 1
+            1599:  131(fvec2) GroupNonUniformFMul 34 ExclusiveScan 1598
+            1600:    132(ptr) AccessChain 27(data) 1595 59
+            1601:   23(fvec4) Load 1600
+            1602:   23(fvec4) VectorShuffle 1601 1599 4 5 2 3
+                              Store 1600 1602
+            1603:      6(int) Load 8(invocation)
+            1604:    132(ptr) AccessChain 27(data) 49 59
+            1605:   23(fvec4) Load 1604
+            1606:  141(fvec3) VectorShuffle 1605 1605 0 1 2
+            1607:  141(fvec3) GroupNonUniformFMul 34 ExclusiveScan 1606
+            1608:    132(ptr) AccessChain 27(data) 1603 59
+            1609:   23(fvec4) Load 1608
+            1610:   23(fvec4) VectorShuffle 1609 1607 4 5 6 3
+                              Store 1608 1610
+            1611:      6(int) Load 8(invocation)
+            1612:    132(ptr) AccessChain 27(data) 59 59
+            1613:   23(fvec4) Load 1612
+            1614:   23(fvec4) GroupNonUniformFMul 34 ExclusiveScan 1613
+            1615:    132(ptr) AccessChain 27(data) 1611 59
+                              Store 1615 1614
+            1616:      6(int) Load 8(invocation)
+            1617:     31(ptr) AccessChain 27(data) 29 29 30
+            1618:   17(float) Load 1617
+            1619:   17(float) GroupNonUniformFMin 34 ExclusiveScan 1618
+            1620:     31(ptr) AccessChain 27(data) 1616 29 30
+                              Store 1620 1619
+            1621:      6(int) Load 8(invocation)
+            1622:     40(ptr) AccessChain 27(data) 38 29
+            1623:   18(fvec4) Load 1622
+            1624:   39(fvec2) VectorShuffle 1623 1623 0 1
+            1625:   39(fvec2) GroupNonUniformFMin 34 ExclusiveScan 1624
+            1626:     40(ptr) AccessChain 27(data) 1621 29
+            1627:   18(fvec4) Load 1626
+            1628:   18(fvec4) VectorShuffle 1627 1625 4 5 2 3
+                              Store 1626 1628
+            1629:      6(int) Load 8(invocation)
+            1630:     40(ptr) AccessChain 27(data) 49 29
+            1631:   18(fvec4) Load 1630
+            1632:   50(fvec3) VectorShuffle 1631 1631 0 1 2
+            1633:   50(fvec3) GroupNonUniformFMin 34 ExclusiveScan 1632
+            1634:     40(ptr) AccessChain 27(data) 1629 29
+            1635:   18(fvec4) Load 1634
+            1636:   18(fvec4) VectorShuffle 1635 1633 4 5 6 3
+                              Store 1634 1636
+            1637:      6(int) Load 8(invocation)
+            1638:     40(ptr) AccessChain 27(data) 59 29
+            1639:   18(fvec4) Load 1638
+            1640:   18(fvec4) GroupNonUniformFMin 34 ExclusiveScan 1639
+            1641:     40(ptr) AccessChain 27(data) 1637 29
+                              Store 1641 1640
+            1642:      6(int) Load 8(invocation)
+            1643:     65(ptr) AccessChain 27(data) 29 38 30
+            1644:     19(int) Load 1643
+            1645:     19(int) GroupNonUniformSMin 34 ExclusiveScan 1644
+            1646:     65(ptr) AccessChain 27(data) 1642 38 30
+                              Store 1646 1645
+            1647:      6(int) Load 8(invocation)
+            1648:     72(ptr) AccessChain 27(data) 38 38
+            1649:   20(ivec4) Load 1648
+            1650:   71(ivec2) VectorShuffle 1649 1649 0 1
+            1651:   71(ivec2) GroupNonUniformSMin 34 ExclusiveScan 1650
+            1652:     72(ptr) AccessChain 27(data) 1647 38
+            1653:   20(ivec4) Load 1652
+            1654:   20(ivec4) VectorShuffle 1653 1651 4 5 2 3
+                              Store 1652 1654
+            1655:      6(int) Load 8(invocation)
+            1656:     72(ptr) AccessChain 27(data) 49 38
+            1657:   20(ivec4) Load 1656
+            1658:   81(ivec3) VectorShuffle 1657 1657 0 1 2
+            1659:   81(ivec3) GroupNonUniformSMin 34 ExclusiveScan 1658
+            1660:     72(ptr) AccessChain 27(data) 1655 38
+            1661:   20(ivec4) Load 1660
+            1662:   20(ivec4) VectorShuffle 1661 1659 4 5 6 3
+                              Store 1660 1662
+            1663:      6(int) Load 8(invocation)
+            1664:     72(ptr) AccessChain 27(data) 59 38
+            1665:   20(ivec4) Load 1664
+            1666:   20(ivec4) GroupNonUniformSMin 34 ExclusiveScan 1665
+            1667:     72(ptr) AccessChain 27(data) 1663 38
+                              Store 1667 1666
+            1668:      6(int) Load 8(invocation)
+            1669:     95(ptr) AccessChain 27(data) 29 49 30
+            1670:      6(int) Load 1669
+            1671:      6(int) GroupNonUniformUMin 34 ExclusiveScan 1670
+            1672:     95(ptr) AccessChain 27(data) 1668 49 30
+                              Store 1672 1671
+            1673:      6(int) Load 8(invocation)
+            1674:    102(ptr) AccessChain 27(data) 38 49
+            1675:   21(ivec4) Load 1674
+            1676:  101(ivec2) VectorShuffle 1675 1675 0 1
+            1677:  101(ivec2) GroupNonUniformUMin 34 ExclusiveScan 1676
+            1678:    102(ptr) AccessChain 27(data) 1673 49
+            1679:   21(ivec4) Load 1678
+            1680:   21(ivec4) VectorShuffle 1679 1677 4 5 2 3
+                              Store 1678 1680
+            1681:      6(int) Load 8(invocation)
+            1682:    102(ptr) AccessChain 27(data) 49 49
+            1683:   21(ivec4) Load 1682
+            1684:  111(ivec3) VectorShuffle 1683 1683 0 1 2
+            1685:  111(ivec3) GroupNonUniformUMin 34 ExclusiveScan 1684
+            1686:    102(ptr) AccessChain 27(data) 1681 49
+            1687:   21(ivec4) Load 1686
+            1688:   21(ivec4) VectorShuffle 1687 1685 4 5 6 3
+                              Store 1686 1688
+            1689:      6(int) Load 8(invocation)
+            1690:    102(ptr) AccessChain 27(data) 59 49
+            1691:   21(ivec4) Load 1690
+            1692:   21(ivec4) GroupNonUniformUMin 34 ExclusiveScan 1691
+            1693:    102(ptr) AccessChain 27(data) 1689 49
+                              Store 1693 1692
+            1694:      6(int) Load 8(invocation)
+            1695:    125(ptr) AccessChain 27(data) 29 59 30
+            1696:   22(float) Load 1695
+            1697:   22(float) GroupNonUniformFMin 34 ExclusiveScan 1696
+            1698:    125(ptr) AccessChain 27(data) 1694 59 30
+                              Store 1698 1697
+            1699:      6(int) Load 8(invocation)
+            1700:    132(ptr) AccessChain 27(data) 38 59
+            1701:   23(fvec4) Load 1700
+            1702:  131(fvec2) VectorShuffle 1701 1701 0 1
+            1703:  131(fvec2) GroupNonUniformFMin 34 ExclusiveScan 1702
+            1704:    132(ptr) AccessChain 27(data) 1699 59
+            1705:   23(fvec4) Load 1704
+            1706:   23(fvec4) VectorShuffle 1705 1703 4 5 2 3
+                              Store 1704 1706
+            1707:      6(int) Load 8(invocation)
+            1708:    132(ptr) AccessChain 27(data) 49 59
+            1709:   23(fvec4) Load 1708
+            1710:  141(fvec3) VectorShuffle 1709 1709 0 1 2
+            1711:  141(fvec3) GroupNonUniformFMin 34 ExclusiveScan 1710
+            1712:    132(ptr) AccessChain 27(data) 1707 59
+            1713:   23(fvec4) Load 1712
+            1714:   23(fvec4) VectorShuffle 1713 1711 4 5 6 3
+                              Store 1712 1714
+            1715:      6(int) Load 8(invocation)
+            1716:    132(ptr) AccessChain 27(data) 59 59
+            1717:   23(fvec4) Load 1716
+            1718:   23(fvec4) GroupNonUniformFMin 34 ExclusiveScan 1717
+            1719:    132(ptr) AccessChain 27(data) 1715 59
+                              Store 1719 1718
+            1720:      6(int) Load 8(invocation)
+            1721:     31(ptr) AccessChain 27(data) 29 29 30
+            1722:   17(float) Load 1721
+            1723:   17(float) GroupNonUniformFMax 34 ExclusiveScan 1722
+            1724:     31(ptr) AccessChain 27(data) 1720 29 30
+                              Store 1724 1723
+            1725:      6(int) Load 8(invocation)
+            1726:     40(ptr) AccessChain 27(data) 38 29
+            1727:   18(fvec4) Load 1726
+            1728:   39(fvec2) VectorShuffle 1727 1727 0 1
+            1729:   39(fvec2) GroupNonUniformFMax 34 ExclusiveScan 1728
+            1730:     40(ptr) AccessChain 27(data) 1725 29
+            1731:   18(fvec4) Load 1730
+            1732:   18(fvec4) VectorShuffle 1731 1729 4 5 2 3
+                              Store 1730 1732
+            1733:      6(int) Load 8(invocation)
+            1734:     40(ptr) AccessChain 27(data) 49 29
+            1735:   18(fvec4) Load 1734
+            1736:   50(fvec3) VectorShuffle 1735 1735 0 1 2
+            1737:   50(fvec3) GroupNonUniformFMax 34 ExclusiveScan 1736
+            1738:     40(ptr) AccessChain 27(data) 1733 29
+            1739:   18(fvec4) Load 1738
+            1740:   18(fvec4) VectorShuffle 1739 1737 4 5 6 3
+                              Store 1738 1740
+            1741:      6(int) Load 8(invocation)
+            1742:     40(ptr) AccessChain 27(data) 59 29
+            1743:   18(fvec4) Load 1742
+            1744:   18(fvec4) GroupNonUniformFMax 34 ExclusiveScan 1743
+            1745:     40(ptr) AccessChain 27(data) 1741 29
+                              Store 1745 1744
+            1746:      6(int) Load 8(invocation)
+            1747:     65(ptr) AccessChain 27(data) 29 38 30
+            1748:     19(int) Load 1747
+            1749:     19(int) GroupNonUniformSMax 34 ExclusiveScan 1748
+            1750:     65(ptr) AccessChain 27(data) 1746 38 30
+                              Store 1750 1749
+            1751:      6(int) Load 8(invocation)
+            1752:     72(ptr) AccessChain 27(data) 38 38
+            1753:   20(ivec4) Load 1752
+            1754:   71(ivec2) VectorShuffle 1753 1753 0 1
+            1755:   71(ivec2) GroupNonUniformSMax 34 ExclusiveScan 1754
+            1756:     72(ptr) AccessChain 27(data) 1751 38
+            1757:   20(ivec4) Load 1756
+            1758:   20(ivec4) VectorShuffle 1757 1755 4 5 2 3
+                              Store 1756 1758
+            1759:      6(int) Load 8(invocation)
+            1760:     72(ptr) AccessChain 27(data) 49 38
+            1761:   20(ivec4) Load 1760
+            1762:   81(ivec3) VectorShuffle 1761 1761 0 1 2
+            1763:   81(ivec3) GroupNonUniformSMax 34 ExclusiveScan 1762
+            1764:     72(ptr) AccessChain 27(data) 1759 38
+            1765:   20(ivec4) Load 1764
+            1766:   20(ivec4) VectorShuffle 1765 1763 4 5 6 3
+                              Store 1764 1766
+            1767:      6(int) Load 8(invocation)
+            1768:     72(ptr) AccessChain 27(data) 59 38
+            1769:   20(ivec4) Load 1768
+            1770:   20(ivec4) GroupNonUniformSMax 34 ExclusiveScan 1769
+            1771:     72(ptr) AccessChain 27(data) 1767 38
+                              Store 1771 1770
+            1772:      6(int) Load 8(invocation)
+            1773:     95(ptr) AccessChain 27(data) 29 49 30
+            1774:      6(int) Load 1773
+            1775:      6(int) GroupNonUniformUMax 34 ExclusiveScan 1774
+            1776:     95(ptr) AccessChain 27(data) 1772 49 30
+                              Store 1776 1775
+            1777:      6(int) Load 8(invocation)
+            1778:    102(ptr) AccessChain 27(data) 38 49
+            1779:   21(ivec4) Load 1778
+            1780:  101(ivec2) VectorShuffle 1779 1779 0 1
+            1781:  101(ivec2) GroupNonUniformUMax 34 ExclusiveScan 1780
+            1782:    102(ptr) AccessChain 27(data) 1777 49
+            1783:   21(ivec4) Load 1782
+            1784:   21(ivec4) VectorShuffle 1783 1781 4 5 2 3
+                              Store 1782 1784
+            1785:      6(int) Load 8(invocation)
+            1786:    102(ptr) AccessChain 27(data) 49 49
+            1787:   21(ivec4) Load 1786
+            1788:  111(ivec3) VectorShuffle 1787 1787 0 1 2
+            1789:  111(ivec3) GroupNonUniformUMax 34 ExclusiveScan 1788
+            1790:    102(ptr) AccessChain 27(data) 1785 49
+            1791:   21(ivec4) Load 1790
+            1792:   21(ivec4) VectorShuffle 1791 1789 4 5 6 3
+                              Store 1790 1792
+            1793:      6(int) Load 8(invocation)
+            1794:    102(ptr) AccessChain 27(data) 59 49
+            1795:   21(ivec4) Load 1794
+            1796:   21(ivec4) GroupNonUniformUMax 34 ExclusiveScan 1795
+            1797:    102(ptr) AccessChain 27(data) 1793 49
+                              Store 1797 1796
+            1798:      6(int) Load 8(invocation)
+            1799:    125(ptr) AccessChain 27(data) 29 59 30
+            1800:   22(float) Load 1799
+            1801:   22(float) GroupNonUniformFMax 34 ExclusiveScan 1800
+            1802:    125(ptr) AccessChain 27(data) 1798 59 30
+                              Store 1802 1801
+            1803:      6(int) Load 8(invocation)
+            1804:    132(ptr) AccessChain 27(data) 38 59
+            1805:   23(fvec4) Load 1804
+            1806:  131(fvec2) VectorShuffle 1805 1805 0 1
+            1807:  131(fvec2) GroupNonUniformFMax 34 ExclusiveScan 1806
+            1808:    132(ptr) AccessChain 27(data) 1803 59
+            1809:   23(fvec4) Load 1808
+            1810:   23(fvec4) VectorShuffle 1809 1807 4 5 2 3
+                              Store 1808 1810
+            1811:      6(int) Load 8(invocation)
+            1812:    132(ptr) AccessChain 27(data) 49 59
+            1813:   23(fvec4) Load 1812
+            1814:  141(fvec3) VectorShuffle 1813 1813 0 1 2
+            1815:  141(fvec3) GroupNonUniformFMax 34 ExclusiveScan 1814
+            1816:    132(ptr) AccessChain 27(data) 1811 59
+            1817:   23(fvec4) Load 1816
+            1818:   23(fvec4) VectorShuffle 1817 1815 4 5 6 3
+                              Store 1816 1818
+            1819:      6(int) Load 8(invocation)
+            1820:    132(ptr) AccessChain 27(data) 59 59
+            1821:   23(fvec4) Load 1820
+            1822:   23(fvec4) GroupNonUniformFMax 34 ExclusiveScan 1821
+            1823:    132(ptr) AccessChain 27(data) 1819 59
+                              Store 1823 1822
+            1824:      6(int) Load 8(invocation)
+            1825:     65(ptr) AccessChain 27(data) 29 38 30
+            1826:     19(int) Load 1825
+            1827:     19(int) GroupNonUniformBitwiseAnd 34 ExclusiveScan 1826
+            1828:     65(ptr) AccessChain 27(data) 1824 38 30
+                              Store 1828 1827
+            1829:      6(int) Load 8(invocation)
+            1830:     72(ptr) AccessChain 27(data) 38 38
+            1831:   20(ivec4) Load 1830
+            1832:   71(ivec2) VectorShuffle 1831 1831 0 1
+            1833:   71(ivec2) GroupNonUniformBitwiseAnd 34 ExclusiveScan 1832
+            1834:     72(ptr) AccessChain 27(data) 1829 38
+            1835:   20(ivec4) Load 1834
+            1836:   20(ivec4) VectorShuffle 1835 1833 4 5 2 3
+                              Store 1834 1836
+            1837:      6(int) Load 8(invocation)
+            1838:     72(ptr) AccessChain 27(data) 49 38
+            1839:   20(ivec4) Load 1838
+            1840:   81(ivec3) VectorShuffle 1839 1839 0 1 2
+            1841:   81(ivec3) GroupNonUniformBitwiseAnd 34 ExclusiveScan 1840
+            1842:     72(ptr) AccessChain 27(data) 1837 38
+            1843:   20(ivec4) Load 1842
+            1844:   20(ivec4) VectorShuffle 1843 1841 4 5 6 3
+                              Store 1842 1844
+            1845:      6(int) Load 8(invocation)
+            1846:     72(ptr) AccessChain 27(data) 59 38
+            1847:   20(ivec4) Load 1846
+            1848:   20(ivec4) GroupNonUniformBitwiseAnd 34 ExclusiveScan 1847
+            1849:     72(ptr) AccessChain 27(data) 1845 38
+                              Store 1849 1848
+            1850:      6(int) Load 8(invocation)
+            1851:     95(ptr) AccessChain 27(data) 29 49 30
+            1852:      6(int) Load 1851
+            1853:      6(int) GroupNonUniformBitwiseAnd 34 ExclusiveScan 1852
+            1854:     95(ptr) AccessChain 27(data) 1850 49 30
+                              Store 1854 1853
+            1855:      6(int) Load 8(invocation)
+            1856:    102(ptr) AccessChain 27(data) 38 49
+            1857:   21(ivec4) Load 1856
+            1858:  101(ivec2) VectorShuffle 1857 1857 0 1
+            1859:  101(ivec2) GroupNonUniformBitwiseAnd 34 ExclusiveScan 1858
+            1860:    102(ptr) AccessChain 27(data) 1855 49
+            1861:   21(ivec4) Load 1860
+            1862:   21(ivec4) VectorShuffle 1861 1859 4 5 2 3
+                              Store 1860 1862
+            1863:      6(int) Load 8(invocation)
+            1864:    102(ptr) AccessChain 27(data) 49 49
+            1865:   21(ivec4) Load 1864
+            1866:  111(ivec3) VectorShuffle 1865 1865 0 1 2
+            1867:  111(ivec3) GroupNonUniformBitwiseAnd 34 ExclusiveScan 1866
+            1868:    102(ptr) AccessChain 27(data) 1863 49
+            1869:   21(ivec4) Load 1868
+            1870:   21(ivec4) VectorShuffle 1869 1867 4 5 6 3
+                              Store 1868 1870
+            1871:      6(int) Load 8(invocation)
+            1872:    102(ptr) AccessChain 27(data) 59 49
+            1873:   21(ivec4) Load 1872
+            1874:   21(ivec4) GroupNonUniformBitwiseAnd 34 ExclusiveScan 1873
+            1875:    102(ptr) AccessChain 27(data) 1871 49
+                              Store 1875 1874
+            1876:      6(int) Load 8(invocation)
+            1877:     65(ptr) AccessChain 27(data) 29 38 30
+            1878:     19(int) Load 1877
+            1879:   521(bool) SLessThan 1878 29
+            1880:   521(bool) GroupNonUniformLogicalAnd 34 ExclusiveScan 1879
+            1881:     19(int) Select 1880 38 29
+            1882:     65(ptr) AccessChain 27(data) 1876 38 30
+                              Store 1882 1881
+            1883:      6(int) Load 8(invocation)
+            1884:     72(ptr) AccessChain 27(data) 38 38
+            1885:   20(ivec4) Load 1884
+            1886:   71(ivec2) VectorShuffle 1885 1885 0 1
+            1887:  531(bvec2) SLessThan 1886 530
+            1888:  531(bvec2) GroupNonUniformLogicalAnd 34 ExclusiveScan 1887
+            1889:   71(ivec2) Select 1888 534 530
+            1890:     72(ptr) AccessChain 27(data) 1883 38
+            1891:   20(ivec4) Load 1890
+            1892:   20(ivec4) VectorShuffle 1891 1889 4 5 2 3
+                              Store 1890 1892
+            1893:      6(int) Load 8(invocation)
+            1894:     72(ptr) AccessChain 27(data) 38 38
+            1895:   20(ivec4) Load 1894
+            1896:   81(ivec3) VectorShuffle 1895 1895 0 1 2
+            1897:  544(bvec3) SLessThan 1896 543
+            1898:  544(bvec3) GroupNonUniformLogicalAnd 34 ExclusiveScan 1897
+            1899:   81(ivec3) Select 1898 547 543
+            1900:     72(ptr) AccessChain 27(data) 1893 38
+            1901:   20(ivec4) Load 1900
+            1902:   20(ivec4) VectorShuffle 1901 1899 4 5 6 3
+                              Store 1900 1902
+            1903:      6(int) Load 8(invocation)
+            1904:     72(ptr) AccessChain 27(data) 38 38
+            1905:   20(ivec4) Load 1904
+            1906:  556(bvec4) SLessThan 1905 555
+            1907:  556(bvec4) GroupNonUniformLogicalAnd 34 ExclusiveScan 1906
+            1908:   20(ivec4) Select 1907 559 555
+            1909:     72(ptr) AccessChain 27(data) 1903 38
+                              Store 1909 1908
+            1910:      6(int) Load 8(invocation)
+            1911:     65(ptr) AccessChain 27(data) 29 38 30
+            1912:     19(int) Load 1911
+            1913:     19(int) GroupNonUniformBitwiseOr 34 ExclusiveScan 1912
+            1914:     65(ptr) AccessChain 27(data) 1910 38 30
+                              Store 1914 1913
+            1915:      6(int) Load 8(invocation)
+            1916:     72(ptr) AccessChain 27(data) 38 38
+            1917:   20(ivec4) Load 1916
+            1918:   71(ivec2) VectorShuffle 1917 1917 0 1
+            1919:   71(ivec2) GroupNonUniformBitwiseOr 34 ExclusiveScan 1918
+            1920:     72(ptr) AccessChain 27(data) 1915 38
+            1921:   20(ivec4) Load 1920
+            1922:   20(ivec4) VectorShuffle 1921 1919 4 5 2 3
+                              Store 1920 1922
+            1923:      6(int) Load 8(invocation)
+            1924:     72(ptr) AccessChain 27(data) 49 38
+            1925:   20(ivec4) Load 1924
+            1926:   81(ivec3) VectorShuffle 1925 1925 0 1 2
+            1927:   81(ivec3) GroupNonUniformBitwiseOr 34 ExclusiveScan 1926
+            1928:     72(ptr) AccessChain 27(data) 1923 38
+            1929:   20(ivec4) Load 1928
+            1930:   20(ivec4) VectorShuffle 1929 1927 4 5 6 3
+                              Store 1928 1930
+            1931:      6(int) Load 8(invocation)
+            1932:     72(ptr) AccessChain 27(data) 59 38
+            1933:   20(ivec4) Load 1932
+            1934:   20(ivec4) GroupNonUniformBitwiseOr 34 ExclusiveScan 1933
+            1935:     72(ptr) AccessChain 27(data) 1931 38
+                              Store 1935 1934
+            1936:      6(int) Load 8(invocation)
+            1937:     95(ptr) AccessChain 27(data) 29 49 30
+            1938:      6(int) Load 1937
+            1939:      6(int) GroupNonUniformBitwiseOr 34 ExclusiveScan 1938
+            1940:     95(ptr) AccessChain 27(data) 1936 49 30
+                              Store 1940 1939
+            1941:      6(int) Load 8(invocation)
+            1942:    102(ptr) AccessChain 27(data) 38 49
+            1943:   21(ivec4) Load 1942
+            1944:  101(ivec2) VectorShuffle 1943 1943 0 1
+            1945:  101(ivec2) GroupNonUniformBitwiseOr 34 ExclusiveScan 1944
+            1946:    102(ptr) AccessChain 27(data) 1941 49
+            1947:   21(ivec4) Load 1946
+            1948:   21(ivec4) VectorShuffle 1947 1945 4 5 2 3
+                              Store 1946 1948
+            1949:      6(int) Load 8(invocation)
+            1950:    102(ptr) AccessChain 27(data) 49 49
+            1951:   21(ivec4) Load 1950
+            1952:  111(ivec3) VectorShuffle 1951 1951 0 1 2
+            1953:  111(ivec3) GroupNonUniformBitwiseOr 34 ExclusiveScan 1952
+            1954:    102(ptr) AccessChain 27(data) 1949 49
+            1955:   21(ivec4) Load 1954
+            1956:   21(ivec4) VectorShuffle 1955 1953 4 5 6 3
+                              Store 1954 1956
+            1957:      6(int) Load 8(invocation)
+            1958:    102(ptr) AccessChain 27(data) 59 49
+            1959:   21(ivec4) Load 1958
+            1960:   21(ivec4) GroupNonUniformBitwiseOr 34 ExclusiveScan 1959
+            1961:    102(ptr) AccessChain 27(data) 1957 49
+                              Store 1961 1960
+            1962:      6(int) Load 8(invocation)
+            1963:     65(ptr) AccessChain 27(data) 29 38 30
+            1964:     19(int) Load 1963
+            1965:   521(bool) SLessThan 1964 29
+            1966:   521(bool) GroupNonUniformLogicalOr 34 ExclusiveScan 1965
+            1967:     19(int) Select 1966 38 29
+            1968:     65(ptr) AccessChain 27(data) 1962 38 30
+                              Store 1968 1967
+            1969:      6(int) Load 8(invocation)
+            1970:     72(ptr) AccessChain 27(data) 38 38
+            1971:   20(ivec4) Load 1970
+            1972:   71(ivec2) VectorShuffle 1971 1971 0 1
+            1973:  531(bvec2) SLessThan 1972 530
+            1974:  531(bvec2) GroupNonUniformLogicalOr 34 ExclusiveScan 1973
+            1975:   71(ivec2) Select 1974 534 530
+            1976:     72(ptr) AccessChain 27(data) 1969 38
+            1977:   20(ivec4) Load 1976
+            1978:   20(ivec4) VectorShuffle 1977 1975 4 5 2 3
+                              Store 1976 1978
+            1979:      6(int) Load 8(invocation)
+            1980:     72(ptr) AccessChain 27(data) 38 38
+            1981:   20(ivec4) Load 1980
+            1982:   81(ivec3) VectorShuffle 1981 1981 0 1 2
+            1983:  544(bvec3) SLessThan 1982 543
+            1984:  544(bvec3) GroupNonUniformLogicalOr 34 ExclusiveScan 1983
+            1985:   81(ivec3) Select 1984 547 543
+            1986:     72(ptr) AccessChain 27(data) 1979 38
+            1987:   20(ivec4) Load 1986
+            1988:   20(ivec4) VectorShuffle 1987 1985 4 5 6 3
+                              Store 1986 1988
+            1989:      6(int) Load 8(invocation)
+            1990:     72(ptr) AccessChain 27(data) 38 38
+            1991:   20(ivec4) Load 1990
+            1992:  556(bvec4) SLessThan 1991 555
+            1993:  556(bvec4) GroupNonUniformLogicalOr 34 ExclusiveScan 1992
+            1994:   20(ivec4) Select 1993 559 555
+            1995:     72(ptr) AccessChain 27(data) 1989 38
+                              Store 1995 1994
+            1996:      6(int) Load 8(invocation)
+            1997:     65(ptr) AccessChain 27(data) 29 38 30
+            1998:     19(int) Load 1997
+            1999:     19(int) GroupNonUniformBitwiseXor 34 ExclusiveScan 1998
+            2000:     65(ptr) AccessChain 27(data) 1996 38 30
+                              Store 2000 1999
+            2001:      6(int) Load 8(invocation)
+            2002:     72(ptr) AccessChain 27(data) 38 38
+            2003:   20(ivec4) Load 2002
+            2004:   71(ivec2) VectorShuffle 2003 2003 0 1
+            2005:   71(ivec2) GroupNonUniformBitwiseXor 34 ExclusiveScan 2004
+            2006:     72(ptr) AccessChain 27(data) 2001 38
+            2007:   20(ivec4) Load 2006
+            2008:   20(ivec4) VectorShuffle 2007 2005 4 5 2 3
+                              Store 2006 2008
+            2009:      6(int) Load 8(invocation)
+            2010:     72(ptr) AccessChain 27(data) 49 38
+            2011:   20(ivec4) Load 2010
+            2012:   81(ivec3) VectorShuffle 2011 2011 0 1 2
+            2013:   81(ivec3) GroupNonUniformBitwiseXor 34 ExclusiveScan 2012
+            2014:     72(ptr) AccessChain 27(data) 2009 38
+            2015:   20(ivec4) Load 2014
+            2016:   20(ivec4) VectorShuffle 2015 2013 4 5 6 3
+                              Store 2014 2016
+            2017:      6(int) Load 8(invocation)
+            2018:     72(ptr) AccessChain 27(data) 59 38
+            2019:   20(ivec4) Load 2018
+            2020:   20(ivec4) GroupNonUniformBitwiseXor 34 ExclusiveScan 2019
+            2021:     72(ptr) AccessChain 27(data) 2017 38
+                              Store 2021 2020
+            2022:      6(int) Load 8(invocation)
+            2023:     95(ptr) AccessChain 27(data) 29 49 30
+            2024:      6(int) Load 2023
+            2025:      6(int) GroupNonUniformBitwiseXor 34 ExclusiveScan 2024
+            2026:     95(ptr) AccessChain 27(data) 2022 49 30
+                              Store 2026 2025
+            2027:      6(int) Load 8(invocation)
+            2028:    102(ptr) AccessChain 27(data) 38 49
+            2029:   21(ivec4) Load 2028
+            2030:  101(ivec2) VectorShuffle 2029 2029 0 1
+            2031:  101(ivec2) GroupNonUniformBitwiseXor 34 ExclusiveScan 2030
+            2032:    102(ptr) AccessChain 27(data) 2027 49
+            2033:   21(ivec4) Load 2032
+            2034:   21(ivec4) VectorShuffle 2033 2031 4 5 2 3
+                              Store 2032 2034
+            2035:      6(int) Load 8(invocation)
+            2036:    102(ptr) AccessChain 27(data) 49 49
+            2037:   21(ivec4) Load 2036
+            2038:  111(ivec3) VectorShuffle 2037 2037 0 1 2
+            2039:  111(ivec3) GroupNonUniformBitwiseXor 34 ExclusiveScan 2038
+            2040:    102(ptr) AccessChain 27(data) 2035 49
+            2041:   21(ivec4) Load 2040
+            2042:   21(ivec4) VectorShuffle 2041 2039 4 5 6 3
+                              Store 2040 2042
+            2043:      6(int) Load 8(invocation)
+            2044:    102(ptr) AccessChain 27(data) 59 49
+            2045:   21(ivec4) Load 2044
+            2046:   21(ivec4) GroupNonUniformBitwiseXor 34 ExclusiveScan 2045
+            2047:    102(ptr) AccessChain 27(data) 2043 49
+                              Store 2047 2046
+            2048:      6(int) Load 8(invocation)
+            2049:     65(ptr) AccessChain 27(data) 29 38 30
+            2050:     19(int) Load 2049
+            2051:   521(bool) SLessThan 2050 29
+            2052:   521(bool) GroupNonUniformLogicalXor 34 ExclusiveScan 2051
+            2053:     19(int) Select 2052 38 29
+            2054:     65(ptr) AccessChain 27(data) 2048 38 30
+                              Store 2054 2053
+            2055:      6(int) Load 8(invocation)
+            2056:     72(ptr) AccessChain 27(data) 38 38
+            2057:   20(ivec4) Load 2056
+            2058:   71(ivec2) VectorShuffle 2057 2057 0 1
+            2059:  531(bvec2) SLessThan 2058 530
+            2060:  531(bvec2) GroupNonUniformLogicalXor 34 ExclusiveScan 2059
+            2061:   71(ivec2) Select 2060 534 530
+            2062:     72(ptr) AccessChain 27(data) 2055 38
+            2063:   20(ivec4) Load 2062
+            2064:   20(ivec4) VectorShuffle 2063 2061 4 5 2 3
+                              Store 2062 2064
+            2065:      6(int) Load 8(invocation)
+            2066:     72(ptr) AccessChain 27(data) 38 38
+            2067:   20(ivec4) Load 2066
+            2068:   81(ivec3) VectorShuffle 2067 2067 0 1 2
+            2069:  544(bvec3) SLessThan 2068 543
+            2070:  544(bvec3) GroupNonUniformLogicalXor 34 ExclusiveScan 2069
+            2071:   81(ivec3) Select 2070 547 543
+            2072:     72(ptr) AccessChain 27(data) 2065 38
+            2073:   20(ivec4) Load 2072
+            2074:   20(ivec4) VectorShuffle 2073 2071 4 5 6 3
+                              Store 2072 2074
+            2075:      6(int) Load 8(invocation)
+            2076:     72(ptr) AccessChain 27(data) 38 38
+            2077:   20(ivec4) Load 2076
+            2078:  556(bvec4) SLessThan 2077 555
+            2079:  556(bvec4) GroupNonUniformLogicalXor 34 ExclusiveScan 2078
+            2080:   20(ivec4) Select 2079 559 555
+            2081:     72(ptr) AccessChain 27(data) 2075 38
+                              Store 2081 2080
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.subgroupBallot.comp.out b/Test/baseResults/spv.subgroupBallot.comp.out
new file mode 100644
index 0000000..b002047
--- /dev/null
+++ b/Test/baseResults/spv.subgroupBallot.comp.out
@@ -0,0 +1,525 @@
+spv.subgroupBallot.comp
+// Module Version 10300
+// Generated by (magic number): 80006
+// Id's are bound by 417
+
+                              Capability Shader
+                              Capability Float64
+                              Capability GroupNonUniform
+                              Capability GroupNonUniformBallot
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main" 10 12 21 23 26 29 32
+                              ExecutionMode 4 LocalSize 8 8 1
+                              Source GLSL 450
+                              SourceExtension  "GL_KHR_shader_subgroup_ballot"
+                              SourceExtension  "GL_KHR_shader_subgroup_basic"
+                              Name 4  "main"
+                              Name 8  "invocation"
+                              Name 10  "gl_SubgroupInvocationID"
+                              Name 12  "gl_SubgroupSize"
+                              Name 19  "relMask"
+                              Name 21  "gl_SubgroupEqMask"
+                              Name 23  "gl_SubgroupGeMask"
+                              Name 26  "gl_SubgroupGtMask"
+                              Name 29  "gl_SubgroupLeMask"
+                              Name 32  "gl_SubgroupLtMask"
+                              Name 35  "result"
+                              Name 46  "Buffers"
+                              MemberName 46(Buffers) 0  "f4"
+                              MemberName 46(Buffers) 1  "i4"
+                              MemberName 46(Buffers) 2  "u4"
+                              MemberName 46(Buffers) 3  "d4"
+                              Name 49  "data"
+                              Decorate 10(gl_SubgroupInvocationID) RelaxedPrecision
+                              Decorate 10(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId
+                              Decorate 11 RelaxedPrecision
+                              Decorate 12(gl_SubgroupSize) RelaxedPrecision
+                              Decorate 12(gl_SubgroupSize) BuiltIn SubgroupSize
+                              Decorate 13 RelaxedPrecision
+                              Decorate 14 RelaxedPrecision
+                              Decorate 16 RelaxedPrecision
+                              Decorate 21(gl_SubgroupEqMask) BuiltIn SubgroupEqMaskKHR
+                              Decorate 23(gl_SubgroupGeMask) BuiltIn SubgroupGeMaskKHR
+                              Decorate 26(gl_SubgroupGtMask) BuiltIn SubgroupGtMaskKHR
+                              Decorate 29(gl_SubgroupLeMask) BuiltIn SubgroupLeMaskKHR
+                              Decorate 32(gl_SubgroupLtMask) BuiltIn SubgroupLtMaskKHR
+                              MemberDecorate 46(Buffers) 0 Offset 0
+                              MemberDecorate 46(Buffers) 1 Offset 16
+                              MemberDecorate 46(Buffers) 2 Offset 32
+                              MemberDecorate 46(Buffers) 3 Offset 64
+                              Decorate 46(Buffers) BufferBlock
+                              Decorate 49(data) DescriptorSet 0
+                              Decorate 49(data) Binding 0
+                              Decorate 416 BuiltIn WorkgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypePointer Function 6(int)
+               9:             TypePointer Input 6(int)
+10(gl_SubgroupInvocationID):      9(ptr) Variable Input
+12(gl_SubgroupSize):      9(ptr) Variable Input
+              15:      6(int) Constant 4
+              17:             TypeVector 6(int) 4
+              18:             TypePointer Function 17(ivec4)
+              20:             TypePointer Input 17(ivec4)
+21(gl_SubgroupEqMask):     20(ptr) Variable Input
+23(gl_SubgroupGeMask):     20(ptr) Variable Input
+26(gl_SubgroupGtMask):     20(ptr) Variable Input
+29(gl_SubgroupLeMask):     20(ptr) Variable Input
+32(gl_SubgroupLtMask):     20(ptr) Variable Input
+              36:             TypeBool
+              37:    36(bool) ConstantTrue
+              38:      6(int) Constant 3
+              40:             TypeFloat 32
+              41:             TypeVector 40(float) 4
+              42:             TypeInt 32 1
+              43:             TypeVector 42(int) 4
+              44:             TypeFloat 64
+              45:             TypeVector 44(float) 4
+     46(Buffers):             TypeStruct 41(fvec4) 43(ivec4) 17(ivec4) 45(fvec4)
+              47:             TypeArray 46(Buffers) 15
+              48:             TypePointer Uniform 47
+        49(data):     48(ptr) Variable Uniform
+              51:     42(int) Constant 2
+              54:      6(int) Constant 0
+              55:             TypePointer Uniform 6(int)
+              60:     42(int) Constant 1
+              61:     42(int) Constant 0
+              64:      6(int) Constant 1
+              72:      6(int) Constant 2
+              83:             TypeVector 36(bool) 4
+              88:             TypePointer Uniform 17(ivec4)
+              96:             TypePointer Uniform 40(float)
+             103:             TypeVector 40(float) 2
+             104:             TypePointer Uniform 41(fvec4)
+             114:             TypeVector 40(float) 3
+             124:     42(int) Constant 3
+             131:             TypePointer Uniform 42(int)
+             138:             TypeVector 42(int) 2
+             139:             TypePointer Uniform 43(ivec4)
+             149:             TypeVector 42(int) 3
+             171:             TypeVector 6(int) 2
+             181:             TypeVector 6(int) 3
+             197:             TypePointer Uniform 44(float)
+             204:             TypeVector 44(float) 2
+             205:             TypePointer Uniform 45(fvec4)
+             215:             TypeVector 44(float) 3
+             242:  138(ivec2) ConstantComposite 61 61
+             243:             TypeVector 36(bool) 2
+             247:  138(ivec2) ConstantComposite 60 60
+             256:  149(ivec3) ConstantComposite 61 61 61
+             257:             TypeVector 36(bool) 3
+             261:  149(ivec3) ConstantComposite 60 60 60
+             269:   43(ivec4) ConstantComposite 61 61 61 61
+             273:   43(ivec4) ConstantComposite 60 60 60 60
+             415:      6(int) Constant 8
+             416:  181(ivec3) ConstantComposite 415 415 64
+         4(main):           2 Function None 3
+               5:             Label
+   8(invocation):      7(ptr) Variable Function
+     19(relMask):     18(ptr) Variable Function
+      35(result):     18(ptr) Variable Function
+              11:      6(int) Load 10(gl_SubgroupInvocationID)
+              13:      6(int) Load 12(gl_SubgroupSize)
+              14:      6(int) IAdd 11 13
+              16:      6(int) UMod 14 15
+                              Store 8(invocation) 16
+              22:   17(ivec4) Load 21(gl_SubgroupEqMask)
+              24:   17(ivec4) Load 23(gl_SubgroupGeMask)
+              25:   17(ivec4) IAdd 22 24
+              27:   17(ivec4) Load 26(gl_SubgroupGtMask)
+              28:   17(ivec4) IAdd 25 27
+              30:   17(ivec4) Load 29(gl_SubgroupLeMask)
+              31:   17(ivec4) IAdd 28 30
+              33:   17(ivec4) Load 32(gl_SubgroupLtMask)
+              34:   17(ivec4) IAdd 31 33
+                              Store 19(relMask) 34
+              39:   17(ivec4) GroupNonUniformBallot 38 37
+                              Store 35(result) 39
+              50:      6(int) Load 8(invocation)
+              52:   17(ivec4) Load 35(result)
+              53:      6(int) GroupNonUniformBallotBitCount 38 Reduce 52
+              56:     55(ptr) AccessChain 49(data) 50 51 54
+                              Store 56 53
+              57:      6(int) Load 8(invocation)
+              58:   17(ivec4) Load 35(result)
+              59:    36(bool) GroupNonUniformBallotBitExtract 38 58 54
+              62:     42(int) Select 59 60 61
+              63:      6(int) Bitcast 62
+              65:     55(ptr) AccessChain 49(data) 57 51 64
+                              Store 65 63
+              66:      6(int) Load 8(invocation)
+              67:   17(ivec4) Load 35(result)
+              68:      6(int) GroupNonUniformBallotBitCount 38 InclusiveScan 67
+              69:   17(ivec4) Load 35(result)
+              70:      6(int) GroupNonUniformBallotBitCount 38 ExclusiveScan 69
+              71:      6(int) IAdd 68 70
+              73:     55(ptr) AccessChain 49(data) 66 51 72
+                              Store 73 71
+              74:      6(int) Load 8(invocation)
+              75:   17(ivec4) Load 35(result)
+              76:      6(int) GroupNonUniformBallotFindLSB 38 75
+              77:   17(ivec4) Load 35(result)
+              78:      6(int) GroupNonUniformBallotFindMSB 38 77
+              79:      6(int) IAdd 76 78
+              80:     55(ptr) AccessChain 49(data) 74 51 38
+                              Store 80 79
+              81:   17(ivec4) Load 19(relMask)
+              82:   17(ivec4) Load 35(result)
+              84:   83(bvec4) IEqual 81 82
+              85:    36(bool) All 84
+                              SelectionMerge 87 None
+                              BranchConditional 85 86 87
+              86:               Label
+              89:     88(ptr)   AccessChain 49(data) 61 51
+              90:   17(ivec4)   Load 89
+              91:    36(bool)   GroupNonUniformInverseBallot 38 90
+                                Branch 87
+              87:             Label
+              92:    36(bool) Phi 85 5 91 86
+                              SelectionMerge 94 None
+                              BranchConditional 92 93 276
+              93:               Label
+              95:      6(int)   Load 8(invocation)
+              97:     96(ptr)   AccessChain 49(data) 61 61 54
+              98:   40(float)   Load 97
+              99:      6(int)   Load 8(invocation)
+             100:   40(float)   GroupNonUniformBroadcast 38 98 99
+             101:     96(ptr)   AccessChain 49(data) 95 61 54
+                                Store 101 100
+             102:      6(int)   Load 8(invocation)
+             105:    104(ptr)   AccessChain 49(data) 60 61
+             106:   41(fvec4)   Load 105
+             107:  103(fvec2)   VectorShuffle 106 106 0 1
+             108:      6(int)   Load 8(invocation)
+             109:  103(fvec2)   GroupNonUniformBroadcast 38 107 108
+             110:    104(ptr)   AccessChain 49(data) 102 61
+             111:   41(fvec4)   Load 110
+             112:   41(fvec4)   VectorShuffle 111 109 4 5 2 3
+                                Store 110 112
+             113:      6(int)   Load 8(invocation)
+             115:    104(ptr)   AccessChain 49(data) 51 61
+             116:   41(fvec4)   Load 115
+             117:  114(fvec3)   VectorShuffle 116 116 0 1 2
+             118:      6(int)   Load 8(invocation)
+             119:  114(fvec3)   GroupNonUniformBroadcast 38 117 118
+             120:    104(ptr)   AccessChain 49(data) 113 61
+             121:   41(fvec4)   Load 120
+             122:   41(fvec4)   VectorShuffle 121 119 4 5 6 3
+                                Store 120 122
+             123:      6(int)   Load 8(invocation)
+             125:    104(ptr)   AccessChain 49(data) 124 61
+             126:   41(fvec4)   Load 125
+             127:      6(int)   Load 8(invocation)
+             128:   41(fvec4)   GroupNonUniformBroadcast 38 126 127
+             129:    104(ptr)   AccessChain 49(data) 123 61
+                                Store 129 128
+             130:      6(int)   Load 8(invocation)
+             132:    131(ptr)   AccessChain 49(data) 61 60 54
+             133:     42(int)   Load 132
+             134:      6(int)   Load 8(invocation)
+             135:     42(int)   GroupNonUniformBroadcast 38 133 134
+             136:    131(ptr)   AccessChain 49(data) 130 60 54
+                                Store 136 135
+             137:      6(int)   Load 8(invocation)
+             140:    139(ptr)   AccessChain 49(data) 60 60
+             141:   43(ivec4)   Load 140
+             142:  138(ivec2)   VectorShuffle 141 141 0 1
+             143:      6(int)   Load 8(invocation)
+             144:  138(ivec2)   GroupNonUniformBroadcast 38 142 143
+             145:    139(ptr)   AccessChain 49(data) 137 60
+             146:   43(ivec4)   Load 145
+             147:   43(ivec4)   VectorShuffle 146 144 4 5 2 3
+                                Store 145 147
+             148:      6(int)   Load 8(invocation)
+             150:    139(ptr)   AccessChain 49(data) 51 60
+             151:   43(ivec4)   Load 150
+             152:  149(ivec3)   VectorShuffle 151 151 0 1 2
+             153:      6(int)   Load 8(invocation)
+             154:  149(ivec3)   GroupNonUniformBroadcast 38 152 153
+             155:    139(ptr)   AccessChain 49(data) 148 60
+             156:   43(ivec4)   Load 155
+             157:   43(ivec4)   VectorShuffle 156 154 4 5 6 3
+                                Store 155 157
+             158:      6(int)   Load 8(invocation)
+             159:    139(ptr)   AccessChain 49(data) 124 60
+             160:   43(ivec4)   Load 159
+             161:      6(int)   Load 8(invocation)
+             162:   43(ivec4)   GroupNonUniformBroadcast 38 160 161
+             163:    139(ptr)   AccessChain 49(data) 158 60
+                                Store 163 162
+             164:      6(int)   Load 8(invocation)
+             165:     55(ptr)   AccessChain 49(data) 61 51 54
+             166:      6(int)   Load 165
+             167:      6(int)   Load 8(invocation)
+             168:      6(int)   GroupNonUniformBroadcast 38 166 167
+             169:     55(ptr)   AccessChain 49(data) 164 51 54
+                                Store 169 168
+             170:      6(int)   Load 8(invocation)
+             172:     88(ptr)   AccessChain 49(data) 60 51
+             173:   17(ivec4)   Load 172
+             174:  171(ivec2)   VectorShuffle 173 173 0 1
+             175:      6(int)   Load 8(invocation)
+             176:  171(ivec2)   GroupNonUniformBroadcast 38 174 175
+             177:     88(ptr)   AccessChain 49(data) 170 51
+             178:   17(ivec4)   Load 177
+             179:   17(ivec4)   VectorShuffle 178 176 4 5 2 3
+                                Store 177 179
+             180:      6(int)   Load 8(invocation)
+             182:     88(ptr)   AccessChain 49(data) 51 51
+             183:   17(ivec4)   Load 182
+             184:  181(ivec3)   VectorShuffle 183 183 0 1 2
+             185:      6(int)   Load 8(invocation)
+             186:  181(ivec3)   GroupNonUniformBroadcast 38 184 185
+             187:     88(ptr)   AccessChain 49(data) 180 51
+             188:   17(ivec4)   Load 187
+             189:   17(ivec4)   VectorShuffle 188 186 4 5 6 3
+                                Store 187 189
+             190:      6(int)   Load 8(invocation)
+             191:     88(ptr)   AccessChain 49(data) 124 51
+             192:   17(ivec4)   Load 191
+             193:      6(int)   Load 8(invocation)
+             194:   17(ivec4)   GroupNonUniformBroadcast 38 192 193
+             195:     88(ptr)   AccessChain 49(data) 190 51
+                                Store 195 194
+             196:      6(int)   Load 8(invocation)
+             198:    197(ptr)   AccessChain 49(data) 61 124 54
+             199:   44(float)   Load 198
+             200:      6(int)   Load 8(invocation)
+             201:   44(float)   GroupNonUniformBroadcast 38 199 200
+             202:    197(ptr)   AccessChain 49(data) 196 124 54
+                                Store 202 201
+             203:      6(int)   Load 8(invocation)
+             206:    205(ptr)   AccessChain 49(data) 60 124
+             207:   45(fvec4)   Load 206
+             208:  204(fvec2)   VectorShuffle 207 207 0 1
+             209:      6(int)   Load 8(invocation)
+             210:  204(fvec2)   GroupNonUniformBroadcast 38 208 209
+             211:    205(ptr)   AccessChain 49(data) 203 124
+             212:   45(fvec4)   Load 211
+             213:   45(fvec4)   VectorShuffle 212 210 4 5 2 3
+                                Store 211 213
+             214:      6(int)   Load 8(invocation)
+             216:    205(ptr)   AccessChain 49(data) 51 124
+             217:   45(fvec4)   Load 216
+             218:  215(fvec3)   VectorShuffle 217 217 0 1 2
+             219:      6(int)   Load 8(invocation)
+             220:  215(fvec3)   GroupNonUniformBroadcast 38 218 219
+             221:    205(ptr)   AccessChain 49(data) 214 124
+             222:   45(fvec4)   Load 221
+             223:   45(fvec4)   VectorShuffle 222 220 4 5 6 3
+                                Store 221 223
+             224:      6(int)   Load 8(invocation)
+             225:    205(ptr)   AccessChain 49(data) 124 124
+             226:   45(fvec4)   Load 225
+             227:      6(int)   Load 8(invocation)
+             228:   45(fvec4)   GroupNonUniformBroadcast 38 226 227
+             229:    205(ptr)   AccessChain 49(data) 224 124
+                                Store 229 228
+             230:      6(int)   Load 8(invocation)
+             231:    131(ptr)   AccessChain 49(data) 61 60 54
+             232:     42(int)   Load 231
+             233:    36(bool)   SLessThan 232 61
+             234:      6(int)   Load 8(invocation)
+             235:    36(bool)   GroupNonUniformBroadcast 38 233 234
+             236:     42(int)   Select 235 60 61
+             237:    131(ptr)   AccessChain 49(data) 230 60 54
+                                Store 237 236
+             238:      6(int)   Load 8(invocation)
+             239:    139(ptr)   AccessChain 49(data) 60 60
+             240:   43(ivec4)   Load 239
+             241:  138(ivec2)   VectorShuffle 240 240 0 1
+             244:  243(bvec2)   SLessThan 241 242
+             245:      6(int)   Load 8(invocation)
+             246:  243(bvec2)   GroupNonUniformBroadcast 38 244 245
+             248:  138(ivec2)   Select 246 247 242
+             249:    139(ptr)   AccessChain 49(data) 238 60
+             250:   43(ivec4)   Load 249
+             251:   43(ivec4)   VectorShuffle 250 248 4 5 2 3
+                                Store 249 251
+             252:      6(int)   Load 8(invocation)
+             253:    139(ptr)   AccessChain 49(data) 60 60
+             254:   43(ivec4)   Load 253
+             255:  149(ivec3)   VectorShuffle 254 254 0 1 2
+             258:  257(bvec3)   SLessThan 255 256
+             259:      6(int)   Load 8(invocation)
+             260:  257(bvec3)   GroupNonUniformBroadcast 38 258 259
+             262:  149(ivec3)   Select 260 261 256
+             263:    139(ptr)   AccessChain 49(data) 252 60
+             264:   43(ivec4)   Load 263
+             265:   43(ivec4)   VectorShuffle 264 262 4 5 6 3
+                                Store 263 265
+             266:      6(int)   Load 8(invocation)
+             267:    139(ptr)   AccessChain 49(data) 60 60
+             268:   43(ivec4)   Load 267
+             270:   83(bvec4)   SLessThan 268 269
+             271:      6(int)   Load 8(invocation)
+             272:   83(bvec4)   GroupNonUniformBroadcast 38 270 271
+             274:   43(ivec4)   Select 272 273 269
+             275:    139(ptr)   AccessChain 49(data) 266 60
+                                Store 275 274
+                                Branch 94
+             276:               Label
+             277:      6(int)   Load 8(invocation)
+             278:     96(ptr)   AccessChain 49(data) 61 61 54
+             279:   40(float)   Load 278
+             280:   40(float)   GroupNonUniformBroadcastFirst 38 279
+             281:     96(ptr)   AccessChain 49(data) 277 61 54
+                                Store 281 280
+             282:      6(int)   Load 8(invocation)
+             283:    104(ptr)   AccessChain 49(data) 60 61
+             284:   41(fvec4)   Load 283
+             285:  103(fvec2)   VectorShuffle 284 284 0 1
+             286:  103(fvec2)   GroupNonUniformBroadcastFirst 38 285
+             287:    104(ptr)   AccessChain 49(data) 282 61
+             288:   41(fvec4)   Load 287
+             289:   41(fvec4)   VectorShuffle 288 286 4 5 2 3
+                                Store 287 289
+             290:      6(int)   Load 8(invocation)
+             291:    104(ptr)   AccessChain 49(data) 51 61
+             292:   41(fvec4)   Load 291
+             293:  114(fvec3)   VectorShuffle 292 292 0 1 2
+             294:  114(fvec3)   GroupNonUniformBroadcastFirst 38 293
+             295:    104(ptr)   AccessChain 49(data) 290 61
+             296:   41(fvec4)   Load 295
+             297:   41(fvec4)   VectorShuffle 296 294 4 5 6 3
+                                Store 295 297
+             298:      6(int)   Load 8(invocation)
+             299:    104(ptr)   AccessChain 49(data) 124 61
+             300:   41(fvec4)   Load 299
+             301:   41(fvec4)   GroupNonUniformBroadcastFirst 38 300
+             302:    104(ptr)   AccessChain 49(data) 298 61
+                                Store 302 301
+             303:      6(int)   Load 8(invocation)
+             304:    131(ptr)   AccessChain 49(data) 61 60 54
+             305:     42(int)   Load 304
+             306:     42(int)   GroupNonUniformBroadcastFirst 38 305
+             307:    131(ptr)   AccessChain 49(data) 303 60 54
+                                Store 307 306
+             308:      6(int)   Load 8(invocation)
+             309:    139(ptr)   AccessChain 49(data) 60 60
+             310:   43(ivec4)   Load 309
+             311:  138(ivec2)   VectorShuffle 310 310 0 1
+             312:  138(ivec2)   GroupNonUniformBroadcastFirst 38 311
+             313:    139(ptr)   AccessChain 49(data) 308 60
+             314:   43(ivec4)   Load 313
+             315:   43(ivec4)   VectorShuffle 314 312 4 5 2 3
+                                Store 313 315
+             316:      6(int)   Load 8(invocation)
+             317:    139(ptr)   AccessChain 49(data) 51 60
+             318:   43(ivec4)   Load 317
+             319:  149(ivec3)   VectorShuffle 318 318 0 1 2
+             320:  149(ivec3)   GroupNonUniformBroadcastFirst 38 319
+             321:    139(ptr)   AccessChain 49(data) 316 60
+             322:   43(ivec4)   Load 321
+             323:   43(ivec4)   VectorShuffle 322 320 4 5 6 3
+                                Store 321 323
+             324:      6(int)   Load 8(invocation)
+             325:    139(ptr)   AccessChain 49(data) 124 60
+             326:   43(ivec4)   Load 325
+             327:   43(ivec4)   GroupNonUniformBroadcastFirst 38 326
+             328:    139(ptr)   AccessChain 49(data) 324 60
+                                Store 328 327
+             329:      6(int)   Load 8(invocation)
+             330:     55(ptr)   AccessChain 49(data) 61 51 54
+             331:      6(int)   Load 330
+             332:      6(int)   GroupNonUniformBroadcastFirst 38 331
+             333:     55(ptr)   AccessChain 49(data) 329 51 54
+                                Store 333 332
+             334:      6(int)   Load 8(invocation)
+             335:     88(ptr)   AccessChain 49(data) 60 51
+             336:   17(ivec4)   Load 335
+             337:  171(ivec2)   VectorShuffle 336 336 0 1
+             338:  171(ivec2)   GroupNonUniformBroadcastFirst 38 337
+             339:     88(ptr)   AccessChain 49(data) 334 51
+             340:   17(ivec4)   Load 339
+             341:   17(ivec4)   VectorShuffle 340 338 4 5 2 3
+                                Store 339 341
+             342:      6(int)   Load 8(invocation)
+             343:     88(ptr)   AccessChain 49(data) 51 51
+             344:   17(ivec4)   Load 343
+             345:  181(ivec3)   VectorShuffle 344 344 0 1 2
+             346:  181(ivec3)   GroupNonUniformBroadcastFirst 38 345
+             347:     88(ptr)   AccessChain 49(data) 342 51
+             348:   17(ivec4)   Load 347
+             349:   17(ivec4)   VectorShuffle 348 346 4 5 6 3
+                                Store 347 349
+             350:      6(int)   Load 8(invocation)
+             351:     88(ptr)   AccessChain 49(data) 124 51
+             352:   17(ivec4)   Load 351
+             353:   17(ivec4)   GroupNonUniformBroadcastFirst 38 352
+             354:     88(ptr)   AccessChain 49(data) 350 51
+                                Store 354 353
+             355:      6(int)   Load 8(invocation)
+             356:    197(ptr)   AccessChain 49(data) 61 124 54
+             357:   44(float)   Load 356
+             358:   44(float)   GroupNonUniformBroadcastFirst 38 357
+             359:    197(ptr)   AccessChain 49(data) 355 124 54
+                                Store 359 358
+             360:      6(int)   Load 8(invocation)
+             361:    205(ptr)   AccessChain 49(data) 60 124
+             362:   45(fvec4)   Load 361
+             363:  204(fvec2)   VectorShuffle 362 362 0 1
+             364:  204(fvec2)   GroupNonUniformBroadcastFirst 38 363
+             365:    205(ptr)   AccessChain 49(data) 360 124
+             366:   45(fvec4)   Load 365
+             367:   45(fvec4)   VectorShuffle 366 364 4 5 2 3
+                                Store 365 367
+             368:      6(int)   Load 8(invocation)
+             369:    205(ptr)   AccessChain 49(data) 51 124
+             370:   45(fvec4)   Load 369
+             371:  215(fvec3)   VectorShuffle 370 370 0 1 2
+             372:  215(fvec3)   GroupNonUniformBroadcastFirst 38 371
+             373:    205(ptr)   AccessChain 49(data) 368 124
+             374:   45(fvec4)   Load 373
+             375:   45(fvec4)   VectorShuffle 374 372 4 5 6 3
+                                Store 373 375
+             376:      6(int)   Load 8(invocation)
+             377:    205(ptr)   AccessChain 49(data) 124 124
+             378:   45(fvec4)   Load 377
+             379:   45(fvec4)   GroupNonUniformBroadcastFirst 38 378
+             380:    205(ptr)   AccessChain 49(data) 376 124
+                                Store 380 379
+             381:      6(int)   Load 8(invocation)
+             382:    131(ptr)   AccessChain 49(data) 61 60 54
+             383:     42(int)   Load 382
+             384:    36(bool)   SLessThan 383 61
+             385:    36(bool)   GroupNonUniformBroadcastFirst 38 384
+             386:     42(int)   Select 385 60 61
+             387:    131(ptr)   AccessChain 49(data) 381 60 54
+                                Store 387 386
+             388:      6(int)   Load 8(invocation)
+             389:    139(ptr)   AccessChain 49(data) 60 60
+             390:   43(ivec4)   Load 389
+             391:  138(ivec2)   VectorShuffle 390 390 0 1
+             392:  243(bvec2)   SLessThan 391 242
+             393:  243(bvec2)   GroupNonUniformBroadcastFirst 38 392
+             394:  138(ivec2)   Select 393 247 242
+             395:    139(ptr)   AccessChain 49(data) 388 60
+             396:   43(ivec4)   Load 395
+             397:   43(ivec4)   VectorShuffle 396 394 4 5 2 3
+                                Store 395 397
+             398:      6(int)   Load 8(invocation)
+             399:    139(ptr)   AccessChain 49(data) 60 60
+             400:   43(ivec4)   Load 399
+             401:  149(ivec3)   VectorShuffle 400 400 0 1 2
+             402:  257(bvec3)   SLessThan 401 256
+             403:  257(bvec3)   GroupNonUniformBroadcastFirst 38 402
+             404:  149(ivec3)   Select 403 261 256
+             405:    139(ptr)   AccessChain 49(data) 398 60
+             406:   43(ivec4)   Load 405
+             407:   43(ivec4)   VectorShuffle 406 404 4 5 6 3
+                                Store 405 407
+             408:      6(int)   Load 8(invocation)
+             409:    139(ptr)   AccessChain 49(data) 60 60
+             410:   43(ivec4)   Load 409
+             411:   83(bvec4)   SLessThan 410 269
+             412:   83(bvec4)   GroupNonUniformBroadcastFirst 38 411
+             413:   43(ivec4)   Select 412 273 269
+             414:    139(ptr)   AccessChain 49(data) 408 60
+                                Store 414 413
+                                Branch 94
+              94:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.subgroupBasic.comp.out b/Test/baseResults/spv.subgroupBasic.comp.out
new file mode 100644
index 0000000..ce39819
--- /dev/null
+++ b/Test/baseResults/spv.subgroupBasic.comp.out
@@ -0,0 +1,84 @@
+spv.subgroupBasic.comp
+// Module Version 10300
+// Generated by (magic number): 80006
+// Id's are bound by 40
+
+                              Capability Shader
+                              Capability GroupNonUniform
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main" 14 19 22 25
+                              ExecutionMode 4 LocalSize 8 8 1
+                              Source GLSL 450
+                              SourceExtension  "GL_KHR_shader_subgroup_basic"
+                              Name 4  "main"
+                              Name 8  "Buffer"
+                              MemberName 8(Buffer) 0  "a"
+                              Name 10  "data"
+                              Name 14  "gl_SubgroupSize"
+                              Name 19  "gl_SubgroupInvocationID"
+                              Name 22  "gl_NumSubgroups"
+                              Name 25  "gl_SubgroupID"
+                              Decorate 7 ArrayStride 4
+                              MemberDecorate 8(Buffer) 0 Offset 0
+                              Decorate 8(Buffer) BufferBlock
+                              Decorate 10(data) DescriptorSet 0
+                              Decorate 10(data) Binding 0
+                              Decorate 14(gl_SubgroupSize) RelaxedPrecision
+                              Decorate 14(gl_SubgroupSize) BuiltIn SubgroupSize
+                              Decorate 15 RelaxedPrecision
+                              Decorate 19(gl_SubgroupInvocationID) RelaxedPrecision
+                              Decorate 19(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId
+                              Decorate 20 RelaxedPrecision
+                              Decorate 22(gl_NumSubgroups) BuiltIn NumSubgroups
+                              Decorate 25(gl_SubgroupID) BuiltIn SubgroupId
+                              Decorate 39 BuiltIn WorkgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 1
+               7:             TypeRuntimeArray 6(int)
+       8(Buffer):             TypeStruct 7
+               9:             TypePointer Uniform 8(Buffer)
+        10(data):      9(ptr) Variable Uniform
+              11:      6(int) Constant 0
+              12:             TypeInt 32 0
+              13:             TypePointer Input 12(int)
+14(gl_SubgroupSize):     13(ptr) Variable Input
+              16:      6(int) Constant 1
+              17:             TypePointer Uniform 6(int)
+19(gl_SubgroupInvocationID):     13(ptr) Variable Input
+22(gl_NumSubgroups):     13(ptr) Variable Input
+25(gl_SubgroupID):     13(ptr) Variable Input
+              27:             TypeBool
+              28:     12(int) Constant 3
+              32:     12(int) Constant 3400
+              33:     12(int) Constant 72
+              34:     12(int) Constant 264
+              35:     12(int) Constant 2056
+              36:             TypeVector 12(int) 3
+              37:     12(int) Constant 8
+              38:     12(int) Constant 1
+              39:   36(ivec3) ConstantComposite 37 37 38
+         4(main):           2 Function None 3
+               5:             Label
+              15:     12(int) Load 14(gl_SubgroupSize)
+              18:     17(ptr) AccessChain 10(data) 11 15
+                              Store 18 16
+              20:     12(int) Load 19(gl_SubgroupInvocationID)
+              21:     17(ptr) AccessChain 10(data) 11 20
+                              Store 21 16
+              23:     12(int) Load 22(gl_NumSubgroups)
+              24:     17(ptr) AccessChain 10(data) 11 23
+                              Store 24 16
+              26:     12(int) Load 25(gl_SubgroupID)
+              29:    27(bool) GroupNonUniformElect 28
+              30:      6(int) Select 29 16 11
+              31:     17(ptr) AccessChain 10(data) 11 26
+                              Store 31 30
+                              ControlBarrier 28 28 32
+                              MemoryBarrier 28 32
+                              MemoryBarrier 28 33
+                              MemoryBarrier 28 34
+                              MemoryBarrier 28 35
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.subgroupClustered.comp.out b/Test/baseResults/spv.subgroupClustered.comp.out
new file mode 100644
index 0000000..9bfe197
--- /dev/null
+++ b/Test/baseResults/spv.subgroupClustered.comp.out
@@ -0,0 +1,880 @@
+spv.subgroupClustered.comp
+// Module Version 10300
+// Generated by (magic number): 80006
+// Id's are bound by 737
+
+                              Capability Shader
+                              Capability Float64
+                              Capability GroupNonUniform
+                              Capability GroupNonUniformClustered
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main" 10 12
+                              ExecutionMode 4 LocalSize 8 1 1
+                              Source GLSL 450
+                              SourceExtension  "GL_KHR_shader_subgroup_basic"
+                              SourceExtension  "GL_KHR_shader_subgroup_clustered"
+                              Name 4  "main"
+                              Name 8  "invocation"
+                              Name 10  "gl_SubgroupInvocationID"
+                              Name 12  "gl_SubgroupSize"
+                              Name 24  "Buffers"
+                              MemberName 24(Buffers) 0  "f4"
+                              MemberName 24(Buffers) 1  "i4"
+                              MemberName 24(Buffers) 2  "u4"
+                              MemberName 24(Buffers) 3  "d4"
+                              Name 27  "data"
+                              Decorate 10(gl_SubgroupInvocationID) RelaxedPrecision
+                              Decorate 10(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId
+                              Decorate 11 RelaxedPrecision
+                              Decorate 12(gl_SubgroupSize) RelaxedPrecision
+                              Decorate 12(gl_SubgroupSize) BuiltIn SubgroupSize
+                              Decorate 13 RelaxedPrecision
+                              Decorate 14 RelaxedPrecision
+                              Decorate 16 RelaxedPrecision
+                              MemberDecorate 24(Buffers) 0 Offset 0
+                              MemberDecorate 24(Buffers) 1 Offset 16
+                              MemberDecorate 24(Buffers) 2 Offset 32
+                              MemberDecorate 24(Buffers) 3 Offset 64
+                              Decorate 24(Buffers) BufferBlock
+                              Decorate 27(data) DescriptorSet 0
+                              Decorate 27(data) Binding 0
+                              Decorate 736 BuiltIn WorkgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypePointer Function 6(int)
+               9:             TypePointer Input 6(int)
+10(gl_SubgroupInvocationID):      9(ptr) Variable Input
+12(gl_SubgroupSize):      9(ptr) Variable Input
+              15:      6(int) Constant 4
+              17:             TypeFloat 32
+              18:             TypeVector 17(float) 4
+              19:             TypeInt 32 1
+              20:             TypeVector 19(int) 4
+              21:             TypeVector 6(int) 4
+              22:             TypeFloat 64
+              23:             TypeVector 22(float) 4
+     24(Buffers):             TypeStruct 18(fvec4) 20(ivec4) 21(ivec4) 23(fvec4)
+              25:             TypeArray 24(Buffers) 15
+              26:             TypePointer Uniform 25
+        27(data):     26(ptr) Variable Uniform
+              29:     19(int) Constant 0
+              30:      6(int) Constant 0
+              31:             TypePointer Uniform 17(float)
+              34:      6(int) Constant 1
+              35:      6(int) Constant 3
+              39:     19(int) Constant 1
+              40:             TypeVector 17(float) 2
+              41:             TypePointer Uniform 18(fvec4)
+              50:     19(int) Constant 2
+              51:             TypeVector 17(float) 3
+              60:     19(int) Constant 3
+              66:             TypePointer Uniform 19(int)
+              72:             TypeVector 19(int) 2
+              73:             TypePointer Uniform 20(ivec4)
+              82:             TypeVector 19(int) 3
+              96:             TypePointer Uniform 6(int)
+             102:             TypeVector 6(int) 2
+             103:             TypePointer Uniform 21(ivec4)
+             112:             TypeVector 6(int) 3
+             126:             TypePointer Uniform 22(float)
+             132:             TypeVector 22(float) 2
+             133:             TypePointer Uniform 23(fvec4)
+             142:             TypeVector 22(float) 3
+             522:             TypeBool
+             531:   72(ivec2) ConstantComposite 29 29
+             532:             TypeVector 522(bool) 2
+             535:   72(ivec2) ConstantComposite 39 39
+             544:   82(ivec3) ConstantComposite 29 29 29
+             545:             TypeVector 522(bool) 3
+             548:   82(ivec3) ConstantComposite 39 39 39
+             556:   20(ivec4) ConstantComposite 29 29 29 29
+             557:             TypeVector 522(bool) 4
+             560:   20(ivec4) ConstantComposite 39 39 39 39
+             735:      6(int) Constant 8
+             736:  112(ivec3) ConstantComposite 735 34 34
+         4(main):           2 Function None 3
+               5:             Label
+   8(invocation):      7(ptr) Variable Function
+              11:      6(int) Load 10(gl_SubgroupInvocationID)
+              13:      6(int) Load 12(gl_SubgroupSize)
+              14:      6(int) IAdd 11 13
+              16:      6(int) UMod 14 15
+                              Store 8(invocation) 16
+              28:      6(int) Load 8(invocation)
+              32:     31(ptr) AccessChain 27(data) 29 29 30
+              33:   17(float) Load 32
+              36:   17(float) GroupNonUniformFAdd 35 ClusteredReduce 33 34
+              37:     31(ptr) AccessChain 27(data) 28 29 30
+                              Store 37 36
+              38:      6(int) Load 8(invocation)
+              42:     41(ptr) AccessChain 27(data) 39 29
+              43:   18(fvec4) Load 42
+              44:   40(fvec2) VectorShuffle 43 43 0 1
+              45:   40(fvec2) GroupNonUniformFAdd 35 ClusteredReduce 44 34
+              46:     41(ptr) AccessChain 27(data) 38 29
+              47:   18(fvec4) Load 46
+              48:   18(fvec4) VectorShuffle 47 45 4 5 2 3
+                              Store 46 48
+              49:      6(int) Load 8(invocation)
+              52:     41(ptr) AccessChain 27(data) 50 29
+              53:   18(fvec4) Load 52
+              54:   51(fvec3) VectorShuffle 53 53 0 1 2
+              55:   51(fvec3) GroupNonUniformFAdd 35 ClusteredReduce 54 34
+              56:     41(ptr) AccessChain 27(data) 49 29
+              57:   18(fvec4) Load 56
+              58:   18(fvec4) VectorShuffle 57 55 4 5 6 3
+                              Store 56 58
+              59:      6(int) Load 8(invocation)
+              61:     41(ptr) AccessChain 27(data) 60 29
+              62:   18(fvec4) Load 61
+              63:   18(fvec4) GroupNonUniformFAdd 35 ClusteredReduce 62 34
+              64:     41(ptr) AccessChain 27(data) 59 29
+                              Store 64 63
+              65:      6(int) Load 8(invocation)
+              67:     66(ptr) AccessChain 27(data) 29 39 30
+              68:     19(int) Load 67
+              69:     19(int) GroupNonUniformIAdd 35 ClusteredReduce 68 34
+              70:     66(ptr) AccessChain 27(data) 65 39 30
+                              Store 70 69
+              71:      6(int) Load 8(invocation)
+              74:     73(ptr) AccessChain 27(data) 39 39
+              75:   20(ivec4) Load 74
+              76:   72(ivec2) VectorShuffle 75 75 0 1
+              77:   72(ivec2) GroupNonUniformIAdd 35 ClusteredReduce 76 34
+              78:     73(ptr) AccessChain 27(data) 71 39
+              79:   20(ivec4) Load 78
+              80:   20(ivec4) VectorShuffle 79 77 4 5 2 3
+                              Store 78 80
+              81:      6(int) Load 8(invocation)
+              83:     73(ptr) AccessChain 27(data) 50 39
+              84:   20(ivec4) Load 83
+              85:   82(ivec3) VectorShuffle 84 84 0 1 2
+              86:   82(ivec3) GroupNonUniformIAdd 35 ClusteredReduce 85 34
+              87:     73(ptr) AccessChain 27(data) 81 39
+              88:   20(ivec4) Load 87
+              89:   20(ivec4) VectorShuffle 88 86 4 5 6 3
+                              Store 87 89
+              90:      6(int) Load 8(invocation)
+              91:     73(ptr) AccessChain 27(data) 60 39
+              92:   20(ivec4) Load 91
+              93:   20(ivec4) GroupNonUniformIAdd 35 ClusteredReduce 92 34
+              94:     73(ptr) AccessChain 27(data) 90 39
+                              Store 94 93
+              95:      6(int) Load 8(invocation)
+              97:     96(ptr) AccessChain 27(data) 29 50 30
+              98:      6(int) Load 97
+              99:      6(int) GroupNonUniformIAdd 35 ClusteredReduce 98 34
+             100:     96(ptr) AccessChain 27(data) 95 50 30
+                              Store 100 99
+             101:      6(int) Load 8(invocation)
+             104:    103(ptr) AccessChain 27(data) 39 50
+             105:   21(ivec4) Load 104
+             106:  102(ivec2) VectorShuffle 105 105 0 1
+             107:  102(ivec2) GroupNonUniformIAdd 35 ClusteredReduce 106 34
+             108:    103(ptr) AccessChain 27(data) 101 50
+             109:   21(ivec4) Load 108
+             110:   21(ivec4) VectorShuffle 109 107 4 5 2 3
+                              Store 108 110
+             111:      6(int) Load 8(invocation)
+             113:    103(ptr) AccessChain 27(data) 50 50
+             114:   21(ivec4) Load 113
+             115:  112(ivec3) VectorShuffle 114 114 0 1 2
+             116:  112(ivec3) GroupNonUniformIAdd 35 ClusteredReduce 115 34
+             117:    103(ptr) AccessChain 27(data) 111 50
+             118:   21(ivec4) Load 117
+             119:   21(ivec4) VectorShuffle 118 116 4 5 6 3
+                              Store 117 119
+             120:      6(int) Load 8(invocation)
+             121:    103(ptr) AccessChain 27(data) 60 50
+             122:   21(ivec4) Load 121
+             123:   21(ivec4) GroupNonUniformIAdd 35 ClusteredReduce 122 34
+             124:    103(ptr) AccessChain 27(data) 120 50
+                              Store 124 123
+             125:      6(int) Load 8(invocation)
+             127:    126(ptr) AccessChain 27(data) 29 60 30
+             128:   22(float) Load 127
+             129:   22(float) GroupNonUniformFAdd 35 ClusteredReduce 128 34
+             130:    126(ptr) AccessChain 27(data) 125 60 30
+                              Store 130 129
+             131:      6(int) Load 8(invocation)
+             134:    133(ptr) AccessChain 27(data) 39 60
+             135:   23(fvec4) Load 134
+             136:  132(fvec2) VectorShuffle 135 135 0 1
+             137:  132(fvec2) GroupNonUniformFAdd 35 ClusteredReduce 136 34
+             138:    133(ptr) AccessChain 27(data) 131 60
+             139:   23(fvec4) Load 138
+             140:   23(fvec4) VectorShuffle 139 137 4 5 2 3
+                              Store 138 140
+             141:      6(int) Load 8(invocation)
+             143:    133(ptr) AccessChain 27(data) 50 60
+             144:   23(fvec4) Load 143
+             145:  142(fvec3) VectorShuffle 144 144 0 1 2
+             146:  142(fvec3) GroupNonUniformFAdd 35 ClusteredReduce 145 34
+             147:    133(ptr) AccessChain 27(data) 141 60
+             148:   23(fvec4) Load 147
+             149:   23(fvec4) VectorShuffle 148 146 4 5 6 3
+                              Store 147 149
+             150:      6(int) Load 8(invocation)
+             151:    133(ptr) AccessChain 27(data) 60 60
+             152:   23(fvec4) Load 151
+             153:   23(fvec4) GroupNonUniformFAdd 35 ClusteredReduce 152 34
+             154:    133(ptr) AccessChain 27(data) 150 60
+                              Store 154 153
+             155:      6(int) Load 8(invocation)
+             156:     31(ptr) AccessChain 27(data) 29 29 30
+             157:   17(float) Load 156
+             158:   17(float) GroupNonUniformFMul 35 ClusteredReduce 157 34
+             159:     31(ptr) AccessChain 27(data) 155 29 30
+                              Store 159 158
+             160:      6(int) Load 8(invocation)
+             161:     41(ptr) AccessChain 27(data) 39 29
+             162:   18(fvec4) Load 161
+             163:   40(fvec2) VectorShuffle 162 162 0 1
+             164:   40(fvec2) GroupNonUniformFMul 35 ClusteredReduce 163 34
+             165:     41(ptr) AccessChain 27(data) 160 29
+             166:   18(fvec4) Load 165
+             167:   18(fvec4) VectorShuffle 166 164 4 5 2 3
+                              Store 165 167
+             168:      6(int) Load 8(invocation)
+             169:     41(ptr) AccessChain 27(data) 50 29
+             170:   18(fvec4) Load 169
+             171:   51(fvec3) VectorShuffle 170 170 0 1 2
+             172:   51(fvec3) GroupNonUniformFMul 35 ClusteredReduce 171 34
+             173:     41(ptr) AccessChain 27(data) 168 29
+             174:   18(fvec4) Load 173
+             175:   18(fvec4) VectorShuffle 174 172 4 5 6 3
+                              Store 173 175
+             176:      6(int) Load 8(invocation)
+             177:     41(ptr) AccessChain 27(data) 60 29
+             178:   18(fvec4) Load 177
+             179:   18(fvec4) GroupNonUniformFMul 35 ClusteredReduce 178 34
+             180:     41(ptr) AccessChain 27(data) 176 29
+                              Store 180 179
+             181:      6(int) Load 8(invocation)
+             182:     66(ptr) AccessChain 27(data) 29 39 30
+             183:     19(int) Load 182
+             184:     19(int) GroupNonUniformIMul 35 ClusteredReduce 183 34
+             185:     66(ptr) AccessChain 27(data) 181 39 30
+                              Store 185 184
+             186:      6(int) Load 8(invocation)
+             187:     73(ptr) AccessChain 27(data) 39 39
+             188:   20(ivec4) Load 187
+             189:   72(ivec2) VectorShuffle 188 188 0 1
+             190:   72(ivec2) GroupNonUniformIMul 35 ClusteredReduce 189 34
+             191:     73(ptr) AccessChain 27(data) 186 39
+             192:   20(ivec4) Load 191
+             193:   20(ivec4) VectorShuffle 192 190 4 5 2 3
+                              Store 191 193
+             194:      6(int) Load 8(invocation)
+             195:     73(ptr) AccessChain 27(data) 50 39
+             196:   20(ivec4) Load 195
+             197:   82(ivec3) VectorShuffle 196 196 0 1 2
+             198:   82(ivec3) GroupNonUniformIMul 35 ClusteredReduce 197 34
+             199:     73(ptr) AccessChain 27(data) 194 39
+             200:   20(ivec4) Load 199
+             201:   20(ivec4) VectorShuffle 200 198 4 5 6 3
+                              Store 199 201
+             202:      6(int) Load 8(invocation)
+             203:     73(ptr) AccessChain 27(data) 60 39
+             204:   20(ivec4) Load 203
+             205:   20(ivec4) GroupNonUniformIMul 35 ClusteredReduce 204 34
+             206:     73(ptr) AccessChain 27(data) 202 39
+                              Store 206 205
+             207:      6(int) Load 8(invocation)
+             208:     96(ptr) AccessChain 27(data) 29 50 30
+             209:      6(int) Load 208
+             210:      6(int) GroupNonUniformIMul 35 ClusteredReduce 209 34
+             211:     96(ptr) AccessChain 27(data) 207 50 30
+                              Store 211 210
+             212:      6(int) Load 8(invocation)
+             213:    103(ptr) AccessChain 27(data) 39 50
+             214:   21(ivec4) Load 213
+             215:  102(ivec2) VectorShuffle 214 214 0 1
+             216:  102(ivec2) GroupNonUniformIMul 35 ClusteredReduce 215 34
+             217:    103(ptr) AccessChain 27(data) 212 50
+             218:   21(ivec4) Load 217
+             219:   21(ivec4) VectorShuffle 218 216 4 5 2 3
+                              Store 217 219
+             220:      6(int) Load 8(invocation)
+             221:    103(ptr) AccessChain 27(data) 50 50
+             222:   21(ivec4) Load 221
+             223:  112(ivec3) VectorShuffle 222 222 0 1 2
+             224:  112(ivec3) GroupNonUniformIMul 35 ClusteredReduce 223 34
+             225:    103(ptr) AccessChain 27(data) 220 50
+             226:   21(ivec4) Load 225
+             227:   21(ivec4) VectorShuffle 226 224 4 5 6 3
+                              Store 225 227
+             228:      6(int) Load 8(invocation)
+             229:    103(ptr) AccessChain 27(data) 60 50
+             230:   21(ivec4) Load 229
+             231:   21(ivec4) GroupNonUniformIMul 35 ClusteredReduce 230 34
+             232:    103(ptr) AccessChain 27(data) 228 50
+                              Store 232 231
+             233:      6(int) Load 8(invocation)
+             234:    126(ptr) AccessChain 27(data) 29 60 30
+             235:   22(float) Load 234
+             236:   22(float) GroupNonUniformFMul 35 ClusteredReduce 235 34
+             237:    126(ptr) AccessChain 27(data) 233 60 30
+                              Store 237 236
+             238:      6(int) Load 8(invocation)
+             239:    133(ptr) AccessChain 27(data) 39 60
+             240:   23(fvec4) Load 239
+             241:  132(fvec2) VectorShuffle 240 240 0 1
+             242:  132(fvec2) GroupNonUniformFMul 35 ClusteredReduce 241 34
+             243:    133(ptr) AccessChain 27(data) 238 60
+             244:   23(fvec4) Load 243
+             245:   23(fvec4) VectorShuffle 244 242 4 5 2 3
+                              Store 243 245
+             246:      6(int) Load 8(invocation)
+             247:    133(ptr) AccessChain 27(data) 50 60
+             248:   23(fvec4) Load 247
+             249:  142(fvec3) VectorShuffle 248 248 0 1 2
+             250:  142(fvec3) GroupNonUniformFMul 35 ClusteredReduce 249 34
+             251:    133(ptr) AccessChain 27(data) 246 60
+             252:   23(fvec4) Load 251
+             253:   23(fvec4) VectorShuffle 252 250 4 5 6 3
+                              Store 251 253
+             254:      6(int) Load 8(invocation)
+             255:    133(ptr) AccessChain 27(data) 60 60
+             256:   23(fvec4) Load 255
+             257:   23(fvec4) GroupNonUniformFMul 35 ClusteredReduce 256 34
+             258:    133(ptr) AccessChain 27(data) 254 60
+                              Store 258 257
+             259:      6(int) Load 8(invocation)
+             260:     31(ptr) AccessChain 27(data) 29 29 30
+             261:   17(float) Load 260
+             262:   17(float) GroupNonUniformFMin 35 ClusteredReduce 261 34
+             263:     31(ptr) AccessChain 27(data) 259 29 30
+                              Store 263 262
+             264:      6(int) Load 8(invocation)
+             265:     41(ptr) AccessChain 27(data) 39 29
+             266:   18(fvec4) Load 265
+             267:   40(fvec2) VectorShuffle 266 266 0 1
+             268:   40(fvec2) GroupNonUniformFMin 35 ClusteredReduce 267 34
+             269:     41(ptr) AccessChain 27(data) 264 29
+             270:   18(fvec4) Load 269
+             271:   18(fvec4) VectorShuffle 270 268 4 5 2 3
+                              Store 269 271
+             272:      6(int) Load 8(invocation)
+             273:     41(ptr) AccessChain 27(data) 50 29
+             274:   18(fvec4) Load 273
+             275:   51(fvec3) VectorShuffle 274 274 0 1 2
+             276:   51(fvec3) GroupNonUniformFMin 35 ClusteredReduce 275 34
+             277:     41(ptr) AccessChain 27(data) 272 29
+             278:   18(fvec4) Load 277
+             279:   18(fvec4) VectorShuffle 278 276 4 5 6 3
+                              Store 277 279
+             280:      6(int) Load 8(invocation)
+             281:     41(ptr) AccessChain 27(data) 60 29
+             282:   18(fvec4) Load 281
+             283:   18(fvec4) GroupNonUniformFMin 35 ClusteredReduce 282 34
+             284:     41(ptr) AccessChain 27(data) 280 29
+                              Store 284 283
+             285:      6(int) Load 8(invocation)
+             286:     66(ptr) AccessChain 27(data) 29 39 30
+             287:     19(int) Load 286
+             288:     19(int) GroupNonUniformSMin 35 ClusteredReduce 287 34
+             289:     66(ptr) AccessChain 27(data) 285 39 30
+                              Store 289 288
+             290:      6(int) Load 8(invocation)
+             291:     73(ptr) AccessChain 27(data) 39 39
+             292:   20(ivec4) Load 291
+             293:   72(ivec2) VectorShuffle 292 292 0 1
+             294:   72(ivec2) GroupNonUniformSMin 35 ClusteredReduce 293 34
+             295:     73(ptr) AccessChain 27(data) 290 39
+             296:   20(ivec4) Load 295
+             297:   20(ivec4) VectorShuffle 296 294 4 5 2 3
+                              Store 295 297
+             298:      6(int) Load 8(invocation)
+             299:     73(ptr) AccessChain 27(data) 50 39
+             300:   20(ivec4) Load 299
+             301:   82(ivec3) VectorShuffle 300 300 0 1 2
+             302:   82(ivec3) GroupNonUniformSMin 35 ClusteredReduce 301 34
+             303:     73(ptr) AccessChain 27(data) 298 39
+             304:   20(ivec4) Load 303
+             305:   20(ivec4) VectorShuffle 304 302 4 5 6 3
+                              Store 303 305
+             306:      6(int) Load 8(invocation)
+             307:     73(ptr) AccessChain 27(data) 60 39
+             308:   20(ivec4) Load 307
+             309:   20(ivec4) GroupNonUniformSMin 35 ClusteredReduce 308 34
+             310:     73(ptr) AccessChain 27(data) 306 39
+                              Store 310 309
+             311:      6(int) Load 8(invocation)
+             312:     96(ptr) AccessChain 27(data) 29 50 30
+             313:      6(int) Load 312
+             314:      6(int) GroupNonUniformUMin 35 ClusteredReduce 313 34
+             315:     96(ptr) AccessChain 27(data) 311 50 30
+                              Store 315 314
+             316:      6(int) Load 8(invocation)
+             317:    103(ptr) AccessChain 27(data) 39 50
+             318:   21(ivec4) Load 317
+             319:  102(ivec2) VectorShuffle 318 318 0 1
+             320:  102(ivec2) GroupNonUniformUMin 35 ClusteredReduce 319 34
+             321:    103(ptr) AccessChain 27(data) 316 50
+             322:   21(ivec4) Load 321
+             323:   21(ivec4) VectorShuffle 322 320 4 5 2 3
+                              Store 321 323
+             324:      6(int) Load 8(invocation)
+             325:    103(ptr) AccessChain 27(data) 50 50
+             326:   21(ivec4) Load 325
+             327:  112(ivec3) VectorShuffle 326 326 0 1 2
+             328:  112(ivec3) GroupNonUniformUMin 35 ClusteredReduce 327 34
+             329:    103(ptr) AccessChain 27(data) 324 50
+             330:   21(ivec4) Load 329
+             331:   21(ivec4) VectorShuffle 330 328 4 5 6 3
+                              Store 329 331
+             332:      6(int) Load 8(invocation)
+             333:    103(ptr) AccessChain 27(data) 60 50
+             334:   21(ivec4) Load 333
+             335:   21(ivec4) GroupNonUniformUMin 35 ClusteredReduce 334 34
+             336:    103(ptr) AccessChain 27(data) 332 50
+                              Store 336 335
+             337:      6(int) Load 8(invocation)
+             338:    126(ptr) AccessChain 27(data) 29 60 30
+             339:   22(float) Load 338
+             340:   22(float) GroupNonUniformFMin 35 ClusteredReduce 339 34
+             341:    126(ptr) AccessChain 27(data) 337 60 30
+                              Store 341 340
+             342:      6(int) Load 8(invocation)
+             343:    133(ptr) AccessChain 27(data) 39 60
+             344:   23(fvec4) Load 343
+             345:  132(fvec2) VectorShuffle 344 344 0 1
+             346:  132(fvec2) GroupNonUniformFMin 35 ClusteredReduce 345 34
+             347:    133(ptr) AccessChain 27(data) 342 60
+             348:   23(fvec4) Load 347
+             349:   23(fvec4) VectorShuffle 348 346 4 5 2 3
+                              Store 347 349
+             350:      6(int) Load 8(invocation)
+             351:    133(ptr) AccessChain 27(data) 50 60
+             352:   23(fvec4) Load 351
+             353:  142(fvec3) VectorShuffle 352 352 0 1 2
+             354:  142(fvec3) GroupNonUniformFMin 35 ClusteredReduce 353 34
+             355:    133(ptr) AccessChain 27(data) 350 60
+             356:   23(fvec4) Load 355
+             357:   23(fvec4) VectorShuffle 356 354 4 5 6 3
+                              Store 355 357
+             358:      6(int) Load 8(invocation)
+             359:    133(ptr) AccessChain 27(data) 60 60
+             360:   23(fvec4) Load 359
+             361:   23(fvec4) GroupNonUniformFMin 35 ClusteredReduce 360 34
+             362:    133(ptr) AccessChain 27(data) 358 60
+                              Store 362 361
+             363:      6(int) Load 8(invocation)
+             364:     31(ptr) AccessChain 27(data) 29 29 30
+             365:   17(float) Load 364
+             366:   17(float) GroupNonUniformFMax 35 ClusteredReduce 365 34
+             367:     31(ptr) AccessChain 27(data) 363 29 30
+                              Store 367 366
+             368:      6(int) Load 8(invocation)
+             369:     41(ptr) AccessChain 27(data) 39 29
+             370:   18(fvec4) Load 369
+             371:   40(fvec2) VectorShuffle 370 370 0 1
+             372:   40(fvec2) GroupNonUniformFMax 35 ClusteredReduce 371 34
+             373:     41(ptr) AccessChain 27(data) 368 29
+             374:   18(fvec4) Load 373
+             375:   18(fvec4) VectorShuffle 374 372 4 5 2 3
+                              Store 373 375
+             376:      6(int) Load 8(invocation)
+             377:     41(ptr) AccessChain 27(data) 50 29
+             378:   18(fvec4) Load 377
+             379:   51(fvec3) VectorShuffle 378 378 0 1 2
+             380:   51(fvec3) GroupNonUniformFMax 35 ClusteredReduce 379 34
+             381:     41(ptr) AccessChain 27(data) 376 29
+             382:   18(fvec4) Load 381
+             383:   18(fvec4) VectorShuffle 382 380 4 5 6 3
+                              Store 381 383
+             384:      6(int) Load 8(invocation)
+             385:     41(ptr) AccessChain 27(data) 60 29
+             386:   18(fvec4) Load 385
+             387:   18(fvec4) GroupNonUniformFMax 35 ClusteredReduce 386 34
+             388:     41(ptr) AccessChain 27(data) 384 29
+                              Store 388 387
+             389:      6(int) Load 8(invocation)
+             390:     66(ptr) AccessChain 27(data) 29 39 30
+             391:     19(int) Load 390
+             392:     19(int) GroupNonUniformSMax 35 ClusteredReduce 391 34
+             393:     66(ptr) AccessChain 27(data) 389 39 30
+                              Store 393 392
+             394:      6(int) Load 8(invocation)
+             395:     73(ptr) AccessChain 27(data) 39 39
+             396:   20(ivec4) Load 395
+             397:   72(ivec2) VectorShuffle 396 396 0 1
+             398:   72(ivec2) GroupNonUniformSMax 35 ClusteredReduce 397 34
+             399:     73(ptr) AccessChain 27(data) 394 39
+             400:   20(ivec4) Load 399
+             401:   20(ivec4) VectorShuffle 400 398 4 5 2 3
+                              Store 399 401
+             402:      6(int) Load 8(invocation)
+             403:     73(ptr) AccessChain 27(data) 50 39
+             404:   20(ivec4) Load 403
+             405:   82(ivec3) VectorShuffle 404 404 0 1 2
+             406:   82(ivec3) GroupNonUniformSMax 35 ClusteredReduce 405 34
+             407:     73(ptr) AccessChain 27(data) 402 39
+             408:   20(ivec4) Load 407
+             409:   20(ivec4) VectorShuffle 408 406 4 5 6 3
+                              Store 407 409
+             410:      6(int) Load 8(invocation)
+             411:     73(ptr) AccessChain 27(data) 60 39
+             412:   20(ivec4) Load 411
+             413:   20(ivec4) GroupNonUniformSMax 35 ClusteredReduce 412 34
+             414:     73(ptr) AccessChain 27(data) 410 39
+                              Store 414 413
+             415:      6(int) Load 8(invocation)
+             416:     96(ptr) AccessChain 27(data) 29 50 30
+             417:      6(int) Load 416
+             418:      6(int) GroupNonUniformUMax 35 ClusteredReduce 417 34
+             419:     96(ptr) AccessChain 27(data) 415 50 30
+                              Store 419 418
+             420:      6(int) Load 8(invocation)
+             421:    103(ptr) AccessChain 27(data) 39 50
+             422:   21(ivec4) Load 421
+             423:  102(ivec2) VectorShuffle 422 422 0 1
+             424:  102(ivec2) GroupNonUniformUMax 35 ClusteredReduce 423 34
+             425:    103(ptr) AccessChain 27(data) 420 50
+             426:   21(ivec4) Load 425
+             427:   21(ivec4) VectorShuffle 426 424 4 5 2 3
+                              Store 425 427
+             428:      6(int) Load 8(invocation)
+             429:    103(ptr) AccessChain 27(data) 50 50
+             430:   21(ivec4) Load 429
+             431:  112(ivec3) VectorShuffle 430 430 0 1 2
+             432:  112(ivec3) GroupNonUniformUMax 35 ClusteredReduce 431 34
+             433:    103(ptr) AccessChain 27(data) 428 50
+             434:   21(ivec4) Load 433
+             435:   21(ivec4) VectorShuffle 434 432 4 5 6 3
+                              Store 433 435
+             436:      6(int) Load 8(invocation)
+             437:    103(ptr) AccessChain 27(data) 60 50
+             438:   21(ivec4) Load 437
+             439:   21(ivec4) GroupNonUniformUMax 35 ClusteredReduce 438 34
+             440:    103(ptr) AccessChain 27(data) 436 50
+                              Store 440 439
+             441:      6(int) Load 8(invocation)
+             442:    126(ptr) AccessChain 27(data) 29 60 30
+             443:   22(float) Load 442
+             444:   22(float) GroupNonUniformFMax 35 ClusteredReduce 443 34
+             445:    126(ptr) AccessChain 27(data) 441 60 30
+                              Store 445 444
+             446:      6(int) Load 8(invocation)
+             447:    133(ptr) AccessChain 27(data) 39 60
+             448:   23(fvec4) Load 447
+             449:  132(fvec2) VectorShuffle 448 448 0 1
+             450:  132(fvec2) GroupNonUniformFMax 35 ClusteredReduce 449 34
+             451:    133(ptr) AccessChain 27(data) 446 60
+             452:   23(fvec4) Load 451
+             453:   23(fvec4) VectorShuffle 452 450 4 5 2 3
+                              Store 451 453
+             454:      6(int) Load 8(invocation)
+             455:    133(ptr) AccessChain 27(data) 50 60
+             456:   23(fvec4) Load 455
+             457:  142(fvec3) VectorShuffle 456 456 0 1 2
+             458:  142(fvec3) GroupNonUniformFMax 35 ClusteredReduce 457 34
+             459:    133(ptr) AccessChain 27(data) 454 60
+             460:   23(fvec4) Load 459
+             461:   23(fvec4) VectorShuffle 460 458 4 5 6 3
+                              Store 459 461
+             462:      6(int) Load 8(invocation)
+             463:    133(ptr) AccessChain 27(data) 60 60
+             464:   23(fvec4) Load 463
+             465:   23(fvec4) GroupNonUniformFMax 35 ClusteredReduce 464 34
+             466:    133(ptr) AccessChain 27(data) 462 60
+                              Store 466 465
+             467:      6(int) Load 8(invocation)
+             468:     66(ptr) AccessChain 27(data) 29 39 30
+             469:     19(int) Load 468
+             470:     19(int) GroupNonUniformBitwiseAnd 35 ClusteredReduce 469 34
+             471:     66(ptr) AccessChain 27(data) 467 39 30
+                              Store 471 470
+             472:      6(int) Load 8(invocation)
+             473:     73(ptr) AccessChain 27(data) 39 39
+             474:   20(ivec4) Load 473
+             475:   72(ivec2) VectorShuffle 474 474 0 1
+             476:   72(ivec2) GroupNonUniformBitwiseAnd 35 ClusteredReduce 475 34
+             477:     73(ptr) AccessChain 27(data) 472 39
+             478:   20(ivec4) Load 477
+             479:   20(ivec4) VectorShuffle 478 476 4 5 2 3
+                              Store 477 479
+             480:      6(int) Load 8(invocation)
+             481:     73(ptr) AccessChain 27(data) 50 39
+             482:   20(ivec4) Load 481
+             483:   82(ivec3) VectorShuffle 482 482 0 1 2
+             484:   82(ivec3) GroupNonUniformBitwiseAnd 35 ClusteredReduce 483 34
+             485:     73(ptr) AccessChain 27(data) 480 39
+             486:   20(ivec4) Load 485
+             487:   20(ivec4) VectorShuffle 486 484 4 5 6 3
+                              Store 485 487
+             488:      6(int) Load 8(invocation)
+             489:     73(ptr) AccessChain 27(data) 60 39
+             490:   20(ivec4) Load 489
+             491:   20(ivec4) GroupNonUniformBitwiseAnd 35 ClusteredReduce 490 34
+             492:     73(ptr) AccessChain 27(data) 488 39
+                              Store 492 491
+             493:      6(int) Load 8(invocation)
+             494:     96(ptr) AccessChain 27(data) 29 50 30
+             495:      6(int) Load 494
+             496:      6(int) GroupNonUniformBitwiseAnd 35 ClusteredReduce 495 34
+             497:     96(ptr) AccessChain 27(data) 493 50 30
+                              Store 497 496
+             498:      6(int) Load 8(invocation)
+             499:    103(ptr) AccessChain 27(data) 39 50
+             500:   21(ivec4) Load 499
+             501:  102(ivec2) VectorShuffle 500 500 0 1
+             502:  102(ivec2) GroupNonUniformBitwiseAnd 35 ClusteredReduce 501 34
+             503:    103(ptr) AccessChain 27(data) 498 50
+             504:   21(ivec4) Load 503
+             505:   21(ivec4) VectorShuffle 504 502 4 5 2 3
+                              Store 503 505
+             506:      6(int) Load 8(invocation)
+             507:    103(ptr) AccessChain 27(data) 50 50
+             508:   21(ivec4) Load 507
+             509:  112(ivec3) VectorShuffle 508 508 0 1 2
+             510:  112(ivec3) GroupNonUniformBitwiseAnd 35 ClusteredReduce 509 34
+             511:    103(ptr) AccessChain 27(data) 506 50
+             512:   21(ivec4) Load 511
+             513:   21(ivec4) VectorShuffle 512 510 4 5 6 3
+                              Store 511 513
+             514:      6(int) Load 8(invocation)
+             515:    103(ptr) AccessChain 27(data) 60 50
+             516:   21(ivec4) Load 515
+             517:   21(ivec4) GroupNonUniformBitwiseAnd 35 ClusteredReduce 516 34
+             518:    103(ptr) AccessChain 27(data) 514 50
+                              Store 518 517
+             519:      6(int) Load 8(invocation)
+             520:     66(ptr) AccessChain 27(data) 29 39 30
+             521:     19(int) Load 520
+             523:   522(bool) SLessThan 521 29
+             524:   522(bool) GroupNonUniformLogicalAnd 35 ClusteredReduce 523 34
+             525:     19(int) Select 524 39 29
+             526:     66(ptr) AccessChain 27(data) 519 39 30
+                              Store 526 525
+             527:      6(int) Load 8(invocation)
+             528:     73(ptr) AccessChain 27(data) 39 39
+             529:   20(ivec4) Load 528
+             530:   72(ivec2) VectorShuffle 529 529 0 1
+             533:  532(bvec2) SLessThan 530 531
+             534:  532(bvec2) GroupNonUniformLogicalAnd 35 ClusteredReduce 533 34
+             536:   72(ivec2) Select 534 535 531
+             537:     73(ptr) AccessChain 27(data) 527 39
+             538:   20(ivec4) Load 537
+             539:   20(ivec4) VectorShuffle 538 536 4 5 2 3
+                              Store 537 539
+             540:      6(int) Load 8(invocation)
+             541:     73(ptr) AccessChain 27(data) 39 39
+             542:   20(ivec4) Load 541
+             543:   82(ivec3) VectorShuffle 542 542 0 1 2
+             546:  545(bvec3) SLessThan 543 544
+             547:  545(bvec3) GroupNonUniformLogicalAnd 35 ClusteredReduce 546 34
+             549:   82(ivec3) Select 547 548 544
+             550:     73(ptr) AccessChain 27(data) 540 39
+             551:   20(ivec4) Load 550
+             552:   20(ivec4) VectorShuffle 551 549 4 5 6 3
+                              Store 550 552
+             553:      6(int) Load 8(invocation)
+             554:     73(ptr) AccessChain 27(data) 39 39
+             555:   20(ivec4) Load 554
+             558:  557(bvec4) SLessThan 555 556
+             559:  557(bvec4) GroupNonUniformLogicalAnd 35 ClusteredReduce 558 34
+             561:   20(ivec4) Select 559 560 556
+             562:     73(ptr) AccessChain 27(data) 553 39
+                              Store 562 561
+             563:      6(int) Load 8(invocation)
+             564:     66(ptr) AccessChain 27(data) 29 39 30
+             565:     19(int) Load 564
+             566:     19(int) GroupNonUniformBitwiseOr 35 ClusteredReduce 565 34
+             567:     66(ptr) AccessChain 27(data) 563 39 30
+                              Store 567 566
+             568:      6(int) Load 8(invocation)
+             569:     73(ptr) AccessChain 27(data) 39 39
+             570:   20(ivec4) Load 569
+             571:   72(ivec2) VectorShuffle 570 570 0 1
+             572:   72(ivec2) GroupNonUniformBitwiseOr 35 ClusteredReduce 571 34
+             573:     73(ptr) AccessChain 27(data) 568 39
+             574:   20(ivec4) Load 573
+             575:   20(ivec4) VectorShuffle 574 572 4 5 2 3
+                              Store 573 575
+             576:      6(int) Load 8(invocation)
+             577:     73(ptr) AccessChain 27(data) 50 39
+             578:   20(ivec4) Load 577
+             579:   82(ivec3) VectorShuffle 578 578 0 1 2
+             580:   82(ivec3) GroupNonUniformBitwiseOr 35 ClusteredReduce 579 34
+             581:     73(ptr) AccessChain 27(data) 576 39
+             582:   20(ivec4) Load 581
+             583:   20(ivec4) VectorShuffle 582 580 4 5 6 3
+                              Store 581 583
+             584:      6(int) Load 8(invocation)
+             585:     73(ptr) AccessChain 27(data) 60 39
+             586:   20(ivec4) Load 585
+             587:   20(ivec4) GroupNonUniformBitwiseOr 35 ClusteredReduce 586 34
+             588:     73(ptr) AccessChain 27(data) 584 39
+                              Store 588 587
+             589:      6(int) Load 8(invocation)
+             590:     96(ptr) AccessChain 27(data) 29 50 30
+             591:      6(int) Load 590
+             592:      6(int) GroupNonUniformBitwiseOr 35 ClusteredReduce 591 34
+             593:     96(ptr) AccessChain 27(data) 589 50 30
+                              Store 593 592
+             594:      6(int) Load 8(invocation)
+             595:    103(ptr) AccessChain 27(data) 39 50
+             596:   21(ivec4) Load 595
+             597:  102(ivec2) VectorShuffle 596 596 0 1
+             598:  102(ivec2) GroupNonUniformBitwiseOr 35 ClusteredReduce 597 34
+             599:    103(ptr) AccessChain 27(data) 594 50
+             600:   21(ivec4) Load 599
+             601:   21(ivec4) VectorShuffle 600 598 4 5 2 3
+                              Store 599 601
+             602:      6(int) Load 8(invocation)
+             603:    103(ptr) AccessChain 27(data) 50 50
+             604:   21(ivec4) Load 603
+             605:  112(ivec3) VectorShuffle 604 604 0 1 2
+             606:  112(ivec3) GroupNonUniformBitwiseOr 35 ClusteredReduce 605 34
+             607:    103(ptr) AccessChain 27(data) 602 50
+             608:   21(ivec4) Load 607
+             609:   21(ivec4) VectorShuffle 608 606 4 5 6 3
+                              Store 607 609
+             610:      6(int) Load 8(invocation)
+             611:    103(ptr) AccessChain 27(data) 60 50
+             612:   21(ivec4) Load 611
+             613:   21(ivec4) GroupNonUniformBitwiseOr 35 ClusteredReduce 612 34
+             614:    103(ptr) AccessChain 27(data) 610 50
+                              Store 614 613
+             615:      6(int) Load 8(invocation)
+             616:     66(ptr) AccessChain 27(data) 29 39 30
+             617:     19(int) Load 616
+             618:   522(bool) SLessThan 617 29
+             619:   522(bool) GroupNonUniformLogicalOr 35 ClusteredReduce 618 34
+             620:     19(int) Select 619 39 29
+             621:     66(ptr) AccessChain 27(data) 615 39 30
+                              Store 621 620
+             622:      6(int) Load 8(invocation)
+             623:     73(ptr) AccessChain 27(data) 39 39
+             624:   20(ivec4) Load 623
+             625:   72(ivec2) VectorShuffle 624 624 0 1
+             626:  532(bvec2) SLessThan 625 531
+             627:  532(bvec2) GroupNonUniformLogicalOr 35 ClusteredReduce 626 34
+             628:   72(ivec2) Select 627 535 531
+             629:     73(ptr) AccessChain 27(data) 622 39
+             630:   20(ivec4) Load 629
+             631:   20(ivec4) VectorShuffle 630 628 4 5 2 3
+                              Store 629 631
+             632:      6(int) Load 8(invocation)
+             633:     73(ptr) AccessChain 27(data) 39 39
+             634:   20(ivec4) Load 633
+             635:   82(ivec3) VectorShuffle 634 634 0 1 2
+             636:  545(bvec3) SLessThan 635 544
+             637:  545(bvec3) GroupNonUniformLogicalOr 35 ClusteredReduce 636 34
+             638:   82(ivec3) Select 637 548 544
+             639:     73(ptr) AccessChain 27(data) 632 39
+             640:   20(ivec4) Load 639
+             641:   20(ivec4) VectorShuffle 640 638 4 5 6 3
+                              Store 639 641
+             642:      6(int) Load 8(invocation)
+             643:     73(ptr) AccessChain 27(data) 39 39
+             644:   20(ivec4) Load 643
+             645:  557(bvec4) SLessThan 644 556
+             646:  557(bvec4) GroupNonUniformLogicalOr 35 ClusteredReduce 645 34
+             647:   20(ivec4) Select 646 560 556
+             648:     73(ptr) AccessChain 27(data) 642 39
+                              Store 648 647
+             649:      6(int) Load 8(invocation)
+             650:     66(ptr) AccessChain 27(data) 29 39 30
+             651:     19(int) Load 650
+             652:     19(int) GroupNonUniformBitwiseXor 35 ClusteredReduce 651 34
+             653:     66(ptr) AccessChain 27(data) 649 39 30
+                              Store 653 652
+             654:      6(int) Load 8(invocation)
+             655:     73(ptr) AccessChain 27(data) 39 39
+             656:   20(ivec4) Load 655
+             657:   72(ivec2) VectorShuffle 656 656 0 1
+             658:   72(ivec2) GroupNonUniformBitwiseXor 35 ClusteredReduce 657 34
+             659:     73(ptr) AccessChain 27(data) 654 39
+             660:   20(ivec4) Load 659
+             661:   20(ivec4) VectorShuffle 660 658 4 5 2 3
+                              Store 659 661
+             662:      6(int) Load 8(invocation)
+             663:     73(ptr) AccessChain 27(data) 50 39
+             664:   20(ivec4) Load 663
+             665:   82(ivec3) VectorShuffle 664 664 0 1 2
+             666:   82(ivec3) GroupNonUniformBitwiseXor 35 ClusteredReduce 665 34
+             667:     73(ptr) AccessChain 27(data) 662 39
+             668:   20(ivec4) Load 667
+             669:   20(ivec4) VectorShuffle 668 666 4 5 6 3
+                              Store 667 669
+             670:      6(int) Load 8(invocation)
+             671:     73(ptr) AccessChain 27(data) 60 39
+             672:   20(ivec4) Load 671
+             673:   20(ivec4) GroupNonUniformBitwiseXor 35 ClusteredReduce 672 34
+             674:     73(ptr) AccessChain 27(data) 670 39
+                              Store 674 673
+             675:      6(int) Load 8(invocation)
+             676:     96(ptr) AccessChain 27(data) 29 50 30
+             677:      6(int) Load 676
+             678:      6(int) GroupNonUniformBitwiseXor 35 ClusteredReduce 677 34
+             679:     96(ptr) AccessChain 27(data) 675 50 30
+                              Store 679 678
+             680:      6(int) Load 8(invocation)
+             681:    103(ptr) AccessChain 27(data) 39 50
+             682:   21(ivec4) Load 681
+             683:  102(ivec2) VectorShuffle 682 682 0 1
+             684:  102(ivec2) GroupNonUniformBitwiseXor 35 ClusteredReduce 683 34
+             685:    103(ptr) AccessChain 27(data) 680 50
+             686:   21(ivec4) Load 685
+             687:   21(ivec4) VectorShuffle 686 684 4 5 2 3
+                              Store 685 687
+             688:      6(int) Load 8(invocation)
+             689:    103(ptr) AccessChain 27(data) 50 50
+             690:   21(ivec4) Load 689
+             691:  112(ivec3) VectorShuffle 690 690 0 1 2
+             692:  112(ivec3) GroupNonUniformBitwiseXor 35 ClusteredReduce 691 34
+             693:    103(ptr) AccessChain 27(data) 688 50
+             694:   21(ivec4) Load 693
+             695:   21(ivec4) VectorShuffle 694 692 4 5 6 3
+                              Store 693 695
+             696:      6(int) Load 8(invocation)
+             697:    103(ptr) AccessChain 27(data) 60 50
+             698:   21(ivec4) Load 697
+             699:   21(ivec4) GroupNonUniformBitwiseXor 35 ClusteredReduce 698 34
+             700:    103(ptr) AccessChain 27(data) 696 50
+                              Store 700 699
+             701:      6(int) Load 8(invocation)
+             702:     66(ptr) AccessChain 27(data) 29 39 30
+             703:     19(int) Load 702
+             704:   522(bool) SLessThan 703 29
+             705:   522(bool) GroupNonUniformLogicalXor 35 ClusteredReduce 704 34
+             706:     19(int) Select 705 39 29
+             707:     66(ptr) AccessChain 27(data) 701 39 30
+                              Store 707 706
+             708:      6(int) Load 8(invocation)
+             709:     73(ptr) AccessChain 27(data) 39 39
+             710:   20(ivec4) Load 709
+             711:   72(ivec2) VectorShuffle 710 710 0 1
+             712:  532(bvec2) SLessThan 711 531
+             713:  532(bvec2) GroupNonUniformLogicalXor 35 ClusteredReduce 712 34
+             714:   72(ivec2) Select 713 535 531
+             715:     73(ptr) AccessChain 27(data) 708 39
+             716:   20(ivec4) Load 715
+             717:   20(ivec4) VectorShuffle 716 714 4 5 2 3
+                              Store 715 717
+             718:      6(int) Load 8(invocation)
+             719:     73(ptr) AccessChain 27(data) 39 39
+             720:   20(ivec4) Load 719
+             721:   82(ivec3) VectorShuffle 720 720 0 1 2
+             722:  545(bvec3) SLessThan 721 544
+             723:  545(bvec3) GroupNonUniformLogicalXor 35 ClusteredReduce 722 34
+             724:   82(ivec3) Select 723 548 544
+             725:     73(ptr) AccessChain 27(data) 718 39
+             726:   20(ivec4) Load 725
+             727:   20(ivec4) VectorShuffle 726 724 4 5 6 3
+                              Store 725 727
+             728:      6(int) Load 8(invocation)
+             729:     73(ptr) AccessChain 27(data) 39 39
+             730:   20(ivec4) Load 729
+             731:  557(bvec4) SLessThan 730 556
+             732:  557(bvec4) GroupNonUniformLogicalXor 35 ClusteredReduce 731 34
+             733:   20(ivec4) Select 732 560 556
+             734:     73(ptr) AccessChain 27(data) 728 39
+                              Store 734 733
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.subgroupClusteredNeg.comp.out b/Test/baseResults/spv.subgroupClusteredNeg.comp.out
new file mode 100755
index 0000000..911ff72
--- /dev/null
+++ b/Test/baseResults/spv.subgroupClusteredNeg.comp.out
@@ -0,0 +1,13 @@
+spv.subgroupClusteredNeg.comp
+ERROR: 0:22: 'cluster size' : argument must be at least 1 
+ERROR: 0:24: 'cluster size' : argument must be a power of 2 
+ERROR: 0:27: 'cluster size' : argument must be a power of 2 
+ERROR: 0:29: 'cluster size' : argument must be at least 1 
+ERROR: 0:31: 'cluster size' : argument must be at least 1 
+ERROR: 0:33: 'cluster size' : argument must be compile-time constant 
+ERROR: 0:36: 'cluster size' : argument must be compile-time constant 
+ERROR: 0:37: 'cluster size' : argument must be compile-time constant 
+ERROR: 8 compilation errors.  No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/spv.subgroupPartitioned.comp.out b/Test/baseResults/spv.subgroupPartitioned.comp.out
new file mode 100755
index 0000000..74f0104
--- /dev/null
+++ b/Test/baseResults/spv.subgroupPartitioned.comp.out
@@ -0,0 +1,2872 @@
+spv.subgroupPartitioned.comp
+// Module Version 10300
+// Generated by (magic number): 80006
+// Id's are bound by 2506
+
+                              Capability Shader
+                              Capability Float64
+                              Capability GroupNonUniform
+                              Capability GroupNonUniformPartitionedNV
+                              Extension  "SPV_NV_shader_subgroup_partitioned"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main" 10 12
+                              ExecutionMode 4 LocalSize 8 1 1
+                              Source GLSL 450
+                              SourceExtension  "GL_KHR_shader_subgroup_basic"
+                              SourceExtension  "GL_NV_shader_subgroup_partitioned"
+                              Name 4  "main"
+                              Name 8  "invocation"
+                              Name 10  "gl_SubgroupInvocationID"
+                              Name 12  "gl_SubgroupSize"
+                              Name 19  "ballot"
+                              Name 28  "Buffers"
+                              MemberName 28(Buffers) 0  "f4"
+                              MemberName 28(Buffers) 1  "i4"
+                              MemberName 28(Buffers) 2  "u4"
+                              MemberName 28(Buffers) 3  "d4"
+                              Name 31  "data"
+                              Decorate 10(gl_SubgroupInvocationID) RelaxedPrecision
+                              Decorate 10(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId
+                              Decorate 11 RelaxedPrecision
+                              Decorate 12(gl_SubgroupSize) RelaxedPrecision
+                              Decorate 12(gl_SubgroupSize) BuiltIn SubgroupSize
+                              Decorate 13 RelaxedPrecision
+                              Decorate 14 RelaxedPrecision
+                              Decorate 16 RelaxedPrecision
+                              MemberDecorate 28(Buffers) 0 Offset 0
+                              MemberDecorate 28(Buffers) 1 Offset 16
+                              MemberDecorate 28(Buffers) 2 Offset 32
+                              MemberDecorate 28(Buffers) 3 Offset 64
+                              Decorate 28(Buffers) BufferBlock
+                              Decorate 31(data) DescriptorSet 0
+                              Decorate 31(data) Binding 0
+                              Decorate 2505 BuiltIn WorkgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypePointer Function 6(int)
+               9:             TypePointer Input 6(int)
+10(gl_SubgroupInvocationID):      9(ptr) Variable Input
+12(gl_SubgroupSize):      9(ptr) Variable Input
+              15:      6(int) Constant 4
+              17:             TypeVector 6(int) 4
+              18:             TypePointer Function 17(ivec4)
+              22:             TypeFloat 32
+              23:             TypeVector 22(float) 4
+              24:             TypeInt 32 1
+              25:             TypeVector 24(int) 4
+              26:             TypeFloat 64
+              27:             TypeVector 26(float) 4
+     28(Buffers):             TypeStruct 23(fvec4) 25(ivec4) 17(ivec4) 27(fvec4)
+              29:             TypeArray 28(Buffers) 15
+              30:             TypePointer Uniform 29
+        31(data):     30(ptr) Variable Uniform
+              33:     24(int) Constant 2
+              34:     24(int) Constant 0
+              35:      6(int) Constant 0
+              36:             TypePointer Uniform 22(float)
+              40:             TypePointer Uniform 17(ivec4)
+              43:             TypeVector 22(float) 2
+              44:             TypePointer Uniform 23(fvec4)
+              51:             TypeVector 22(float) 3
+              63:     24(int) Constant 1
+              64:             TypePointer Uniform 24(int)
+              70:             TypeVector 24(int) 2
+              71:             TypePointer Uniform 25(ivec4)
+              78:             TypeVector 24(int) 3
+              90:             TypePointer Uniform 6(int)
+              96:             TypeVector 6(int) 2
+             103:             TypeVector 6(int) 3
+             115:     24(int) Constant 3
+             116:             TypePointer Uniform 26(float)
+             122:             TypeVector 26(float) 2
+             123:             TypePointer Uniform 27(fvec4)
+             130:             TypeVector 26(float) 3
+             144:             TypeBool
+             152:             TypeVector 144(bool) 2
+             153:   96(ivec2) ConstantComposite 35 35
+             161:             TypeVector 144(bool) 3
+             162:  103(ivec3) ConstantComposite 35 35 35
+             169:             TypeVector 144(bool) 4
+             170:   17(ivec4) ConstantComposite 35 35 35 35
+             178:      6(int) Constant 3
+             727:   70(ivec2) ConstantComposite 34 34
+             731:   70(ivec2) ConstantComposite 63 63
+             740:   78(ivec3) ConstantComposite 34 34 34
+             744:   78(ivec3) ConstantComposite 63 63 63
+             752:   25(ivec4) ConstantComposite 34 34 34 34
+             756:   25(ivec4) ConstantComposite 63 63 63 63
+            2503:      6(int) Constant 8
+            2504:      6(int) Constant 1
+            2505:  103(ivec3) ConstantComposite 2503 2504 2504
+         4(main):           2 Function None 3
+               5:             Label
+   8(invocation):      7(ptr) Variable Function
+      19(ballot):     18(ptr) Variable Function
+              11:      6(int) Load 10(gl_SubgroupInvocationID)
+              13:      6(int) Load 12(gl_SubgroupSize)
+              14:      6(int) IAdd 11 13
+              16:      6(int) UMod 14 15
+                              Store 8(invocation) 16
+              20:      6(int) Load 8(invocation)
+              21:   17(ivec4) GroupNonUniformPartitionNV 20
+                              Store 19(ballot) 21
+              32:      6(int) Load 8(invocation)
+              37:     36(ptr) AccessChain 31(data) 34 34 35
+              38:   22(float) Load 37
+              39:   17(ivec4) GroupNonUniformPartitionNV 38
+              41:     40(ptr) AccessChain 31(data) 32 33
+                              Store 41 39
+              42:      6(int) Load 8(invocation)
+              45:     44(ptr) AccessChain 31(data) 34 34
+              46:   23(fvec4) Load 45
+              47:   43(fvec2) VectorShuffle 46 46 0 1
+              48:   17(ivec4) GroupNonUniformPartitionNV 47
+              49:     40(ptr) AccessChain 31(data) 42 33
+                              Store 49 48
+              50:      6(int) Load 8(invocation)
+              52:     44(ptr) AccessChain 31(data) 34 34
+              53:   23(fvec4) Load 52
+              54:   51(fvec3) VectorShuffle 53 53 0 1 2
+              55:   17(ivec4) GroupNonUniformPartitionNV 54
+              56:     40(ptr) AccessChain 31(data) 50 33
+                              Store 56 55
+              57:      6(int) Load 8(invocation)
+              58:     44(ptr) AccessChain 31(data) 34 34
+              59:   23(fvec4) Load 58
+              60:   17(ivec4) GroupNonUniformPartitionNV 59
+              61:     40(ptr) AccessChain 31(data) 57 33
+                              Store 61 60
+              62:      6(int) Load 8(invocation)
+              65:     64(ptr) AccessChain 31(data) 34 63 35
+              66:     24(int) Load 65
+              67:   17(ivec4) GroupNonUniformPartitionNV 66
+              68:     40(ptr) AccessChain 31(data) 62 33
+                              Store 68 67
+              69:      6(int) Load 8(invocation)
+              72:     71(ptr) AccessChain 31(data) 34 63
+              73:   25(ivec4) Load 72
+              74:   70(ivec2) VectorShuffle 73 73 0 1
+              75:   17(ivec4) GroupNonUniformPartitionNV 74
+              76:     40(ptr) AccessChain 31(data) 69 33
+                              Store 76 75
+              77:      6(int) Load 8(invocation)
+              79:     71(ptr) AccessChain 31(data) 34 63
+              80:   25(ivec4) Load 79
+              81:   78(ivec3) VectorShuffle 80 80 0 1 2
+              82:   17(ivec4) GroupNonUniformPartitionNV 81
+              83:     40(ptr) AccessChain 31(data) 77 33
+                              Store 83 82
+              84:      6(int) Load 8(invocation)
+              85:     71(ptr) AccessChain 31(data) 34 63
+              86:   25(ivec4) Load 85
+              87:   17(ivec4) GroupNonUniformPartitionNV 86
+              88:     40(ptr) AccessChain 31(data) 84 33
+                              Store 88 87
+              89:      6(int) Load 8(invocation)
+              91:     90(ptr) AccessChain 31(data) 34 33 35
+              92:      6(int) Load 91
+              93:   17(ivec4) GroupNonUniformPartitionNV 92
+              94:     40(ptr) AccessChain 31(data) 89 33
+                              Store 94 93
+              95:      6(int) Load 8(invocation)
+              97:     40(ptr) AccessChain 31(data) 34 33
+              98:   17(ivec4) Load 97
+              99:   96(ivec2) VectorShuffle 98 98 0 1
+             100:   17(ivec4) GroupNonUniformPartitionNV 99
+             101:     40(ptr) AccessChain 31(data) 95 33
+                              Store 101 100
+             102:      6(int) Load 8(invocation)
+             104:     40(ptr) AccessChain 31(data) 34 33
+             105:   17(ivec4) Load 104
+             106:  103(ivec3) VectorShuffle 105 105 0 1 2
+             107:   17(ivec4) GroupNonUniformPartitionNV 106
+             108:     40(ptr) AccessChain 31(data) 102 33
+                              Store 108 107
+             109:      6(int) Load 8(invocation)
+             110:     40(ptr) AccessChain 31(data) 34 33
+             111:   17(ivec4) Load 110
+             112:   17(ivec4) GroupNonUniformPartitionNV 111
+             113:     40(ptr) AccessChain 31(data) 109 33
+                              Store 113 112
+             114:      6(int) Load 8(invocation)
+             117:    116(ptr) AccessChain 31(data) 34 115 35
+             118:   26(float) Load 117
+             119:   17(ivec4) GroupNonUniformPartitionNV 118
+             120:     40(ptr) AccessChain 31(data) 114 33
+                              Store 120 119
+             121:      6(int) Load 8(invocation)
+             124:    123(ptr) AccessChain 31(data) 34 115
+             125:   27(fvec4) Load 124
+             126:  122(fvec2) VectorShuffle 125 125 0 1
+             127:   17(ivec4) GroupNonUniformPartitionNV 126
+             128:     40(ptr) AccessChain 31(data) 121 33
+                              Store 128 127
+             129:      6(int) Load 8(invocation)
+             131:    123(ptr) AccessChain 31(data) 34 115
+             132:   27(fvec4) Load 131
+             133:  130(fvec3) VectorShuffle 132 132 0 1 2
+             134:   17(ivec4) GroupNonUniformPartitionNV 133
+             135:     40(ptr) AccessChain 31(data) 129 33
+                              Store 135 134
+             136:      6(int) Load 8(invocation)
+             137:    123(ptr) AccessChain 31(data) 34 115
+             138:   27(fvec4) Load 137
+             139:   17(ivec4) GroupNonUniformPartitionNV 138
+             140:     40(ptr) AccessChain 31(data) 136 33
+                              Store 140 139
+             141:      6(int) Load 8(invocation)
+             142:     64(ptr) AccessChain 31(data) 34 63 35
+             143:     24(int) Load 142
+             145:   144(bool) INotEqual 143 35
+             146:   17(ivec4) GroupNonUniformPartitionNV 145
+             147:     40(ptr) AccessChain 31(data) 141 33
+                              Store 147 146
+             148:      6(int) Load 8(invocation)
+             149:     71(ptr) AccessChain 31(data) 34 63
+             150:   25(ivec4) Load 149
+             151:   70(ivec2) VectorShuffle 150 150 0 1
+             154:  152(bvec2) INotEqual 151 153
+             155:   17(ivec4) GroupNonUniformPartitionNV 154
+             156:     40(ptr) AccessChain 31(data) 148 33
+                              Store 156 155
+             157:      6(int) Load 8(invocation)
+             158:     71(ptr) AccessChain 31(data) 34 63
+             159:   25(ivec4) Load 158
+             160:   78(ivec3) VectorShuffle 159 159 0 1 2
+             163:  161(bvec3) INotEqual 160 162
+             164:   17(ivec4) GroupNonUniformPartitionNV 163
+             165:     40(ptr) AccessChain 31(data) 157 33
+                              Store 165 164
+             166:      6(int) Load 8(invocation)
+             167:     71(ptr) AccessChain 31(data) 34 63
+             168:   25(ivec4) Load 167
+             171:  169(bvec4) INotEqual 168 170
+             172:   17(ivec4) GroupNonUniformPartitionNV 171
+             173:     40(ptr) AccessChain 31(data) 166 33
+                              Store 173 172
+             174:      6(int) Load 8(invocation)
+             175:     36(ptr) AccessChain 31(data) 34 34 35
+             176:   22(float) Load 175
+             177:   17(ivec4) Load 19(ballot)
+             179:   22(float) GroupNonUniformFAdd 178 PartitionedReduceNV 176 177
+             180:     36(ptr) AccessChain 31(data) 174 34 35
+                              Store 180 179
+             181:      6(int) Load 8(invocation)
+             182:     44(ptr) AccessChain 31(data) 63 34
+             183:   23(fvec4) Load 182
+             184:   43(fvec2) VectorShuffle 183 183 0 1
+             185:   17(ivec4) Load 19(ballot)
+             186:   43(fvec2) GroupNonUniformFAdd 178 PartitionedReduceNV 184 185
+             187:     44(ptr) AccessChain 31(data) 181 34
+             188:   23(fvec4) Load 187
+             189:   23(fvec4) VectorShuffle 188 186 4 5 2 3
+                              Store 187 189
+             190:      6(int) Load 8(invocation)
+             191:     44(ptr) AccessChain 31(data) 33 34
+             192:   23(fvec4) Load 191
+             193:   51(fvec3) VectorShuffle 192 192 0 1 2
+             194:   17(ivec4) Load 19(ballot)
+             195:   51(fvec3) GroupNonUniformFAdd 178 PartitionedReduceNV 193 194
+             196:     44(ptr) AccessChain 31(data) 190 34
+             197:   23(fvec4) Load 196
+             198:   23(fvec4) VectorShuffle 197 195 4 5 6 3
+                              Store 196 198
+             199:      6(int) Load 8(invocation)
+             200:     44(ptr) AccessChain 31(data) 115 34
+             201:   23(fvec4) Load 200
+             202:   17(ivec4) Load 19(ballot)
+             203:   23(fvec4) GroupNonUniformFAdd 178 PartitionedReduceNV 201 202
+             204:     44(ptr) AccessChain 31(data) 199 34
+                              Store 204 203
+             205:      6(int) Load 8(invocation)
+             206:     64(ptr) AccessChain 31(data) 34 63 35
+             207:     24(int) Load 206
+             208:   17(ivec4) Load 19(ballot)
+             209:     24(int) GroupNonUniformIAdd 178 PartitionedReduceNV 207 208
+             210:     64(ptr) AccessChain 31(data) 205 63 35
+                              Store 210 209
+             211:      6(int) Load 8(invocation)
+             212:     71(ptr) AccessChain 31(data) 63 63
+             213:   25(ivec4) Load 212
+             214:   70(ivec2) VectorShuffle 213 213 0 1
+             215:   17(ivec4) Load 19(ballot)
+             216:   70(ivec2) GroupNonUniformIAdd 178 PartitionedReduceNV 214 215
+             217:     71(ptr) AccessChain 31(data) 211 63
+             218:   25(ivec4) Load 217
+             219:   25(ivec4) VectorShuffle 218 216 4 5 2 3
+                              Store 217 219
+             220:      6(int) Load 8(invocation)
+             221:     71(ptr) AccessChain 31(data) 33 63
+             222:   25(ivec4) Load 221
+             223:   78(ivec3) VectorShuffle 222 222 0 1 2
+             224:   17(ivec4) Load 19(ballot)
+             225:   78(ivec3) GroupNonUniformIAdd 178 PartitionedReduceNV 223 224
+             226:     71(ptr) AccessChain 31(data) 220 63
+             227:   25(ivec4) Load 226
+             228:   25(ivec4) VectorShuffle 227 225 4 5 6 3
+                              Store 226 228
+             229:      6(int) Load 8(invocation)
+             230:     71(ptr) AccessChain 31(data) 115 63
+             231:   25(ivec4) Load 230
+             232:   17(ivec4) Load 19(ballot)
+             233:   25(ivec4) GroupNonUniformIAdd 178 PartitionedReduceNV 231 232
+             234:     71(ptr) AccessChain 31(data) 229 63
+                              Store 234 233
+             235:      6(int) Load 8(invocation)
+             236:     90(ptr) AccessChain 31(data) 34 33 35
+             237:      6(int) Load 236
+             238:   17(ivec4) Load 19(ballot)
+             239:      6(int) GroupNonUniformIAdd 178 PartitionedReduceNV 237 238
+             240:     90(ptr) AccessChain 31(data) 235 33 35
+                              Store 240 239
+             241:      6(int) Load 8(invocation)
+             242:     40(ptr) AccessChain 31(data) 63 33
+             243:   17(ivec4) Load 242
+             244:   96(ivec2) VectorShuffle 243 243 0 1
+             245:   17(ivec4) Load 19(ballot)
+             246:   96(ivec2) GroupNonUniformIAdd 178 PartitionedReduceNV 244 245
+             247:     40(ptr) AccessChain 31(data) 241 33
+             248:   17(ivec4) Load 247
+             249:   17(ivec4) VectorShuffle 248 246 4 5 2 3
+                              Store 247 249
+             250:      6(int) Load 8(invocation)
+             251:     40(ptr) AccessChain 31(data) 33 33
+             252:   17(ivec4) Load 251
+             253:  103(ivec3) VectorShuffle 252 252 0 1 2
+             254:   17(ivec4) Load 19(ballot)
+             255:  103(ivec3) GroupNonUniformIAdd 178 PartitionedReduceNV 253 254
+             256:     40(ptr) AccessChain 31(data) 250 33
+             257:   17(ivec4) Load 256
+             258:   17(ivec4) VectorShuffle 257 255 4 5 6 3
+                              Store 256 258
+             259:      6(int) Load 8(invocation)
+             260:     40(ptr) AccessChain 31(data) 115 33
+             261:   17(ivec4) Load 260
+             262:   17(ivec4) Load 19(ballot)
+             263:   17(ivec4) GroupNonUniformIAdd 178 PartitionedReduceNV 261 262
+             264:     40(ptr) AccessChain 31(data) 259 33
+                              Store 264 263
+             265:      6(int) Load 8(invocation)
+             266:    116(ptr) AccessChain 31(data) 34 115 35
+             267:   26(float) Load 266
+             268:   17(ivec4) Load 19(ballot)
+             269:   26(float) GroupNonUniformFAdd 178 PartitionedReduceNV 267 268
+             270:    116(ptr) AccessChain 31(data) 265 115 35
+                              Store 270 269
+             271:      6(int) Load 8(invocation)
+             272:    123(ptr) AccessChain 31(data) 63 115
+             273:   27(fvec4) Load 272
+             274:  122(fvec2) VectorShuffle 273 273 0 1
+             275:   17(ivec4) Load 19(ballot)
+             276:  122(fvec2) GroupNonUniformFAdd 178 PartitionedReduceNV 274 275
+             277:    123(ptr) AccessChain 31(data) 271 115
+             278:   27(fvec4) Load 277
+             279:   27(fvec4) VectorShuffle 278 276 4 5 2 3
+                              Store 277 279
+             280:      6(int) Load 8(invocation)
+             281:    123(ptr) AccessChain 31(data) 33 115
+             282:   27(fvec4) Load 281
+             283:  130(fvec3) VectorShuffle 282 282 0 1 2
+             284:   17(ivec4) Load 19(ballot)
+             285:  130(fvec3) GroupNonUniformFAdd 178 PartitionedReduceNV 283 284
+             286:    123(ptr) AccessChain 31(data) 280 115
+             287:   27(fvec4) Load 286
+             288:   27(fvec4) VectorShuffle 287 285 4 5 6 3
+                              Store 286 288
+             289:      6(int) Load 8(invocation)
+             290:    123(ptr) AccessChain 31(data) 115 115
+             291:   27(fvec4) Load 290
+             292:   17(ivec4) Load 19(ballot)
+             293:   27(fvec4) GroupNonUniformFAdd 178 PartitionedReduceNV 291 292
+             294:    123(ptr) AccessChain 31(data) 289 115
+                              Store 294 293
+             295:      6(int) Load 8(invocation)
+             296:     36(ptr) AccessChain 31(data) 34 34 35
+             297:   22(float) Load 296
+             298:   17(ivec4) Load 19(ballot)
+             299:   22(float) GroupNonUniformFMul 178 PartitionedReduceNV 297 298
+             300:     36(ptr) AccessChain 31(data) 295 34 35
+                              Store 300 299
+             301:      6(int) Load 8(invocation)
+             302:     44(ptr) AccessChain 31(data) 63 34
+             303:   23(fvec4) Load 302
+             304:   43(fvec2) VectorShuffle 303 303 0 1
+             305:   17(ivec4) Load 19(ballot)
+             306:   43(fvec2) GroupNonUniformFMul 178 PartitionedReduceNV 304 305
+             307:     44(ptr) AccessChain 31(data) 301 34
+             308:   23(fvec4) Load 307
+             309:   23(fvec4) VectorShuffle 308 306 4 5 2 3
+                              Store 307 309
+             310:      6(int) Load 8(invocation)
+             311:     44(ptr) AccessChain 31(data) 33 34
+             312:   23(fvec4) Load 311
+             313:   51(fvec3) VectorShuffle 312 312 0 1 2
+             314:   17(ivec4) Load 19(ballot)
+             315:   51(fvec3) GroupNonUniformFMul 178 PartitionedReduceNV 313 314
+             316:     44(ptr) AccessChain 31(data) 310 34
+             317:   23(fvec4) Load 316
+             318:   23(fvec4) VectorShuffle 317 315 4 5 6 3
+                              Store 316 318
+             319:      6(int) Load 8(invocation)
+             320:     44(ptr) AccessChain 31(data) 115 34
+             321:   23(fvec4) Load 320
+             322:   17(ivec4) Load 19(ballot)
+             323:   23(fvec4) GroupNonUniformFMul 178 PartitionedReduceNV 321 322
+             324:     44(ptr) AccessChain 31(data) 319 34
+                              Store 324 323
+             325:      6(int) Load 8(invocation)
+             326:     64(ptr) AccessChain 31(data) 34 63 35
+             327:     24(int) Load 326
+             328:   17(ivec4) Load 19(ballot)
+             329:     24(int) GroupNonUniformIMul 178 PartitionedReduceNV 327 328
+             330:     64(ptr) AccessChain 31(data) 325 63 35
+                              Store 330 329
+             331:      6(int) Load 8(invocation)
+             332:     71(ptr) AccessChain 31(data) 63 63
+             333:   25(ivec4) Load 332
+             334:   70(ivec2) VectorShuffle 333 333 0 1
+             335:   17(ivec4) Load 19(ballot)
+             336:   70(ivec2) GroupNonUniformIMul 178 PartitionedReduceNV 334 335
+             337:     71(ptr) AccessChain 31(data) 331 63
+             338:   25(ivec4) Load 337
+             339:   25(ivec4) VectorShuffle 338 336 4 5 2 3
+                              Store 337 339
+             340:      6(int) Load 8(invocation)
+             341:     71(ptr) AccessChain 31(data) 33 63
+             342:   25(ivec4) Load 341
+             343:   78(ivec3) VectorShuffle 342 342 0 1 2
+             344:   17(ivec4) Load 19(ballot)
+             345:   78(ivec3) GroupNonUniformIMul 178 PartitionedReduceNV 343 344
+             346:     71(ptr) AccessChain 31(data) 340 63
+             347:   25(ivec4) Load 346
+             348:   25(ivec4) VectorShuffle 347 345 4 5 6 3
+                              Store 346 348
+             349:      6(int) Load 8(invocation)
+             350:     71(ptr) AccessChain 31(data) 115 63
+             351:   25(ivec4) Load 350
+             352:   17(ivec4) Load 19(ballot)
+             353:   25(ivec4) GroupNonUniformIMul 178 PartitionedReduceNV 351 352
+             354:     71(ptr) AccessChain 31(data) 349 63
+                              Store 354 353
+             355:      6(int) Load 8(invocation)
+             356:     90(ptr) AccessChain 31(data) 34 33 35
+             357:      6(int) Load 356
+             358:   17(ivec4) Load 19(ballot)
+             359:      6(int) GroupNonUniformIMul 178 PartitionedReduceNV 357 358
+             360:     90(ptr) AccessChain 31(data) 355 33 35
+                              Store 360 359
+             361:      6(int) Load 8(invocation)
+             362:     40(ptr) AccessChain 31(data) 63 33
+             363:   17(ivec4) Load 362
+             364:   96(ivec2) VectorShuffle 363 363 0 1
+             365:   17(ivec4) Load 19(ballot)
+             366:   96(ivec2) GroupNonUniformIMul 178 PartitionedReduceNV 364 365
+             367:     40(ptr) AccessChain 31(data) 361 33
+             368:   17(ivec4) Load 367
+             369:   17(ivec4) VectorShuffle 368 366 4 5 2 3
+                              Store 367 369
+             370:      6(int) Load 8(invocation)
+             371:     40(ptr) AccessChain 31(data) 33 33
+             372:   17(ivec4) Load 371
+             373:  103(ivec3) VectorShuffle 372 372 0 1 2
+             374:   17(ivec4) Load 19(ballot)
+             375:  103(ivec3) GroupNonUniformIMul 178 PartitionedReduceNV 373 374
+             376:     40(ptr) AccessChain 31(data) 370 33
+             377:   17(ivec4) Load 376
+             378:   17(ivec4) VectorShuffle 377 375 4 5 6 3
+                              Store 376 378
+             379:      6(int) Load 8(invocation)
+             380:     40(ptr) AccessChain 31(data) 115 33
+             381:   17(ivec4) Load 380
+             382:   17(ivec4) Load 19(ballot)
+             383:   17(ivec4) GroupNonUniformIMul 178 PartitionedReduceNV 381 382
+             384:     40(ptr) AccessChain 31(data) 379 33
+                              Store 384 383
+             385:      6(int) Load 8(invocation)
+             386:    116(ptr) AccessChain 31(data) 34 115 35
+             387:   26(float) Load 386
+             388:   17(ivec4) Load 19(ballot)
+             389:   26(float) GroupNonUniformFMul 178 PartitionedReduceNV 387 388
+             390:    116(ptr) AccessChain 31(data) 385 115 35
+                              Store 390 389
+             391:      6(int) Load 8(invocation)
+             392:    123(ptr) AccessChain 31(data) 63 115
+             393:   27(fvec4) Load 392
+             394:  122(fvec2) VectorShuffle 393 393 0 1
+             395:   17(ivec4) Load 19(ballot)
+             396:  122(fvec2) GroupNonUniformFMul 178 PartitionedReduceNV 394 395
+             397:    123(ptr) AccessChain 31(data) 391 115
+             398:   27(fvec4) Load 397
+             399:   27(fvec4) VectorShuffle 398 396 4 5 2 3
+                              Store 397 399
+             400:      6(int) Load 8(invocation)
+             401:    123(ptr) AccessChain 31(data) 33 115
+             402:   27(fvec4) Load 401
+             403:  130(fvec3) VectorShuffle 402 402 0 1 2
+             404:   17(ivec4) Load 19(ballot)
+             405:  130(fvec3) GroupNonUniformFMul 178 PartitionedReduceNV 403 404
+             406:    123(ptr) AccessChain 31(data) 400 115
+             407:   27(fvec4) Load 406
+             408:   27(fvec4) VectorShuffle 407 405 4 5 6 3
+                              Store 406 408
+             409:      6(int) Load 8(invocation)
+             410:    123(ptr) AccessChain 31(data) 115 115
+             411:   27(fvec4) Load 410
+             412:   17(ivec4) Load 19(ballot)
+             413:   27(fvec4) GroupNonUniformFMul 178 PartitionedReduceNV 411 412
+             414:    123(ptr) AccessChain 31(data) 409 115
+                              Store 414 413
+             415:      6(int) Load 8(invocation)
+             416:     36(ptr) AccessChain 31(data) 34 34 35
+             417:   22(float) Load 416
+             418:   17(ivec4) Load 19(ballot)
+             419:   22(float) GroupNonUniformFMin 178 PartitionedReduceNV 417 418
+             420:     36(ptr) AccessChain 31(data) 415 34 35
+                              Store 420 419
+             421:      6(int) Load 8(invocation)
+             422:     44(ptr) AccessChain 31(data) 63 34
+             423:   23(fvec4) Load 422
+             424:   43(fvec2) VectorShuffle 423 423 0 1
+             425:   17(ivec4) Load 19(ballot)
+             426:   43(fvec2) GroupNonUniformFMin 178 PartitionedReduceNV 424 425
+             427:     44(ptr) AccessChain 31(data) 421 34
+             428:   23(fvec4) Load 427
+             429:   23(fvec4) VectorShuffle 428 426 4 5 2 3
+                              Store 427 429
+             430:      6(int) Load 8(invocation)
+             431:     44(ptr) AccessChain 31(data) 33 34
+             432:   23(fvec4) Load 431
+             433:   51(fvec3) VectorShuffle 432 432 0 1 2
+             434:   17(ivec4) Load 19(ballot)
+             435:   51(fvec3) GroupNonUniformFMin 178 PartitionedReduceNV 433 434
+             436:     44(ptr) AccessChain 31(data) 430 34
+             437:   23(fvec4) Load 436
+             438:   23(fvec4) VectorShuffle 437 435 4 5 6 3
+                              Store 436 438
+             439:      6(int) Load 8(invocation)
+             440:     44(ptr) AccessChain 31(data) 115 34
+             441:   23(fvec4) Load 440
+             442:   17(ivec4) Load 19(ballot)
+             443:   23(fvec4) GroupNonUniformFMin 178 PartitionedReduceNV 441 442
+             444:     44(ptr) AccessChain 31(data) 439 34
+                              Store 444 443
+             445:      6(int) Load 8(invocation)
+             446:     64(ptr) AccessChain 31(data) 34 63 35
+             447:     24(int) Load 446
+             448:   17(ivec4) Load 19(ballot)
+             449:     24(int) GroupNonUniformSMin 178 PartitionedReduceNV 447 448
+             450:     64(ptr) AccessChain 31(data) 445 63 35
+                              Store 450 449
+             451:      6(int) Load 8(invocation)
+             452:     71(ptr) AccessChain 31(data) 63 63
+             453:   25(ivec4) Load 452
+             454:   70(ivec2) VectorShuffle 453 453 0 1
+             455:   17(ivec4) Load 19(ballot)
+             456:   70(ivec2) GroupNonUniformSMin 178 PartitionedReduceNV 454 455
+             457:     71(ptr) AccessChain 31(data) 451 63
+             458:   25(ivec4) Load 457
+             459:   25(ivec4) VectorShuffle 458 456 4 5 2 3
+                              Store 457 459
+             460:      6(int) Load 8(invocation)
+             461:     71(ptr) AccessChain 31(data) 33 63
+             462:   25(ivec4) Load 461
+             463:   78(ivec3) VectorShuffle 462 462 0 1 2
+             464:   17(ivec4) Load 19(ballot)
+             465:   78(ivec3) GroupNonUniformSMin 178 PartitionedReduceNV 463 464
+             466:     71(ptr) AccessChain 31(data) 460 63
+             467:   25(ivec4) Load 466
+             468:   25(ivec4) VectorShuffle 467 465 4 5 6 3
+                              Store 466 468
+             469:      6(int) Load 8(invocation)
+             470:     71(ptr) AccessChain 31(data) 115 63
+             471:   25(ivec4) Load 470
+             472:   17(ivec4) Load 19(ballot)
+             473:   25(ivec4) GroupNonUniformSMin 178 PartitionedReduceNV 471 472
+             474:     71(ptr) AccessChain 31(data) 469 63
+                              Store 474 473
+             475:      6(int) Load 8(invocation)
+             476:     90(ptr) AccessChain 31(data) 34 33 35
+             477:      6(int) Load 476
+             478:   17(ivec4) Load 19(ballot)
+             479:      6(int) GroupNonUniformUMin 178 PartitionedReduceNV 477 478
+             480:     90(ptr) AccessChain 31(data) 475 33 35
+                              Store 480 479
+             481:      6(int) Load 8(invocation)
+             482:     40(ptr) AccessChain 31(data) 63 33
+             483:   17(ivec4) Load 482
+             484:   96(ivec2) VectorShuffle 483 483 0 1
+             485:   17(ivec4) Load 19(ballot)
+             486:   96(ivec2) GroupNonUniformUMin 178 PartitionedReduceNV 484 485
+             487:     40(ptr) AccessChain 31(data) 481 33
+             488:   17(ivec4) Load 487
+             489:   17(ivec4) VectorShuffle 488 486 4 5 2 3
+                              Store 487 489
+             490:      6(int) Load 8(invocation)
+             491:     40(ptr) AccessChain 31(data) 33 33
+             492:   17(ivec4) Load 491
+             493:  103(ivec3) VectorShuffle 492 492 0 1 2
+             494:   17(ivec4) Load 19(ballot)
+             495:  103(ivec3) GroupNonUniformUMin 178 PartitionedReduceNV 493 494
+             496:     40(ptr) AccessChain 31(data) 490 33
+             497:   17(ivec4) Load 496
+             498:   17(ivec4) VectorShuffle 497 495 4 5 6 3
+                              Store 496 498
+             499:      6(int) Load 8(invocation)
+             500:     40(ptr) AccessChain 31(data) 115 33
+             501:   17(ivec4) Load 500
+             502:   17(ivec4) Load 19(ballot)
+             503:   17(ivec4) GroupNonUniformUMin 178 PartitionedReduceNV 501 502
+             504:     40(ptr) AccessChain 31(data) 499 33
+                              Store 504 503
+             505:      6(int) Load 8(invocation)
+             506:    116(ptr) AccessChain 31(data) 34 115 35
+             507:   26(float) Load 506
+             508:   17(ivec4) Load 19(ballot)
+             509:   26(float) GroupNonUniformFMin 178 PartitionedReduceNV 507 508
+             510:    116(ptr) AccessChain 31(data) 505 115 35
+                              Store 510 509
+             511:      6(int) Load 8(invocation)
+             512:    123(ptr) AccessChain 31(data) 63 115
+             513:   27(fvec4) Load 512
+             514:  122(fvec2) VectorShuffle 513 513 0 1
+             515:   17(ivec4) Load 19(ballot)
+             516:  122(fvec2) GroupNonUniformFMin 178 PartitionedReduceNV 514 515
+             517:    123(ptr) AccessChain 31(data) 511 115
+             518:   27(fvec4) Load 517
+             519:   27(fvec4) VectorShuffle 518 516 4 5 2 3
+                              Store 517 519
+             520:      6(int) Load 8(invocation)
+             521:    123(ptr) AccessChain 31(data) 33 115
+             522:   27(fvec4) Load 521
+             523:  130(fvec3) VectorShuffle 522 522 0 1 2
+             524:   17(ivec4) Load 19(ballot)
+             525:  130(fvec3) GroupNonUniformFMin 178 PartitionedReduceNV 523 524
+             526:    123(ptr) AccessChain 31(data) 520 115
+             527:   27(fvec4) Load 526
+             528:   27(fvec4) VectorShuffle 527 525 4 5 6 3
+                              Store 526 528
+             529:      6(int) Load 8(invocation)
+             530:    123(ptr) AccessChain 31(data) 115 115
+             531:   27(fvec4) Load 530
+             532:   17(ivec4) Load 19(ballot)
+             533:   27(fvec4) GroupNonUniformFMin 178 PartitionedReduceNV 531 532
+             534:    123(ptr) AccessChain 31(data) 529 115
+                              Store 534 533
+             535:      6(int) Load 8(invocation)
+             536:     36(ptr) AccessChain 31(data) 34 34 35
+             537:   22(float) Load 536
+             538:   17(ivec4) Load 19(ballot)
+             539:   22(float) GroupNonUniformFMax 178 PartitionedReduceNV 537 538
+             540:     36(ptr) AccessChain 31(data) 535 34 35
+                              Store 540 539
+             541:      6(int) Load 8(invocation)
+             542:     44(ptr) AccessChain 31(data) 63 34
+             543:   23(fvec4) Load 542
+             544:   43(fvec2) VectorShuffle 543 543 0 1
+             545:   17(ivec4) Load 19(ballot)
+             546:   43(fvec2) GroupNonUniformFMax 178 PartitionedReduceNV 544 545
+             547:     44(ptr) AccessChain 31(data) 541 34
+             548:   23(fvec4) Load 547
+             549:   23(fvec4) VectorShuffle 548 546 4 5 2 3
+                              Store 547 549
+             550:      6(int) Load 8(invocation)
+             551:     44(ptr) AccessChain 31(data) 33 34
+             552:   23(fvec4) Load 551
+             553:   51(fvec3) VectorShuffle 552 552 0 1 2
+             554:   17(ivec4) Load 19(ballot)
+             555:   51(fvec3) GroupNonUniformFMax 178 PartitionedReduceNV 553 554
+             556:     44(ptr) AccessChain 31(data) 550 34
+             557:   23(fvec4) Load 556
+             558:   23(fvec4) VectorShuffle 557 555 4 5 6 3
+                              Store 556 558
+             559:      6(int) Load 8(invocation)
+             560:     44(ptr) AccessChain 31(data) 115 34
+             561:   23(fvec4) Load 560
+             562:   17(ivec4) Load 19(ballot)
+             563:   23(fvec4) GroupNonUniformFMax 178 PartitionedReduceNV 561 562
+             564:     44(ptr) AccessChain 31(data) 559 34
+                              Store 564 563
+             565:      6(int) Load 8(invocation)
+             566:     64(ptr) AccessChain 31(data) 34 63 35
+             567:     24(int) Load 566
+             568:   17(ivec4) Load 19(ballot)
+             569:     24(int) GroupNonUniformSMax 178 PartitionedReduceNV 567 568
+             570:     64(ptr) AccessChain 31(data) 565 63 35
+                              Store 570 569
+             571:      6(int) Load 8(invocation)
+             572:     71(ptr) AccessChain 31(data) 63 63
+             573:   25(ivec4) Load 572
+             574:   70(ivec2) VectorShuffle 573 573 0 1
+             575:   17(ivec4) Load 19(ballot)
+             576:   70(ivec2) GroupNonUniformSMax 178 PartitionedReduceNV 574 575
+             577:     71(ptr) AccessChain 31(data) 571 63
+             578:   25(ivec4) Load 577
+             579:   25(ivec4) VectorShuffle 578 576 4 5 2 3
+                              Store 577 579
+             580:      6(int) Load 8(invocation)
+             581:     71(ptr) AccessChain 31(data) 33 63
+             582:   25(ivec4) Load 581
+             583:   78(ivec3) VectorShuffle 582 582 0 1 2
+             584:   17(ivec4) Load 19(ballot)
+             585:   78(ivec3) GroupNonUniformSMax 178 PartitionedReduceNV 583 584
+             586:     71(ptr) AccessChain 31(data) 580 63
+             587:   25(ivec4) Load 586
+             588:   25(ivec4) VectorShuffle 587 585 4 5 6 3
+                              Store 586 588
+             589:      6(int) Load 8(invocation)
+             590:     71(ptr) AccessChain 31(data) 115 63
+             591:   25(ivec4) Load 590
+             592:   17(ivec4) Load 19(ballot)
+             593:   25(ivec4) GroupNonUniformSMax 178 PartitionedReduceNV 591 592
+             594:     71(ptr) AccessChain 31(data) 589 63
+                              Store 594 593
+             595:      6(int) Load 8(invocation)
+             596:     90(ptr) AccessChain 31(data) 34 33 35
+             597:      6(int) Load 596
+             598:   17(ivec4) Load 19(ballot)
+             599:      6(int) GroupNonUniformUMax 178 PartitionedReduceNV 597 598
+             600:     90(ptr) AccessChain 31(data) 595 33 35
+                              Store 600 599
+             601:      6(int) Load 8(invocation)
+             602:     40(ptr) AccessChain 31(data) 63 33
+             603:   17(ivec4) Load 602
+             604:   96(ivec2) VectorShuffle 603 603 0 1
+             605:   17(ivec4) Load 19(ballot)
+             606:   96(ivec2) GroupNonUniformUMax 178 PartitionedReduceNV 604 605
+             607:     40(ptr) AccessChain 31(data) 601 33
+             608:   17(ivec4) Load 607
+             609:   17(ivec4) VectorShuffle 608 606 4 5 2 3
+                              Store 607 609
+             610:      6(int) Load 8(invocation)
+             611:     40(ptr) AccessChain 31(data) 33 33
+             612:   17(ivec4) Load 611
+             613:  103(ivec3) VectorShuffle 612 612 0 1 2
+             614:   17(ivec4) Load 19(ballot)
+             615:  103(ivec3) GroupNonUniformUMax 178 PartitionedReduceNV 613 614
+             616:     40(ptr) AccessChain 31(data) 610 33
+             617:   17(ivec4) Load 616
+             618:   17(ivec4) VectorShuffle 617 615 4 5 6 3
+                              Store 616 618
+             619:      6(int) Load 8(invocation)
+             620:     40(ptr) AccessChain 31(data) 115 33
+             621:   17(ivec4) Load 620
+             622:   17(ivec4) Load 19(ballot)
+             623:   17(ivec4) GroupNonUniformUMax 178 PartitionedReduceNV 621 622
+             624:     40(ptr) AccessChain 31(data) 619 33
+                              Store 624 623
+             625:      6(int) Load 8(invocation)
+             626:    116(ptr) AccessChain 31(data) 34 115 35
+             627:   26(float) Load 626
+             628:   17(ivec4) Load 19(ballot)
+             629:   26(float) GroupNonUniformFMax 178 PartitionedReduceNV 627 628
+             630:    116(ptr) AccessChain 31(data) 625 115 35
+                              Store 630 629
+             631:      6(int) Load 8(invocation)
+             632:    123(ptr) AccessChain 31(data) 63 115
+             633:   27(fvec4) Load 632
+             634:  122(fvec2) VectorShuffle 633 633 0 1
+             635:   17(ivec4) Load 19(ballot)
+             636:  122(fvec2) GroupNonUniformFMax 178 PartitionedReduceNV 634 635
+             637:    123(ptr) AccessChain 31(data) 631 115
+             638:   27(fvec4) Load 637
+             639:   27(fvec4) VectorShuffle 638 636 4 5 2 3
+                              Store 637 639
+             640:      6(int) Load 8(invocation)
+             641:    123(ptr) AccessChain 31(data) 33 115
+             642:   27(fvec4) Load 641
+             643:  130(fvec3) VectorShuffle 642 642 0 1 2
+             644:   17(ivec4) Load 19(ballot)
+             645:  130(fvec3) GroupNonUniformFMax 178 PartitionedReduceNV 643 644
+             646:    123(ptr) AccessChain 31(data) 640 115
+             647:   27(fvec4) Load 646
+             648:   27(fvec4) VectorShuffle 647 645 4 5 6 3
+                              Store 646 648
+             649:      6(int) Load 8(invocation)
+             650:    123(ptr) AccessChain 31(data) 115 115
+             651:   27(fvec4) Load 650
+             652:   17(ivec4) Load 19(ballot)
+             653:   27(fvec4) GroupNonUniformFMax 178 PartitionedReduceNV 651 652
+             654:    123(ptr) AccessChain 31(data) 649 115
+                              Store 654 653
+             655:      6(int) Load 8(invocation)
+             656:     64(ptr) AccessChain 31(data) 34 63 35
+             657:     24(int) Load 656
+             658:   17(ivec4) Load 19(ballot)
+             659:     24(int) GroupNonUniformBitwiseAnd 178 PartitionedReduceNV 657 658
+             660:     64(ptr) AccessChain 31(data) 655 63 35
+                              Store 660 659
+             661:      6(int) Load 8(invocation)
+             662:     71(ptr) AccessChain 31(data) 63 63
+             663:   25(ivec4) Load 662
+             664:   70(ivec2) VectorShuffle 663 663 0 1
+             665:   17(ivec4) Load 19(ballot)
+             666:   70(ivec2) GroupNonUniformBitwiseAnd 178 PartitionedReduceNV 664 665
+             667:     71(ptr) AccessChain 31(data) 661 63
+             668:   25(ivec4) Load 667
+             669:   25(ivec4) VectorShuffle 668 666 4 5 2 3
+                              Store 667 669
+             670:      6(int) Load 8(invocation)
+             671:     71(ptr) AccessChain 31(data) 33 63
+             672:   25(ivec4) Load 671
+             673:   78(ivec3) VectorShuffle 672 672 0 1 2
+             674:   17(ivec4) Load 19(ballot)
+             675:   78(ivec3) GroupNonUniformBitwiseAnd 178 PartitionedReduceNV 673 674
+             676:     71(ptr) AccessChain 31(data) 670 63
+             677:   25(ivec4) Load 676
+             678:   25(ivec4) VectorShuffle 677 675 4 5 6 3
+                              Store 676 678
+             679:      6(int) Load 8(invocation)
+             680:     71(ptr) AccessChain 31(data) 115 63
+             681:   25(ivec4) Load 680
+             682:   17(ivec4) Load 19(ballot)
+             683:   25(ivec4) GroupNonUniformBitwiseAnd 178 PartitionedReduceNV 681 682
+             684:     71(ptr) AccessChain 31(data) 679 63
+                              Store 684 683
+             685:      6(int) Load 8(invocation)
+             686:     90(ptr) AccessChain 31(data) 34 33 35
+             687:      6(int) Load 686
+             688:   17(ivec4) Load 19(ballot)
+             689:      6(int) GroupNonUniformBitwiseAnd 178 PartitionedReduceNV 687 688
+             690:     90(ptr) AccessChain 31(data) 685 33 35
+                              Store 690 689
+             691:      6(int) Load 8(invocation)
+             692:     40(ptr) AccessChain 31(data) 63 33
+             693:   17(ivec4) Load 692
+             694:   96(ivec2) VectorShuffle 693 693 0 1
+             695:   17(ivec4) Load 19(ballot)
+             696:   96(ivec2) GroupNonUniformBitwiseAnd 178 PartitionedReduceNV 694 695
+             697:     40(ptr) AccessChain 31(data) 691 33
+             698:   17(ivec4) Load 697
+             699:   17(ivec4) VectorShuffle 698 696 4 5 2 3
+                              Store 697 699
+             700:      6(int) Load 8(invocation)
+             701:     40(ptr) AccessChain 31(data) 33 33
+             702:   17(ivec4) Load 701
+             703:  103(ivec3) VectorShuffle 702 702 0 1 2
+             704:   17(ivec4) Load 19(ballot)
+             705:  103(ivec3) GroupNonUniformBitwiseAnd 178 PartitionedReduceNV 703 704
+             706:     40(ptr) AccessChain 31(data) 700 33
+             707:   17(ivec4) Load 706
+             708:   17(ivec4) VectorShuffle 707 705 4 5 6 3
+                              Store 706 708
+             709:      6(int) Load 8(invocation)
+             710:     40(ptr) AccessChain 31(data) 115 33
+             711:   17(ivec4) Load 710
+             712:   17(ivec4) Load 19(ballot)
+             713:   17(ivec4) GroupNonUniformBitwiseAnd 178 PartitionedReduceNV 711 712
+             714:     40(ptr) AccessChain 31(data) 709 33
+                              Store 714 713
+             715:      6(int) Load 8(invocation)
+             716:     64(ptr) AccessChain 31(data) 34 63 35
+             717:     24(int) Load 716
+             718:   144(bool) SLessThan 717 34
+             719:   17(ivec4) Load 19(ballot)
+             720:   144(bool) GroupNonUniformLogicalAnd 178 PartitionedReduceNV 718 719
+             721:     24(int) Select 720 63 34
+             722:     64(ptr) AccessChain 31(data) 715 63 35
+                              Store 722 721
+             723:      6(int) Load 8(invocation)
+             724:     71(ptr) AccessChain 31(data) 63 63
+             725:   25(ivec4) Load 724
+             726:   70(ivec2) VectorShuffle 725 725 0 1
+             728:  152(bvec2) SLessThan 726 727
+             729:   17(ivec4) Load 19(ballot)
+             730:  152(bvec2) GroupNonUniformLogicalAnd 178 PartitionedReduceNV 728 729
+             732:   70(ivec2) Select 730 731 727
+             733:     71(ptr) AccessChain 31(data) 723 63
+             734:   25(ivec4) Load 733
+             735:   25(ivec4) VectorShuffle 734 732 4 5 2 3
+                              Store 733 735
+             736:      6(int) Load 8(invocation)
+             737:     71(ptr) AccessChain 31(data) 63 63
+             738:   25(ivec4) Load 737
+             739:   78(ivec3) VectorShuffle 738 738 0 1 2
+             741:  161(bvec3) SLessThan 739 740
+             742:   17(ivec4) Load 19(ballot)
+             743:  161(bvec3) GroupNonUniformLogicalAnd 178 PartitionedReduceNV 741 742
+             745:   78(ivec3) Select 743 744 740
+             746:     71(ptr) AccessChain 31(data) 736 63
+             747:   25(ivec4) Load 746
+             748:   25(ivec4) VectorShuffle 747 745 4 5 6 3
+                              Store 746 748
+             749:      6(int) Load 8(invocation)
+             750:     71(ptr) AccessChain 31(data) 63 63
+             751:   25(ivec4) Load 750
+             753:  169(bvec4) SLessThan 751 752
+             754:   17(ivec4) Load 19(ballot)
+             755:  169(bvec4) GroupNonUniformLogicalAnd 178 PartitionedReduceNV 753 754
+             757:   25(ivec4) Select 755 756 752
+             758:     71(ptr) AccessChain 31(data) 749 63
+                              Store 758 757
+             759:      6(int) Load 8(invocation)
+             760:     64(ptr) AccessChain 31(data) 34 63 35
+             761:     24(int) Load 760
+             762:   17(ivec4) Load 19(ballot)
+             763:     24(int) GroupNonUniformBitwiseOr 178 PartitionedReduceNV 761 762
+             764:     64(ptr) AccessChain 31(data) 759 63 35
+                              Store 764 763
+             765:      6(int) Load 8(invocation)
+             766:     71(ptr) AccessChain 31(data) 63 63
+             767:   25(ivec4) Load 766
+             768:   70(ivec2) VectorShuffle 767 767 0 1
+             769:   17(ivec4) Load 19(ballot)
+             770:   70(ivec2) GroupNonUniformBitwiseOr 178 PartitionedReduceNV 768 769
+             771:     71(ptr) AccessChain 31(data) 765 63
+             772:   25(ivec4) Load 771
+             773:   25(ivec4) VectorShuffle 772 770 4 5 2 3
+                              Store 771 773
+             774:      6(int) Load 8(invocation)
+             775:     71(ptr) AccessChain 31(data) 33 63
+             776:   25(ivec4) Load 775
+             777:   78(ivec3) VectorShuffle 776 776 0 1 2
+             778:   17(ivec4) Load 19(ballot)
+             779:   78(ivec3) GroupNonUniformBitwiseOr 178 PartitionedReduceNV 777 778
+             780:     71(ptr) AccessChain 31(data) 774 63
+             781:   25(ivec4) Load 780
+             782:   25(ivec4) VectorShuffle 781 779 4 5 6 3
+                              Store 780 782
+             783:      6(int) Load 8(invocation)
+             784:     71(ptr) AccessChain 31(data) 115 63
+             785:   25(ivec4) Load 784
+             786:   17(ivec4) Load 19(ballot)
+             787:   25(ivec4) GroupNonUniformBitwiseOr 178 PartitionedReduceNV 785 786
+             788:     71(ptr) AccessChain 31(data) 783 63
+                              Store 788 787
+             789:      6(int) Load 8(invocation)
+             790:     90(ptr) AccessChain 31(data) 34 33 35
+             791:      6(int) Load 790
+             792:   17(ivec4) Load 19(ballot)
+             793:      6(int) GroupNonUniformBitwiseOr 178 PartitionedReduceNV 791 792
+             794:     90(ptr) AccessChain 31(data) 789 33 35
+                              Store 794 793
+             795:      6(int) Load 8(invocation)
+             796:     40(ptr) AccessChain 31(data) 63 33
+             797:   17(ivec4) Load 796
+             798:   96(ivec2) VectorShuffle 797 797 0 1
+             799:   17(ivec4) Load 19(ballot)
+             800:   96(ivec2) GroupNonUniformBitwiseOr 178 PartitionedReduceNV 798 799
+             801:     40(ptr) AccessChain 31(data) 795 33
+             802:   17(ivec4) Load 801
+             803:   17(ivec4) VectorShuffle 802 800 4 5 2 3
+                              Store 801 803
+             804:      6(int) Load 8(invocation)
+             805:     40(ptr) AccessChain 31(data) 33 33
+             806:   17(ivec4) Load 805
+             807:  103(ivec3) VectorShuffle 806 806 0 1 2
+             808:   17(ivec4) Load 19(ballot)
+             809:  103(ivec3) GroupNonUniformBitwiseOr 178 PartitionedReduceNV 807 808
+             810:     40(ptr) AccessChain 31(data) 804 33
+             811:   17(ivec4) Load 810
+             812:   17(ivec4) VectorShuffle 811 809 4 5 6 3
+                              Store 810 812
+             813:      6(int) Load 8(invocation)
+             814:     40(ptr) AccessChain 31(data) 115 33
+             815:   17(ivec4) Load 814
+             816:   17(ivec4) Load 19(ballot)
+             817:   17(ivec4) GroupNonUniformBitwiseOr 178 PartitionedReduceNV 815 816
+             818:     40(ptr) AccessChain 31(data) 813 33
+                              Store 818 817
+             819:      6(int) Load 8(invocation)
+             820:     64(ptr) AccessChain 31(data) 34 63 35
+             821:     24(int) Load 820
+             822:   144(bool) SLessThan 821 34
+             823:   17(ivec4) Load 19(ballot)
+             824:   144(bool) GroupNonUniformLogicalOr 178 PartitionedReduceNV 822 823
+             825:     24(int) Select 824 63 34
+             826:     64(ptr) AccessChain 31(data) 819 63 35
+                              Store 826 825
+             827:      6(int) Load 8(invocation)
+             828:     71(ptr) AccessChain 31(data) 63 63
+             829:   25(ivec4) Load 828
+             830:   70(ivec2) VectorShuffle 829 829 0 1
+             831:  152(bvec2) SLessThan 830 727
+             832:   17(ivec4) Load 19(ballot)
+             833:  152(bvec2) GroupNonUniformLogicalOr 178 PartitionedReduceNV 831 832
+             834:   70(ivec2) Select 833 731 727
+             835:     71(ptr) AccessChain 31(data) 827 63
+             836:   25(ivec4) Load 835
+             837:   25(ivec4) VectorShuffle 836 834 4 5 2 3
+                              Store 835 837
+             838:      6(int) Load 8(invocation)
+             839:     71(ptr) AccessChain 31(data) 63 63
+             840:   25(ivec4) Load 839
+             841:   78(ivec3) VectorShuffle 840 840 0 1 2
+             842:  161(bvec3) SLessThan 841 740
+             843:   17(ivec4) Load 19(ballot)
+             844:  161(bvec3) GroupNonUniformLogicalOr 178 PartitionedReduceNV 842 843
+             845:   78(ivec3) Select 844 744 740
+             846:     71(ptr) AccessChain 31(data) 838 63
+             847:   25(ivec4) Load 846
+             848:   25(ivec4) VectorShuffle 847 845 4 5 6 3
+                              Store 846 848
+             849:      6(int) Load 8(invocation)
+             850:     71(ptr) AccessChain 31(data) 63 63
+             851:   25(ivec4) Load 850
+             852:  169(bvec4) SLessThan 851 752
+             853:   17(ivec4) Load 19(ballot)
+             854:  169(bvec4) GroupNonUniformLogicalOr 178 PartitionedReduceNV 852 853
+             855:   25(ivec4) Select 854 756 752
+             856:     71(ptr) AccessChain 31(data) 849 63
+                              Store 856 855
+             857:      6(int) Load 8(invocation)
+             858:     64(ptr) AccessChain 31(data) 34 63 35
+             859:     24(int) Load 858
+             860:   17(ivec4) Load 19(ballot)
+             861:     24(int) GroupNonUniformBitwiseXor 178 PartitionedReduceNV 859 860
+             862:     64(ptr) AccessChain 31(data) 857 63 35
+                              Store 862 861
+             863:      6(int) Load 8(invocation)
+             864:     71(ptr) AccessChain 31(data) 63 63
+             865:   25(ivec4) Load 864
+             866:   70(ivec2) VectorShuffle 865 865 0 1
+             867:   17(ivec4) Load 19(ballot)
+             868:   70(ivec2) GroupNonUniformBitwiseXor 178 PartitionedReduceNV 866 867
+             869:     71(ptr) AccessChain 31(data) 863 63
+             870:   25(ivec4) Load 869
+             871:   25(ivec4) VectorShuffle 870 868 4 5 2 3
+                              Store 869 871
+             872:      6(int) Load 8(invocation)
+             873:     71(ptr) AccessChain 31(data) 33 63
+             874:   25(ivec4) Load 873
+             875:   78(ivec3) VectorShuffle 874 874 0 1 2
+             876:   17(ivec4) Load 19(ballot)
+             877:   78(ivec3) GroupNonUniformBitwiseXor 178 PartitionedReduceNV 875 876
+             878:     71(ptr) AccessChain 31(data) 872 63
+             879:   25(ivec4) Load 878
+             880:   25(ivec4) VectorShuffle 879 877 4 5 6 3
+                              Store 878 880
+             881:      6(int) Load 8(invocation)
+             882:     71(ptr) AccessChain 31(data) 115 63
+             883:   25(ivec4) Load 882
+             884:   17(ivec4) Load 19(ballot)
+             885:   25(ivec4) GroupNonUniformBitwiseXor 178 PartitionedReduceNV 883 884
+             886:     71(ptr) AccessChain 31(data) 881 63
+                              Store 886 885
+             887:      6(int) Load 8(invocation)
+             888:     90(ptr) AccessChain 31(data) 34 33 35
+             889:      6(int) Load 888
+             890:   17(ivec4) Load 19(ballot)
+             891:      6(int) GroupNonUniformBitwiseXor 178 PartitionedReduceNV 889 890
+             892:     90(ptr) AccessChain 31(data) 887 33 35
+                              Store 892 891
+             893:      6(int) Load 8(invocation)
+             894:     40(ptr) AccessChain 31(data) 63 33
+             895:   17(ivec4) Load 894
+             896:   96(ivec2) VectorShuffle 895 895 0 1
+             897:   17(ivec4) Load 19(ballot)
+             898:   96(ivec2) GroupNonUniformBitwiseXor 178 PartitionedReduceNV 896 897
+             899:     40(ptr) AccessChain 31(data) 893 33
+             900:   17(ivec4) Load 899
+             901:   17(ivec4) VectorShuffle 900 898 4 5 2 3
+                              Store 899 901
+             902:      6(int) Load 8(invocation)
+             903:     40(ptr) AccessChain 31(data) 33 33
+             904:   17(ivec4) Load 903
+             905:  103(ivec3) VectorShuffle 904 904 0 1 2
+             906:   17(ivec4) Load 19(ballot)
+             907:  103(ivec3) GroupNonUniformBitwiseXor 178 PartitionedReduceNV 905 906
+             908:     40(ptr) AccessChain 31(data) 902 33
+             909:   17(ivec4) Load 908
+             910:   17(ivec4) VectorShuffle 909 907 4 5 6 3
+                              Store 908 910
+             911:      6(int) Load 8(invocation)
+             912:     40(ptr) AccessChain 31(data) 115 33
+             913:   17(ivec4) Load 912
+             914:   17(ivec4) Load 19(ballot)
+             915:   17(ivec4) GroupNonUniformBitwiseXor 178 PartitionedReduceNV 913 914
+             916:     40(ptr) AccessChain 31(data) 911 33
+                              Store 916 915
+             917:      6(int) Load 8(invocation)
+             918:     64(ptr) AccessChain 31(data) 34 63 35
+             919:     24(int) Load 918
+             920:   144(bool) SLessThan 919 34
+             921:   17(ivec4) Load 19(ballot)
+             922:   144(bool) GroupNonUniformLogicalXor 178 PartitionedReduceNV 920 921
+             923:     24(int) Select 922 63 34
+             924:     64(ptr) AccessChain 31(data) 917 63 35
+                              Store 924 923
+             925:      6(int) Load 8(invocation)
+             926:     71(ptr) AccessChain 31(data) 63 63
+             927:   25(ivec4) Load 926
+             928:   70(ivec2) VectorShuffle 927 927 0 1
+             929:  152(bvec2) SLessThan 928 727
+             930:   17(ivec4) Load 19(ballot)
+             931:  152(bvec2) GroupNonUniformLogicalXor 178 PartitionedReduceNV 929 930
+             932:   70(ivec2) Select 931 731 727
+             933:     71(ptr) AccessChain 31(data) 925 63
+             934:   25(ivec4) Load 933
+             935:   25(ivec4) VectorShuffle 934 932 4 5 2 3
+                              Store 933 935
+             936:      6(int) Load 8(invocation)
+             937:     71(ptr) AccessChain 31(data) 63 63
+             938:   25(ivec4) Load 937
+             939:   78(ivec3) VectorShuffle 938 938 0 1 2
+             940:  161(bvec3) SLessThan 939 740
+             941:   17(ivec4) Load 19(ballot)
+             942:  161(bvec3) GroupNonUniformLogicalXor 178 PartitionedReduceNV 940 941
+             943:   78(ivec3) Select 942 744 740
+             944:     71(ptr) AccessChain 31(data) 936 63
+             945:   25(ivec4) Load 944
+             946:   25(ivec4) VectorShuffle 945 943 4 5 6 3
+                              Store 944 946
+             947:      6(int) Load 8(invocation)
+             948:     71(ptr) AccessChain 31(data) 63 63
+             949:   25(ivec4) Load 948
+             950:  169(bvec4) SLessThan 949 752
+             951:   17(ivec4) Load 19(ballot)
+             952:  169(bvec4) GroupNonUniformLogicalXor 178 PartitionedReduceNV 950 951
+             953:   25(ivec4) Select 952 756 752
+             954:     71(ptr) AccessChain 31(data) 947 63
+                              Store 954 953
+             955:      6(int) Load 8(invocation)
+             956:     36(ptr) AccessChain 31(data) 34 34 35
+             957:   22(float) Load 956
+             958:   17(ivec4) Load 19(ballot)
+             959:   22(float) GroupNonUniformFAdd 178 PartitionedInclusiveScanNV 957 958
+             960:     36(ptr) AccessChain 31(data) 955 34 35
+                              Store 960 959
+             961:      6(int) Load 8(invocation)
+             962:     44(ptr) AccessChain 31(data) 63 34
+             963:   23(fvec4) Load 962
+             964:   43(fvec2) VectorShuffle 963 963 0 1
+             965:   17(ivec4) Load 19(ballot)
+             966:   43(fvec2) GroupNonUniformFAdd 178 PartitionedInclusiveScanNV 964 965
+             967:     44(ptr) AccessChain 31(data) 961 34
+             968:   23(fvec4) Load 967
+             969:   23(fvec4) VectorShuffle 968 966 4 5 2 3
+                              Store 967 969
+             970:      6(int) Load 8(invocation)
+             971:     44(ptr) AccessChain 31(data) 33 34
+             972:   23(fvec4) Load 971
+             973:   51(fvec3) VectorShuffle 972 972 0 1 2
+             974:   17(ivec4) Load 19(ballot)
+             975:   51(fvec3) GroupNonUniformFAdd 178 PartitionedInclusiveScanNV 973 974
+             976:     44(ptr) AccessChain 31(data) 970 34
+             977:   23(fvec4) Load 976
+             978:   23(fvec4) VectorShuffle 977 975 4 5 6 3
+                              Store 976 978
+             979:      6(int) Load 8(invocation)
+             980:     44(ptr) AccessChain 31(data) 115 34
+             981:   23(fvec4) Load 980
+             982:   17(ivec4) Load 19(ballot)
+             983:   23(fvec4) GroupNonUniformFAdd 178 PartitionedInclusiveScanNV 981 982
+             984:     44(ptr) AccessChain 31(data) 979 34
+                              Store 984 983
+             985:      6(int) Load 8(invocation)
+             986:     64(ptr) AccessChain 31(data) 34 63 35
+             987:     24(int) Load 986
+             988:   17(ivec4) Load 19(ballot)
+             989:     24(int) GroupNonUniformIAdd 178 PartitionedInclusiveScanNV 987 988
+             990:     64(ptr) AccessChain 31(data) 985 63 35
+                              Store 990 989
+             991:      6(int) Load 8(invocation)
+             992:     71(ptr) AccessChain 31(data) 63 63
+             993:   25(ivec4) Load 992
+             994:   70(ivec2) VectorShuffle 993 993 0 1
+             995:   17(ivec4) Load 19(ballot)
+             996:   70(ivec2) GroupNonUniformIAdd 178 PartitionedInclusiveScanNV 994 995
+             997:     71(ptr) AccessChain 31(data) 991 63
+             998:   25(ivec4) Load 997
+             999:   25(ivec4) VectorShuffle 998 996 4 5 2 3
+                              Store 997 999
+            1000:      6(int) Load 8(invocation)
+            1001:     71(ptr) AccessChain 31(data) 33 63
+            1002:   25(ivec4) Load 1001
+            1003:   78(ivec3) VectorShuffle 1002 1002 0 1 2
+            1004:   17(ivec4) Load 19(ballot)
+            1005:   78(ivec3) GroupNonUniformIAdd 178 PartitionedInclusiveScanNV 1003 1004
+            1006:     71(ptr) AccessChain 31(data) 1000 63
+            1007:   25(ivec4) Load 1006
+            1008:   25(ivec4) VectorShuffle 1007 1005 4 5 6 3
+                              Store 1006 1008
+            1009:      6(int) Load 8(invocation)
+            1010:     71(ptr) AccessChain 31(data) 115 63
+            1011:   25(ivec4) Load 1010
+            1012:   17(ivec4) Load 19(ballot)
+            1013:   25(ivec4) GroupNonUniformIAdd 178 PartitionedInclusiveScanNV 1011 1012
+            1014:     71(ptr) AccessChain 31(data) 1009 63
+                              Store 1014 1013
+            1015:      6(int) Load 8(invocation)
+            1016:     90(ptr) AccessChain 31(data) 34 33 35
+            1017:      6(int) Load 1016
+            1018:   17(ivec4) Load 19(ballot)
+            1019:      6(int) GroupNonUniformIAdd 178 PartitionedInclusiveScanNV 1017 1018
+            1020:     90(ptr) AccessChain 31(data) 1015 33 35
+                              Store 1020 1019
+            1021:      6(int) Load 8(invocation)
+            1022:     40(ptr) AccessChain 31(data) 63 33
+            1023:   17(ivec4) Load 1022
+            1024:   96(ivec2) VectorShuffle 1023 1023 0 1
+            1025:   17(ivec4) Load 19(ballot)
+            1026:   96(ivec2) GroupNonUniformIAdd 178 PartitionedInclusiveScanNV 1024 1025
+            1027:     40(ptr) AccessChain 31(data) 1021 33
+            1028:   17(ivec4) Load 1027
+            1029:   17(ivec4) VectorShuffle 1028 1026 4 5 2 3
+                              Store 1027 1029
+            1030:      6(int) Load 8(invocation)
+            1031:     40(ptr) AccessChain 31(data) 33 33
+            1032:   17(ivec4) Load 1031
+            1033:  103(ivec3) VectorShuffle 1032 1032 0 1 2
+            1034:   17(ivec4) Load 19(ballot)
+            1035:  103(ivec3) GroupNonUniformIAdd 178 PartitionedInclusiveScanNV 1033 1034
+            1036:     40(ptr) AccessChain 31(data) 1030 33
+            1037:   17(ivec4) Load 1036
+            1038:   17(ivec4) VectorShuffle 1037 1035 4 5 6 3
+                              Store 1036 1038
+            1039:      6(int) Load 8(invocation)
+            1040:     40(ptr) AccessChain 31(data) 115 33
+            1041:   17(ivec4) Load 1040
+            1042:   17(ivec4) Load 19(ballot)
+            1043:   17(ivec4) GroupNonUniformIAdd 178 PartitionedInclusiveScanNV 1041 1042
+            1044:     40(ptr) AccessChain 31(data) 1039 33
+                              Store 1044 1043
+            1045:      6(int) Load 8(invocation)
+            1046:    116(ptr) AccessChain 31(data) 34 115 35
+            1047:   26(float) Load 1046
+            1048:   17(ivec4) Load 19(ballot)
+            1049:   26(float) GroupNonUniformFAdd 178 PartitionedInclusiveScanNV 1047 1048
+            1050:    116(ptr) AccessChain 31(data) 1045 115 35
+                              Store 1050 1049
+            1051:      6(int) Load 8(invocation)
+            1052:    123(ptr) AccessChain 31(data) 63 115
+            1053:   27(fvec4) Load 1052
+            1054:  122(fvec2) VectorShuffle 1053 1053 0 1
+            1055:   17(ivec4) Load 19(ballot)
+            1056:  122(fvec2) GroupNonUniformFAdd 178 PartitionedInclusiveScanNV 1054 1055
+            1057:    123(ptr) AccessChain 31(data) 1051 115
+            1058:   27(fvec4) Load 1057
+            1059:   27(fvec4) VectorShuffle 1058 1056 4 5 2 3
+                              Store 1057 1059
+            1060:      6(int) Load 8(invocation)
+            1061:    123(ptr) AccessChain 31(data) 33 115
+            1062:   27(fvec4) Load 1061
+            1063:  130(fvec3) VectorShuffle 1062 1062 0 1 2
+            1064:   17(ivec4) Load 19(ballot)
+            1065:  130(fvec3) GroupNonUniformFAdd 178 PartitionedInclusiveScanNV 1063 1064
+            1066:    123(ptr) AccessChain 31(data) 1060 115
+            1067:   27(fvec4) Load 1066
+            1068:   27(fvec4) VectorShuffle 1067 1065 4 5 6 3
+                              Store 1066 1068
+            1069:      6(int) Load 8(invocation)
+            1070:    123(ptr) AccessChain 31(data) 115 115
+            1071:   27(fvec4) Load 1070
+            1072:   17(ivec4) Load 19(ballot)
+            1073:   27(fvec4) GroupNonUniformFAdd 178 PartitionedInclusiveScanNV 1071 1072
+            1074:    123(ptr) AccessChain 31(data) 1069 115
+                              Store 1074 1073
+            1075:      6(int) Load 8(invocation)
+            1076:     36(ptr) AccessChain 31(data) 34 34 35
+            1077:   22(float) Load 1076
+            1078:   17(ivec4) Load 19(ballot)
+            1079:   22(float) GroupNonUniformFMul 178 PartitionedInclusiveScanNV 1077 1078
+            1080:     36(ptr) AccessChain 31(data) 1075 34 35
+                              Store 1080 1079
+            1081:      6(int) Load 8(invocation)
+            1082:     44(ptr) AccessChain 31(data) 63 34
+            1083:   23(fvec4) Load 1082
+            1084:   43(fvec2) VectorShuffle 1083 1083 0 1
+            1085:   17(ivec4) Load 19(ballot)
+            1086:   43(fvec2) GroupNonUniformFMul 178 PartitionedInclusiveScanNV 1084 1085
+            1087:     44(ptr) AccessChain 31(data) 1081 34
+            1088:   23(fvec4) Load 1087
+            1089:   23(fvec4) VectorShuffle 1088 1086 4 5 2 3
+                              Store 1087 1089
+            1090:      6(int) Load 8(invocation)
+            1091:     44(ptr) AccessChain 31(data) 33 34
+            1092:   23(fvec4) Load 1091
+            1093:   51(fvec3) VectorShuffle 1092 1092 0 1 2
+            1094:   17(ivec4) Load 19(ballot)
+            1095:   51(fvec3) GroupNonUniformFMul 178 PartitionedInclusiveScanNV 1093 1094
+            1096:     44(ptr) AccessChain 31(data) 1090 34
+            1097:   23(fvec4) Load 1096
+            1098:   23(fvec4) VectorShuffle 1097 1095 4 5 6 3
+                              Store 1096 1098
+            1099:      6(int) Load 8(invocation)
+            1100:     44(ptr) AccessChain 31(data) 115 34
+            1101:   23(fvec4) Load 1100
+            1102:   17(ivec4) Load 19(ballot)
+            1103:   23(fvec4) GroupNonUniformFMul 178 PartitionedInclusiveScanNV 1101 1102
+            1104:     44(ptr) AccessChain 31(data) 1099 34
+                              Store 1104 1103
+            1105:      6(int) Load 8(invocation)
+            1106:     64(ptr) AccessChain 31(data) 34 63 35
+            1107:     24(int) Load 1106
+            1108:   17(ivec4) Load 19(ballot)
+            1109:     24(int) GroupNonUniformIMul 178 PartitionedInclusiveScanNV 1107 1108
+            1110:     64(ptr) AccessChain 31(data) 1105 63 35
+                              Store 1110 1109
+            1111:      6(int) Load 8(invocation)
+            1112:     71(ptr) AccessChain 31(data) 63 63
+            1113:   25(ivec4) Load 1112
+            1114:   70(ivec2) VectorShuffle 1113 1113 0 1
+            1115:   17(ivec4) Load 19(ballot)
+            1116:   70(ivec2) GroupNonUniformIMul 178 PartitionedInclusiveScanNV 1114 1115
+            1117:     71(ptr) AccessChain 31(data) 1111 63
+            1118:   25(ivec4) Load 1117
+            1119:   25(ivec4) VectorShuffle 1118 1116 4 5 2 3
+                              Store 1117 1119
+            1120:      6(int) Load 8(invocation)
+            1121:     71(ptr) AccessChain 31(data) 33 63
+            1122:   25(ivec4) Load 1121
+            1123:   78(ivec3) VectorShuffle 1122 1122 0 1 2
+            1124:   17(ivec4) Load 19(ballot)
+            1125:   78(ivec3) GroupNonUniformIMul 178 PartitionedInclusiveScanNV 1123 1124
+            1126:     71(ptr) AccessChain 31(data) 1120 63
+            1127:   25(ivec4) Load 1126
+            1128:   25(ivec4) VectorShuffle 1127 1125 4 5 6 3
+                              Store 1126 1128
+            1129:      6(int) Load 8(invocation)
+            1130:     71(ptr) AccessChain 31(data) 115 63
+            1131:   25(ivec4) Load 1130
+            1132:   17(ivec4) Load 19(ballot)
+            1133:   25(ivec4) GroupNonUniformIMul 178 PartitionedInclusiveScanNV 1131 1132
+            1134:     71(ptr) AccessChain 31(data) 1129 63
+                              Store 1134 1133
+            1135:      6(int) Load 8(invocation)
+            1136:     90(ptr) AccessChain 31(data) 34 33 35
+            1137:      6(int) Load 1136
+            1138:   17(ivec4) Load 19(ballot)
+            1139:      6(int) GroupNonUniformIMul 178 PartitionedInclusiveScanNV 1137 1138
+            1140:     90(ptr) AccessChain 31(data) 1135 33 35
+                              Store 1140 1139
+            1141:      6(int) Load 8(invocation)
+            1142:     40(ptr) AccessChain 31(data) 63 33
+            1143:   17(ivec4) Load 1142
+            1144:   96(ivec2) VectorShuffle 1143 1143 0 1
+            1145:   17(ivec4) Load 19(ballot)
+            1146:   96(ivec2) GroupNonUniformIMul 178 PartitionedInclusiveScanNV 1144 1145
+            1147:     40(ptr) AccessChain 31(data) 1141 33
+            1148:   17(ivec4) Load 1147
+            1149:   17(ivec4) VectorShuffle 1148 1146 4 5 2 3
+                              Store 1147 1149
+            1150:      6(int) Load 8(invocation)
+            1151:     40(ptr) AccessChain 31(data) 33 33
+            1152:   17(ivec4) Load 1151
+            1153:  103(ivec3) VectorShuffle 1152 1152 0 1 2
+            1154:   17(ivec4) Load 19(ballot)
+            1155:  103(ivec3) GroupNonUniformIMul 178 PartitionedInclusiveScanNV 1153 1154
+            1156:     40(ptr) AccessChain 31(data) 1150 33
+            1157:   17(ivec4) Load 1156
+            1158:   17(ivec4) VectorShuffle 1157 1155 4 5 6 3
+                              Store 1156 1158
+            1159:      6(int) Load 8(invocation)
+            1160:     40(ptr) AccessChain 31(data) 115 33
+            1161:   17(ivec4) Load 1160
+            1162:   17(ivec4) Load 19(ballot)
+            1163:   17(ivec4) GroupNonUniformIMul 178 PartitionedInclusiveScanNV 1161 1162
+            1164:     40(ptr) AccessChain 31(data) 1159 33
+                              Store 1164 1163
+            1165:      6(int) Load 8(invocation)
+            1166:    116(ptr) AccessChain 31(data) 34 115 35
+            1167:   26(float) Load 1166
+            1168:   17(ivec4) Load 19(ballot)
+            1169:   26(float) GroupNonUniformFMul 178 PartitionedInclusiveScanNV 1167 1168
+            1170:    116(ptr) AccessChain 31(data) 1165 115 35
+                              Store 1170 1169
+            1171:      6(int) Load 8(invocation)
+            1172:    123(ptr) AccessChain 31(data) 63 115
+            1173:   27(fvec4) Load 1172
+            1174:  122(fvec2) VectorShuffle 1173 1173 0 1
+            1175:   17(ivec4) Load 19(ballot)
+            1176:  122(fvec2) GroupNonUniformFMul 178 PartitionedInclusiveScanNV 1174 1175
+            1177:    123(ptr) AccessChain 31(data) 1171 115
+            1178:   27(fvec4) Load 1177
+            1179:   27(fvec4) VectorShuffle 1178 1176 4 5 2 3
+                              Store 1177 1179
+            1180:      6(int) Load 8(invocation)
+            1181:    123(ptr) AccessChain 31(data) 33 115
+            1182:   27(fvec4) Load 1181
+            1183:  130(fvec3) VectorShuffle 1182 1182 0 1 2
+            1184:   17(ivec4) Load 19(ballot)
+            1185:  130(fvec3) GroupNonUniformFMul 178 PartitionedInclusiveScanNV 1183 1184
+            1186:    123(ptr) AccessChain 31(data) 1180 115
+            1187:   27(fvec4) Load 1186
+            1188:   27(fvec4) VectorShuffle 1187 1185 4 5 6 3
+                              Store 1186 1188
+            1189:      6(int) Load 8(invocation)
+            1190:    123(ptr) AccessChain 31(data) 115 115
+            1191:   27(fvec4) Load 1190
+            1192:   17(ivec4) Load 19(ballot)
+            1193:   27(fvec4) GroupNonUniformFMul 178 PartitionedInclusiveScanNV 1191 1192
+            1194:    123(ptr) AccessChain 31(data) 1189 115
+                              Store 1194 1193
+            1195:      6(int) Load 8(invocation)
+            1196:     36(ptr) AccessChain 31(data) 34 34 35
+            1197:   22(float) Load 1196
+            1198:   17(ivec4) Load 19(ballot)
+            1199:   22(float) GroupNonUniformFMin 178 PartitionedInclusiveScanNV 1197 1198
+            1200:     36(ptr) AccessChain 31(data) 1195 34 35
+                              Store 1200 1199
+            1201:      6(int) Load 8(invocation)
+            1202:     44(ptr) AccessChain 31(data) 63 34
+            1203:   23(fvec4) Load 1202
+            1204:   43(fvec2) VectorShuffle 1203 1203 0 1
+            1205:   17(ivec4) Load 19(ballot)
+            1206:   43(fvec2) GroupNonUniformFMin 178 PartitionedInclusiveScanNV 1204 1205
+            1207:     44(ptr) AccessChain 31(data) 1201 34
+            1208:   23(fvec4) Load 1207
+            1209:   23(fvec4) VectorShuffle 1208 1206 4 5 2 3
+                              Store 1207 1209
+            1210:      6(int) Load 8(invocation)
+            1211:     44(ptr) AccessChain 31(data) 33 34
+            1212:   23(fvec4) Load 1211
+            1213:   51(fvec3) VectorShuffle 1212 1212 0 1 2
+            1214:   17(ivec4) Load 19(ballot)
+            1215:   51(fvec3) GroupNonUniformFMin 178 PartitionedInclusiveScanNV 1213 1214
+            1216:     44(ptr) AccessChain 31(data) 1210 34
+            1217:   23(fvec4) Load 1216
+            1218:   23(fvec4) VectorShuffle 1217 1215 4 5 6 3
+                              Store 1216 1218
+            1219:      6(int) Load 8(invocation)
+            1220:     44(ptr) AccessChain 31(data) 115 34
+            1221:   23(fvec4) Load 1220
+            1222:   17(ivec4) Load 19(ballot)
+            1223:   23(fvec4) GroupNonUniformFMin 178 PartitionedInclusiveScanNV 1221 1222
+            1224:     44(ptr) AccessChain 31(data) 1219 34
+                              Store 1224 1223
+            1225:      6(int) Load 8(invocation)
+            1226:     64(ptr) AccessChain 31(data) 34 63 35
+            1227:     24(int) Load 1226
+            1228:   17(ivec4) Load 19(ballot)
+            1229:     24(int) GroupNonUniformSMin 178 PartitionedInclusiveScanNV 1227 1228
+            1230:     64(ptr) AccessChain 31(data) 1225 63 35
+                              Store 1230 1229
+            1231:      6(int) Load 8(invocation)
+            1232:     71(ptr) AccessChain 31(data) 63 63
+            1233:   25(ivec4) Load 1232
+            1234:   70(ivec2) VectorShuffle 1233 1233 0 1
+            1235:   17(ivec4) Load 19(ballot)
+            1236:   70(ivec2) GroupNonUniformSMin 178 PartitionedInclusiveScanNV 1234 1235
+            1237:     71(ptr) AccessChain 31(data) 1231 63
+            1238:   25(ivec4) Load 1237
+            1239:   25(ivec4) VectorShuffle 1238 1236 4 5 2 3
+                              Store 1237 1239
+            1240:      6(int) Load 8(invocation)
+            1241:     71(ptr) AccessChain 31(data) 33 63
+            1242:   25(ivec4) Load 1241
+            1243:   78(ivec3) VectorShuffle 1242 1242 0 1 2
+            1244:   17(ivec4) Load 19(ballot)
+            1245:   78(ivec3) GroupNonUniformSMin 178 PartitionedInclusiveScanNV 1243 1244
+            1246:     71(ptr) AccessChain 31(data) 1240 63
+            1247:   25(ivec4) Load 1246
+            1248:   25(ivec4) VectorShuffle 1247 1245 4 5 6 3
+                              Store 1246 1248
+            1249:      6(int) Load 8(invocation)
+            1250:     71(ptr) AccessChain 31(data) 115 63
+            1251:   25(ivec4) Load 1250
+            1252:   17(ivec4) Load 19(ballot)
+            1253:   25(ivec4) GroupNonUniformSMin 178 PartitionedInclusiveScanNV 1251 1252
+            1254:     71(ptr) AccessChain 31(data) 1249 63
+                              Store 1254 1253
+            1255:      6(int) Load 8(invocation)
+            1256:     90(ptr) AccessChain 31(data) 34 33 35
+            1257:      6(int) Load 1256
+            1258:   17(ivec4) Load 19(ballot)
+            1259:      6(int) GroupNonUniformUMin 178 PartitionedInclusiveScanNV 1257 1258
+            1260:     90(ptr) AccessChain 31(data) 1255 33 35
+                              Store 1260 1259
+            1261:      6(int) Load 8(invocation)
+            1262:     40(ptr) AccessChain 31(data) 63 33
+            1263:   17(ivec4) Load 1262
+            1264:   96(ivec2) VectorShuffle 1263 1263 0 1
+            1265:   17(ivec4) Load 19(ballot)
+            1266:   96(ivec2) GroupNonUniformUMin 178 PartitionedInclusiveScanNV 1264 1265
+            1267:     40(ptr) AccessChain 31(data) 1261 33
+            1268:   17(ivec4) Load 1267
+            1269:   17(ivec4) VectorShuffle 1268 1266 4 5 2 3
+                              Store 1267 1269
+            1270:      6(int) Load 8(invocation)
+            1271:     40(ptr) AccessChain 31(data) 33 33
+            1272:   17(ivec4) Load 1271
+            1273:  103(ivec3) VectorShuffle 1272 1272 0 1 2
+            1274:   17(ivec4) Load 19(ballot)
+            1275:  103(ivec3) GroupNonUniformUMin 178 PartitionedInclusiveScanNV 1273 1274
+            1276:     40(ptr) AccessChain 31(data) 1270 33
+            1277:   17(ivec4) Load 1276
+            1278:   17(ivec4) VectorShuffle 1277 1275 4 5 6 3
+                              Store 1276 1278
+            1279:      6(int) Load 8(invocation)
+            1280:     40(ptr) AccessChain 31(data) 115 33
+            1281:   17(ivec4) Load 1280
+            1282:   17(ivec4) Load 19(ballot)
+            1283:   17(ivec4) GroupNonUniformUMin 178 PartitionedInclusiveScanNV 1281 1282
+            1284:     40(ptr) AccessChain 31(data) 1279 33
+                              Store 1284 1283
+            1285:      6(int) Load 8(invocation)
+            1286:    116(ptr) AccessChain 31(data) 34 115 35
+            1287:   26(float) Load 1286
+            1288:   17(ivec4) Load 19(ballot)
+            1289:   26(float) GroupNonUniformFMin 178 PartitionedInclusiveScanNV 1287 1288
+            1290:    116(ptr) AccessChain 31(data) 1285 115 35
+                              Store 1290 1289
+            1291:      6(int) Load 8(invocation)
+            1292:    123(ptr) AccessChain 31(data) 63 115
+            1293:   27(fvec4) Load 1292
+            1294:  122(fvec2) VectorShuffle 1293 1293 0 1
+            1295:   17(ivec4) Load 19(ballot)
+            1296:  122(fvec2) GroupNonUniformFMin 178 PartitionedInclusiveScanNV 1294 1295
+            1297:    123(ptr) AccessChain 31(data) 1291 115
+            1298:   27(fvec4) Load 1297
+            1299:   27(fvec4) VectorShuffle 1298 1296 4 5 2 3
+                              Store 1297 1299
+            1300:      6(int) Load 8(invocation)
+            1301:    123(ptr) AccessChain 31(data) 33 115
+            1302:   27(fvec4) Load 1301
+            1303:  130(fvec3) VectorShuffle 1302 1302 0 1 2
+            1304:   17(ivec4) Load 19(ballot)
+            1305:  130(fvec3) GroupNonUniformFMin 178 PartitionedInclusiveScanNV 1303 1304
+            1306:    123(ptr) AccessChain 31(data) 1300 115
+            1307:   27(fvec4) Load 1306
+            1308:   27(fvec4) VectorShuffle 1307 1305 4 5 6 3
+                              Store 1306 1308
+            1309:      6(int) Load 8(invocation)
+            1310:    123(ptr) AccessChain 31(data) 115 115
+            1311:   27(fvec4) Load 1310
+            1312:   17(ivec4) Load 19(ballot)
+            1313:   27(fvec4) GroupNonUniformFMin 178 PartitionedInclusiveScanNV 1311 1312
+            1314:    123(ptr) AccessChain 31(data) 1309 115
+                              Store 1314 1313
+            1315:      6(int) Load 8(invocation)
+            1316:     36(ptr) AccessChain 31(data) 34 34 35
+            1317:   22(float) Load 1316
+            1318:   17(ivec4) Load 19(ballot)
+            1319:   22(float) GroupNonUniformFMax 178 PartitionedInclusiveScanNV 1317 1318
+            1320:     36(ptr) AccessChain 31(data) 1315 34 35
+                              Store 1320 1319
+            1321:      6(int) Load 8(invocation)
+            1322:     44(ptr) AccessChain 31(data) 63 34
+            1323:   23(fvec4) Load 1322
+            1324:   43(fvec2) VectorShuffle 1323 1323 0 1
+            1325:   17(ivec4) Load 19(ballot)
+            1326:   43(fvec2) GroupNonUniformFMax 178 PartitionedInclusiveScanNV 1324 1325
+            1327:     44(ptr) AccessChain 31(data) 1321 34
+            1328:   23(fvec4) Load 1327
+            1329:   23(fvec4) VectorShuffle 1328 1326 4 5 2 3
+                              Store 1327 1329
+            1330:      6(int) Load 8(invocation)
+            1331:     44(ptr) AccessChain 31(data) 33 34
+            1332:   23(fvec4) Load 1331
+            1333:   51(fvec3) VectorShuffle 1332 1332 0 1 2
+            1334:   17(ivec4) Load 19(ballot)
+            1335:   51(fvec3) GroupNonUniformFMax 178 PartitionedInclusiveScanNV 1333 1334
+            1336:     44(ptr) AccessChain 31(data) 1330 34
+            1337:   23(fvec4) Load 1336
+            1338:   23(fvec4) VectorShuffle 1337 1335 4 5 6 3
+                              Store 1336 1338
+            1339:      6(int) Load 8(invocation)
+            1340:     44(ptr) AccessChain 31(data) 115 34
+            1341:   23(fvec4) Load 1340
+            1342:   17(ivec4) Load 19(ballot)
+            1343:   23(fvec4) GroupNonUniformFMax 178 PartitionedInclusiveScanNV 1341 1342
+            1344:     44(ptr) AccessChain 31(data) 1339 34
+                              Store 1344 1343
+            1345:      6(int) Load 8(invocation)
+            1346:     64(ptr) AccessChain 31(data) 34 63 35
+            1347:     24(int) Load 1346
+            1348:   17(ivec4) Load 19(ballot)
+            1349:     24(int) GroupNonUniformSMax 178 PartitionedInclusiveScanNV 1347 1348
+            1350:     64(ptr) AccessChain 31(data) 1345 63 35
+                              Store 1350 1349
+            1351:      6(int) Load 8(invocation)
+            1352:     71(ptr) AccessChain 31(data) 63 63
+            1353:   25(ivec4) Load 1352
+            1354:   70(ivec2) VectorShuffle 1353 1353 0 1
+            1355:   17(ivec4) Load 19(ballot)
+            1356:   70(ivec2) GroupNonUniformSMax 178 PartitionedInclusiveScanNV 1354 1355
+            1357:     71(ptr) AccessChain 31(data) 1351 63
+            1358:   25(ivec4) Load 1357
+            1359:   25(ivec4) VectorShuffle 1358 1356 4 5 2 3
+                              Store 1357 1359
+            1360:      6(int) Load 8(invocation)
+            1361:     71(ptr) AccessChain 31(data) 33 63
+            1362:   25(ivec4) Load 1361
+            1363:   78(ivec3) VectorShuffle 1362 1362 0 1 2
+            1364:   17(ivec4) Load 19(ballot)
+            1365:   78(ivec3) GroupNonUniformSMax 178 PartitionedInclusiveScanNV 1363 1364
+            1366:     71(ptr) AccessChain 31(data) 1360 63
+            1367:   25(ivec4) Load 1366
+            1368:   25(ivec4) VectorShuffle 1367 1365 4 5 6 3
+                              Store 1366 1368
+            1369:      6(int) Load 8(invocation)
+            1370:     71(ptr) AccessChain 31(data) 115 63
+            1371:   25(ivec4) Load 1370
+            1372:   17(ivec4) Load 19(ballot)
+            1373:   25(ivec4) GroupNonUniformSMax 178 PartitionedInclusiveScanNV 1371 1372
+            1374:     71(ptr) AccessChain 31(data) 1369 63
+                              Store 1374 1373
+            1375:      6(int) Load 8(invocation)
+            1376:     90(ptr) AccessChain 31(data) 34 33 35
+            1377:      6(int) Load 1376
+            1378:   17(ivec4) Load 19(ballot)
+            1379:      6(int) GroupNonUniformUMax 178 PartitionedInclusiveScanNV 1377 1378
+            1380:     90(ptr) AccessChain 31(data) 1375 33 35
+                              Store 1380 1379
+            1381:      6(int) Load 8(invocation)
+            1382:     40(ptr) AccessChain 31(data) 63 33
+            1383:   17(ivec4) Load 1382
+            1384:   96(ivec2) VectorShuffle 1383 1383 0 1
+            1385:   17(ivec4) Load 19(ballot)
+            1386:   96(ivec2) GroupNonUniformUMax 178 PartitionedInclusiveScanNV 1384 1385
+            1387:     40(ptr) AccessChain 31(data) 1381 33
+            1388:   17(ivec4) Load 1387
+            1389:   17(ivec4) VectorShuffle 1388 1386 4 5 2 3
+                              Store 1387 1389
+            1390:      6(int) Load 8(invocation)
+            1391:     40(ptr) AccessChain 31(data) 33 33
+            1392:   17(ivec4) Load 1391
+            1393:  103(ivec3) VectorShuffle 1392 1392 0 1 2
+            1394:   17(ivec4) Load 19(ballot)
+            1395:  103(ivec3) GroupNonUniformUMax 178 PartitionedInclusiveScanNV 1393 1394
+            1396:     40(ptr) AccessChain 31(data) 1390 33
+            1397:   17(ivec4) Load 1396
+            1398:   17(ivec4) VectorShuffle 1397 1395 4 5 6 3
+                              Store 1396 1398
+            1399:      6(int) Load 8(invocation)
+            1400:     40(ptr) AccessChain 31(data) 115 33
+            1401:   17(ivec4) Load 1400
+            1402:   17(ivec4) Load 19(ballot)
+            1403:   17(ivec4) GroupNonUniformUMax 178 PartitionedInclusiveScanNV 1401 1402
+            1404:     40(ptr) AccessChain 31(data) 1399 33
+                              Store 1404 1403
+            1405:      6(int) Load 8(invocation)
+            1406:    116(ptr) AccessChain 31(data) 34 115 35
+            1407:   26(float) Load 1406
+            1408:   17(ivec4) Load 19(ballot)
+            1409:   26(float) GroupNonUniformFMax 178 PartitionedInclusiveScanNV 1407 1408
+            1410:    116(ptr) AccessChain 31(data) 1405 115 35
+                              Store 1410 1409
+            1411:      6(int) Load 8(invocation)
+            1412:    123(ptr) AccessChain 31(data) 63 115
+            1413:   27(fvec4) Load 1412
+            1414:  122(fvec2) VectorShuffle 1413 1413 0 1
+            1415:   17(ivec4) Load 19(ballot)
+            1416:  122(fvec2) GroupNonUniformFMax 178 PartitionedInclusiveScanNV 1414 1415
+            1417:    123(ptr) AccessChain 31(data) 1411 115
+            1418:   27(fvec4) Load 1417
+            1419:   27(fvec4) VectorShuffle 1418 1416 4 5 2 3
+                              Store 1417 1419
+            1420:      6(int) Load 8(invocation)
+            1421:    123(ptr) AccessChain 31(data) 33 115
+            1422:   27(fvec4) Load 1421
+            1423:  130(fvec3) VectorShuffle 1422 1422 0 1 2
+            1424:   17(ivec4) Load 19(ballot)
+            1425:  130(fvec3) GroupNonUniformFMax 178 PartitionedInclusiveScanNV 1423 1424
+            1426:    123(ptr) AccessChain 31(data) 1420 115
+            1427:   27(fvec4) Load 1426
+            1428:   27(fvec4) VectorShuffle 1427 1425 4 5 6 3
+                              Store 1426 1428
+            1429:      6(int) Load 8(invocation)
+            1430:    123(ptr) AccessChain 31(data) 115 115
+            1431:   27(fvec4) Load 1430
+            1432:   17(ivec4) Load 19(ballot)
+            1433:   27(fvec4) GroupNonUniformFMax 178 PartitionedInclusiveScanNV 1431 1432
+            1434:    123(ptr) AccessChain 31(data) 1429 115
+                              Store 1434 1433
+            1435:      6(int) Load 8(invocation)
+            1436:     64(ptr) AccessChain 31(data) 34 63 35
+            1437:     24(int) Load 1436
+            1438:   17(ivec4) Load 19(ballot)
+            1439:     24(int) GroupNonUniformBitwiseAnd 178 PartitionedInclusiveScanNV 1437 1438
+            1440:     64(ptr) AccessChain 31(data) 1435 63 35
+                              Store 1440 1439
+            1441:      6(int) Load 8(invocation)
+            1442:     71(ptr) AccessChain 31(data) 63 63
+            1443:   25(ivec4) Load 1442
+            1444:   70(ivec2) VectorShuffle 1443 1443 0 1
+            1445:   17(ivec4) Load 19(ballot)
+            1446:   70(ivec2) GroupNonUniformBitwiseAnd 178 PartitionedInclusiveScanNV 1444 1445
+            1447:     71(ptr) AccessChain 31(data) 1441 63
+            1448:   25(ivec4) Load 1447
+            1449:   25(ivec4) VectorShuffle 1448 1446 4 5 2 3
+                              Store 1447 1449
+            1450:      6(int) Load 8(invocation)
+            1451:     71(ptr) AccessChain 31(data) 33 63
+            1452:   25(ivec4) Load 1451
+            1453:   78(ivec3) VectorShuffle 1452 1452 0 1 2
+            1454:   17(ivec4) Load 19(ballot)
+            1455:   78(ivec3) GroupNonUniformBitwiseAnd 178 PartitionedInclusiveScanNV 1453 1454
+            1456:     71(ptr) AccessChain 31(data) 1450 63
+            1457:   25(ivec4) Load 1456
+            1458:   25(ivec4) VectorShuffle 1457 1455 4 5 6 3
+                              Store 1456 1458
+            1459:      6(int) Load 8(invocation)
+            1460:     71(ptr) AccessChain 31(data) 115 63
+            1461:   25(ivec4) Load 1460
+            1462:   17(ivec4) Load 19(ballot)
+            1463:   25(ivec4) GroupNonUniformBitwiseAnd 178 PartitionedInclusiveScanNV 1461 1462
+            1464:     71(ptr) AccessChain 31(data) 1459 63
+                              Store 1464 1463
+            1465:      6(int) Load 8(invocation)
+            1466:     90(ptr) AccessChain 31(data) 34 33 35
+            1467:      6(int) Load 1466
+            1468:   17(ivec4) Load 19(ballot)
+            1469:      6(int) GroupNonUniformBitwiseAnd 178 PartitionedInclusiveScanNV 1467 1468
+            1470:     90(ptr) AccessChain 31(data) 1465 33 35
+                              Store 1470 1469
+            1471:      6(int) Load 8(invocation)
+            1472:     40(ptr) AccessChain 31(data) 63 33
+            1473:   17(ivec4) Load 1472
+            1474:   96(ivec2) VectorShuffle 1473 1473 0 1
+            1475:   17(ivec4) Load 19(ballot)
+            1476:   96(ivec2) GroupNonUniformBitwiseAnd 178 PartitionedInclusiveScanNV 1474 1475
+            1477:     40(ptr) AccessChain 31(data) 1471 33
+            1478:   17(ivec4) Load 1477
+            1479:   17(ivec4) VectorShuffle 1478 1476 4 5 2 3
+                              Store 1477 1479
+            1480:      6(int) Load 8(invocation)
+            1481:     40(ptr) AccessChain 31(data) 33 33
+            1482:   17(ivec4) Load 1481
+            1483:  103(ivec3) VectorShuffle 1482 1482 0 1 2
+            1484:   17(ivec4) Load 19(ballot)
+            1485:  103(ivec3) GroupNonUniformBitwiseAnd 178 PartitionedInclusiveScanNV 1483 1484
+            1486:     40(ptr) AccessChain 31(data) 1480 33
+            1487:   17(ivec4) Load 1486
+            1488:   17(ivec4) VectorShuffle 1487 1485 4 5 6 3
+                              Store 1486 1488
+            1489:      6(int) Load 8(invocation)
+            1490:     40(ptr) AccessChain 31(data) 115 33
+            1491:   17(ivec4) Load 1490
+            1492:   17(ivec4) Load 19(ballot)
+            1493:   17(ivec4) GroupNonUniformBitwiseAnd 178 PartitionedInclusiveScanNV 1491 1492
+            1494:     40(ptr) AccessChain 31(data) 1489 33
+                              Store 1494 1493
+            1495:      6(int) Load 8(invocation)
+            1496:     64(ptr) AccessChain 31(data) 34 63 35
+            1497:     24(int) Load 1496
+            1498:   144(bool) SLessThan 1497 34
+            1499:   17(ivec4) Load 19(ballot)
+            1500:   144(bool) GroupNonUniformLogicalAnd 178 PartitionedInclusiveScanNV 1498 1499
+            1501:     24(int) Select 1500 63 34
+            1502:     64(ptr) AccessChain 31(data) 1495 63 35
+                              Store 1502 1501
+            1503:      6(int) Load 8(invocation)
+            1504:     71(ptr) AccessChain 31(data) 63 63
+            1505:   25(ivec4) Load 1504
+            1506:   70(ivec2) VectorShuffle 1505 1505 0 1
+            1507:  152(bvec2) SLessThan 1506 727
+            1508:   17(ivec4) Load 19(ballot)
+            1509:  152(bvec2) GroupNonUniformLogicalAnd 178 PartitionedInclusiveScanNV 1507 1508
+            1510:   70(ivec2) Select 1509 731 727
+            1511:     71(ptr) AccessChain 31(data) 1503 63
+            1512:   25(ivec4) Load 1511
+            1513:   25(ivec4) VectorShuffle 1512 1510 4 5 2 3
+                              Store 1511 1513
+            1514:      6(int) Load 8(invocation)
+            1515:     71(ptr) AccessChain 31(data) 63 63
+            1516:   25(ivec4) Load 1515
+            1517:   78(ivec3) VectorShuffle 1516 1516 0 1 2
+            1518:  161(bvec3) SLessThan 1517 740
+            1519:   17(ivec4) Load 19(ballot)
+            1520:  161(bvec3) GroupNonUniformLogicalAnd 178 PartitionedInclusiveScanNV 1518 1519
+            1521:   78(ivec3) Select 1520 744 740
+            1522:     71(ptr) AccessChain 31(data) 1514 63
+            1523:   25(ivec4) Load 1522
+            1524:   25(ivec4) VectorShuffle 1523 1521 4 5 6 3
+                              Store 1522 1524
+            1525:      6(int) Load 8(invocation)
+            1526:     71(ptr) AccessChain 31(data) 63 63
+            1527:   25(ivec4) Load 1526
+            1528:  169(bvec4) SLessThan 1527 752
+            1529:   17(ivec4) Load 19(ballot)
+            1530:  169(bvec4) GroupNonUniformLogicalAnd 178 PartitionedInclusiveScanNV 1528 1529
+            1531:   25(ivec4) Select 1530 756 752
+            1532:     71(ptr) AccessChain 31(data) 1525 63
+                              Store 1532 1531
+            1533:      6(int) Load 8(invocation)
+            1534:     64(ptr) AccessChain 31(data) 34 63 35
+            1535:     24(int) Load 1534
+            1536:   17(ivec4) Load 19(ballot)
+            1537:     24(int) GroupNonUniformBitwiseOr 178 PartitionedInclusiveScanNV 1535 1536
+            1538:     64(ptr) AccessChain 31(data) 1533 63 35
+                              Store 1538 1537
+            1539:      6(int) Load 8(invocation)
+            1540:     71(ptr) AccessChain 31(data) 63 63
+            1541:   25(ivec4) Load 1540
+            1542:   70(ivec2) VectorShuffle 1541 1541 0 1
+            1543:   17(ivec4) Load 19(ballot)
+            1544:   70(ivec2) GroupNonUniformBitwiseOr 178 PartitionedInclusiveScanNV 1542 1543
+            1545:     71(ptr) AccessChain 31(data) 1539 63
+            1546:   25(ivec4) Load 1545
+            1547:   25(ivec4) VectorShuffle 1546 1544 4 5 2 3
+                              Store 1545 1547
+            1548:      6(int) Load 8(invocation)
+            1549:     71(ptr) AccessChain 31(data) 33 63
+            1550:   25(ivec4) Load 1549
+            1551:   78(ivec3) VectorShuffle 1550 1550 0 1 2
+            1552:   17(ivec4) Load 19(ballot)
+            1553:   78(ivec3) GroupNonUniformBitwiseOr 178 PartitionedInclusiveScanNV 1551 1552
+            1554:     71(ptr) AccessChain 31(data) 1548 63
+            1555:   25(ivec4) Load 1554
+            1556:   25(ivec4) VectorShuffle 1555 1553 4 5 6 3
+                              Store 1554 1556
+            1557:      6(int) Load 8(invocation)
+            1558:     71(ptr) AccessChain 31(data) 115 63
+            1559:   25(ivec4) Load 1558
+            1560:   17(ivec4) Load 19(ballot)
+            1561:   25(ivec4) GroupNonUniformBitwiseOr 178 PartitionedInclusiveScanNV 1559 1560
+            1562:     71(ptr) AccessChain 31(data) 1557 63
+                              Store 1562 1561
+            1563:      6(int) Load 8(invocation)
+            1564:     90(ptr) AccessChain 31(data) 34 33 35
+            1565:      6(int) Load 1564
+            1566:   17(ivec4) Load 19(ballot)
+            1567:      6(int) GroupNonUniformBitwiseOr 178 PartitionedInclusiveScanNV 1565 1566
+            1568:     90(ptr) AccessChain 31(data) 1563 33 35
+                              Store 1568 1567
+            1569:      6(int) Load 8(invocation)
+            1570:     40(ptr) AccessChain 31(data) 63 33
+            1571:   17(ivec4) Load 1570
+            1572:   96(ivec2) VectorShuffle 1571 1571 0 1
+            1573:   17(ivec4) Load 19(ballot)
+            1574:   96(ivec2) GroupNonUniformBitwiseOr 178 PartitionedInclusiveScanNV 1572 1573
+            1575:     40(ptr) AccessChain 31(data) 1569 33
+            1576:   17(ivec4) Load 1575
+            1577:   17(ivec4) VectorShuffle 1576 1574 4 5 2 3
+                              Store 1575 1577
+            1578:      6(int) Load 8(invocation)
+            1579:     40(ptr) AccessChain 31(data) 33 33
+            1580:   17(ivec4) Load 1579
+            1581:  103(ivec3) VectorShuffle 1580 1580 0 1 2
+            1582:   17(ivec4) Load 19(ballot)
+            1583:  103(ivec3) GroupNonUniformBitwiseOr 178 PartitionedInclusiveScanNV 1581 1582
+            1584:     40(ptr) AccessChain 31(data) 1578 33
+            1585:   17(ivec4) Load 1584
+            1586:   17(ivec4) VectorShuffle 1585 1583 4 5 6 3
+                              Store 1584 1586
+            1587:      6(int) Load 8(invocation)
+            1588:     40(ptr) AccessChain 31(data) 115 33
+            1589:   17(ivec4) Load 1588
+            1590:   17(ivec4) Load 19(ballot)
+            1591:   17(ivec4) GroupNonUniformBitwiseOr 178 PartitionedInclusiveScanNV 1589 1590
+            1592:     40(ptr) AccessChain 31(data) 1587 33
+                              Store 1592 1591
+            1593:      6(int) Load 8(invocation)
+            1594:     64(ptr) AccessChain 31(data) 34 63 35
+            1595:     24(int) Load 1594
+            1596:   144(bool) SLessThan 1595 34
+            1597:   17(ivec4) Load 19(ballot)
+            1598:   144(bool) GroupNonUniformLogicalOr 178 PartitionedInclusiveScanNV 1596 1597
+            1599:     24(int) Select 1598 63 34
+            1600:     64(ptr) AccessChain 31(data) 1593 63 35
+                              Store 1600 1599
+            1601:      6(int) Load 8(invocation)
+            1602:     71(ptr) AccessChain 31(data) 63 63
+            1603:   25(ivec4) Load 1602
+            1604:   70(ivec2) VectorShuffle 1603 1603 0 1
+            1605:  152(bvec2) SLessThan 1604 727
+            1606:   17(ivec4) Load 19(ballot)
+            1607:  152(bvec2) GroupNonUniformLogicalOr 178 PartitionedInclusiveScanNV 1605 1606
+            1608:   70(ivec2) Select 1607 731 727
+            1609:     71(ptr) AccessChain 31(data) 1601 63
+            1610:   25(ivec4) Load 1609
+            1611:   25(ivec4) VectorShuffle 1610 1608 4 5 2 3
+                              Store 1609 1611
+            1612:      6(int) Load 8(invocation)
+            1613:     71(ptr) AccessChain 31(data) 63 63
+            1614:   25(ivec4) Load 1613
+            1615:   78(ivec3) VectorShuffle 1614 1614 0 1 2
+            1616:  161(bvec3) SLessThan 1615 740
+            1617:   17(ivec4) Load 19(ballot)
+            1618:  161(bvec3) GroupNonUniformLogicalOr 178 PartitionedInclusiveScanNV 1616 1617
+            1619:   78(ivec3) Select 1618 744 740
+            1620:     71(ptr) AccessChain 31(data) 1612 63
+            1621:   25(ivec4) Load 1620
+            1622:   25(ivec4) VectorShuffle 1621 1619 4 5 6 3
+                              Store 1620 1622
+            1623:      6(int) Load 8(invocation)
+            1624:     71(ptr) AccessChain 31(data) 63 63
+            1625:   25(ivec4) Load 1624
+            1626:  169(bvec4) SLessThan 1625 752
+            1627:   17(ivec4) Load 19(ballot)
+            1628:  169(bvec4) GroupNonUniformLogicalOr 178 PartitionedInclusiveScanNV 1626 1627
+            1629:   25(ivec4) Select 1628 756 752
+            1630:     71(ptr) AccessChain 31(data) 1623 63
+                              Store 1630 1629
+            1631:      6(int) Load 8(invocation)
+            1632:     64(ptr) AccessChain 31(data) 34 63 35
+            1633:     24(int) Load 1632
+            1634:   17(ivec4) Load 19(ballot)
+            1635:     24(int) GroupNonUniformBitwiseXor 178 PartitionedInclusiveScanNV 1633 1634
+            1636:     64(ptr) AccessChain 31(data) 1631 63 35
+                              Store 1636 1635
+            1637:      6(int) Load 8(invocation)
+            1638:     71(ptr) AccessChain 31(data) 63 63
+            1639:   25(ivec4) Load 1638
+            1640:   70(ivec2) VectorShuffle 1639 1639 0 1
+            1641:   17(ivec4) Load 19(ballot)
+            1642:   70(ivec2) GroupNonUniformBitwiseXor 178 PartitionedInclusiveScanNV 1640 1641
+            1643:     71(ptr) AccessChain 31(data) 1637 63
+            1644:   25(ivec4) Load 1643
+            1645:   25(ivec4) VectorShuffle 1644 1642 4 5 2 3
+                              Store 1643 1645
+            1646:      6(int) Load 8(invocation)
+            1647:     71(ptr) AccessChain 31(data) 33 63
+            1648:   25(ivec4) Load 1647
+            1649:   78(ivec3) VectorShuffle 1648 1648 0 1 2
+            1650:   17(ivec4) Load 19(ballot)
+            1651:   78(ivec3) GroupNonUniformBitwiseXor 178 PartitionedInclusiveScanNV 1649 1650
+            1652:     71(ptr) AccessChain 31(data) 1646 63
+            1653:   25(ivec4) Load 1652
+            1654:   25(ivec4) VectorShuffle 1653 1651 4 5 6 3
+                              Store 1652 1654
+            1655:      6(int) Load 8(invocation)
+            1656:     71(ptr) AccessChain 31(data) 115 63
+            1657:   25(ivec4) Load 1656
+            1658:   17(ivec4) Load 19(ballot)
+            1659:   25(ivec4) GroupNonUniformBitwiseXor 178 PartitionedInclusiveScanNV 1657 1658
+            1660:     71(ptr) AccessChain 31(data) 1655 63
+                              Store 1660 1659
+            1661:      6(int) Load 8(invocation)
+            1662:     90(ptr) AccessChain 31(data) 34 33 35
+            1663:      6(int) Load 1662
+            1664:   17(ivec4) Load 19(ballot)
+            1665:      6(int) GroupNonUniformBitwiseXor 178 PartitionedInclusiveScanNV 1663 1664
+            1666:     90(ptr) AccessChain 31(data) 1661 33 35
+                              Store 1666 1665
+            1667:      6(int) Load 8(invocation)
+            1668:     40(ptr) AccessChain 31(data) 63 33
+            1669:   17(ivec4) Load 1668
+            1670:   96(ivec2) VectorShuffle 1669 1669 0 1
+            1671:   17(ivec4) Load 19(ballot)
+            1672:   96(ivec2) GroupNonUniformBitwiseXor 178 PartitionedInclusiveScanNV 1670 1671
+            1673:     40(ptr) AccessChain 31(data) 1667 33
+            1674:   17(ivec4) Load 1673
+            1675:   17(ivec4) VectorShuffle 1674 1672 4 5 2 3
+                              Store 1673 1675
+            1676:      6(int) Load 8(invocation)
+            1677:     40(ptr) AccessChain 31(data) 33 33
+            1678:   17(ivec4) Load 1677
+            1679:  103(ivec3) VectorShuffle 1678 1678 0 1 2
+            1680:   17(ivec4) Load 19(ballot)
+            1681:  103(ivec3) GroupNonUniformBitwiseXor 178 PartitionedInclusiveScanNV 1679 1680
+            1682:     40(ptr) AccessChain 31(data) 1676 33
+            1683:   17(ivec4) Load 1682
+            1684:   17(ivec4) VectorShuffle 1683 1681 4 5 6 3
+                              Store 1682 1684
+            1685:      6(int) Load 8(invocation)
+            1686:     40(ptr) AccessChain 31(data) 115 33
+            1687:   17(ivec4) Load 1686
+            1688:   17(ivec4) Load 19(ballot)
+            1689:   17(ivec4) GroupNonUniformBitwiseXor 178 PartitionedInclusiveScanNV 1687 1688
+            1690:     40(ptr) AccessChain 31(data) 1685 33
+                              Store 1690 1689
+            1691:      6(int) Load 8(invocation)
+            1692:     64(ptr) AccessChain 31(data) 34 63 35
+            1693:     24(int) Load 1692
+            1694:   144(bool) SLessThan 1693 34
+            1695:   17(ivec4) Load 19(ballot)
+            1696:   144(bool) GroupNonUniformLogicalXor 178 PartitionedInclusiveScanNV 1694 1695
+            1697:     24(int) Select 1696 63 34
+            1698:     64(ptr) AccessChain 31(data) 1691 63 35
+                              Store 1698 1697
+            1699:      6(int) Load 8(invocation)
+            1700:     71(ptr) AccessChain 31(data) 63 63
+            1701:   25(ivec4) Load 1700
+            1702:   70(ivec2) VectorShuffle 1701 1701 0 1
+            1703:  152(bvec2) SLessThan 1702 727
+            1704:   17(ivec4) Load 19(ballot)
+            1705:  152(bvec2) GroupNonUniformLogicalXor 178 PartitionedInclusiveScanNV 1703 1704
+            1706:   70(ivec2) Select 1705 731 727
+            1707:     71(ptr) AccessChain 31(data) 1699 63
+            1708:   25(ivec4) Load 1707
+            1709:   25(ivec4) VectorShuffle 1708 1706 4 5 2 3
+                              Store 1707 1709
+            1710:      6(int) Load 8(invocation)
+            1711:     71(ptr) AccessChain 31(data) 63 63
+            1712:   25(ivec4) Load 1711
+            1713:   78(ivec3) VectorShuffle 1712 1712 0 1 2
+            1714:  161(bvec3) SLessThan 1713 740
+            1715:   17(ivec4) Load 19(ballot)
+            1716:  161(bvec3) GroupNonUniformLogicalXor 178 PartitionedInclusiveScanNV 1714 1715
+            1717:   78(ivec3) Select 1716 744 740
+            1718:     71(ptr) AccessChain 31(data) 1710 63
+            1719:   25(ivec4) Load 1718
+            1720:   25(ivec4) VectorShuffle 1719 1717 4 5 6 3
+                              Store 1718 1720
+            1721:      6(int) Load 8(invocation)
+            1722:     71(ptr) AccessChain 31(data) 63 63
+            1723:   25(ivec4) Load 1722
+            1724:  169(bvec4) SLessThan 1723 752
+            1725:   17(ivec4) Load 19(ballot)
+            1726:  169(bvec4) GroupNonUniformLogicalXor 178 PartitionedInclusiveScanNV 1724 1725
+            1727:   25(ivec4) Select 1726 756 752
+            1728:     71(ptr) AccessChain 31(data) 1721 63
+                              Store 1728 1727
+            1729:      6(int) Load 8(invocation)
+            1730:     36(ptr) AccessChain 31(data) 34 34 35
+            1731:   22(float) Load 1730
+            1732:   17(ivec4) Load 19(ballot)
+            1733:   22(float) GroupNonUniformFAdd 178 PartitionedExclusiveScanNV 1731 1732
+            1734:     36(ptr) AccessChain 31(data) 1729 34 35
+                              Store 1734 1733
+            1735:      6(int) Load 8(invocation)
+            1736:     44(ptr) AccessChain 31(data) 63 34
+            1737:   23(fvec4) Load 1736
+            1738:   43(fvec2) VectorShuffle 1737 1737 0 1
+            1739:   17(ivec4) Load 19(ballot)
+            1740:   43(fvec2) GroupNonUniformFAdd 178 PartitionedExclusiveScanNV 1738 1739
+            1741:     44(ptr) AccessChain 31(data) 1735 34
+            1742:   23(fvec4) Load 1741
+            1743:   23(fvec4) VectorShuffle 1742 1740 4 5 2 3
+                              Store 1741 1743
+            1744:      6(int) Load 8(invocation)
+            1745:     44(ptr) AccessChain 31(data) 33 34
+            1746:   23(fvec4) Load 1745
+            1747:   51(fvec3) VectorShuffle 1746 1746 0 1 2
+            1748:   17(ivec4) Load 19(ballot)
+            1749:   51(fvec3) GroupNonUniformFAdd 178 PartitionedExclusiveScanNV 1747 1748
+            1750:     44(ptr) AccessChain 31(data) 1744 34
+            1751:   23(fvec4) Load 1750
+            1752:   23(fvec4) VectorShuffle 1751 1749 4 5 6 3
+                              Store 1750 1752
+            1753:      6(int) Load 8(invocation)
+            1754:     44(ptr) AccessChain 31(data) 115 34
+            1755:   23(fvec4) Load 1754
+            1756:   17(ivec4) Load 19(ballot)
+            1757:   23(fvec4) GroupNonUniformFAdd 178 PartitionedExclusiveScanNV 1755 1756
+            1758:     44(ptr) AccessChain 31(data) 1753 34
+                              Store 1758 1757
+            1759:      6(int) Load 8(invocation)
+            1760:     64(ptr) AccessChain 31(data) 34 63 35
+            1761:     24(int) Load 1760
+            1762:   17(ivec4) Load 19(ballot)
+            1763:     24(int) GroupNonUniformIAdd 178 PartitionedExclusiveScanNV 1761 1762
+            1764:     64(ptr) AccessChain 31(data) 1759 63 35
+                              Store 1764 1763
+            1765:      6(int) Load 8(invocation)
+            1766:     71(ptr) AccessChain 31(data) 63 63
+            1767:   25(ivec4) Load 1766
+            1768:   70(ivec2) VectorShuffle 1767 1767 0 1
+            1769:   17(ivec4) Load 19(ballot)
+            1770:   70(ivec2) GroupNonUniformIAdd 178 PartitionedExclusiveScanNV 1768 1769
+            1771:     71(ptr) AccessChain 31(data) 1765 63
+            1772:   25(ivec4) Load 1771
+            1773:   25(ivec4) VectorShuffle 1772 1770 4 5 2 3
+                              Store 1771 1773
+            1774:      6(int) Load 8(invocation)
+            1775:     71(ptr) AccessChain 31(data) 33 63
+            1776:   25(ivec4) Load 1775
+            1777:   78(ivec3) VectorShuffle 1776 1776 0 1 2
+            1778:   17(ivec4) Load 19(ballot)
+            1779:   78(ivec3) GroupNonUniformIAdd 178 PartitionedExclusiveScanNV 1777 1778
+            1780:     71(ptr) AccessChain 31(data) 1774 63
+            1781:   25(ivec4) Load 1780
+            1782:   25(ivec4) VectorShuffle 1781 1779 4 5 6 3
+                              Store 1780 1782
+            1783:      6(int) Load 8(invocation)
+            1784:     71(ptr) AccessChain 31(data) 115 63
+            1785:   25(ivec4) Load 1784
+            1786:   17(ivec4) Load 19(ballot)
+            1787:   25(ivec4) GroupNonUniformIAdd 178 PartitionedExclusiveScanNV 1785 1786
+            1788:     71(ptr) AccessChain 31(data) 1783 63
+                              Store 1788 1787
+            1789:      6(int) Load 8(invocation)
+            1790:     90(ptr) AccessChain 31(data) 34 33 35
+            1791:      6(int) Load 1790
+            1792:   17(ivec4) Load 19(ballot)
+            1793:      6(int) GroupNonUniformIAdd 178 PartitionedExclusiveScanNV 1791 1792
+            1794:     90(ptr) AccessChain 31(data) 1789 33 35
+                              Store 1794 1793
+            1795:      6(int) Load 8(invocation)
+            1796:     40(ptr) AccessChain 31(data) 63 33
+            1797:   17(ivec4) Load 1796
+            1798:   96(ivec2) VectorShuffle 1797 1797 0 1
+            1799:   17(ivec4) Load 19(ballot)
+            1800:   96(ivec2) GroupNonUniformIAdd 178 PartitionedExclusiveScanNV 1798 1799
+            1801:     40(ptr) AccessChain 31(data) 1795 33
+            1802:   17(ivec4) Load 1801
+            1803:   17(ivec4) VectorShuffle 1802 1800 4 5 2 3
+                              Store 1801 1803
+            1804:      6(int) Load 8(invocation)
+            1805:     40(ptr) AccessChain 31(data) 33 33
+            1806:   17(ivec4) Load 1805
+            1807:  103(ivec3) VectorShuffle 1806 1806 0 1 2
+            1808:   17(ivec4) Load 19(ballot)
+            1809:  103(ivec3) GroupNonUniformIAdd 178 PartitionedExclusiveScanNV 1807 1808
+            1810:     40(ptr) AccessChain 31(data) 1804 33
+            1811:   17(ivec4) Load 1810
+            1812:   17(ivec4) VectorShuffle 1811 1809 4 5 6 3
+                              Store 1810 1812
+            1813:      6(int) Load 8(invocation)
+            1814:     40(ptr) AccessChain 31(data) 115 33
+            1815:   17(ivec4) Load 1814
+            1816:   17(ivec4) Load 19(ballot)
+            1817:   17(ivec4) GroupNonUniformIAdd 178 PartitionedExclusiveScanNV 1815 1816
+            1818:     40(ptr) AccessChain 31(data) 1813 33
+                              Store 1818 1817
+            1819:      6(int) Load 8(invocation)
+            1820:    116(ptr) AccessChain 31(data) 34 115 35
+            1821:   26(float) Load 1820
+            1822:   17(ivec4) Load 19(ballot)
+            1823:   26(float) GroupNonUniformFAdd 178 PartitionedExclusiveScanNV 1821 1822
+            1824:    116(ptr) AccessChain 31(data) 1819 115 35
+                              Store 1824 1823
+            1825:      6(int) Load 8(invocation)
+            1826:    123(ptr) AccessChain 31(data) 63 115
+            1827:   27(fvec4) Load 1826
+            1828:  122(fvec2) VectorShuffle 1827 1827 0 1
+            1829:   17(ivec4) Load 19(ballot)
+            1830:  122(fvec2) GroupNonUniformFAdd 178 PartitionedExclusiveScanNV 1828 1829
+            1831:    123(ptr) AccessChain 31(data) 1825 115
+            1832:   27(fvec4) Load 1831
+            1833:   27(fvec4) VectorShuffle 1832 1830 4 5 2 3
+                              Store 1831 1833
+            1834:      6(int) Load 8(invocation)
+            1835:    123(ptr) AccessChain 31(data) 33 115
+            1836:   27(fvec4) Load 1835
+            1837:  130(fvec3) VectorShuffle 1836 1836 0 1 2
+            1838:   17(ivec4) Load 19(ballot)
+            1839:  130(fvec3) GroupNonUniformFAdd 178 PartitionedExclusiveScanNV 1837 1838
+            1840:    123(ptr) AccessChain 31(data) 1834 115
+            1841:   27(fvec4) Load 1840
+            1842:   27(fvec4) VectorShuffle 1841 1839 4 5 6 3
+                              Store 1840 1842
+            1843:      6(int) Load 8(invocation)
+            1844:    123(ptr) AccessChain 31(data) 115 115
+            1845:   27(fvec4) Load 1844
+            1846:   17(ivec4) Load 19(ballot)
+            1847:   27(fvec4) GroupNonUniformFAdd 178 PartitionedExclusiveScanNV 1845 1846
+            1848:    123(ptr) AccessChain 31(data) 1843 115
+                              Store 1848 1847
+            1849:      6(int) Load 8(invocation)
+            1850:     36(ptr) AccessChain 31(data) 34 34 35
+            1851:   22(float) Load 1850
+            1852:   17(ivec4) Load 19(ballot)
+            1853:   22(float) GroupNonUniformFMul 178 PartitionedExclusiveScanNV 1851 1852
+            1854:     36(ptr) AccessChain 31(data) 1849 34 35
+                              Store 1854 1853
+            1855:      6(int) Load 8(invocation)
+            1856:     44(ptr) AccessChain 31(data) 63 34
+            1857:   23(fvec4) Load 1856
+            1858:   43(fvec2) VectorShuffle 1857 1857 0 1
+            1859:   17(ivec4) Load 19(ballot)
+            1860:   43(fvec2) GroupNonUniformFMul 178 PartitionedExclusiveScanNV 1858 1859
+            1861:     44(ptr) AccessChain 31(data) 1855 34
+            1862:   23(fvec4) Load 1861
+            1863:   23(fvec4) VectorShuffle 1862 1860 4 5 2 3
+                              Store 1861 1863
+            1864:      6(int) Load 8(invocation)
+            1865:     44(ptr) AccessChain 31(data) 33 34
+            1866:   23(fvec4) Load 1865
+            1867:   51(fvec3) VectorShuffle 1866 1866 0 1 2
+            1868:   17(ivec4) Load 19(ballot)
+            1869:   51(fvec3) GroupNonUniformFMul 178 PartitionedExclusiveScanNV 1867 1868
+            1870:     44(ptr) AccessChain 31(data) 1864 34
+            1871:   23(fvec4) Load 1870
+            1872:   23(fvec4) VectorShuffle 1871 1869 4 5 6 3
+                              Store 1870 1872
+            1873:      6(int) Load 8(invocation)
+            1874:     44(ptr) AccessChain 31(data) 115 34
+            1875:   23(fvec4) Load 1874
+            1876:   17(ivec4) Load 19(ballot)
+            1877:   23(fvec4) GroupNonUniformFMul 178 PartitionedExclusiveScanNV 1875 1876
+            1878:     44(ptr) AccessChain 31(data) 1873 34
+                              Store 1878 1877
+            1879:      6(int) Load 8(invocation)
+            1880:     64(ptr) AccessChain 31(data) 34 63 35
+            1881:     24(int) Load 1880
+            1882:   17(ivec4) Load 19(ballot)
+            1883:     24(int) GroupNonUniformIMul 178 PartitionedExclusiveScanNV 1881 1882
+            1884:     64(ptr) AccessChain 31(data) 1879 63 35
+                              Store 1884 1883
+            1885:      6(int) Load 8(invocation)
+            1886:     71(ptr) AccessChain 31(data) 63 63
+            1887:   25(ivec4) Load 1886
+            1888:   70(ivec2) VectorShuffle 1887 1887 0 1
+            1889:   17(ivec4) Load 19(ballot)
+            1890:   70(ivec2) GroupNonUniformIMul 178 PartitionedExclusiveScanNV 1888 1889
+            1891:     71(ptr) AccessChain 31(data) 1885 63
+            1892:   25(ivec4) Load 1891
+            1893:   25(ivec4) VectorShuffle 1892 1890 4 5 2 3
+                              Store 1891 1893
+            1894:      6(int) Load 8(invocation)
+            1895:     71(ptr) AccessChain 31(data) 33 63
+            1896:   25(ivec4) Load 1895
+            1897:   78(ivec3) VectorShuffle 1896 1896 0 1 2
+            1898:   17(ivec4) Load 19(ballot)
+            1899:   78(ivec3) GroupNonUniformIMul 178 PartitionedExclusiveScanNV 1897 1898
+            1900:     71(ptr) AccessChain 31(data) 1894 63
+            1901:   25(ivec4) Load 1900
+            1902:   25(ivec4) VectorShuffle 1901 1899 4 5 6 3
+                              Store 1900 1902
+            1903:      6(int) Load 8(invocation)
+            1904:     71(ptr) AccessChain 31(data) 115 63
+            1905:   25(ivec4) Load 1904
+            1906:   17(ivec4) Load 19(ballot)
+            1907:   25(ivec4) GroupNonUniformIMul 178 PartitionedExclusiveScanNV 1905 1906
+            1908:     71(ptr) AccessChain 31(data) 1903 63
+                              Store 1908 1907
+            1909:      6(int) Load 8(invocation)
+            1910:     90(ptr) AccessChain 31(data) 34 33 35
+            1911:      6(int) Load 1910
+            1912:   17(ivec4) Load 19(ballot)
+            1913:      6(int) GroupNonUniformIMul 178 PartitionedExclusiveScanNV 1911 1912
+            1914:     90(ptr) AccessChain 31(data) 1909 33 35
+                              Store 1914 1913
+            1915:      6(int) Load 8(invocation)
+            1916:     40(ptr) AccessChain 31(data) 63 33
+            1917:   17(ivec4) Load 1916
+            1918:   96(ivec2) VectorShuffle 1917 1917 0 1
+            1919:   17(ivec4) Load 19(ballot)
+            1920:   96(ivec2) GroupNonUniformIMul 178 PartitionedExclusiveScanNV 1918 1919
+            1921:     40(ptr) AccessChain 31(data) 1915 33
+            1922:   17(ivec4) Load 1921
+            1923:   17(ivec4) VectorShuffle 1922 1920 4 5 2 3
+                              Store 1921 1923
+            1924:      6(int) Load 8(invocation)
+            1925:     40(ptr) AccessChain 31(data) 33 33
+            1926:   17(ivec4) Load 1925
+            1927:  103(ivec3) VectorShuffle 1926 1926 0 1 2
+            1928:   17(ivec4) Load 19(ballot)
+            1929:  103(ivec3) GroupNonUniformIMul 178 PartitionedExclusiveScanNV 1927 1928
+            1930:     40(ptr) AccessChain 31(data) 1924 33
+            1931:   17(ivec4) Load 1930
+            1932:   17(ivec4) VectorShuffle 1931 1929 4 5 6 3
+                              Store 1930 1932
+            1933:      6(int) Load 8(invocation)
+            1934:     40(ptr) AccessChain 31(data) 115 33
+            1935:   17(ivec4) Load 1934
+            1936:   17(ivec4) Load 19(ballot)
+            1937:   17(ivec4) GroupNonUniformIMul 178 PartitionedExclusiveScanNV 1935 1936
+            1938:     40(ptr) AccessChain 31(data) 1933 33
+                              Store 1938 1937
+            1939:      6(int) Load 8(invocation)
+            1940:    116(ptr) AccessChain 31(data) 34 115 35
+            1941:   26(float) Load 1940
+            1942:   17(ivec4) Load 19(ballot)
+            1943:   26(float) GroupNonUniformFMul 178 PartitionedExclusiveScanNV 1941 1942
+            1944:    116(ptr) AccessChain 31(data) 1939 115 35
+                              Store 1944 1943
+            1945:      6(int) Load 8(invocation)
+            1946:    123(ptr) AccessChain 31(data) 63 115
+            1947:   27(fvec4) Load 1946
+            1948:  122(fvec2) VectorShuffle 1947 1947 0 1
+            1949:   17(ivec4) Load 19(ballot)
+            1950:  122(fvec2) GroupNonUniformFMul 178 PartitionedExclusiveScanNV 1948 1949
+            1951:    123(ptr) AccessChain 31(data) 1945 115
+            1952:   27(fvec4) Load 1951
+            1953:   27(fvec4) VectorShuffle 1952 1950 4 5 2 3
+                              Store 1951 1953
+            1954:      6(int) Load 8(invocation)
+            1955:    123(ptr) AccessChain 31(data) 33 115
+            1956:   27(fvec4) Load 1955
+            1957:  130(fvec3) VectorShuffle 1956 1956 0 1 2
+            1958:   17(ivec4) Load 19(ballot)
+            1959:  130(fvec3) GroupNonUniformFMul 178 PartitionedExclusiveScanNV 1957 1958
+            1960:    123(ptr) AccessChain 31(data) 1954 115
+            1961:   27(fvec4) Load 1960
+            1962:   27(fvec4) VectorShuffle 1961 1959 4 5 6 3
+                              Store 1960 1962
+            1963:      6(int) Load 8(invocation)
+            1964:    123(ptr) AccessChain 31(data) 115 115
+            1965:   27(fvec4) Load 1964
+            1966:   17(ivec4) Load 19(ballot)
+            1967:   27(fvec4) GroupNonUniformFMul 178 PartitionedExclusiveScanNV 1965 1966
+            1968:    123(ptr) AccessChain 31(data) 1963 115
+                              Store 1968 1967
+            1969:      6(int) Load 8(invocation)
+            1970:     36(ptr) AccessChain 31(data) 34 34 35
+            1971:   22(float) Load 1970
+            1972:   17(ivec4) Load 19(ballot)
+            1973:   22(float) GroupNonUniformFMin 178 PartitionedExclusiveScanNV 1971 1972
+            1974:     36(ptr) AccessChain 31(data) 1969 34 35
+                              Store 1974 1973
+            1975:      6(int) Load 8(invocation)
+            1976:     44(ptr) AccessChain 31(data) 63 34
+            1977:   23(fvec4) Load 1976
+            1978:   43(fvec2) VectorShuffle 1977 1977 0 1
+            1979:   17(ivec4) Load 19(ballot)
+            1980:   43(fvec2) GroupNonUniformFMin 178 PartitionedExclusiveScanNV 1978 1979
+            1981:     44(ptr) AccessChain 31(data) 1975 34
+            1982:   23(fvec4) Load 1981
+            1983:   23(fvec4) VectorShuffle 1982 1980 4 5 2 3
+                              Store 1981 1983
+            1984:      6(int) Load 8(invocation)
+            1985:     44(ptr) AccessChain 31(data) 33 34
+            1986:   23(fvec4) Load 1985
+            1987:   51(fvec3) VectorShuffle 1986 1986 0 1 2
+            1988:   17(ivec4) Load 19(ballot)
+            1989:   51(fvec3) GroupNonUniformFMin 178 PartitionedExclusiveScanNV 1987 1988
+            1990:     44(ptr) AccessChain 31(data) 1984 34
+            1991:   23(fvec4) Load 1990
+            1992:   23(fvec4) VectorShuffle 1991 1989 4 5 6 3
+                              Store 1990 1992
+            1993:      6(int) Load 8(invocation)
+            1994:     44(ptr) AccessChain 31(data) 115 34
+            1995:   23(fvec4) Load 1994
+            1996:   17(ivec4) Load 19(ballot)
+            1997:   23(fvec4) GroupNonUniformFMin 178 PartitionedExclusiveScanNV 1995 1996
+            1998:     44(ptr) AccessChain 31(data) 1993 34
+                              Store 1998 1997
+            1999:      6(int) Load 8(invocation)
+            2000:     64(ptr) AccessChain 31(data) 34 63 35
+            2001:     24(int) Load 2000
+            2002:   17(ivec4) Load 19(ballot)
+            2003:     24(int) GroupNonUniformSMin 178 PartitionedExclusiveScanNV 2001 2002
+            2004:     64(ptr) AccessChain 31(data) 1999 63 35
+                              Store 2004 2003
+            2005:      6(int) Load 8(invocation)
+            2006:     71(ptr) AccessChain 31(data) 63 63
+            2007:   25(ivec4) Load 2006
+            2008:   70(ivec2) VectorShuffle 2007 2007 0 1
+            2009:   17(ivec4) Load 19(ballot)
+            2010:   70(ivec2) GroupNonUniformSMin 178 PartitionedExclusiveScanNV 2008 2009
+            2011:     71(ptr) AccessChain 31(data) 2005 63
+            2012:   25(ivec4) Load 2011
+            2013:   25(ivec4) VectorShuffle 2012 2010 4 5 2 3
+                              Store 2011 2013
+            2014:      6(int) Load 8(invocation)
+            2015:     71(ptr) AccessChain 31(data) 33 63
+            2016:   25(ivec4) Load 2015
+            2017:   78(ivec3) VectorShuffle 2016 2016 0 1 2
+            2018:   17(ivec4) Load 19(ballot)
+            2019:   78(ivec3) GroupNonUniformSMin 178 PartitionedExclusiveScanNV 2017 2018
+            2020:     71(ptr) AccessChain 31(data) 2014 63
+            2021:   25(ivec4) Load 2020
+            2022:   25(ivec4) VectorShuffle 2021 2019 4 5 6 3
+                              Store 2020 2022
+            2023:      6(int) Load 8(invocation)
+            2024:     71(ptr) AccessChain 31(data) 115 63
+            2025:   25(ivec4) Load 2024
+            2026:   17(ivec4) Load 19(ballot)
+            2027:   25(ivec4) GroupNonUniformSMin 178 PartitionedExclusiveScanNV 2025 2026
+            2028:     71(ptr) AccessChain 31(data) 2023 63
+                              Store 2028 2027
+            2029:      6(int) Load 8(invocation)
+            2030:     90(ptr) AccessChain 31(data) 34 33 35
+            2031:      6(int) Load 2030
+            2032:   17(ivec4) Load 19(ballot)
+            2033:      6(int) GroupNonUniformUMin 178 PartitionedExclusiveScanNV 2031 2032
+            2034:     90(ptr) AccessChain 31(data) 2029 33 35
+                              Store 2034 2033
+            2035:      6(int) Load 8(invocation)
+            2036:     40(ptr) AccessChain 31(data) 63 33
+            2037:   17(ivec4) Load 2036
+            2038:   96(ivec2) VectorShuffle 2037 2037 0 1
+            2039:   17(ivec4) Load 19(ballot)
+            2040:   96(ivec2) GroupNonUniformUMin 178 PartitionedExclusiveScanNV 2038 2039
+            2041:     40(ptr) AccessChain 31(data) 2035 33
+            2042:   17(ivec4) Load 2041
+            2043:   17(ivec4) VectorShuffle 2042 2040 4 5 2 3
+                              Store 2041 2043
+            2044:      6(int) Load 8(invocation)
+            2045:     40(ptr) AccessChain 31(data) 33 33
+            2046:   17(ivec4) Load 2045
+            2047:  103(ivec3) VectorShuffle 2046 2046 0 1 2
+            2048:   17(ivec4) Load 19(ballot)
+            2049:  103(ivec3) GroupNonUniformUMin 178 PartitionedExclusiveScanNV 2047 2048
+            2050:     40(ptr) AccessChain 31(data) 2044 33
+            2051:   17(ivec4) Load 2050
+            2052:   17(ivec4) VectorShuffle 2051 2049 4 5 6 3
+                              Store 2050 2052
+            2053:      6(int) Load 8(invocation)
+            2054:     40(ptr) AccessChain 31(data) 115 33
+            2055:   17(ivec4) Load 2054
+            2056:   17(ivec4) Load 19(ballot)
+            2057:   17(ivec4) GroupNonUniformUMin 178 PartitionedExclusiveScanNV 2055 2056
+            2058:     40(ptr) AccessChain 31(data) 2053 33
+                              Store 2058 2057
+            2059:      6(int) Load 8(invocation)
+            2060:    116(ptr) AccessChain 31(data) 34 115 35
+            2061:   26(float) Load 2060
+            2062:   17(ivec4) Load 19(ballot)
+            2063:   26(float) GroupNonUniformFMin 178 PartitionedExclusiveScanNV 2061 2062
+            2064:    116(ptr) AccessChain 31(data) 2059 115 35
+                              Store 2064 2063
+            2065:      6(int) Load 8(invocation)
+            2066:    123(ptr) AccessChain 31(data) 63 115
+            2067:   27(fvec4) Load 2066
+            2068:  122(fvec2) VectorShuffle 2067 2067 0 1
+            2069:   17(ivec4) Load 19(ballot)
+            2070:  122(fvec2) GroupNonUniformFMin 178 PartitionedExclusiveScanNV 2068 2069
+            2071:    123(ptr) AccessChain 31(data) 2065 115
+            2072:   27(fvec4) Load 2071
+            2073:   27(fvec4) VectorShuffle 2072 2070 4 5 2 3
+                              Store 2071 2073
+            2074:      6(int) Load 8(invocation)
+            2075:    123(ptr) AccessChain 31(data) 33 115
+            2076:   27(fvec4) Load 2075
+            2077:  130(fvec3) VectorShuffle 2076 2076 0 1 2
+            2078:   17(ivec4) Load 19(ballot)
+            2079:  130(fvec3) GroupNonUniformFMin 178 PartitionedExclusiveScanNV 2077 2078
+            2080:    123(ptr) AccessChain 31(data) 2074 115
+            2081:   27(fvec4) Load 2080
+            2082:   27(fvec4) VectorShuffle 2081 2079 4 5 6 3
+                              Store 2080 2082
+            2083:      6(int) Load 8(invocation)
+            2084:    123(ptr) AccessChain 31(data) 115 115
+            2085:   27(fvec4) Load 2084
+            2086:   17(ivec4) Load 19(ballot)
+            2087:   27(fvec4) GroupNonUniformFMin 178 PartitionedExclusiveScanNV 2085 2086
+            2088:    123(ptr) AccessChain 31(data) 2083 115
+                              Store 2088 2087
+            2089:      6(int) Load 8(invocation)
+            2090:     36(ptr) AccessChain 31(data) 34 34 35
+            2091:   22(float) Load 2090
+            2092:   17(ivec4) Load 19(ballot)
+            2093:   22(float) GroupNonUniformFMax 178 PartitionedExclusiveScanNV 2091 2092
+            2094:     36(ptr) AccessChain 31(data) 2089 34 35
+                              Store 2094 2093
+            2095:      6(int) Load 8(invocation)
+            2096:     44(ptr) AccessChain 31(data) 63 34
+            2097:   23(fvec4) Load 2096
+            2098:   43(fvec2) VectorShuffle 2097 2097 0 1
+            2099:   17(ivec4) Load 19(ballot)
+            2100:   43(fvec2) GroupNonUniformFMax 178 PartitionedExclusiveScanNV 2098 2099
+            2101:     44(ptr) AccessChain 31(data) 2095 34
+            2102:   23(fvec4) Load 2101
+            2103:   23(fvec4) VectorShuffle 2102 2100 4 5 2 3
+                              Store 2101 2103
+            2104:      6(int) Load 8(invocation)
+            2105:     44(ptr) AccessChain 31(data) 33 34
+            2106:   23(fvec4) Load 2105
+            2107:   51(fvec3) VectorShuffle 2106 2106 0 1 2
+            2108:   17(ivec4) Load 19(ballot)
+            2109:   51(fvec3) GroupNonUniformFMax 178 PartitionedExclusiveScanNV 2107 2108
+            2110:     44(ptr) AccessChain 31(data) 2104 34
+            2111:   23(fvec4) Load 2110
+            2112:   23(fvec4) VectorShuffle 2111 2109 4 5 6 3
+                              Store 2110 2112
+            2113:      6(int) Load 8(invocation)
+            2114:     44(ptr) AccessChain 31(data) 115 34
+            2115:   23(fvec4) Load 2114
+            2116:   17(ivec4) Load 19(ballot)
+            2117:   23(fvec4) GroupNonUniformFMax 178 PartitionedExclusiveScanNV 2115 2116
+            2118:     44(ptr) AccessChain 31(data) 2113 34
+                              Store 2118 2117
+            2119:      6(int) Load 8(invocation)
+            2120:     64(ptr) AccessChain 31(data) 34 63 35
+            2121:     24(int) Load 2120
+            2122:   17(ivec4) Load 19(ballot)
+            2123:     24(int) GroupNonUniformSMax 178 PartitionedExclusiveScanNV 2121 2122
+            2124:     64(ptr) AccessChain 31(data) 2119 63 35
+                              Store 2124 2123
+            2125:      6(int) Load 8(invocation)
+            2126:     71(ptr) AccessChain 31(data) 63 63
+            2127:   25(ivec4) Load 2126
+            2128:   70(ivec2) VectorShuffle 2127 2127 0 1
+            2129:   17(ivec4) Load 19(ballot)
+            2130:   70(ivec2) GroupNonUniformSMax 178 PartitionedExclusiveScanNV 2128 2129
+            2131:     71(ptr) AccessChain 31(data) 2125 63
+            2132:   25(ivec4) Load 2131
+            2133:   25(ivec4) VectorShuffle 2132 2130 4 5 2 3
+                              Store 2131 2133
+            2134:      6(int) Load 8(invocation)
+            2135:     71(ptr) AccessChain 31(data) 33 63
+            2136:   25(ivec4) Load 2135
+            2137:   78(ivec3) VectorShuffle 2136 2136 0 1 2
+            2138:   17(ivec4) Load 19(ballot)
+            2139:   78(ivec3) GroupNonUniformSMax 178 PartitionedExclusiveScanNV 2137 2138
+            2140:     71(ptr) AccessChain 31(data) 2134 63
+            2141:   25(ivec4) Load 2140
+            2142:   25(ivec4) VectorShuffle 2141 2139 4 5 6 3
+                              Store 2140 2142
+            2143:      6(int) Load 8(invocation)
+            2144:     71(ptr) AccessChain 31(data) 115 63
+            2145:   25(ivec4) Load 2144
+            2146:   17(ivec4) Load 19(ballot)
+            2147:   25(ivec4) GroupNonUniformSMax 178 PartitionedExclusiveScanNV 2145 2146
+            2148:     71(ptr) AccessChain 31(data) 2143 63
+                              Store 2148 2147
+            2149:      6(int) Load 8(invocation)
+            2150:     90(ptr) AccessChain 31(data) 34 33 35
+            2151:      6(int) Load 2150
+            2152:   17(ivec4) Load 19(ballot)
+            2153:      6(int) GroupNonUniformUMax 178 PartitionedExclusiveScanNV 2151 2152
+            2154:     90(ptr) AccessChain 31(data) 2149 33 35
+                              Store 2154 2153
+            2155:      6(int) Load 8(invocation)
+            2156:     40(ptr) AccessChain 31(data) 63 33
+            2157:   17(ivec4) Load 2156
+            2158:   96(ivec2) VectorShuffle 2157 2157 0 1
+            2159:   17(ivec4) Load 19(ballot)
+            2160:   96(ivec2) GroupNonUniformUMax 178 PartitionedExclusiveScanNV 2158 2159
+            2161:     40(ptr) AccessChain 31(data) 2155 33
+            2162:   17(ivec4) Load 2161
+            2163:   17(ivec4) VectorShuffle 2162 2160 4 5 2 3
+                              Store 2161 2163
+            2164:      6(int) Load 8(invocation)
+            2165:     40(ptr) AccessChain 31(data) 33 33
+            2166:   17(ivec4) Load 2165
+            2167:  103(ivec3) VectorShuffle 2166 2166 0 1 2
+            2168:   17(ivec4) Load 19(ballot)
+            2169:  103(ivec3) GroupNonUniformUMax 178 PartitionedExclusiveScanNV 2167 2168
+            2170:     40(ptr) AccessChain 31(data) 2164 33
+            2171:   17(ivec4) Load 2170
+            2172:   17(ivec4) VectorShuffle 2171 2169 4 5 6 3
+                              Store 2170 2172
+            2173:      6(int) Load 8(invocation)
+            2174:     40(ptr) AccessChain 31(data) 115 33
+            2175:   17(ivec4) Load 2174
+            2176:   17(ivec4) Load 19(ballot)
+            2177:   17(ivec4) GroupNonUniformUMax 178 PartitionedExclusiveScanNV 2175 2176
+            2178:     40(ptr) AccessChain 31(data) 2173 33
+                              Store 2178 2177
+            2179:      6(int) Load 8(invocation)
+            2180:    116(ptr) AccessChain 31(data) 34 115 35
+            2181:   26(float) Load 2180
+            2182:   17(ivec4) Load 19(ballot)
+            2183:   26(float) GroupNonUniformFMax 178 PartitionedExclusiveScanNV 2181 2182
+            2184:    116(ptr) AccessChain 31(data) 2179 115 35
+                              Store 2184 2183
+            2185:      6(int) Load 8(invocation)
+            2186:    123(ptr) AccessChain 31(data) 63 115
+            2187:   27(fvec4) Load 2186
+            2188:  122(fvec2) VectorShuffle 2187 2187 0 1
+            2189:   17(ivec4) Load 19(ballot)
+            2190:  122(fvec2) GroupNonUniformFMax 178 PartitionedExclusiveScanNV 2188 2189
+            2191:    123(ptr) AccessChain 31(data) 2185 115
+            2192:   27(fvec4) Load 2191
+            2193:   27(fvec4) VectorShuffle 2192 2190 4 5 2 3
+                              Store 2191 2193
+            2194:      6(int) Load 8(invocation)
+            2195:    123(ptr) AccessChain 31(data) 33 115
+            2196:   27(fvec4) Load 2195
+            2197:  130(fvec3) VectorShuffle 2196 2196 0 1 2
+            2198:   17(ivec4) Load 19(ballot)
+            2199:  130(fvec3) GroupNonUniformFMax 178 PartitionedExclusiveScanNV 2197 2198
+            2200:    123(ptr) AccessChain 31(data) 2194 115
+            2201:   27(fvec4) Load 2200
+            2202:   27(fvec4) VectorShuffle 2201 2199 4 5 6 3
+                              Store 2200 2202
+            2203:      6(int) Load 8(invocation)
+            2204:    123(ptr) AccessChain 31(data) 115 115
+            2205:   27(fvec4) Load 2204
+            2206:   17(ivec4) Load 19(ballot)
+            2207:   27(fvec4) GroupNonUniformFMax 178 PartitionedExclusiveScanNV 2205 2206
+            2208:    123(ptr) AccessChain 31(data) 2203 115
+                              Store 2208 2207
+            2209:      6(int) Load 8(invocation)
+            2210:     64(ptr) AccessChain 31(data) 34 63 35
+            2211:     24(int) Load 2210
+            2212:   17(ivec4) Load 19(ballot)
+            2213:     24(int) GroupNonUniformBitwiseAnd 178 PartitionedExclusiveScanNV 2211 2212
+            2214:     64(ptr) AccessChain 31(data) 2209 63 35
+                              Store 2214 2213
+            2215:      6(int) Load 8(invocation)
+            2216:     71(ptr) AccessChain 31(data) 63 63
+            2217:   25(ivec4) Load 2216
+            2218:   70(ivec2) VectorShuffle 2217 2217 0 1
+            2219:   17(ivec4) Load 19(ballot)
+            2220:   70(ivec2) GroupNonUniformBitwiseAnd 178 PartitionedExclusiveScanNV 2218 2219
+            2221:     71(ptr) AccessChain 31(data) 2215 63
+            2222:   25(ivec4) Load 2221
+            2223:   25(ivec4) VectorShuffle 2222 2220 4 5 2 3
+                              Store 2221 2223
+            2224:      6(int) Load 8(invocation)
+            2225:     71(ptr) AccessChain 31(data) 33 63
+            2226:   25(ivec4) Load 2225
+            2227:   78(ivec3) VectorShuffle 2226 2226 0 1 2
+            2228:   17(ivec4) Load 19(ballot)
+            2229:   78(ivec3) GroupNonUniformBitwiseAnd 178 PartitionedExclusiveScanNV 2227 2228
+            2230:     71(ptr) AccessChain 31(data) 2224 63
+            2231:   25(ivec4) Load 2230
+            2232:   25(ivec4) VectorShuffle 2231 2229 4 5 6 3
+                              Store 2230 2232
+            2233:      6(int) Load 8(invocation)
+            2234:     71(ptr) AccessChain 31(data) 115 63
+            2235:   25(ivec4) Load 2234
+            2236:   17(ivec4) Load 19(ballot)
+            2237:   25(ivec4) GroupNonUniformBitwiseAnd 178 PartitionedExclusiveScanNV 2235 2236
+            2238:     71(ptr) AccessChain 31(data) 2233 63
+                              Store 2238 2237
+            2239:      6(int) Load 8(invocation)
+            2240:     90(ptr) AccessChain 31(data) 34 33 35
+            2241:      6(int) Load 2240
+            2242:   17(ivec4) Load 19(ballot)
+            2243:      6(int) GroupNonUniformBitwiseAnd 178 PartitionedExclusiveScanNV 2241 2242
+            2244:     90(ptr) AccessChain 31(data) 2239 33 35
+                              Store 2244 2243
+            2245:      6(int) Load 8(invocation)
+            2246:     40(ptr) AccessChain 31(data) 63 33
+            2247:   17(ivec4) Load 2246
+            2248:   96(ivec2) VectorShuffle 2247 2247 0 1
+            2249:   17(ivec4) Load 19(ballot)
+            2250:   96(ivec2) GroupNonUniformBitwiseAnd 178 PartitionedExclusiveScanNV 2248 2249
+            2251:     40(ptr) AccessChain 31(data) 2245 33
+            2252:   17(ivec4) Load 2251
+            2253:   17(ivec4) VectorShuffle 2252 2250 4 5 2 3
+                              Store 2251 2253
+            2254:      6(int) Load 8(invocation)
+            2255:     40(ptr) AccessChain 31(data) 33 33
+            2256:   17(ivec4) Load 2255
+            2257:  103(ivec3) VectorShuffle 2256 2256 0 1 2
+            2258:   17(ivec4) Load 19(ballot)
+            2259:  103(ivec3) GroupNonUniformBitwiseAnd 178 PartitionedExclusiveScanNV 2257 2258
+            2260:     40(ptr) AccessChain 31(data) 2254 33
+            2261:   17(ivec4) Load 2260
+            2262:   17(ivec4) VectorShuffle 2261 2259 4 5 6 3
+                              Store 2260 2262
+            2263:      6(int) Load 8(invocation)
+            2264:     40(ptr) AccessChain 31(data) 115 33
+            2265:   17(ivec4) Load 2264
+            2266:   17(ivec4) Load 19(ballot)
+            2267:   17(ivec4) GroupNonUniformBitwiseAnd 178 PartitionedExclusiveScanNV 2265 2266
+            2268:     40(ptr) AccessChain 31(data) 2263 33
+                              Store 2268 2267
+            2269:      6(int) Load 8(invocation)
+            2270:     64(ptr) AccessChain 31(data) 34 63 35
+            2271:     24(int) Load 2270
+            2272:   144(bool) SLessThan 2271 34
+            2273:   17(ivec4) Load 19(ballot)
+            2274:   144(bool) GroupNonUniformLogicalAnd 178 PartitionedExclusiveScanNV 2272 2273
+            2275:     24(int) Select 2274 63 34
+            2276:     64(ptr) AccessChain 31(data) 2269 63 35
+                              Store 2276 2275
+            2277:      6(int) Load 8(invocation)
+            2278:     71(ptr) AccessChain 31(data) 63 63
+            2279:   25(ivec4) Load 2278
+            2280:   70(ivec2) VectorShuffle 2279 2279 0 1
+            2281:  152(bvec2) SLessThan 2280 727
+            2282:   17(ivec4) Load 19(ballot)
+            2283:  152(bvec2) GroupNonUniformLogicalAnd 178 PartitionedExclusiveScanNV 2281 2282
+            2284:   70(ivec2) Select 2283 731 727
+            2285:     71(ptr) AccessChain 31(data) 2277 63
+            2286:   25(ivec4) Load 2285
+            2287:   25(ivec4) VectorShuffle 2286 2284 4 5 2 3
+                              Store 2285 2287
+            2288:      6(int) Load 8(invocation)
+            2289:     71(ptr) AccessChain 31(data) 63 63
+            2290:   25(ivec4) Load 2289
+            2291:   78(ivec3) VectorShuffle 2290 2290 0 1 2
+            2292:  161(bvec3) SLessThan 2291 740
+            2293:   17(ivec4) Load 19(ballot)
+            2294:  161(bvec3) GroupNonUniformLogicalAnd 178 PartitionedExclusiveScanNV 2292 2293
+            2295:   78(ivec3) Select 2294 744 740
+            2296:     71(ptr) AccessChain 31(data) 2288 63
+            2297:   25(ivec4) Load 2296
+            2298:   25(ivec4) VectorShuffle 2297 2295 4 5 6 3
+                              Store 2296 2298
+            2299:      6(int) Load 8(invocation)
+            2300:     71(ptr) AccessChain 31(data) 63 63
+            2301:   25(ivec4) Load 2300
+            2302:  169(bvec4) SLessThan 2301 752
+            2303:   17(ivec4) Load 19(ballot)
+            2304:  169(bvec4) GroupNonUniformLogicalAnd 178 PartitionedExclusiveScanNV 2302 2303
+            2305:   25(ivec4) Select 2304 756 752
+            2306:     71(ptr) AccessChain 31(data) 2299 63
+                              Store 2306 2305
+            2307:      6(int) Load 8(invocation)
+            2308:     64(ptr) AccessChain 31(data) 34 63 35
+            2309:     24(int) Load 2308
+            2310:   17(ivec4) Load 19(ballot)
+            2311:     24(int) GroupNonUniformBitwiseOr 178 PartitionedExclusiveScanNV 2309 2310
+            2312:     64(ptr) AccessChain 31(data) 2307 63 35
+                              Store 2312 2311
+            2313:      6(int) Load 8(invocation)
+            2314:     71(ptr) AccessChain 31(data) 63 63
+            2315:   25(ivec4) Load 2314
+            2316:   70(ivec2) VectorShuffle 2315 2315 0 1
+            2317:   17(ivec4) Load 19(ballot)
+            2318:   70(ivec2) GroupNonUniformBitwiseOr 178 PartitionedExclusiveScanNV 2316 2317
+            2319:     71(ptr) AccessChain 31(data) 2313 63
+            2320:   25(ivec4) Load 2319
+            2321:   25(ivec4) VectorShuffle 2320 2318 4 5 2 3
+                              Store 2319 2321
+            2322:      6(int) Load 8(invocation)
+            2323:     71(ptr) AccessChain 31(data) 33 63
+            2324:   25(ivec4) Load 2323
+            2325:   78(ivec3) VectorShuffle 2324 2324 0 1 2
+            2326:   17(ivec4) Load 19(ballot)
+            2327:   78(ivec3) GroupNonUniformBitwiseOr 178 PartitionedExclusiveScanNV 2325 2326
+            2328:     71(ptr) AccessChain 31(data) 2322 63
+            2329:   25(ivec4) Load 2328
+            2330:   25(ivec4) VectorShuffle 2329 2327 4 5 6 3
+                              Store 2328 2330
+            2331:      6(int) Load 8(invocation)
+            2332:     71(ptr) AccessChain 31(data) 115 63
+            2333:   25(ivec4) Load 2332
+            2334:   17(ivec4) Load 19(ballot)
+            2335:   25(ivec4) GroupNonUniformBitwiseOr 178 PartitionedExclusiveScanNV 2333 2334
+            2336:     71(ptr) AccessChain 31(data) 2331 63
+                              Store 2336 2335
+            2337:      6(int) Load 8(invocation)
+            2338:     90(ptr) AccessChain 31(data) 34 33 35
+            2339:      6(int) Load 2338
+            2340:   17(ivec4) Load 19(ballot)
+            2341:      6(int) GroupNonUniformBitwiseOr 178 PartitionedExclusiveScanNV 2339 2340
+            2342:     90(ptr) AccessChain 31(data) 2337 33 35
+                              Store 2342 2341
+            2343:      6(int) Load 8(invocation)
+            2344:     40(ptr) AccessChain 31(data) 63 33
+            2345:   17(ivec4) Load 2344
+            2346:   96(ivec2) VectorShuffle 2345 2345 0 1
+            2347:   17(ivec4) Load 19(ballot)
+            2348:   96(ivec2) GroupNonUniformBitwiseOr 178 PartitionedExclusiveScanNV 2346 2347
+            2349:     40(ptr) AccessChain 31(data) 2343 33
+            2350:   17(ivec4) Load 2349
+            2351:   17(ivec4) VectorShuffle 2350 2348 4 5 2 3
+                              Store 2349 2351
+            2352:      6(int) Load 8(invocation)
+            2353:     40(ptr) AccessChain 31(data) 33 33
+            2354:   17(ivec4) Load 2353
+            2355:  103(ivec3) VectorShuffle 2354 2354 0 1 2
+            2356:   17(ivec4) Load 19(ballot)
+            2357:  103(ivec3) GroupNonUniformBitwiseOr 178 PartitionedExclusiveScanNV 2355 2356
+            2358:     40(ptr) AccessChain 31(data) 2352 33
+            2359:   17(ivec4) Load 2358
+            2360:   17(ivec4) VectorShuffle 2359 2357 4 5 6 3
+                              Store 2358 2360
+            2361:      6(int) Load 8(invocation)
+            2362:     40(ptr) AccessChain 31(data) 115 33
+            2363:   17(ivec4) Load 2362
+            2364:   17(ivec4) Load 19(ballot)
+            2365:   17(ivec4) GroupNonUniformBitwiseOr 178 PartitionedExclusiveScanNV 2363 2364
+            2366:     40(ptr) AccessChain 31(data) 2361 33
+                              Store 2366 2365
+            2367:      6(int) Load 8(invocation)
+            2368:     64(ptr) AccessChain 31(data) 34 63 35
+            2369:     24(int) Load 2368
+            2370:   144(bool) SLessThan 2369 34
+            2371:   17(ivec4) Load 19(ballot)
+            2372:   144(bool) GroupNonUniformLogicalOr 178 PartitionedExclusiveScanNV 2370 2371
+            2373:     24(int) Select 2372 63 34
+            2374:     64(ptr) AccessChain 31(data) 2367 63 35
+                              Store 2374 2373
+            2375:      6(int) Load 8(invocation)
+            2376:     71(ptr) AccessChain 31(data) 63 63
+            2377:   25(ivec4) Load 2376
+            2378:   70(ivec2) VectorShuffle 2377 2377 0 1
+            2379:  152(bvec2) SLessThan 2378 727
+            2380:   17(ivec4) Load 19(ballot)
+            2381:  152(bvec2) GroupNonUniformLogicalOr 178 PartitionedExclusiveScanNV 2379 2380
+            2382:   70(ivec2) Select 2381 731 727
+            2383:     71(ptr) AccessChain 31(data) 2375 63
+            2384:   25(ivec4) Load 2383
+            2385:   25(ivec4) VectorShuffle 2384 2382 4 5 2 3
+                              Store 2383 2385
+            2386:      6(int) Load 8(invocation)
+            2387:     71(ptr) AccessChain 31(data) 63 63
+            2388:   25(ivec4) Load 2387
+            2389:   78(ivec3) VectorShuffle 2388 2388 0 1 2
+            2390:  161(bvec3) SLessThan 2389 740
+            2391:   17(ivec4) Load 19(ballot)
+            2392:  161(bvec3) GroupNonUniformLogicalOr 178 PartitionedExclusiveScanNV 2390 2391
+            2393:   78(ivec3) Select 2392 744 740
+            2394:     71(ptr) AccessChain 31(data) 2386 63
+            2395:   25(ivec4) Load 2394
+            2396:   25(ivec4) VectorShuffle 2395 2393 4 5 6 3
+                              Store 2394 2396
+            2397:      6(int) Load 8(invocation)
+            2398:     71(ptr) AccessChain 31(data) 63 63
+            2399:   25(ivec4) Load 2398
+            2400:  169(bvec4) SLessThan 2399 752
+            2401:   17(ivec4) Load 19(ballot)
+            2402:  169(bvec4) GroupNonUniformLogicalOr 178 PartitionedExclusiveScanNV 2400 2401
+            2403:   25(ivec4) Select 2402 756 752
+            2404:     71(ptr) AccessChain 31(data) 2397 63
+                              Store 2404 2403
+            2405:      6(int) Load 8(invocation)
+            2406:     64(ptr) AccessChain 31(data) 34 63 35
+            2407:     24(int) Load 2406
+            2408:   17(ivec4) Load 19(ballot)
+            2409:     24(int) GroupNonUniformBitwiseXor 178 PartitionedExclusiveScanNV 2407 2408
+            2410:     64(ptr) AccessChain 31(data) 2405 63 35
+                              Store 2410 2409
+            2411:      6(int) Load 8(invocation)
+            2412:     71(ptr) AccessChain 31(data) 63 63
+            2413:   25(ivec4) Load 2412
+            2414:   70(ivec2) VectorShuffle 2413 2413 0 1
+            2415:   17(ivec4) Load 19(ballot)
+            2416:   70(ivec2) GroupNonUniformBitwiseXor 178 PartitionedExclusiveScanNV 2414 2415
+            2417:     71(ptr) AccessChain 31(data) 2411 63
+            2418:   25(ivec4) Load 2417
+            2419:   25(ivec4) VectorShuffle 2418 2416 4 5 2 3
+                              Store 2417 2419
+            2420:      6(int) Load 8(invocation)
+            2421:     71(ptr) AccessChain 31(data) 33 63
+            2422:   25(ivec4) Load 2421
+            2423:   78(ivec3) VectorShuffle 2422 2422 0 1 2
+            2424:   17(ivec4) Load 19(ballot)
+            2425:   78(ivec3) GroupNonUniformBitwiseXor 178 PartitionedExclusiveScanNV 2423 2424
+            2426:     71(ptr) AccessChain 31(data) 2420 63
+            2427:   25(ivec4) Load 2426
+            2428:   25(ivec4) VectorShuffle 2427 2425 4 5 6 3
+                              Store 2426 2428
+            2429:      6(int) Load 8(invocation)
+            2430:     71(ptr) AccessChain 31(data) 115 63
+            2431:   25(ivec4) Load 2430
+            2432:   17(ivec4) Load 19(ballot)
+            2433:   25(ivec4) GroupNonUniformBitwiseXor 178 PartitionedExclusiveScanNV 2431 2432
+            2434:     71(ptr) AccessChain 31(data) 2429 63
+                              Store 2434 2433
+            2435:      6(int) Load 8(invocation)
+            2436:     90(ptr) AccessChain 31(data) 34 33 35
+            2437:      6(int) Load 2436
+            2438:   17(ivec4) Load 19(ballot)
+            2439:      6(int) GroupNonUniformBitwiseXor 178 PartitionedExclusiveScanNV 2437 2438
+            2440:     90(ptr) AccessChain 31(data) 2435 33 35
+                              Store 2440 2439
+            2441:      6(int) Load 8(invocation)
+            2442:     40(ptr) AccessChain 31(data) 63 33
+            2443:   17(ivec4) Load 2442
+            2444:   96(ivec2) VectorShuffle 2443 2443 0 1
+            2445:   17(ivec4) Load 19(ballot)
+            2446:   96(ivec2) GroupNonUniformBitwiseXor 178 PartitionedExclusiveScanNV 2444 2445
+            2447:     40(ptr) AccessChain 31(data) 2441 33
+            2448:   17(ivec4) Load 2447
+            2449:   17(ivec4) VectorShuffle 2448 2446 4 5 2 3
+                              Store 2447 2449
+            2450:      6(int) Load 8(invocation)
+            2451:     40(ptr) AccessChain 31(data) 33 33
+            2452:   17(ivec4) Load 2451
+            2453:  103(ivec3) VectorShuffle 2452 2452 0 1 2
+            2454:   17(ivec4) Load 19(ballot)
+            2455:  103(ivec3) GroupNonUniformBitwiseXor 178 PartitionedExclusiveScanNV 2453 2454
+            2456:     40(ptr) AccessChain 31(data) 2450 33
+            2457:   17(ivec4) Load 2456
+            2458:   17(ivec4) VectorShuffle 2457 2455 4 5 6 3
+                              Store 2456 2458
+            2459:      6(int) Load 8(invocation)
+            2460:     40(ptr) AccessChain 31(data) 115 33
+            2461:   17(ivec4) Load 2460
+            2462:   17(ivec4) Load 19(ballot)
+            2463:   17(ivec4) GroupNonUniformBitwiseXor 178 PartitionedExclusiveScanNV 2461 2462
+            2464:     40(ptr) AccessChain 31(data) 2459 33
+                              Store 2464 2463
+            2465:      6(int) Load 8(invocation)
+            2466:     64(ptr) AccessChain 31(data) 34 63 35
+            2467:     24(int) Load 2466
+            2468:   144(bool) SLessThan 2467 34
+            2469:   17(ivec4) Load 19(ballot)
+            2470:   144(bool) GroupNonUniformLogicalXor 178 PartitionedExclusiveScanNV 2468 2469
+            2471:     24(int) Select 2470 63 34
+            2472:     64(ptr) AccessChain 31(data) 2465 63 35
+                              Store 2472 2471
+            2473:      6(int) Load 8(invocation)
+            2474:     71(ptr) AccessChain 31(data) 63 63
+            2475:   25(ivec4) Load 2474
+            2476:   70(ivec2) VectorShuffle 2475 2475 0 1
+            2477:  152(bvec2) SLessThan 2476 727
+            2478:   17(ivec4) Load 19(ballot)
+            2479:  152(bvec2) GroupNonUniformLogicalXor 178 PartitionedExclusiveScanNV 2477 2478
+            2480:   70(ivec2) Select 2479 731 727
+            2481:     71(ptr) AccessChain 31(data) 2473 63
+            2482:   25(ivec4) Load 2481
+            2483:   25(ivec4) VectorShuffle 2482 2480 4 5 2 3
+                              Store 2481 2483
+            2484:      6(int) Load 8(invocation)
+            2485:     71(ptr) AccessChain 31(data) 63 63
+            2486:   25(ivec4) Load 2485
+            2487:   78(ivec3) VectorShuffle 2486 2486 0 1 2
+            2488:  161(bvec3) SLessThan 2487 740
+            2489:   17(ivec4) Load 19(ballot)
+            2490:  161(bvec3) GroupNonUniformLogicalXor 178 PartitionedExclusiveScanNV 2488 2489
+            2491:   78(ivec3) Select 2490 744 740
+            2492:     71(ptr) AccessChain 31(data) 2484 63
+            2493:   25(ivec4) Load 2492
+            2494:   25(ivec4) VectorShuffle 2493 2491 4 5 6 3
+                              Store 2492 2494
+            2495:      6(int) Load 8(invocation)
+            2496:     71(ptr) AccessChain 31(data) 63 63
+            2497:   25(ivec4) Load 2496
+            2498:  169(bvec4) SLessThan 2497 752
+            2499:   17(ivec4) Load 19(ballot)
+            2500:  169(bvec4) GroupNonUniformLogicalXor 178 PartitionedExclusiveScanNV 2498 2499
+            2501:   25(ivec4) Select 2500 756 752
+            2502:     71(ptr) AccessChain 31(data) 2495 63
+                              Store 2502 2501
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.subgroupQuad.comp.out b/Test/baseResults/spv.subgroupQuad.comp.out
new file mode 100644
index 0000000..d083370
--- /dev/null
+++ b/Test/baseResults/spv.subgroupQuad.comp.out
@@ -0,0 +1,739 @@
+spv.subgroupQuad.comp
+// Module Version 10300
+// Generated by (magic number): 80006
+// Id's are bound by 616
+
+                              Capability Shader
+                              Capability Float64
+                              Capability GroupNonUniform
+                              Capability GroupNonUniformQuad
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main" 10 12
+                              ExecutionMode 4 LocalSize 8 1 1
+                              Source GLSL 450
+                              SourceExtension  "GL_KHR_shader_subgroup_basic"
+                              SourceExtension  "GL_KHR_shader_subgroup_quad"
+                              Name 4  "main"
+                              Name 8  "invocation"
+                              Name 10  "gl_SubgroupInvocationID"
+                              Name 12  "gl_SubgroupSize"
+                              Name 24  "Buffers"
+                              MemberName 24(Buffers) 0  "f4"
+                              MemberName 24(Buffers) 1  "i4"
+                              MemberName 24(Buffers) 2  "u4"
+                              MemberName 24(Buffers) 3  "d4"
+                              Name 27  "data"
+                              Decorate 10(gl_SubgroupInvocationID) RelaxedPrecision
+                              Decorate 10(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId
+                              Decorate 11 RelaxedPrecision
+                              Decorate 12(gl_SubgroupSize) RelaxedPrecision
+                              Decorate 12(gl_SubgroupSize) BuiltIn SubgroupSize
+                              Decorate 13 RelaxedPrecision
+                              Decorate 14 RelaxedPrecision
+                              Decorate 16 RelaxedPrecision
+                              MemberDecorate 24(Buffers) 0 Offset 0
+                              MemberDecorate 24(Buffers) 1 Offset 16
+                              MemberDecorate 24(Buffers) 2 Offset 32
+                              MemberDecorate 24(Buffers) 3 Offset 64
+                              Decorate 24(Buffers) BufferBlock
+                              Decorate 27(data) DescriptorSet 0
+                              Decorate 27(data) Binding 0
+                              Decorate 615 BuiltIn WorkgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypePointer Function 6(int)
+               9:             TypePointer Input 6(int)
+10(gl_SubgroupInvocationID):      9(ptr) Variable Input
+12(gl_SubgroupSize):      9(ptr) Variable Input
+              15:      6(int) Constant 4
+              17:             TypeFloat 32
+              18:             TypeVector 17(float) 4
+              19:             TypeInt 32 1
+              20:             TypeVector 19(int) 4
+              21:             TypeVector 6(int) 4
+              22:             TypeFloat 64
+              23:             TypeVector 22(float) 4
+     24(Buffers):             TypeStruct 18(fvec4) 20(ivec4) 21(ivec4) 23(fvec4)
+              25:             TypeArray 24(Buffers) 15
+              26:             TypePointer Uniform 25
+        27(data):     26(ptr) Variable Uniform
+              29:     19(int) Constant 0
+              30:      6(int) Constant 0
+              31:             TypePointer Uniform 17(float)
+              34:      6(int) Constant 1
+              35:      6(int) Constant 3
+              39:     19(int) Constant 1
+              40:             TypeVector 17(float) 2
+              41:             TypePointer Uniform 18(fvec4)
+              50:     19(int) Constant 2
+              51:             TypeVector 17(float) 3
+              60:     19(int) Constant 3
+              66:             TypePointer Uniform 19(int)
+              72:             TypeVector 19(int) 2
+              73:             TypePointer Uniform 20(ivec4)
+              82:             TypeVector 19(int) 3
+              96:             TypePointer Uniform 6(int)
+             102:             TypeVector 6(int) 2
+             103:             TypePointer Uniform 21(ivec4)
+             112:             TypeVector 6(int) 3
+             126:             TypePointer Uniform 22(float)
+             132:             TypeVector 22(float) 2
+             133:             TypePointer Uniform 23(fvec4)
+             142:             TypeVector 22(float) 3
+             158:             TypeBool
+             167:   72(ivec2) ConstantComposite 29 29
+             168:             TypeVector 158(bool) 2
+             171:   72(ivec2) ConstantComposite 39 39
+             180:   82(ivec3) ConstantComposite 29 29 29
+             181:             TypeVector 158(bool) 3
+             184:   82(ivec3) ConstantComposite 39 39 39
+             192:   20(ivec4) ConstantComposite 29 29 29 29
+             193:             TypeVector 158(bool) 4
+             196:   20(ivec4) ConstantComposite 39 39 39 39
+             478:      6(int) Constant 2
+             614:      6(int) Constant 8
+             615:  112(ivec3) ConstantComposite 614 34 34
+         4(main):           2 Function None 3
+               5:             Label
+   8(invocation):      7(ptr) Variable Function
+              11:      6(int) Load 10(gl_SubgroupInvocationID)
+              13:      6(int) Load 12(gl_SubgroupSize)
+              14:      6(int) IAdd 11 13
+              16:      6(int) UMod 14 15
+                              Store 8(invocation) 16
+              28:      6(int) Load 8(invocation)
+              32:     31(ptr) AccessChain 27(data) 29 29 30
+              33:   17(float) Load 32
+              36:   17(float) GroupNonUniformQuadBroadcast 35 33 34
+              37:     31(ptr) AccessChain 27(data) 28 29 30
+                              Store 37 36
+              38:      6(int) Load 8(invocation)
+              42:     41(ptr) AccessChain 27(data) 39 29
+              43:   18(fvec4) Load 42
+              44:   40(fvec2) VectorShuffle 43 43 0 1
+              45:   40(fvec2) GroupNonUniformQuadBroadcast 35 44 34
+              46:     41(ptr) AccessChain 27(data) 38 29
+              47:   18(fvec4) Load 46
+              48:   18(fvec4) VectorShuffle 47 45 4 5 2 3
+                              Store 46 48
+              49:      6(int) Load 8(invocation)
+              52:     41(ptr) AccessChain 27(data) 50 29
+              53:   18(fvec4) Load 52
+              54:   51(fvec3) VectorShuffle 53 53 0 1 2
+              55:   51(fvec3) GroupNonUniformQuadBroadcast 35 54 34
+              56:     41(ptr) AccessChain 27(data) 49 29
+              57:   18(fvec4) Load 56
+              58:   18(fvec4) VectorShuffle 57 55 4 5 6 3
+                              Store 56 58
+              59:      6(int) Load 8(invocation)
+              61:     41(ptr) AccessChain 27(data) 60 29
+              62:   18(fvec4) Load 61
+              63:   18(fvec4) GroupNonUniformQuadBroadcast 35 62 34
+              64:     41(ptr) AccessChain 27(data) 59 29
+                              Store 64 63
+              65:      6(int) Load 8(invocation)
+              67:     66(ptr) AccessChain 27(data) 29 39 30
+              68:     19(int) Load 67
+              69:     19(int) GroupNonUniformQuadBroadcast 35 68 34
+              70:     66(ptr) AccessChain 27(data) 65 39 30
+                              Store 70 69
+              71:      6(int) Load 8(invocation)
+              74:     73(ptr) AccessChain 27(data) 39 39
+              75:   20(ivec4) Load 74
+              76:   72(ivec2) VectorShuffle 75 75 0 1
+              77:   72(ivec2) GroupNonUniformQuadBroadcast 35 76 34
+              78:     73(ptr) AccessChain 27(data) 71 39
+              79:   20(ivec4) Load 78
+              80:   20(ivec4) VectorShuffle 79 77 4 5 2 3
+                              Store 78 80
+              81:      6(int) Load 8(invocation)
+              83:     73(ptr) AccessChain 27(data) 50 39
+              84:   20(ivec4) Load 83
+              85:   82(ivec3) VectorShuffle 84 84 0 1 2
+              86:   82(ivec3) GroupNonUniformQuadBroadcast 35 85 34
+              87:     73(ptr) AccessChain 27(data) 81 39
+              88:   20(ivec4) Load 87
+              89:   20(ivec4) VectorShuffle 88 86 4 5 6 3
+                              Store 87 89
+              90:      6(int) Load 8(invocation)
+              91:     73(ptr) AccessChain 27(data) 60 39
+              92:   20(ivec4) Load 91
+              93:   20(ivec4) GroupNonUniformQuadBroadcast 35 92 34
+              94:     73(ptr) AccessChain 27(data) 90 39
+                              Store 94 93
+              95:      6(int) Load 8(invocation)
+              97:     96(ptr) AccessChain 27(data) 29 50 30
+              98:      6(int) Load 97
+              99:      6(int) GroupNonUniformQuadBroadcast 35 98 34
+             100:     96(ptr) AccessChain 27(data) 95 50 30
+                              Store 100 99
+             101:      6(int) Load 8(invocation)
+             104:    103(ptr) AccessChain 27(data) 39 50
+             105:   21(ivec4) Load 104
+             106:  102(ivec2) VectorShuffle 105 105 0 1
+             107:  102(ivec2) GroupNonUniformQuadBroadcast 35 106 34
+             108:    103(ptr) AccessChain 27(data) 101 50
+             109:   21(ivec4) Load 108
+             110:   21(ivec4) VectorShuffle 109 107 4 5 2 3
+                              Store 108 110
+             111:      6(int) Load 8(invocation)
+             113:    103(ptr) AccessChain 27(data) 50 50
+             114:   21(ivec4) Load 113
+             115:  112(ivec3) VectorShuffle 114 114 0 1 2
+             116:  112(ivec3) GroupNonUniformQuadBroadcast 35 115 34
+             117:    103(ptr) AccessChain 27(data) 111 50
+             118:   21(ivec4) Load 117
+             119:   21(ivec4) VectorShuffle 118 116 4 5 6 3
+                              Store 117 119
+             120:      6(int) Load 8(invocation)
+             121:    103(ptr) AccessChain 27(data) 60 50
+             122:   21(ivec4) Load 121
+             123:   21(ivec4) GroupNonUniformQuadBroadcast 35 122 34
+             124:    103(ptr) AccessChain 27(data) 120 50
+                              Store 124 123
+             125:      6(int) Load 8(invocation)
+             127:    126(ptr) AccessChain 27(data) 29 60 30
+             128:   22(float) Load 127
+             129:   22(float) GroupNonUniformQuadBroadcast 35 128 34
+             130:    126(ptr) AccessChain 27(data) 125 60 30
+                              Store 130 129
+             131:      6(int) Load 8(invocation)
+             134:    133(ptr) AccessChain 27(data) 39 60
+             135:   23(fvec4) Load 134
+             136:  132(fvec2) VectorShuffle 135 135 0 1
+             137:  132(fvec2) GroupNonUniformQuadBroadcast 35 136 34
+             138:    133(ptr) AccessChain 27(data) 131 60
+             139:   23(fvec4) Load 138
+             140:   23(fvec4) VectorShuffle 139 137 4 5 2 3
+                              Store 138 140
+             141:      6(int) Load 8(invocation)
+             143:    133(ptr) AccessChain 27(data) 50 60
+             144:   23(fvec4) Load 143
+             145:  142(fvec3) VectorShuffle 144 144 0 1 2
+             146:  142(fvec3) GroupNonUniformQuadBroadcast 35 145 34
+             147:    133(ptr) AccessChain 27(data) 141 60
+             148:   23(fvec4) Load 147
+             149:   23(fvec4) VectorShuffle 148 146 4 5 6 3
+                              Store 147 149
+             150:      6(int) Load 8(invocation)
+             151:    133(ptr) AccessChain 27(data) 60 60
+             152:   23(fvec4) Load 151
+             153:   23(fvec4) GroupNonUniformQuadBroadcast 35 152 34
+             154:    133(ptr) AccessChain 27(data) 150 60
+                              Store 154 153
+             155:      6(int) Load 8(invocation)
+             156:     66(ptr) AccessChain 27(data) 29 39 30
+             157:     19(int) Load 156
+             159:   158(bool) SLessThan 157 29
+             160:   158(bool) GroupNonUniformQuadBroadcast 35 159 34
+             161:     19(int) Select 160 39 29
+             162:     66(ptr) AccessChain 27(data) 155 39 30
+                              Store 162 161
+             163:      6(int) Load 8(invocation)
+             164:     73(ptr) AccessChain 27(data) 39 39
+             165:   20(ivec4) Load 164
+             166:   72(ivec2) VectorShuffle 165 165 0 1
+             169:  168(bvec2) SLessThan 166 167
+             170:  168(bvec2) GroupNonUniformQuadBroadcast 35 169 34
+             172:   72(ivec2) Select 170 171 167
+             173:     73(ptr) AccessChain 27(data) 163 39
+             174:   20(ivec4) Load 173
+             175:   20(ivec4) VectorShuffle 174 172 4 5 2 3
+                              Store 173 175
+             176:      6(int) Load 8(invocation)
+             177:     73(ptr) AccessChain 27(data) 39 39
+             178:   20(ivec4) Load 177
+             179:   82(ivec3) VectorShuffle 178 178 0 1 2
+             182:  181(bvec3) SLessThan 179 180
+             183:  181(bvec3) GroupNonUniformQuadBroadcast 35 182 34
+             185:   82(ivec3) Select 183 184 180
+             186:     73(ptr) AccessChain 27(data) 176 39
+             187:   20(ivec4) Load 186
+             188:   20(ivec4) VectorShuffle 187 185 4 5 6 3
+                              Store 186 188
+             189:      6(int) Load 8(invocation)
+             190:     73(ptr) AccessChain 27(data) 39 39
+             191:   20(ivec4) Load 190
+             194:  193(bvec4) SLessThan 191 192
+             195:  193(bvec4) GroupNonUniformQuadBroadcast 35 194 34
+             197:   20(ivec4) Select 195 196 192
+             198:     73(ptr) AccessChain 27(data) 189 39
+                              Store 198 197
+             199:      6(int) Load 8(invocation)
+             200:     31(ptr) AccessChain 27(data) 29 29 30
+             201:   17(float) Load 200
+             202:   17(float) GroupNonUniformQuadSwap 35 201 30
+             203:     31(ptr) AccessChain 27(data) 199 29 30
+                              Store 203 202
+             204:      6(int) Load 8(invocation)
+             205:     41(ptr) AccessChain 27(data) 39 29
+             206:   18(fvec4) Load 205
+             207:   40(fvec2) VectorShuffle 206 206 0 1
+             208:   40(fvec2) GroupNonUniformQuadSwap 35 207 30
+             209:     41(ptr) AccessChain 27(data) 204 29
+             210:   18(fvec4) Load 209
+             211:   18(fvec4) VectorShuffle 210 208 4 5 2 3
+                              Store 209 211
+             212:      6(int) Load 8(invocation)
+             213:     41(ptr) AccessChain 27(data) 50 29
+             214:   18(fvec4) Load 213
+             215:   51(fvec3) VectorShuffle 214 214 0 1 2
+             216:   51(fvec3) GroupNonUniformQuadSwap 35 215 30
+             217:     41(ptr) AccessChain 27(data) 212 29
+             218:   18(fvec4) Load 217
+             219:   18(fvec4) VectorShuffle 218 216 4 5 6 3
+                              Store 217 219
+             220:      6(int) Load 8(invocation)
+             221:     41(ptr) AccessChain 27(data) 60 29
+             222:   18(fvec4) Load 221
+             223:   18(fvec4) GroupNonUniformQuadSwap 35 222 30
+             224:     41(ptr) AccessChain 27(data) 220 29
+                              Store 224 223
+             225:      6(int) Load 8(invocation)
+             226:     66(ptr) AccessChain 27(data) 29 39 30
+             227:     19(int) Load 226
+             228:     19(int) GroupNonUniformQuadSwap 35 227 30
+             229:     66(ptr) AccessChain 27(data) 225 39 30
+                              Store 229 228
+             230:      6(int) Load 8(invocation)
+             231:     73(ptr) AccessChain 27(data) 39 39
+             232:   20(ivec4) Load 231
+             233:   72(ivec2) VectorShuffle 232 232 0 1
+             234:   72(ivec2) GroupNonUniformQuadSwap 35 233 30
+             235:     73(ptr) AccessChain 27(data) 230 39
+             236:   20(ivec4) Load 235
+             237:   20(ivec4) VectorShuffle 236 234 4 5 2 3
+                              Store 235 237
+             238:      6(int) Load 8(invocation)
+             239:     73(ptr) AccessChain 27(data) 50 39
+             240:   20(ivec4) Load 239
+             241:   82(ivec3) VectorShuffle 240 240 0 1 2
+             242:   82(ivec3) GroupNonUniformQuadSwap 35 241 30
+             243:     73(ptr) AccessChain 27(data) 238 39
+             244:   20(ivec4) Load 243
+             245:   20(ivec4) VectorShuffle 244 242 4 5 6 3
+                              Store 243 245
+             246:      6(int) Load 8(invocation)
+             247:     73(ptr) AccessChain 27(data) 60 39
+             248:   20(ivec4) Load 247
+             249:   20(ivec4) GroupNonUniformQuadSwap 35 248 30
+             250:     73(ptr) AccessChain 27(data) 246 39
+                              Store 250 249
+             251:      6(int) Load 8(invocation)
+             252:     96(ptr) AccessChain 27(data) 29 50 30
+             253:      6(int) Load 252
+             254:      6(int) GroupNonUniformQuadSwap 35 253 30
+             255:     96(ptr) AccessChain 27(data) 251 50 30
+                              Store 255 254
+             256:      6(int) Load 8(invocation)
+             257:    103(ptr) AccessChain 27(data) 39 50
+             258:   21(ivec4) Load 257
+             259:  102(ivec2) VectorShuffle 258 258 0 1
+             260:  102(ivec2) GroupNonUniformQuadSwap 35 259 30
+             261:    103(ptr) AccessChain 27(data) 256 50
+             262:   21(ivec4) Load 261
+             263:   21(ivec4) VectorShuffle 262 260 4 5 2 3
+                              Store 261 263
+             264:      6(int) Load 8(invocation)
+             265:    103(ptr) AccessChain 27(data) 50 50
+             266:   21(ivec4) Load 265
+             267:  112(ivec3) VectorShuffle 266 266 0 1 2
+             268:  112(ivec3) GroupNonUniformQuadSwap 35 267 30
+             269:    103(ptr) AccessChain 27(data) 264 50
+             270:   21(ivec4) Load 269
+             271:   21(ivec4) VectorShuffle 270 268 4 5 6 3
+                              Store 269 271
+             272:      6(int) Load 8(invocation)
+             273:    103(ptr) AccessChain 27(data) 60 50
+             274:   21(ivec4) Load 273
+             275:   21(ivec4) GroupNonUniformQuadSwap 35 274 30
+             276:    103(ptr) AccessChain 27(data) 272 50
+                              Store 276 275
+             277:      6(int) Load 8(invocation)
+             278:    126(ptr) AccessChain 27(data) 29 60 30
+             279:   22(float) Load 278
+             280:   22(float) GroupNonUniformQuadSwap 35 279 30
+             281:    126(ptr) AccessChain 27(data) 277 60 30
+                              Store 281 280
+             282:      6(int) Load 8(invocation)
+             283:    133(ptr) AccessChain 27(data) 39 60
+             284:   23(fvec4) Load 283
+             285:  132(fvec2) VectorShuffle 284 284 0 1
+             286:  132(fvec2) GroupNonUniformQuadSwap 35 285 30
+             287:    133(ptr) AccessChain 27(data) 282 60
+             288:   23(fvec4) Load 287
+             289:   23(fvec4) VectorShuffle 288 286 4 5 2 3
+                              Store 287 289
+             290:      6(int) Load 8(invocation)
+             291:    133(ptr) AccessChain 27(data) 50 60
+             292:   23(fvec4) Load 291
+             293:  142(fvec3) VectorShuffle 292 292 0 1 2
+             294:  142(fvec3) GroupNonUniformQuadSwap 35 293 30
+             295:    133(ptr) AccessChain 27(data) 290 60
+             296:   23(fvec4) Load 295
+             297:   23(fvec4) VectorShuffle 296 294 4 5 6 3
+                              Store 295 297
+             298:      6(int) Load 8(invocation)
+             299:    133(ptr) AccessChain 27(data) 60 60
+             300:   23(fvec4) Load 299
+             301:   23(fvec4) GroupNonUniformQuadSwap 35 300 30
+             302:    133(ptr) AccessChain 27(data) 298 60
+                              Store 302 301
+             303:      6(int) Load 8(invocation)
+             304:     66(ptr) AccessChain 27(data) 29 39 30
+             305:     19(int) Load 304
+             306:   158(bool) SLessThan 305 29
+             307:   158(bool) GroupNonUniformQuadSwap 35 306 30
+             308:     19(int) Select 307 39 29
+             309:     66(ptr) AccessChain 27(data) 303 39 30
+                              Store 309 308
+             310:      6(int) Load 8(invocation)
+             311:     73(ptr) AccessChain 27(data) 39 39
+             312:   20(ivec4) Load 311
+             313:   72(ivec2) VectorShuffle 312 312 0 1
+             314:  168(bvec2) SLessThan 313 167
+             315:  168(bvec2) GroupNonUniformQuadSwap 35 314 30
+             316:   72(ivec2) Select 315 171 167
+             317:     73(ptr) AccessChain 27(data) 310 39
+             318:   20(ivec4) Load 317
+             319:   20(ivec4) VectorShuffle 318 316 4 5 2 3
+                              Store 317 319
+             320:      6(int) Load 8(invocation)
+             321:     73(ptr) AccessChain 27(data) 39 39
+             322:   20(ivec4) Load 321
+             323:   82(ivec3) VectorShuffle 322 322 0 1 2
+             324:  181(bvec3) SLessThan 323 180
+             325:  181(bvec3) GroupNonUniformQuadSwap 35 324 30
+             326:   82(ivec3) Select 325 184 180
+             327:     73(ptr) AccessChain 27(data) 320 39
+             328:   20(ivec4) Load 327
+             329:   20(ivec4) VectorShuffle 328 326 4 5 6 3
+                              Store 327 329
+             330:      6(int) Load 8(invocation)
+             331:     73(ptr) AccessChain 27(data) 39 39
+             332:   20(ivec4) Load 331
+             333:  193(bvec4) SLessThan 332 192
+             334:  193(bvec4) GroupNonUniformQuadSwap 35 333 30
+             335:   20(ivec4) Select 334 196 192
+             336:     73(ptr) AccessChain 27(data) 330 39
+                              Store 336 335
+             337:      6(int) Load 8(invocation)
+             338:     31(ptr) AccessChain 27(data) 29 29 30
+             339:   17(float) Load 338
+             340:   17(float) GroupNonUniformQuadSwap 35 339 34
+             341:     31(ptr) AccessChain 27(data) 337 29 30
+                              Store 341 340
+             342:      6(int) Load 8(invocation)
+             343:     41(ptr) AccessChain 27(data) 39 29
+             344:   18(fvec4) Load 343
+             345:   40(fvec2) VectorShuffle 344 344 0 1
+             346:   40(fvec2) GroupNonUniformQuadSwap 35 345 34
+             347:     41(ptr) AccessChain 27(data) 342 29
+             348:   18(fvec4) Load 347
+             349:   18(fvec4) VectorShuffle 348 346 4 5 2 3
+                              Store 347 349
+             350:      6(int) Load 8(invocation)
+             351:     41(ptr) AccessChain 27(data) 50 29
+             352:   18(fvec4) Load 351
+             353:   51(fvec3) VectorShuffle 352 352 0 1 2
+             354:   51(fvec3) GroupNonUniformQuadSwap 35 353 34
+             355:     41(ptr) AccessChain 27(data) 350 29
+             356:   18(fvec4) Load 355
+             357:   18(fvec4) VectorShuffle 356 354 4 5 6 3
+                              Store 355 357
+             358:      6(int) Load 8(invocation)
+             359:     41(ptr) AccessChain 27(data) 60 29
+             360:   18(fvec4) Load 359
+             361:   18(fvec4) GroupNonUniformQuadSwap 35 360 34
+             362:     41(ptr) AccessChain 27(data) 358 29
+                              Store 362 361
+             363:      6(int) Load 8(invocation)
+             364:     66(ptr) AccessChain 27(data) 29 39 30
+             365:     19(int) Load 364
+             366:     19(int) GroupNonUniformQuadSwap 35 365 34
+             367:     66(ptr) AccessChain 27(data) 363 39 30
+                              Store 367 366
+             368:      6(int) Load 8(invocation)
+             369:     73(ptr) AccessChain 27(data) 39 39
+             370:   20(ivec4) Load 369
+             371:   72(ivec2) VectorShuffle 370 370 0 1
+             372:   72(ivec2) GroupNonUniformQuadSwap 35 371 34
+             373:     73(ptr) AccessChain 27(data) 368 39
+             374:   20(ivec4) Load 373
+             375:   20(ivec4) VectorShuffle 374 372 4 5 2 3
+                              Store 373 375
+             376:      6(int) Load 8(invocation)
+             377:     73(ptr) AccessChain 27(data) 50 39
+             378:   20(ivec4) Load 377
+             379:   82(ivec3) VectorShuffle 378 378 0 1 2
+             380:   82(ivec3) GroupNonUniformQuadSwap 35 379 34
+             381:     73(ptr) AccessChain 27(data) 376 39
+             382:   20(ivec4) Load 381
+             383:   20(ivec4) VectorShuffle 382 380 4 5 6 3
+                              Store 381 383
+             384:      6(int) Load 8(invocation)
+             385:     73(ptr) AccessChain 27(data) 60 39
+             386:   20(ivec4) Load 385
+             387:   20(ivec4) GroupNonUniformQuadSwap 35 386 34
+             388:     73(ptr) AccessChain 27(data) 384 39
+                              Store 388 387
+             389:      6(int) Load 8(invocation)
+             390:     96(ptr) AccessChain 27(data) 29 50 30
+             391:      6(int) Load 390
+             392:      6(int) GroupNonUniformQuadSwap 35 391 34
+             393:     96(ptr) AccessChain 27(data) 389 50 30
+                              Store 393 392
+             394:      6(int) Load 8(invocation)
+             395:    103(ptr) AccessChain 27(data) 39 50
+             396:   21(ivec4) Load 395
+             397:  102(ivec2) VectorShuffle 396 396 0 1
+             398:  102(ivec2) GroupNonUniformQuadSwap 35 397 34
+             399:    103(ptr) AccessChain 27(data) 394 50
+             400:   21(ivec4) Load 399
+             401:   21(ivec4) VectorShuffle 400 398 4 5 2 3
+                              Store 399 401
+             402:      6(int) Load 8(invocation)
+             403:    103(ptr) AccessChain 27(data) 50 50
+             404:   21(ivec4) Load 403
+             405:  112(ivec3) VectorShuffle 404 404 0 1 2
+             406:  112(ivec3) GroupNonUniformQuadSwap 35 405 34
+             407:    103(ptr) AccessChain 27(data) 402 50
+             408:   21(ivec4) Load 407
+             409:   21(ivec4) VectorShuffle 408 406 4 5 6 3
+                              Store 407 409
+             410:      6(int) Load 8(invocation)
+             411:    103(ptr) AccessChain 27(data) 60 50
+             412:   21(ivec4) Load 411
+             413:   21(ivec4) GroupNonUniformQuadSwap 35 412 34
+             414:    103(ptr) AccessChain 27(data) 410 50
+                              Store 414 413
+             415:      6(int) Load 8(invocation)
+             416:    126(ptr) AccessChain 27(data) 29 60 30
+             417:   22(float) Load 416
+             418:   22(float) GroupNonUniformQuadSwap 35 417 34
+             419:    126(ptr) AccessChain 27(data) 415 60 30
+                              Store 419 418
+             420:      6(int) Load 8(invocation)
+             421:    133(ptr) AccessChain 27(data) 39 60
+             422:   23(fvec4) Load 421
+             423:  132(fvec2) VectorShuffle 422 422 0 1
+             424:  132(fvec2) GroupNonUniformQuadSwap 35 423 34
+             425:    133(ptr) AccessChain 27(data) 420 60
+             426:   23(fvec4) Load 425
+             427:   23(fvec4) VectorShuffle 426 424 4 5 2 3
+                              Store 425 427
+             428:      6(int) Load 8(invocation)
+             429:    133(ptr) AccessChain 27(data) 50 60
+             430:   23(fvec4) Load 429
+             431:  142(fvec3) VectorShuffle 430 430 0 1 2
+             432:  142(fvec3) GroupNonUniformQuadSwap 35 431 34
+             433:    133(ptr) AccessChain 27(data) 428 60
+             434:   23(fvec4) Load 433
+             435:   23(fvec4) VectorShuffle 434 432 4 5 6 3
+                              Store 433 435
+             436:      6(int) Load 8(invocation)
+             437:    133(ptr) AccessChain 27(data) 60 60
+             438:   23(fvec4) Load 437
+             439:   23(fvec4) GroupNonUniformQuadSwap 35 438 34
+             440:    133(ptr) AccessChain 27(data) 436 60
+                              Store 440 439
+             441:      6(int) Load 8(invocation)
+             442:     66(ptr) AccessChain 27(data) 29 39 30
+             443:     19(int) Load 442
+             444:   158(bool) SLessThan 443 29
+             445:   158(bool) GroupNonUniformQuadSwap 35 444 34
+             446:     19(int) Select 445 39 29
+             447:     66(ptr) AccessChain 27(data) 441 39 30
+                              Store 447 446
+             448:      6(int) Load 8(invocation)
+             449:     73(ptr) AccessChain 27(data) 39 39
+             450:   20(ivec4) Load 449
+             451:   72(ivec2) VectorShuffle 450 450 0 1
+             452:  168(bvec2) SLessThan 451 167
+             453:  168(bvec2) GroupNonUniformQuadSwap 35 452 34
+             454:   72(ivec2) Select 453 171 167
+             455:     73(ptr) AccessChain 27(data) 448 39
+             456:   20(ivec4) Load 455
+             457:   20(ivec4) VectorShuffle 456 454 4 5 2 3
+                              Store 455 457
+             458:      6(int) Load 8(invocation)
+             459:     73(ptr) AccessChain 27(data) 39 39
+             460:   20(ivec4) Load 459
+             461:   82(ivec3) VectorShuffle 460 460 0 1 2
+             462:  181(bvec3) SLessThan 461 180
+             463:  181(bvec3) GroupNonUniformQuadSwap 35 462 34
+             464:   82(ivec3) Select 463 184 180
+             465:     73(ptr) AccessChain 27(data) 458 39
+             466:   20(ivec4) Load 465
+             467:   20(ivec4) VectorShuffle 466 464 4 5 6 3
+                              Store 465 467
+             468:      6(int) Load 8(invocation)
+             469:     73(ptr) AccessChain 27(data) 39 39
+             470:   20(ivec4) Load 469
+             471:  193(bvec4) SLessThan 470 192
+             472:  193(bvec4) GroupNonUniformQuadSwap 35 471 34
+             473:   20(ivec4) Select 472 196 192
+             474:     73(ptr) AccessChain 27(data) 468 39
+                              Store 474 473
+             475:      6(int) Load 8(invocation)
+             476:     31(ptr) AccessChain 27(data) 29 29 30
+             477:   17(float) Load 476
+             479:   17(float) GroupNonUniformQuadSwap 35 477 478
+             480:     31(ptr) AccessChain 27(data) 475 29 30
+                              Store 480 479
+             481:      6(int) Load 8(invocation)
+             482:     41(ptr) AccessChain 27(data) 39 29
+             483:   18(fvec4) Load 482
+             484:   40(fvec2) VectorShuffle 483 483 0 1
+             485:   40(fvec2) GroupNonUniformQuadSwap 35 484 478
+             486:     41(ptr) AccessChain 27(data) 481 29
+             487:   18(fvec4) Load 486
+             488:   18(fvec4) VectorShuffle 487 485 4 5 2 3
+                              Store 486 488
+             489:      6(int) Load 8(invocation)
+             490:     41(ptr) AccessChain 27(data) 50 29
+             491:   18(fvec4) Load 490
+             492:   51(fvec3) VectorShuffle 491 491 0 1 2
+             493:   51(fvec3) GroupNonUniformQuadSwap 35 492 478
+             494:     41(ptr) AccessChain 27(data) 489 29
+             495:   18(fvec4) Load 494
+             496:   18(fvec4) VectorShuffle 495 493 4 5 6 3
+                              Store 494 496
+             497:      6(int) Load 8(invocation)
+             498:     41(ptr) AccessChain 27(data) 60 29
+             499:   18(fvec4) Load 498
+             500:   18(fvec4) GroupNonUniformQuadSwap 35 499 478
+             501:     41(ptr) AccessChain 27(data) 497 29
+                              Store 501 500
+             502:      6(int) Load 8(invocation)
+             503:     66(ptr) AccessChain 27(data) 29 39 30
+             504:     19(int) Load 503
+             505:     19(int) GroupNonUniformQuadSwap 35 504 478
+             506:     66(ptr) AccessChain 27(data) 502 39 30
+                              Store 506 505
+             507:      6(int) Load 8(invocation)
+             508:     73(ptr) AccessChain 27(data) 39 39
+             509:   20(ivec4) Load 508
+             510:   72(ivec2) VectorShuffle 509 509 0 1
+             511:   72(ivec2) GroupNonUniformQuadSwap 35 510 478
+             512:     73(ptr) AccessChain 27(data) 507 39
+             513:   20(ivec4) Load 512
+             514:   20(ivec4) VectorShuffle 513 511 4 5 2 3
+                              Store 512 514
+             515:      6(int) Load 8(invocation)
+             516:     73(ptr) AccessChain 27(data) 50 39
+             517:   20(ivec4) Load 516
+             518:   82(ivec3) VectorShuffle 517 517 0 1 2
+             519:   82(ivec3) GroupNonUniformQuadSwap 35 518 478
+             520:     73(ptr) AccessChain 27(data) 515 39
+             521:   20(ivec4) Load 520
+             522:   20(ivec4) VectorShuffle 521 519 4 5 6 3
+                              Store 520 522
+             523:      6(int) Load 8(invocation)
+             524:     73(ptr) AccessChain 27(data) 60 39
+             525:   20(ivec4) Load 524
+             526:   20(ivec4) GroupNonUniformQuadSwap 35 525 478
+             527:     73(ptr) AccessChain 27(data) 523 39
+                              Store 527 526
+             528:      6(int) Load 8(invocation)
+             529:     96(ptr) AccessChain 27(data) 29 50 30
+             530:      6(int) Load 529
+             531:      6(int) GroupNonUniformQuadSwap 35 530 478
+             532:     96(ptr) AccessChain 27(data) 528 50 30
+                              Store 532 531
+             533:      6(int) Load 8(invocation)
+             534:    103(ptr) AccessChain 27(data) 39 50
+             535:   21(ivec4) Load 534
+             536:  102(ivec2) VectorShuffle 535 535 0 1
+             537:  102(ivec2) GroupNonUniformQuadSwap 35 536 478
+             538:    103(ptr) AccessChain 27(data) 533 50
+             539:   21(ivec4) Load 538
+             540:   21(ivec4) VectorShuffle 539 537 4 5 2 3
+                              Store 538 540
+             541:      6(int) Load 8(invocation)
+             542:    103(ptr) AccessChain 27(data) 50 50
+             543:   21(ivec4) Load 542
+             544:  112(ivec3) VectorShuffle 543 543 0 1 2
+             545:  112(ivec3) GroupNonUniformQuadSwap 35 544 478
+             546:    103(ptr) AccessChain 27(data) 541 50
+             547:   21(ivec4) Load 546
+             548:   21(ivec4) VectorShuffle 547 545 4 5 6 3
+                              Store 546 548
+             549:      6(int) Load 8(invocation)
+             550:    103(ptr) AccessChain 27(data) 60 50
+             551:   21(ivec4) Load 550
+             552:   21(ivec4) GroupNonUniformQuadSwap 35 551 478
+             553:    103(ptr) AccessChain 27(data) 549 50
+                              Store 553 552
+             554:      6(int) Load 8(invocation)
+             555:    126(ptr) AccessChain 27(data) 29 60 30
+             556:   22(float) Load 555
+             557:   22(float) GroupNonUniformQuadSwap 35 556 478
+             558:    126(ptr) AccessChain 27(data) 554 60 30
+                              Store 558 557
+             559:      6(int) Load 8(invocation)
+             560:    133(ptr) AccessChain 27(data) 39 60
+             561:   23(fvec4) Load 560
+             562:  132(fvec2) VectorShuffle 561 561 0 1
+             563:  132(fvec2) GroupNonUniformQuadSwap 35 562 478
+             564:    133(ptr) AccessChain 27(data) 559 60
+             565:   23(fvec4) Load 564
+             566:   23(fvec4) VectorShuffle 565 563 4 5 2 3
+                              Store 564 566
+             567:      6(int) Load 8(invocation)
+             568:    133(ptr) AccessChain 27(data) 50 60
+             569:   23(fvec4) Load 568
+             570:  142(fvec3) VectorShuffle 569 569 0 1 2
+             571:  142(fvec3) GroupNonUniformQuadSwap 35 570 478
+             572:    133(ptr) AccessChain 27(data) 567 60
+             573:   23(fvec4) Load 572
+             574:   23(fvec4) VectorShuffle 573 571 4 5 6 3
+                              Store 572 574
+             575:      6(int) Load 8(invocation)
+             576:    133(ptr) AccessChain 27(data) 60 60
+             577:   23(fvec4) Load 576
+             578:   23(fvec4) GroupNonUniformQuadSwap 35 577 478
+             579:    133(ptr) AccessChain 27(data) 575 60
+                              Store 579 578
+             580:      6(int) Load 8(invocation)
+             581:     66(ptr) AccessChain 27(data) 29 39 30
+             582:     19(int) Load 581
+             583:   158(bool) SLessThan 582 29
+             584:   158(bool) GroupNonUniformQuadSwap 35 583 478
+             585:     19(int) Select 584 39 29
+             586:     66(ptr) AccessChain 27(data) 580 39 30
+                              Store 586 585
+             587:      6(int) Load 8(invocation)
+             588:     73(ptr) AccessChain 27(data) 39 39
+             589:   20(ivec4) Load 588
+             590:   72(ivec2) VectorShuffle 589 589 0 1
+             591:  168(bvec2) SLessThan 590 167
+             592:  168(bvec2) GroupNonUniformQuadSwap 35 591 478
+             593:   72(ivec2) Select 592 171 167
+             594:     73(ptr) AccessChain 27(data) 587 39
+             595:   20(ivec4) Load 594
+             596:   20(ivec4) VectorShuffle 595 593 4 5 2 3
+                              Store 594 596
+             597:      6(int) Load 8(invocation)
+             598:     73(ptr) AccessChain 27(data) 39 39
+             599:   20(ivec4) Load 598
+             600:   82(ivec3) VectorShuffle 599 599 0 1 2
+             601:  181(bvec3) SLessThan 600 180
+             602:  181(bvec3) GroupNonUniformQuadSwap 35 601 478
+             603:   82(ivec3) Select 602 184 180
+             604:     73(ptr) AccessChain 27(data) 597 39
+             605:   20(ivec4) Load 604
+             606:   20(ivec4) VectorShuffle 605 603 4 5 6 3
+                              Store 604 606
+             607:      6(int) Load 8(invocation)
+             608:     73(ptr) AccessChain 27(data) 39 39
+             609:   20(ivec4) Load 608
+             610:  193(bvec4) SLessThan 609 192
+             611:  193(bvec4) GroupNonUniformQuadSwap 35 610 478
+             612:   20(ivec4) Select 611 196 192
+             613:     73(ptr) AccessChain 27(data) 607 39
+                              Store 613 612
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.subgroupShuffle.comp.out b/Test/baseResults/spv.subgroupShuffle.comp.out
new file mode 100644
index 0000000..14fc0b5
--- /dev/null
+++ b/Test/baseResults/spv.subgroupShuffle.comp.out
@@ -0,0 +1,462 @@
+spv.subgroupShuffle.comp
+// Module Version 10300
+// Generated by (magic number): 80006
+// Id's are bound by 379
+
+                              Capability Shader
+                              Capability Float64
+                              Capability GroupNonUniform
+                              Capability GroupNonUniformShuffle
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main" 10 12
+                              ExecutionMode 4 LocalSize 8 8 1
+                              Source GLSL 450
+                              SourceExtension  "GL_KHR_shader_subgroup_basic"
+                              SourceExtension  "GL_KHR_shader_subgroup_shuffle"
+                              Name 4  "main"
+                              Name 8  "invocation"
+                              Name 10  "gl_SubgroupInvocationID"
+                              Name 12  "gl_SubgroupSize"
+                              Name 24  "Buffers"
+                              MemberName 24(Buffers) 0  "f4"
+                              MemberName 24(Buffers) 1  "i4"
+                              MemberName 24(Buffers) 2  "u4"
+                              MemberName 24(Buffers) 3  "d4"
+                              Name 27  "data"
+                              Decorate 10(gl_SubgroupInvocationID) RelaxedPrecision
+                              Decorate 10(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId
+                              Decorate 11 RelaxedPrecision
+                              Decorate 12(gl_SubgroupSize) RelaxedPrecision
+                              Decorate 12(gl_SubgroupSize) BuiltIn SubgroupSize
+                              Decorate 13 RelaxedPrecision
+                              Decorate 14 RelaxedPrecision
+                              Decorate 16 RelaxedPrecision
+                              MemberDecorate 24(Buffers) 0 Offset 0
+                              MemberDecorate 24(Buffers) 1 Offset 16
+                              MemberDecorate 24(Buffers) 2 Offset 32
+                              MemberDecorate 24(Buffers) 3 Offset 64
+                              Decorate 24(Buffers) BufferBlock
+                              Decorate 27(data) DescriptorSet 0
+                              Decorate 27(data) Binding 0
+                              Decorate 378 BuiltIn WorkgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypePointer Function 6(int)
+               9:             TypePointer Input 6(int)
+10(gl_SubgroupInvocationID):      9(ptr) Variable Input
+12(gl_SubgroupSize):      9(ptr) Variable Input
+              15:      6(int) Constant 4
+              17:             TypeFloat 32
+              18:             TypeVector 17(float) 4
+              19:             TypeInt 32 1
+              20:             TypeVector 19(int) 4
+              21:             TypeVector 6(int) 4
+              22:             TypeFloat 64
+              23:             TypeVector 22(float) 4
+     24(Buffers):             TypeStruct 18(fvec4) 20(ivec4) 21(ivec4) 23(fvec4)
+              25:             TypeArray 24(Buffers) 15
+              26:             TypePointer Uniform 25
+        27(data):     26(ptr) Variable Uniform
+              29:     19(int) Constant 0
+              30:      6(int) Constant 0
+              31:             TypePointer Uniform 17(float)
+              35:      6(int) Constant 3
+              39:     19(int) Constant 1
+              40:             TypeVector 17(float) 2
+              41:             TypePointer Uniform 18(fvec4)
+              51:     19(int) Constant 2
+              52:             TypeVector 17(float) 3
+              62:     19(int) Constant 3
+              69:             TypePointer Uniform 19(int)
+              76:             TypeVector 19(int) 2
+              77:             TypePointer Uniform 20(ivec4)
+              87:             TypeVector 19(int) 3
+             103:             TypePointer Uniform 6(int)
+             110:             TypeVector 6(int) 2
+             111:             TypePointer Uniform 21(ivec4)
+             121:             TypeVector 6(int) 3
+             137:             TypePointer Uniform 22(float)
+             144:             TypeVector 22(float) 2
+             145:             TypePointer Uniform 23(fvec4)
+             155:             TypeVector 22(float) 3
+             173:             TypeBool
+             183:   76(ivec2) ConstantComposite 29 29
+             184:             TypeVector 173(bool) 2
+             188:   76(ivec2) ConstantComposite 39 39
+             197:   87(ivec3) ConstantComposite 29 29 29
+             198:             TypeVector 173(bool) 3
+             202:   87(ivec3) ConstantComposite 39 39 39
+             210:   20(ivec4) ConstantComposite 29 29 29 29
+             211:             TypeVector 173(bool) 4
+             215:   20(ivec4) ConstantComposite 39 39 39 39
+             376:      6(int) Constant 8
+             377:      6(int) Constant 1
+             378:  121(ivec3) ConstantComposite 376 376 377
+         4(main):           2 Function None 3
+               5:             Label
+   8(invocation):      7(ptr) Variable Function
+              11:      6(int) Load 10(gl_SubgroupInvocationID)
+              13:      6(int) Load 12(gl_SubgroupSize)
+              14:      6(int) IAdd 11 13
+              16:      6(int) UMod 14 15
+                              Store 8(invocation) 16
+              28:      6(int) Load 8(invocation)
+              32:     31(ptr) AccessChain 27(data) 29 29 30
+              33:   17(float) Load 32
+              34:      6(int) Load 8(invocation)
+              36:   17(float) GroupNonUniformShuffle 35 33 34
+              37:     31(ptr) AccessChain 27(data) 28 29 30
+                              Store 37 36
+              38:      6(int) Load 8(invocation)
+              42:     41(ptr) AccessChain 27(data) 39 29
+              43:   18(fvec4) Load 42
+              44:   40(fvec2) VectorShuffle 43 43 0 1
+              45:      6(int) Load 8(invocation)
+              46:   40(fvec2) GroupNonUniformShuffle 35 44 45
+              47:     41(ptr) AccessChain 27(data) 38 29
+              48:   18(fvec4) Load 47
+              49:   18(fvec4) VectorShuffle 48 46 4 5 2 3
+                              Store 47 49
+              50:      6(int) Load 8(invocation)
+              53:     41(ptr) AccessChain 27(data) 51 29
+              54:   18(fvec4) Load 53
+              55:   52(fvec3) VectorShuffle 54 54 0 1 2
+              56:      6(int) Load 8(invocation)
+              57:   52(fvec3) GroupNonUniformShuffle 35 55 56
+              58:     41(ptr) AccessChain 27(data) 50 29
+              59:   18(fvec4) Load 58
+              60:   18(fvec4) VectorShuffle 59 57 4 5 6 3
+                              Store 58 60
+              61:      6(int) Load 8(invocation)
+              63:     41(ptr) AccessChain 27(data) 62 29
+              64:   18(fvec4) Load 63
+              65:      6(int) Load 8(invocation)
+              66:   18(fvec4) GroupNonUniformShuffle 35 64 65
+              67:     41(ptr) AccessChain 27(data) 61 29
+                              Store 67 66
+              68:      6(int) Load 8(invocation)
+              70:     69(ptr) AccessChain 27(data) 29 39 30
+              71:     19(int) Load 70
+              72:      6(int) Load 8(invocation)
+              73:     19(int) GroupNonUniformShuffle 35 71 72
+              74:     69(ptr) AccessChain 27(data) 68 39 30
+                              Store 74 73
+              75:      6(int) Load 8(invocation)
+              78:     77(ptr) AccessChain 27(data) 39 39
+              79:   20(ivec4) Load 78
+              80:   76(ivec2) VectorShuffle 79 79 0 1
+              81:      6(int) Load 8(invocation)
+              82:   76(ivec2) GroupNonUniformShuffle 35 80 81
+              83:     77(ptr) AccessChain 27(data) 75 39
+              84:   20(ivec4) Load 83
+              85:   20(ivec4) VectorShuffle 84 82 4 5 2 3
+                              Store 83 85
+              86:      6(int) Load 8(invocation)
+              88:     77(ptr) AccessChain 27(data) 51 39
+              89:   20(ivec4) Load 88
+              90:   87(ivec3) VectorShuffle 89 89 0 1 2
+              91:      6(int) Load 8(invocation)
+              92:   87(ivec3) GroupNonUniformShuffle 35 90 91
+              93:     77(ptr) AccessChain 27(data) 86 39
+              94:   20(ivec4) Load 93
+              95:   20(ivec4) VectorShuffle 94 92 4 5 6 3
+                              Store 93 95
+              96:      6(int) Load 8(invocation)
+              97:     77(ptr) AccessChain 27(data) 62 39
+              98:   20(ivec4) Load 97
+              99:      6(int) Load 8(invocation)
+             100:   20(ivec4) GroupNonUniformShuffle 35 98 99
+             101:     77(ptr) AccessChain 27(data) 96 39
+                              Store 101 100
+             102:      6(int) Load 8(invocation)
+             104:    103(ptr) AccessChain 27(data) 29 51 30
+             105:      6(int) Load 104
+             106:      6(int) Load 8(invocation)
+             107:      6(int) GroupNonUniformShuffle 35 105 106
+             108:    103(ptr) AccessChain 27(data) 102 51 30
+                              Store 108 107
+             109:      6(int) Load 8(invocation)
+             112:    111(ptr) AccessChain 27(data) 39 51
+             113:   21(ivec4) Load 112
+             114:  110(ivec2) VectorShuffle 113 113 0 1
+             115:      6(int) Load 8(invocation)
+             116:  110(ivec2) GroupNonUniformShuffle 35 114 115
+             117:    111(ptr) AccessChain 27(data) 109 51
+             118:   21(ivec4) Load 117
+             119:   21(ivec4) VectorShuffle 118 116 4 5 2 3
+                              Store 117 119
+             120:      6(int) Load 8(invocation)
+             122:    111(ptr) AccessChain 27(data) 51 51
+             123:   21(ivec4) Load 122
+             124:  121(ivec3) VectorShuffle 123 123 0 1 2
+             125:      6(int) Load 8(invocation)
+             126:  121(ivec3) GroupNonUniformShuffle 35 124 125
+             127:    111(ptr) AccessChain 27(data) 120 51
+             128:   21(ivec4) Load 127
+             129:   21(ivec4) VectorShuffle 128 126 4 5 6 3
+                              Store 127 129
+             130:      6(int) Load 8(invocation)
+             131:    111(ptr) AccessChain 27(data) 62 51
+             132:   21(ivec4) Load 131
+             133:      6(int) Load 8(invocation)
+             134:   21(ivec4) GroupNonUniformShuffle 35 132 133
+             135:    111(ptr) AccessChain 27(data) 130 51
+                              Store 135 134
+             136:      6(int) Load 8(invocation)
+             138:    137(ptr) AccessChain 27(data) 29 62 30
+             139:   22(float) Load 138
+             140:      6(int) Load 8(invocation)
+             141:   22(float) GroupNonUniformShuffle 35 139 140
+             142:    137(ptr) AccessChain 27(data) 136 62 30
+                              Store 142 141
+             143:      6(int) Load 8(invocation)
+             146:    145(ptr) AccessChain 27(data) 39 62
+             147:   23(fvec4) Load 146
+             148:  144(fvec2) VectorShuffle 147 147 0 1
+             149:      6(int) Load 8(invocation)
+             150:  144(fvec2) GroupNonUniformShuffle 35 148 149
+             151:    145(ptr) AccessChain 27(data) 143 62
+             152:   23(fvec4) Load 151
+             153:   23(fvec4) VectorShuffle 152 150 4 5 2 3
+                              Store 151 153
+             154:      6(int) Load 8(invocation)
+             156:    145(ptr) AccessChain 27(data) 51 62
+             157:   23(fvec4) Load 156
+             158:  155(fvec3) VectorShuffle 157 157 0 1 2
+             159:      6(int) Load 8(invocation)
+             160:  155(fvec3) GroupNonUniformShuffle 35 158 159
+             161:    145(ptr) AccessChain 27(data) 154 62
+             162:   23(fvec4) Load 161
+             163:   23(fvec4) VectorShuffle 162 160 4 5 6 3
+                              Store 161 163
+             164:      6(int) Load 8(invocation)
+             165:    145(ptr) AccessChain 27(data) 62 62
+             166:   23(fvec4) Load 165
+             167:      6(int) Load 8(invocation)
+             168:   23(fvec4) GroupNonUniformShuffle 35 166 167
+             169:    145(ptr) AccessChain 27(data) 164 62
+                              Store 169 168
+             170:      6(int) Load 8(invocation)
+             171:     69(ptr) AccessChain 27(data) 29 39 30
+             172:     19(int) Load 171
+             174:   173(bool) SLessThan 172 29
+             175:      6(int) Load 8(invocation)
+             176:   173(bool) GroupNonUniformShuffle 35 174 175
+             177:     19(int) Select 176 39 29
+             178:     69(ptr) AccessChain 27(data) 170 39 30
+                              Store 178 177
+             179:      6(int) Load 8(invocation)
+             180:     77(ptr) AccessChain 27(data) 39 39
+             181:   20(ivec4) Load 180
+             182:   76(ivec2) VectorShuffle 181 181 0 1
+             185:  184(bvec2) SLessThan 182 183
+             186:      6(int) Load 8(invocation)
+             187:  184(bvec2) GroupNonUniformShuffle 35 185 186
+             189:   76(ivec2) Select 187 188 183
+             190:     77(ptr) AccessChain 27(data) 179 39
+             191:   20(ivec4) Load 190
+             192:   20(ivec4) VectorShuffle 191 189 4 5 2 3
+                              Store 190 192
+             193:      6(int) Load 8(invocation)
+             194:     77(ptr) AccessChain 27(data) 39 39
+             195:   20(ivec4) Load 194
+             196:   87(ivec3) VectorShuffle 195 195 0 1 2
+             199:  198(bvec3) SLessThan 196 197
+             200:      6(int) Load 8(invocation)
+             201:  198(bvec3) GroupNonUniformShuffle 35 199 200
+             203:   87(ivec3) Select 201 202 197
+             204:     77(ptr) AccessChain 27(data) 193 39
+             205:   20(ivec4) Load 204
+             206:   20(ivec4) VectorShuffle 205 203 4 5 6 3
+                              Store 204 206
+             207:      6(int) Load 8(invocation)
+             208:     77(ptr) AccessChain 27(data) 39 39
+             209:   20(ivec4) Load 208
+             212:  211(bvec4) SLessThan 209 210
+             213:      6(int) Load 8(invocation)
+             214:  211(bvec4) GroupNonUniformShuffle 35 212 213
+             216:   20(ivec4) Select 214 215 210
+             217:     77(ptr) AccessChain 27(data) 207 39
+                              Store 217 216
+             218:      6(int) Load 8(invocation)
+             219:     31(ptr) AccessChain 27(data) 29 29 30
+             220:   17(float) Load 219
+             221:      6(int) Load 8(invocation)
+             222:   17(float) GroupNonUniformShuffleXor 35 220 221
+             223:     31(ptr) AccessChain 27(data) 218 29 30
+                              Store 223 222
+             224:      6(int) Load 8(invocation)
+             225:     41(ptr) AccessChain 27(data) 39 29
+             226:   18(fvec4) Load 225
+             227:   40(fvec2) VectorShuffle 226 226 0 1
+             228:      6(int) Load 8(invocation)
+             229:   40(fvec2) GroupNonUniformShuffleXor 35 227 228
+             230:     41(ptr) AccessChain 27(data) 224 29
+             231:   18(fvec4) Load 230
+             232:   18(fvec4) VectorShuffle 231 229 4 5 2 3
+                              Store 230 232
+             233:      6(int) Load 8(invocation)
+             234:     41(ptr) AccessChain 27(data) 51 29
+             235:   18(fvec4) Load 234
+             236:   52(fvec3) VectorShuffle 235 235 0 1 2
+             237:      6(int) Load 8(invocation)
+             238:   52(fvec3) GroupNonUniformShuffleXor 35 236 237
+             239:     41(ptr) AccessChain 27(data) 233 29
+             240:   18(fvec4) Load 239
+             241:   18(fvec4) VectorShuffle 240 238 4 5 6 3
+                              Store 239 241
+             242:      6(int) Load 8(invocation)
+             243:     41(ptr) AccessChain 27(data) 62 29
+             244:   18(fvec4) Load 243
+             245:      6(int) Load 8(invocation)
+             246:   18(fvec4) GroupNonUniformShuffleXor 35 244 245
+             247:     41(ptr) AccessChain 27(data) 242 29
+                              Store 247 246
+             248:      6(int) Load 8(invocation)
+             249:     69(ptr) AccessChain 27(data) 29 39 30
+             250:     19(int) Load 249
+             251:      6(int) Load 8(invocation)
+             252:     19(int) GroupNonUniformShuffleXor 35 250 251
+             253:     69(ptr) AccessChain 27(data) 248 39 30
+                              Store 253 252
+             254:      6(int) Load 8(invocation)
+             255:     77(ptr) AccessChain 27(data) 39 39
+             256:   20(ivec4) Load 255
+             257:   76(ivec2) VectorShuffle 256 256 0 1
+             258:      6(int) Load 8(invocation)
+             259:   76(ivec2) GroupNonUniformShuffleXor 35 257 258
+             260:     77(ptr) AccessChain 27(data) 254 39
+             261:   20(ivec4) Load 260
+             262:   20(ivec4) VectorShuffle 261 259 4 5 2 3
+                              Store 260 262
+             263:      6(int) Load 8(invocation)
+             264:     77(ptr) AccessChain 27(data) 51 39
+             265:   20(ivec4) Load 264
+             266:   87(ivec3) VectorShuffle 265 265 0 1 2
+             267:      6(int) Load 8(invocation)
+             268:   87(ivec3) GroupNonUniformShuffleXor 35 266 267
+             269:     77(ptr) AccessChain 27(data) 263 39
+             270:   20(ivec4) Load 269
+             271:   20(ivec4) VectorShuffle 270 268 4 5 6 3
+                              Store 269 271
+             272:      6(int) Load 8(invocation)
+             273:     77(ptr) AccessChain 27(data) 62 39
+             274:   20(ivec4) Load 273
+             275:      6(int) Load 8(invocation)
+             276:   20(ivec4) GroupNonUniformShuffleXor 35 274 275
+             277:     77(ptr) AccessChain 27(data) 272 39
+                              Store 277 276
+             278:      6(int) Load 8(invocation)
+             279:    103(ptr) AccessChain 27(data) 29 51 30
+             280:      6(int) Load 279
+             281:      6(int) Load 8(invocation)
+             282:      6(int) GroupNonUniformShuffleXor 35 280 281
+             283:    103(ptr) AccessChain 27(data) 278 51 30
+                              Store 283 282
+             284:      6(int) Load 8(invocation)
+             285:    111(ptr) AccessChain 27(data) 39 51
+             286:   21(ivec4) Load 285
+             287:  110(ivec2) VectorShuffle 286 286 0 1
+             288:      6(int) Load 8(invocation)
+             289:  110(ivec2) GroupNonUniformShuffleXor 35 287 288
+             290:    111(ptr) AccessChain 27(data) 284 51
+             291:   21(ivec4) Load 290
+             292:   21(ivec4) VectorShuffle 291 289 4 5 2 3
+                              Store 290 292
+             293:      6(int) Load 8(invocation)
+             294:    111(ptr) AccessChain 27(data) 51 51
+             295:   21(ivec4) Load 294
+             296:  121(ivec3) VectorShuffle 295 295 0 1 2
+             297:      6(int) Load 8(invocation)
+             298:  121(ivec3) GroupNonUniformShuffleXor 35 296 297
+             299:    111(ptr) AccessChain 27(data) 293 51
+             300:   21(ivec4) Load 299
+             301:   21(ivec4) VectorShuffle 300 298 4 5 6 3
+                              Store 299 301
+             302:      6(int) Load 8(invocation)
+             303:    111(ptr) AccessChain 27(data) 62 51
+             304:   21(ivec4) Load 303
+             305:      6(int) Load 8(invocation)
+             306:   21(ivec4) GroupNonUniformShuffleXor 35 304 305
+             307:    111(ptr) AccessChain 27(data) 302 51
+                              Store 307 306
+             308:      6(int) Load 8(invocation)
+             309:    137(ptr) AccessChain 27(data) 29 62 30
+             310:   22(float) Load 309
+             311:      6(int) Load 8(invocation)
+             312:   22(float) GroupNonUniformShuffleXor 35 310 311
+             313:    137(ptr) AccessChain 27(data) 308 62 30
+                              Store 313 312
+             314:      6(int) Load 8(invocation)
+             315:    145(ptr) AccessChain 27(data) 39 62
+             316:   23(fvec4) Load 315
+             317:  144(fvec2) VectorShuffle 316 316 0 1
+             318:      6(int) Load 8(invocation)
+             319:  144(fvec2) GroupNonUniformShuffleXor 35 317 318
+             320:    145(ptr) AccessChain 27(data) 314 62
+             321:   23(fvec4) Load 320
+             322:   23(fvec4) VectorShuffle 321 319 4 5 2 3
+                              Store 320 322
+             323:      6(int) Load 8(invocation)
+             324:    145(ptr) AccessChain 27(data) 51 62
+             325:   23(fvec4) Load 324
+             326:  155(fvec3) VectorShuffle 325 325 0 1 2
+             327:      6(int) Load 8(invocation)
+             328:  155(fvec3) GroupNonUniformShuffleXor 35 326 327
+             329:    145(ptr) AccessChain 27(data) 323 62
+             330:   23(fvec4) Load 329
+             331:   23(fvec4) VectorShuffle 330 328 4 5 6 3
+                              Store 329 331
+             332:      6(int) Load 8(invocation)
+             333:    145(ptr) AccessChain 27(data) 62 62
+             334:   23(fvec4) Load 333
+             335:      6(int) Load 8(invocation)
+             336:   23(fvec4) GroupNonUniformShuffleXor 35 334 335
+             337:    145(ptr) AccessChain 27(data) 332 62
+                              Store 337 336
+             338:      6(int) Load 8(invocation)
+             339:     69(ptr) AccessChain 27(data) 29 39 30
+             340:     19(int) Load 339
+             341:   173(bool) SLessThan 340 29
+             342:      6(int) Load 8(invocation)
+             343:   173(bool) GroupNonUniformShuffleXor 35 341 342
+             344:     19(int) Select 343 39 29
+             345:     69(ptr) AccessChain 27(data) 338 39 30
+                              Store 345 344
+             346:      6(int) Load 8(invocation)
+             347:     77(ptr) AccessChain 27(data) 39 39
+             348:   20(ivec4) Load 347
+             349:   76(ivec2) VectorShuffle 348 348 0 1
+             350:  184(bvec2) SLessThan 349 183
+             351:      6(int) Load 8(invocation)
+             352:  184(bvec2) GroupNonUniformShuffleXor 35 350 351
+             353:   76(ivec2) Select 352 188 183
+             354:     77(ptr) AccessChain 27(data) 346 39
+             355:   20(ivec4) Load 354
+             356:   20(ivec4) VectorShuffle 355 353 4 5 2 3
+                              Store 354 356
+             357:      6(int) Load 8(invocation)
+             358:     77(ptr) AccessChain 27(data) 39 39
+             359:   20(ivec4) Load 358
+             360:   87(ivec3) VectorShuffle 359 359 0 1 2
+             361:  198(bvec3) SLessThan 360 197
+             362:      6(int) Load 8(invocation)
+             363:  198(bvec3) GroupNonUniformShuffleXor 35 361 362
+             364:   87(ivec3) Select 363 202 197
+             365:     77(ptr) AccessChain 27(data) 357 39
+             366:   20(ivec4) Load 365
+             367:   20(ivec4) VectorShuffle 366 364 4 5 6 3
+                              Store 365 367
+             368:      6(int) Load 8(invocation)
+             369:     77(ptr) AccessChain 27(data) 39 39
+             370:   20(ivec4) Load 369
+             371:  211(bvec4) SLessThan 370 210
+             372:      6(int) Load 8(invocation)
+             373:  211(bvec4) GroupNonUniformShuffleXor 35 371 372
+             374:   20(ivec4) Select 373 215 210
+             375:     77(ptr) AccessChain 27(data) 368 39
+                              Store 375 374
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.subgroupShuffleRelative.comp.out b/Test/baseResults/spv.subgroupShuffleRelative.comp.out
new file mode 100644
index 0000000..4658969
--- /dev/null
+++ b/Test/baseResults/spv.subgroupShuffleRelative.comp.out
@@ -0,0 +1,462 @@
+spv.subgroupShuffleRelative.comp
+// Module Version 10300
+// Generated by (magic number): 80006
+// Id's are bound by 379
+
+                              Capability Shader
+                              Capability Float64
+                              Capability GroupNonUniform
+                              Capability GroupNonUniformShuffleRelative
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main" 10 12
+                              ExecutionMode 4 LocalSize 8 8 1
+                              Source GLSL 450
+                              SourceExtension  "GL_KHR_shader_subgroup_basic"
+                              SourceExtension  "GL_KHR_shader_subgroup_shuffle_relative"
+                              Name 4  "main"
+                              Name 8  "invocation"
+                              Name 10  "gl_SubgroupInvocationID"
+                              Name 12  "gl_SubgroupSize"
+                              Name 24  "Buffers"
+                              MemberName 24(Buffers) 0  "f4"
+                              MemberName 24(Buffers) 1  "i4"
+                              MemberName 24(Buffers) 2  "u4"
+                              MemberName 24(Buffers) 3  "d4"
+                              Name 27  "data"
+                              Decorate 10(gl_SubgroupInvocationID) RelaxedPrecision
+                              Decorate 10(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId
+                              Decorate 11 RelaxedPrecision
+                              Decorate 12(gl_SubgroupSize) RelaxedPrecision
+                              Decorate 12(gl_SubgroupSize) BuiltIn SubgroupSize
+                              Decorate 13 RelaxedPrecision
+                              Decorate 14 RelaxedPrecision
+                              Decorate 16 RelaxedPrecision
+                              MemberDecorate 24(Buffers) 0 Offset 0
+                              MemberDecorate 24(Buffers) 1 Offset 16
+                              MemberDecorate 24(Buffers) 2 Offset 32
+                              MemberDecorate 24(Buffers) 3 Offset 64
+                              Decorate 24(Buffers) BufferBlock
+                              Decorate 27(data) DescriptorSet 0
+                              Decorate 27(data) Binding 0
+                              Decorate 378 BuiltIn WorkgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypePointer Function 6(int)
+               9:             TypePointer Input 6(int)
+10(gl_SubgroupInvocationID):      9(ptr) Variable Input
+12(gl_SubgroupSize):      9(ptr) Variable Input
+              15:      6(int) Constant 4
+              17:             TypeFloat 32
+              18:             TypeVector 17(float) 4
+              19:             TypeInt 32 1
+              20:             TypeVector 19(int) 4
+              21:             TypeVector 6(int) 4
+              22:             TypeFloat 64
+              23:             TypeVector 22(float) 4
+     24(Buffers):             TypeStruct 18(fvec4) 20(ivec4) 21(ivec4) 23(fvec4)
+              25:             TypeArray 24(Buffers) 15
+              26:             TypePointer Uniform 25
+        27(data):     26(ptr) Variable Uniform
+              29:     19(int) Constant 0
+              30:      6(int) Constant 0
+              31:             TypePointer Uniform 17(float)
+              35:      6(int) Constant 3
+              39:     19(int) Constant 1
+              40:             TypeVector 17(float) 2
+              41:             TypePointer Uniform 18(fvec4)
+              51:     19(int) Constant 2
+              52:             TypeVector 17(float) 3
+              62:     19(int) Constant 3
+              69:             TypePointer Uniform 19(int)
+              76:             TypeVector 19(int) 2
+              77:             TypePointer Uniform 20(ivec4)
+              87:             TypeVector 19(int) 3
+             103:             TypePointer Uniform 6(int)
+             110:             TypeVector 6(int) 2
+             111:             TypePointer Uniform 21(ivec4)
+             121:             TypeVector 6(int) 3
+             137:             TypePointer Uniform 22(float)
+             144:             TypeVector 22(float) 2
+             145:             TypePointer Uniform 23(fvec4)
+             155:             TypeVector 22(float) 3
+             173:             TypeBool
+             183:   76(ivec2) ConstantComposite 29 29
+             184:             TypeVector 173(bool) 2
+             188:   76(ivec2) ConstantComposite 39 39
+             197:   87(ivec3) ConstantComposite 29 29 29
+             198:             TypeVector 173(bool) 3
+             202:   87(ivec3) ConstantComposite 39 39 39
+             210:   20(ivec4) ConstantComposite 29 29 29 29
+             211:             TypeVector 173(bool) 4
+             215:   20(ivec4) ConstantComposite 39 39 39 39
+             376:      6(int) Constant 8
+             377:      6(int) Constant 1
+             378:  121(ivec3) ConstantComposite 376 376 377
+         4(main):           2 Function None 3
+               5:             Label
+   8(invocation):      7(ptr) Variable Function
+              11:      6(int) Load 10(gl_SubgroupInvocationID)
+              13:      6(int) Load 12(gl_SubgroupSize)
+              14:      6(int) IAdd 11 13
+              16:      6(int) UMod 14 15
+                              Store 8(invocation) 16
+              28:      6(int) Load 8(invocation)
+              32:     31(ptr) AccessChain 27(data) 29 29 30
+              33:   17(float) Load 32
+              34:      6(int) Load 8(invocation)
+              36:   17(float) GroupNonUniformShuffleUp 35 33 34
+              37:     31(ptr) AccessChain 27(data) 28 29 30
+                              Store 37 36
+              38:      6(int) Load 8(invocation)
+              42:     41(ptr) AccessChain 27(data) 39 29
+              43:   18(fvec4) Load 42
+              44:   40(fvec2) VectorShuffle 43 43 0 1
+              45:      6(int) Load 8(invocation)
+              46:   40(fvec2) GroupNonUniformShuffleUp 35 44 45
+              47:     41(ptr) AccessChain 27(data) 38 29
+              48:   18(fvec4) Load 47
+              49:   18(fvec4) VectorShuffle 48 46 4 5 2 3
+                              Store 47 49
+              50:      6(int) Load 8(invocation)
+              53:     41(ptr) AccessChain 27(data) 51 29
+              54:   18(fvec4) Load 53
+              55:   52(fvec3) VectorShuffle 54 54 0 1 2
+              56:      6(int) Load 8(invocation)
+              57:   52(fvec3) GroupNonUniformShuffleUp 35 55 56
+              58:     41(ptr) AccessChain 27(data) 50 29
+              59:   18(fvec4) Load 58
+              60:   18(fvec4) VectorShuffle 59 57 4 5 6 3
+                              Store 58 60
+              61:      6(int) Load 8(invocation)
+              63:     41(ptr) AccessChain 27(data) 62 29
+              64:   18(fvec4) Load 63
+              65:      6(int) Load 8(invocation)
+              66:   18(fvec4) GroupNonUniformShuffleUp 35 64 65
+              67:     41(ptr) AccessChain 27(data) 61 29
+                              Store 67 66
+              68:      6(int) Load 8(invocation)
+              70:     69(ptr) AccessChain 27(data) 29 39 30
+              71:     19(int) Load 70
+              72:      6(int) Load 8(invocation)
+              73:     19(int) GroupNonUniformShuffleUp 35 71 72
+              74:     69(ptr) AccessChain 27(data) 68 39 30
+                              Store 74 73
+              75:      6(int) Load 8(invocation)
+              78:     77(ptr) AccessChain 27(data) 39 39
+              79:   20(ivec4) Load 78
+              80:   76(ivec2) VectorShuffle 79 79 0 1
+              81:      6(int) Load 8(invocation)
+              82:   76(ivec2) GroupNonUniformShuffleUp 35 80 81
+              83:     77(ptr) AccessChain 27(data) 75 39
+              84:   20(ivec4) Load 83
+              85:   20(ivec4) VectorShuffle 84 82 4 5 2 3
+                              Store 83 85
+              86:      6(int) Load 8(invocation)
+              88:     77(ptr) AccessChain 27(data) 51 39
+              89:   20(ivec4) Load 88
+              90:   87(ivec3) VectorShuffle 89 89 0 1 2
+              91:      6(int) Load 8(invocation)
+              92:   87(ivec3) GroupNonUniformShuffleUp 35 90 91
+              93:     77(ptr) AccessChain 27(data) 86 39
+              94:   20(ivec4) Load 93
+              95:   20(ivec4) VectorShuffle 94 92 4 5 6 3
+                              Store 93 95
+              96:      6(int) Load 8(invocation)
+              97:     77(ptr) AccessChain 27(data) 62 39
+              98:   20(ivec4) Load 97
+              99:      6(int) Load 8(invocation)
+             100:   20(ivec4) GroupNonUniformShuffleUp 35 98 99
+             101:     77(ptr) AccessChain 27(data) 96 39
+                              Store 101 100
+             102:      6(int) Load 8(invocation)
+             104:    103(ptr) AccessChain 27(data) 29 51 30
+             105:      6(int) Load 104
+             106:      6(int) Load 8(invocation)
+             107:      6(int) GroupNonUniformShuffleUp 35 105 106
+             108:    103(ptr) AccessChain 27(data) 102 51 30
+                              Store 108 107
+             109:      6(int) Load 8(invocation)
+             112:    111(ptr) AccessChain 27(data) 39 51
+             113:   21(ivec4) Load 112
+             114:  110(ivec2) VectorShuffle 113 113 0 1
+             115:      6(int) Load 8(invocation)
+             116:  110(ivec2) GroupNonUniformShuffleUp 35 114 115
+             117:    111(ptr) AccessChain 27(data) 109 51
+             118:   21(ivec4) Load 117
+             119:   21(ivec4) VectorShuffle 118 116 4 5 2 3
+                              Store 117 119
+             120:      6(int) Load 8(invocation)
+             122:    111(ptr) AccessChain 27(data) 51 51
+             123:   21(ivec4) Load 122
+             124:  121(ivec3) VectorShuffle 123 123 0 1 2
+             125:      6(int) Load 8(invocation)
+             126:  121(ivec3) GroupNonUniformShuffleUp 35 124 125
+             127:    111(ptr) AccessChain 27(data) 120 51
+             128:   21(ivec4) Load 127
+             129:   21(ivec4) VectorShuffle 128 126 4 5 6 3
+                              Store 127 129
+             130:      6(int) Load 8(invocation)
+             131:    111(ptr) AccessChain 27(data) 62 51
+             132:   21(ivec4) Load 131
+             133:      6(int) Load 8(invocation)
+             134:   21(ivec4) GroupNonUniformShuffleUp 35 132 133
+             135:    111(ptr) AccessChain 27(data) 130 51
+                              Store 135 134
+             136:      6(int) Load 8(invocation)
+             138:    137(ptr) AccessChain 27(data) 29 62 30
+             139:   22(float) Load 138
+             140:      6(int) Load 8(invocation)
+             141:   22(float) GroupNonUniformShuffleUp 35 139 140
+             142:    137(ptr) AccessChain 27(data) 136 62 30
+                              Store 142 141
+             143:      6(int) Load 8(invocation)
+             146:    145(ptr) AccessChain 27(data) 39 62
+             147:   23(fvec4) Load 146
+             148:  144(fvec2) VectorShuffle 147 147 0 1
+             149:      6(int) Load 8(invocation)
+             150:  144(fvec2) GroupNonUniformShuffleUp 35 148 149
+             151:    145(ptr) AccessChain 27(data) 143 62
+             152:   23(fvec4) Load 151
+             153:   23(fvec4) VectorShuffle 152 150 4 5 2 3
+                              Store 151 153
+             154:      6(int) Load 8(invocation)
+             156:    145(ptr) AccessChain 27(data) 51 62
+             157:   23(fvec4) Load 156
+             158:  155(fvec3) VectorShuffle 157 157 0 1 2
+             159:      6(int) Load 8(invocation)
+             160:  155(fvec3) GroupNonUniformShuffleUp 35 158 159
+             161:    145(ptr) AccessChain 27(data) 154 62
+             162:   23(fvec4) Load 161
+             163:   23(fvec4) VectorShuffle 162 160 4 5 6 3
+                              Store 161 163
+             164:      6(int) Load 8(invocation)
+             165:    145(ptr) AccessChain 27(data) 62 62
+             166:   23(fvec4) Load 165
+             167:      6(int) Load 8(invocation)
+             168:   23(fvec4) GroupNonUniformShuffleUp 35 166 167
+             169:    145(ptr) AccessChain 27(data) 164 62
+                              Store 169 168
+             170:      6(int) Load 8(invocation)
+             171:     69(ptr) AccessChain 27(data) 29 39 30
+             172:     19(int) Load 171
+             174:   173(bool) SLessThan 172 29
+             175:      6(int) Load 8(invocation)
+             176:   173(bool) GroupNonUniformShuffleUp 35 174 175
+             177:     19(int) Select 176 39 29
+             178:     69(ptr) AccessChain 27(data) 170 39 30
+                              Store 178 177
+             179:      6(int) Load 8(invocation)
+             180:     77(ptr) AccessChain 27(data) 39 39
+             181:   20(ivec4) Load 180
+             182:   76(ivec2) VectorShuffle 181 181 0 1
+             185:  184(bvec2) SLessThan 182 183
+             186:      6(int) Load 8(invocation)
+             187:  184(bvec2) GroupNonUniformShuffleUp 35 185 186
+             189:   76(ivec2) Select 187 188 183
+             190:     77(ptr) AccessChain 27(data) 179 39
+             191:   20(ivec4) Load 190
+             192:   20(ivec4) VectorShuffle 191 189 4 5 2 3
+                              Store 190 192
+             193:      6(int) Load 8(invocation)
+             194:     77(ptr) AccessChain 27(data) 39 39
+             195:   20(ivec4) Load 194
+             196:   87(ivec3) VectorShuffle 195 195 0 1 2
+             199:  198(bvec3) SLessThan 196 197
+             200:      6(int) Load 8(invocation)
+             201:  198(bvec3) GroupNonUniformShuffleUp 35 199 200
+             203:   87(ivec3) Select 201 202 197
+             204:     77(ptr) AccessChain 27(data) 193 39
+             205:   20(ivec4) Load 204
+             206:   20(ivec4) VectorShuffle 205 203 4 5 6 3
+                              Store 204 206
+             207:      6(int) Load 8(invocation)
+             208:     77(ptr) AccessChain 27(data) 39 39
+             209:   20(ivec4) Load 208
+             212:  211(bvec4) SLessThan 209 210
+             213:      6(int) Load 8(invocation)
+             214:  211(bvec4) GroupNonUniformShuffleUp 35 212 213
+             216:   20(ivec4) Select 214 215 210
+             217:     77(ptr) AccessChain 27(data) 207 39
+                              Store 217 216
+             218:      6(int) Load 8(invocation)
+             219:     31(ptr) AccessChain 27(data) 29 29 30
+             220:   17(float) Load 219
+             221:      6(int) Load 8(invocation)
+             222:   17(float) GroupNonUniformShuffleDown 35 220 221
+             223:     31(ptr) AccessChain 27(data) 218 29 30
+                              Store 223 222
+             224:      6(int) Load 8(invocation)
+             225:     41(ptr) AccessChain 27(data) 39 29
+             226:   18(fvec4) Load 225
+             227:   40(fvec2) VectorShuffle 226 226 0 1
+             228:      6(int) Load 8(invocation)
+             229:   40(fvec2) GroupNonUniformShuffleDown 35 227 228
+             230:     41(ptr) AccessChain 27(data) 224 29
+             231:   18(fvec4) Load 230
+             232:   18(fvec4) VectorShuffle 231 229 4 5 2 3
+                              Store 230 232
+             233:      6(int) Load 8(invocation)
+             234:     41(ptr) AccessChain 27(data) 51 29
+             235:   18(fvec4) Load 234
+             236:   52(fvec3) VectorShuffle 235 235 0 1 2
+             237:      6(int) Load 8(invocation)
+             238:   52(fvec3) GroupNonUniformShuffleDown 35 236 237
+             239:     41(ptr) AccessChain 27(data) 233 29
+             240:   18(fvec4) Load 239
+             241:   18(fvec4) VectorShuffle 240 238 4 5 6 3
+                              Store 239 241
+             242:      6(int) Load 8(invocation)
+             243:     41(ptr) AccessChain 27(data) 62 29
+             244:   18(fvec4) Load 243
+             245:      6(int) Load 8(invocation)
+             246:   18(fvec4) GroupNonUniformShuffleDown 35 244 245
+             247:     41(ptr) AccessChain 27(data) 242 29
+                              Store 247 246
+             248:      6(int) Load 8(invocation)
+             249:     69(ptr) AccessChain 27(data) 29 39 30
+             250:     19(int) Load 249
+             251:      6(int) Load 8(invocation)
+             252:     19(int) GroupNonUniformShuffleDown 35 250 251
+             253:     69(ptr) AccessChain 27(data) 248 39 30
+                              Store 253 252
+             254:      6(int) Load 8(invocation)
+             255:     77(ptr) AccessChain 27(data) 39 39
+             256:   20(ivec4) Load 255
+             257:   76(ivec2) VectorShuffle 256 256 0 1
+             258:      6(int) Load 8(invocation)
+             259:   76(ivec2) GroupNonUniformShuffleDown 35 257 258
+             260:     77(ptr) AccessChain 27(data) 254 39
+             261:   20(ivec4) Load 260
+             262:   20(ivec4) VectorShuffle 261 259 4 5 2 3
+                              Store 260 262
+             263:      6(int) Load 8(invocation)
+             264:     77(ptr) AccessChain 27(data) 51 39
+             265:   20(ivec4) Load 264
+             266:   87(ivec3) VectorShuffle 265 265 0 1 2
+             267:      6(int) Load 8(invocation)
+             268:   87(ivec3) GroupNonUniformShuffleDown 35 266 267
+             269:     77(ptr) AccessChain 27(data) 263 39
+             270:   20(ivec4) Load 269
+             271:   20(ivec4) VectorShuffle 270 268 4 5 6 3
+                              Store 269 271
+             272:      6(int) Load 8(invocation)
+             273:     77(ptr) AccessChain 27(data) 62 39
+             274:   20(ivec4) Load 273
+             275:      6(int) Load 8(invocation)
+             276:   20(ivec4) GroupNonUniformShuffleDown 35 274 275
+             277:     77(ptr) AccessChain 27(data) 272 39
+                              Store 277 276
+             278:      6(int) Load 8(invocation)
+             279:    103(ptr) AccessChain 27(data) 29 51 30
+             280:      6(int) Load 279
+             281:      6(int) Load 8(invocation)
+             282:      6(int) GroupNonUniformShuffleDown 35 280 281
+             283:    103(ptr) AccessChain 27(data) 278 51 30
+                              Store 283 282
+             284:      6(int) Load 8(invocation)
+             285:    111(ptr) AccessChain 27(data) 39 51
+             286:   21(ivec4) Load 285
+             287:  110(ivec2) VectorShuffle 286 286 0 1
+             288:      6(int) Load 8(invocation)
+             289:  110(ivec2) GroupNonUniformShuffleDown 35 287 288
+             290:    111(ptr) AccessChain 27(data) 284 51
+             291:   21(ivec4) Load 290
+             292:   21(ivec4) VectorShuffle 291 289 4 5 2 3
+                              Store 290 292
+             293:      6(int) Load 8(invocation)
+             294:    111(ptr) AccessChain 27(data) 51 51
+             295:   21(ivec4) Load 294
+             296:  121(ivec3) VectorShuffle 295 295 0 1 2
+             297:      6(int) Load 8(invocation)
+             298:  121(ivec3) GroupNonUniformShuffleDown 35 296 297
+             299:    111(ptr) AccessChain 27(data) 293 51
+             300:   21(ivec4) Load 299
+             301:   21(ivec4) VectorShuffle 300 298 4 5 6 3
+                              Store 299 301
+             302:      6(int) Load 8(invocation)
+             303:    111(ptr) AccessChain 27(data) 62 51
+             304:   21(ivec4) Load 303
+             305:      6(int) Load 8(invocation)
+             306:   21(ivec4) GroupNonUniformShuffleDown 35 304 305
+             307:    111(ptr) AccessChain 27(data) 302 51
+                              Store 307 306
+             308:      6(int) Load 8(invocation)
+             309:    137(ptr) AccessChain 27(data) 29 62 30
+             310:   22(float) Load 309
+             311:      6(int) Load 8(invocation)
+             312:   22(float) GroupNonUniformShuffleDown 35 310 311
+             313:    137(ptr) AccessChain 27(data) 308 62 30
+                              Store 313 312
+             314:      6(int) Load 8(invocation)
+             315:    145(ptr) AccessChain 27(data) 39 62
+             316:   23(fvec4) Load 315
+             317:  144(fvec2) VectorShuffle 316 316 0 1
+             318:      6(int) Load 8(invocation)
+             319:  144(fvec2) GroupNonUniformShuffleDown 35 317 318
+             320:    145(ptr) AccessChain 27(data) 314 62
+             321:   23(fvec4) Load 320
+             322:   23(fvec4) VectorShuffle 321 319 4 5 2 3
+                              Store 320 322
+             323:      6(int) Load 8(invocation)
+             324:    145(ptr) AccessChain 27(data) 51 62
+             325:   23(fvec4) Load 324
+             326:  155(fvec3) VectorShuffle 325 325 0 1 2
+             327:      6(int) Load 8(invocation)
+             328:  155(fvec3) GroupNonUniformShuffleDown 35 326 327
+             329:    145(ptr) AccessChain 27(data) 323 62
+             330:   23(fvec4) Load 329
+             331:   23(fvec4) VectorShuffle 330 328 4 5 6 3
+                              Store 329 331
+             332:      6(int) Load 8(invocation)
+             333:    145(ptr) AccessChain 27(data) 62 62
+             334:   23(fvec4) Load 333
+             335:      6(int) Load 8(invocation)
+             336:   23(fvec4) GroupNonUniformShuffleDown 35 334 335
+             337:    145(ptr) AccessChain 27(data) 332 62
+                              Store 337 336
+             338:      6(int) Load 8(invocation)
+             339:     69(ptr) AccessChain 27(data) 29 39 30
+             340:     19(int) Load 339
+             341:   173(bool) SLessThan 340 29
+             342:      6(int) Load 8(invocation)
+             343:   173(bool) GroupNonUniformShuffleDown 35 341 342
+             344:     19(int) Select 343 39 29
+             345:     69(ptr) AccessChain 27(data) 338 39 30
+                              Store 345 344
+             346:      6(int) Load 8(invocation)
+             347:     77(ptr) AccessChain 27(data) 39 39
+             348:   20(ivec4) Load 347
+             349:   76(ivec2) VectorShuffle 348 348 0 1
+             350:  184(bvec2) SLessThan 349 183
+             351:      6(int) Load 8(invocation)
+             352:  184(bvec2) GroupNonUniformShuffleDown 35 350 351
+             353:   76(ivec2) Select 352 188 183
+             354:     77(ptr) AccessChain 27(data) 346 39
+             355:   20(ivec4) Load 354
+             356:   20(ivec4) VectorShuffle 355 353 4 5 2 3
+                              Store 354 356
+             357:      6(int) Load 8(invocation)
+             358:     77(ptr) AccessChain 27(data) 39 39
+             359:   20(ivec4) Load 358
+             360:   87(ivec3) VectorShuffle 359 359 0 1 2
+             361:  198(bvec3) SLessThan 360 197
+             362:      6(int) Load 8(invocation)
+             363:  198(bvec3) GroupNonUniformShuffleDown 35 361 362
+             364:   87(ivec3) Select 363 202 197
+             365:     77(ptr) AccessChain 27(data) 357 39
+             366:   20(ivec4) Load 365
+             367:   20(ivec4) VectorShuffle 366 364 4 5 6 3
+                              Store 365 367
+             368:      6(int) Load 8(invocation)
+             369:     77(ptr) AccessChain 27(data) 39 39
+             370:   20(ivec4) Load 369
+             371:  211(bvec4) SLessThan 370 210
+             372:      6(int) Load 8(invocation)
+             373:  211(bvec4) GroupNonUniformShuffleDown 35 371 372
+             374:   20(ivec4) Select 373 215 210
+             375:     77(ptr) AccessChain 27(data) 368 39
+                              Store 375 374
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.subgroupVote.comp.out b/Test/baseResults/spv.subgroupVote.comp.out
new file mode 100644
index 0000000..45eb4b8
--- /dev/null
+++ b/Test/baseResults/spv.subgroupVote.comp.out
@@ -0,0 +1,288 @@
+spv.subgroupVote.comp
+// Module Version 10300
+// Generated by (magic number): 80006
+// Id's are bound by 216
+
+                              Capability Shader
+                              Capability Float64
+                              Capability GroupNonUniform
+                              Capability GroupNonUniformVote
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main" 10 12
+                              ExecutionMode 4 LocalSize 8 8 1
+                              Source GLSL 450
+                              SourceExtension  "GL_KHR_shader_subgroup_basic"
+                              SourceExtension  "GL_KHR_shader_subgroup_vote"
+                              Name 4  "main"
+                              Name 8  "invocation"
+                              Name 10  "gl_SubgroupInvocationID"
+                              Name 12  "gl_SubgroupSize"
+                              Name 24  "Buffers"
+                              MemberName 24(Buffers) 0  "f4"
+                              MemberName 24(Buffers) 1  "i4"
+                              MemberName 24(Buffers) 2  "u4"
+                              MemberName 24(Buffers) 3  "d4"
+                              MemberName 24(Buffers) 4  "r"
+                              Name 27  "data"
+                              Decorate 10(gl_SubgroupInvocationID) RelaxedPrecision
+                              Decorate 10(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId
+                              Decorate 11 RelaxedPrecision
+                              Decorate 12(gl_SubgroupSize) RelaxedPrecision
+                              Decorate 12(gl_SubgroupSize) BuiltIn SubgroupSize
+                              Decorate 13 RelaxedPrecision
+                              Decorate 14 RelaxedPrecision
+                              Decorate 16 RelaxedPrecision
+                              MemberDecorate 24(Buffers) 0 Offset 0
+                              MemberDecorate 24(Buffers) 1 Offset 16
+                              MemberDecorate 24(Buffers) 2 Offset 32
+                              MemberDecorate 24(Buffers) 3 Offset 64
+                              MemberDecorate 24(Buffers) 4 Offset 96
+                              Decorate 24(Buffers) BufferBlock
+                              Decorate 27(data) DescriptorSet 0
+                              Decorate 27(data) Binding 0
+                              Decorate 215 BuiltIn WorkgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypePointer Function 6(int)
+               9:             TypePointer Input 6(int)
+10(gl_SubgroupInvocationID):      9(ptr) Variable Input
+12(gl_SubgroupSize):      9(ptr) Variable Input
+              15:      6(int) Constant 4
+              17:             TypeFloat 32
+              18:             TypeVector 17(float) 4
+              19:             TypeInt 32 1
+              20:             TypeVector 19(int) 4
+              21:             TypeVector 6(int) 4
+              22:             TypeFloat 64
+              23:             TypeVector 22(float) 4
+     24(Buffers):             TypeStruct 18(fvec4) 20(ivec4) 21(ivec4) 23(fvec4) 19(int)
+              25:             TypeArray 24(Buffers) 15
+              26:             TypePointer Uniform 25
+        27(data):     26(ptr) Variable Uniform
+              29:     19(int) Constant 4
+              30:             TypePointer Uniform 19(int)
+              33:     19(int) Constant 0
+              34:             TypeBool
+              36:      6(int) Constant 3
+              41:      6(int) Constant 0
+              42:             TypePointer Uniform 17(float)
+              46:     19(int) Constant 1
+              50:             TypeVector 17(float) 2
+              51:             TypePointer Uniform 18(fvec4)
+              59:     19(int) Constant 2
+              60:             TypeVector 17(float) 3
+              68:     19(int) Constant 3
+              81:             TypeVector 19(int) 2
+              82:             TypePointer Uniform 20(ivec4)
+              90:             TypeVector 19(int) 3
+             104:             TypePointer Uniform 6(int)
+             111:             TypeVector 6(int) 2
+             112:             TypePointer Uniform 21(ivec4)
+             120:             TypeVector 6(int) 3
+             142:             TypePointer Uniform 22(float)
+             149:             TypeVector 22(float) 2
+             150:             TypePointer Uniform 23(fvec4)
+             158:             TypeVector 22(float) 3
+             182:   81(ivec2) ConstantComposite 33 33
+             183:             TypeVector 34(bool) 2
+             194:   90(ivec3) ConstantComposite 33 33 33
+             195:             TypeVector 34(bool) 3
+             205:   20(ivec4) ConstantComposite 33 33 33 33
+             206:             TypeVector 34(bool) 4
+             213:      6(int) Constant 8
+             214:      6(int) Constant 1
+             215:  120(ivec3) ConstantComposite 213 213 214
+         4(main):           2 Function None 3
+               5:             Label
+   8(invocation):      7(ptr) Variable Function
+              11:      6(int) Load 10(gl_SubgroupInvocationID)
+              13:      6(int) Load 12(gl_SubgroupSize)
+              14:      6(int) IAdd 11 13
+              16:      6(int) UMod 14 15
+                              Store 8(invocation) 16
+              28:      6(int) Load 8(invocation)
+              31:     30(ptr) AccessChain 27(data) 28 29
+              32:     19(int) Load 31
+              35:    34(bool) SLessThan 32 33
+              37:    34(bool) GroupNonUniformAll 36 35
+                              SelectionMerge 39 None
+                              BranchConditional 37 38 133
+              38:               Label
+              40:      6(int)   Load 8(invocation)
+              43:     42(ptr)   AccessChain 27(data) 33 33 41
+              44:   17(float)   Load 43
+              45:    34(bool)   GroupNonUniformAllEqual 36 44
+              47:     19(int)   Select 45 46 33
+              48:     30(ptr)   AccessChain 27(data) 40 29
+                                Store 48 47
+              49:      6(int)   Load 8(invocation)
+              52:     51(ptr)   AccessChain 27(data) 46 33
+              53:   18(fvec4)   Load 52
+              54:   50(fvec2)   VectorShuffle 53 53 0 1
+              55:    34(bool)   GroupNonUniformAllEqual 36 54
+              56:     19(int)   Select 55 46 33
+              57:     30(ptr)   AccessChain 27(data) 49 29
+                                Store 57 56
+              58:      6(int)   Load 8(invocation)
+              61:     51(ptr)   AccessChain 27(data) 59 33
+              62:   18(fvec4)   Load 61
+              63:   60(fvec3)   VectorShuffle 62 62 0 1 2
+              64:    34(bool)   GroupNonUniformAllEqual 36 63
+              65:     19(int)   Select 64 46 33
+              66:     30(ptr)   AccessChain 27(data) 58 29
+                                Store 66 65
+              67:      6(int)   Load 8(invocation)
+              69:     51(ptr)   AccessChain 27(data) 68 33
+              70:   18(fvec4)   Load 69
+              71:    34(bool)   GroupNonUniformAllEqual 36 70
+              72:     19(int)   Select 71 46 33
+              73:     30(ptr)   AccessChain 27(data) 67 29
+                                Store 73 72
+              74:      6(int)   Load 8(invocation)
+              75:     30(ptr)   AccessChain 27(data) 33 46 41
+              76:     19(int)   Load 75
+              77:    34(bool)   GroupNonUniformAllEqual 36 76
+              78:     19(int)   Select 77 46 33
+              79:     30(ptr)   AccessChain 27(data) 74 29
+                                Store 79 78
+              80:      6(int)   Load 8(invocation)
+              83:     82(ptr)   AccessChain 27(data) 46 46
+              84:   20(ivec4)   Load 83
+              85:   81(ivec2)   VectorShuffle 84 84 0 1
+              86:    34(bool)   GroupNonUniformAllEqual 36 85
+              87:     19(int)   Select 86 46 33
+              88:     30(ptr)   AccessChain 27(data) 80 29
+                                Store 88 87
+              89:      6(int)   Load 8(invocation)
+              91:     82(ptr)   AccessChain 27(data) 59 46
+              92:   20(ivec4)   Load 91
+              93:   90(ivec3)   VectorShuffle 92 92 0 1 2
+              94:    34(bool)   GroupNonUniformAllEqual 36 93
+              95:     19(int)   Select 94 46 33
+              96:     30(ptr)   AccessChain 27(data) 89 29
+                                Store 96 95
+              97:      6(int)   Load 8(invocation)
+              98:     82(ptr)   AccessChain 27(data) 68 46
+              99:   20(ivec4)   Load 98
+             100:    34(bool)   GroupNonUniformAllEqual 36 99
+             101:     19(int)   Select 100 46 33
+             102:     30(ptr)   AccessChain 27(data) 97 29
+                                Store 102 101
+             103:      6(int)   Load 8(invocation)
+             105:    104(ptr)   AccessChain 27(data) 33 59 41
+             106:      6(int)   Load 105
+             107:    34(bool)   GroupNonUniformAllEqual 36 106
+             108:     19(int)   Select 107 46 33
+             109:     30(ptr)   AccessChain 27(data) 103 29
+                                Store 109 108
+             110:      6(int)   Load 8(invocation)
+             113:    112(ptr)   AccessChain 27(data) 46 59
+             114:   21(ivec4)   Load 113
+             115:  111(ivec2)   VectorShuffle 114 114 0 1
+             116:    34(bool)   GroupNonUniformAllEqual 36 115
+             117:     19(int)   Select 116 46 33
+             118:     30(ptr)   AccessChain 27(data) 110 29
+                                Store 118 117
+             119:      6(int)   Load 8(invocation)
+             121:    112(ptr)   AccessChain 27(data) 59 59
+             122:   21(ivec4)   Load 121
+             123:  120(ivec3)   VectorShuffle 122 122 0 1 2
+             124:    34(bool)   GroupNonUniformAllEqual 36 123
+             125:     19(int)   Select 124 46 33
+             126:     30(ptr)   AccessChain 27(data) 119 29
+                                Store 126 125
+             127:      6(int)   Load 8(invocation)
+             128:    112(ptr)   AccessChain 27(data) 68 59
+             129:   21(ivec4)   Load 128
+             130:    34(bool)   GroupNonUniformAllEqual 36 129
+             131:     19(int)   Select 130 46 33
+             132:     30(ptr)   AccessChain 27(data) 127 29
+                                Store 132 131
+                                Branch 39
+             133:               Label
+             134:      6(int)   Load 8(invocation)
+             135:     30(ptr)   AccessChain 27(data) 134 29
+             136:     19(int)   Load 135
+             137:    34(bool)   SLessThan 136 33
+             138:    34(bool)   GroupNonUniformAny 36 137
+                                SelectionMerge 140 None
+                                BranchConditional 138 139 140
+             139:                 Label
+             141:      6(int)     Load 8(invocation)
+             143:    142(ptr)     AccessChain 27(data) 33 68 41
+             144:   22(float)     Load 143
+             145:    34(bool)     GroupNonUniformAllEqual 36 144
+             146:     19(int)     Select 145 46 33
+             147:     30(ptr)     AccessChain 27(data) 141 29
+                                  Store 147 146
+             148:      6(int)     Load 8(invocation)
+             151:    150(ptr)     AccessChain 27(data) 46 68
+             152:   23(fvec4)     Load 151
+             153:  149(fvec2)     VectorShuffle 152 152 0 1
+             154:    34(bool)     GroupNonUniformAllEqual 36 153
+             155:     19(int)     Select 154 46 33
+             156:     30(ptr)     AccessChain 27(data) 148 29
+                                  Store 156 155
+             157:      6(int)     Load 8(invocation)
+             159:    150(ptr)     AccessChain 27(data) 59 68
+             160:   23(fvec4)     Load 159
+             161:  158(fvec3)     VectorShuffle 160 160 0 1 2
+             162:    34(bool)     GroupNonUniformAllEqual 36 161
+             163:     19(int)     Select 162 46 33
+             164:     30(ptr)     AccessChain 27(data) 157 29
+                                  Store 164 163
+             165:      6(int)     Load 8(invocation)
+             166:    150(ptr)     AccessChain 27(data) 68 68
+             167:   23(fvec4)     Load 166
+             168:    34(bool)     GroupNonUniformAllEqual 36 167
+             169:     19(int)     Select 168 46 33
+             170:     30(ptr)     AccessChain 27(data) 165 29
+                                  Store 170 169
+             171:      6(int)     Load 8(invocation)
+             172:     30(ptr)     AccessChain 27(data) 33 46 41
+             173:     19(int)     Load 172
+             174:    34(bool)     SLessThan 173 33
+             175:    34(bool)     GroupNonUniformAllEqual 36 174
+             176:     19(int)     Select 175 46 33
+             177:     30(ptr)     AccessChain 27(data) 171 29
+                                  Store 177 176
+             178:      6(int)     Load 8(invocation)
+             179:     82(ptr)     AccessChain 27(data) 46 46
+             180:   20(ivec4)     Load 179
+             181:   81(ivec2)     VectorShuffle 180 180 0 1
+             184:  183(bvec2)     SLessThan 181 182
+             185:    34(bool)     GroupNonUniformAllEqual 36 184
+             186:     19(int)     Select 185 46 33
+             187:   81(ivec2)     CompositeConstruct 186 186
+             188:     19(int)     CompositeExtract 187 0
+             189:     30(ptr)     AccessChain 27(data) 178 29
+                                  Store 189 188
+             190:      6(int)     Load 8(invocation)
+             191:     82(ptr)     AccessChain 27(data) 46 46
+             192:   20(ivec4)     Load 191
+             193:   90(ivec3)     VectorShuffle 192 192 0 1 2
+             196:  195(bvec3)     SLessThan 193 194
+             197:    34(bool)     GroupNonUniformAllEqual 36 196
+             198:     19(int)     Select 197 46 33
+             199:   90(ivec3)     CompositeConstruct 198 198 198
+             200:     19(int)     CompositeExtract 199 0
+             201:     30(ptr)     AccessChain 27(data) 190 29
+                                  Store 201 200
+             202:      6(int)     Load 8(invocation)
+             203:     82(ptr)     AccessChain 27(data) 46 46
+             204:   20(ivec4)     Load 203
+             207:  206(bvec4)     SLessThan 204 205
+             208:    34(bool)     GroupNonUniformAllEqual 36 207
+             209:     19(int)     Select 208 46 33
+             210:   20(ivec4)     CompositeConstruct 209 209 209 209
+             211:     19(int)     CompositeExtract 210 0
+             212:     30(ptr)     AccessChain 27(data) 202 29
+                                  Store 212 211
+                                  Branch 140
+             140:               Label
+                                Branch 39
+              39:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.subpass.frag.out b/Test/baseResults/spv.subpass.frag.out
index 7624898..7edfc60 100644
--- a/Test/baseResults/spv.subpass.frag.out
+++ b/Test/baseResults/spv.subpass.frag.out
@@ -1,6 +1,6 @@
 spv.subpass.frag
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 67
 
                               Capability Shader
diff --git a/Test/baseResults/spv.switch.frag.out b/Test/baseResults/spv.switch.frag.out
index 0a35155..b300579 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): 80002
+// Generated by (magic number): 80006
 // 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 b194d27..36daa5b 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): 80002
+// Generated by (magic number): 80006
 // 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 dd910f7..7f523e2 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): 80002
+// Generated by (magic number): 80006
 // 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 e61785c..6e4c5e7 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): 80002
+// Generated by (magic number): 80006
 // 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 5f3d41e..6749983 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): 80002
+// Generated by (magic number): 80006
 // 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 99bb381..5bea9fd 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): 80002
+// Generated by (magic number): 80006
 // 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 6af2b4f..4596988 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): 80002
+// Generated by (magic number): 80006
 // 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 c704f9f..f98f1ff 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): 80002
+// Generated by (magic number): 80006
 // 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 2a9432d..5fe6c56 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): 80002
+// Generated by (magic number): 80006
 // 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 3a41668..2cfe348 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): 80002
+// Generated by (magic number): 80006
 // 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 8726486..0bbb248 100755
--- a/Test/baseResults/spv.types.frag.out
+++ b/Test/baseResults/spv.types.frag.out
@@ -1,12 +1,12 @@
 spv.types.frag
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 260
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 91 93 100 102 109 111 118 120 127 129 136 138 145 147 154 156 160
+                              EntryPoint Fragment 4  "main" 96 98 105 107 114 116 123 125 132 134 141 143 150 152 159 161 165
                               ExecutionMode 4 OriginUpperLeft
                               Source GLSL 140
                               Name 4  "main"
@@ -15,47 +15,47 @@
                               Name 12  "i_b"
                               Name 17  "b2"
                               Name 19  "u_b2"
-                              Name 22  "i_b2"
-                              Name 35  "b3"
-                              Name 37  "u_b3"
-                              Name 40  "i_b3"
-                              Name 59  "b4"
-                              Name 61  "u_b4"
-                              Name 64  "i_b4"
-                              Name 89  "i"
-                              Name 91  "u_i"
-                              Name 93  "i_i"
-                              Name 98  "i2"
-                              Name 100  "u_i2"
-                              Name 102  "i_i2"
-                              Name 107  "i3"
-                              Name 109  "u_i3"
-                              Name 111  "i_i3"
-                              Name 116  "i4"
-                              Name 118  "u_i4"
-                              Name 120  "i_i4"
-                              Name 125  "f"
-                              Name 127  "u_f"
-                              Name 129  "i_f"
-                              Name 134  "f2"
-                              Name 136  "u_f2"
-                              Name 138  "i_f2"
-                              Name 143  "f3"
-                              Name 145  "u_f3"
-                              Name 147  "i_f3"
-                              Name 152  "f4"
-                              Name 154  "u_f4"
-                              Name 156  "i_f4"
-                              Name 160  "gl_FragColor"
-                              Decorate 91(u_i) Flat
-                              Decorate 93(i_i) Flat
-                              Decorate 100(u_i2) Flat
-                              Decorate 102(i_i2) Flat
-                              Decorate 109(u_i3) Flat
-                              Decorate 111(i_i3) Flat
-                              Decorate 118(u_i4) Flat
-                              Decorate 120(i_i4) Flat
-                              Decorate 160(gl_FragColor) Location 0
+                              Name 24  "i_b2"
+                              Name 38  "b3"
+                              Name 40  "u_b3"
+                              Name 43  "i_b3"
+                              Name 63  "b4"
+                              Name 65  "u_b4"
+                              Name 68  "i_b4"
+                              Name 94  "i"
+                              Name 96  "u_i"
+                              Name 98  "i_i"
+                              Name 103  "i2"
+                              Name 105  "u_i2"
+                              Name 107  "i_i2"
+                              Name 112  "i3"
+                              Name 114  "u_i3"
+                              Name 116  "i_i3"
+                              Name 121  "i4"
+                              Name 123  "u_i4"
+                              Name 125  "i_i4"
+                              Name 130  "f"
+                              Name 132  "u_f"
+                              Name 134  "i_f"
+                              Name 139  "f2"
+                              Name 141  "u_f2"
+                              Name 143  "i_f2"
+                              Name 148  "f3"
+                              Name 150  "u_f3"
+                              Name 152  "i_f3"
+                              Name 157  "f4"
+                              Name 159  "u_f4"
+                              Name 161  "i_f4"
+                              Name 165  "gl_FragColor"
+                              Decorate 96(u_i) Flat
+                              Decorate 98(i_i) Flat
+                              Decorate 105(u_i2) Flat
+                              Decorate 107(i_i2) Flat
+                              Decorate 114(u_i3) Flat
+                              Decorate 116(i_i3) Flat
+                              Decorate 123(u_i4) Flat
+                              Decorate 125(i_i4) Flat
+                              Decorate 165(gl_FragColor) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeBool
@@ -67,271 +67,271 @@
               16:             TypePointer Function 15(bvec2)
               18:             TypePointer Private 15(bvec2)
         19(u_b2):     18(ptr) Variable Private
-        22(i_b2):     18(ptr) Variable Private
-              33:             TypeVector 6(bool) 3
-              34:             TypePointer Function 33(bvec3)
-              36:             TypePointer Private 33(bvec3)
-        37(u_b3):     36(ptr) Variable Private
-        40(i_b3):     36(ptr) Variable Private
-              57:             TypeVector 6(bool) 4
-              58:             TypePointer Function 57(bvec4)
-              60:             TypePointer Private 57(bvec4)
-        61(u_b4):     60(ptr) Variable Private
-        64(i_b4):     60(ptr) Variable Private
-              87:             TypeInt 32 1
-              88:             TypePointer Function 87(int)
-              90:             TypePointer Input 87(int)
-         91(u_i):     90(ptr) Variable Input
-         93(i_i):     90(ptr) Variable Input
-              96:             TypeVector 87(int) 2
-              97:             TypePointer Function 96(ivec2)
-              99:             TypePointer Input 96(ivec2)
-       100(u_i2):     99(ptr) Variable Input
-       102(i_i2):     99(ptr) Variable Input
-             105:             TypeVector 87(int) 3
-             106:             TypePointer Function 105(ivec3)
-             108:             TypePointer Input 105(ivec3)
-       109(u_i3):    108(ptr) Variable Input
-       111(i_i3):    108(ptr) Variable Input
-             114:             TypeVector 87(int) 4
-             115:             TypePointer Function 114(ivec4)
-             117:             TypePointer Input 114(ivec4)
-       118(u_i4):    117(ptr) Variable Input
-       120(i_i4):    117(ptr) Variable Input
-             123:             TypeFloat 32
-             124:             TypePointer Function 123(float)
-             126:             TypePointer Input 123(float)
-        127(u_f):    126(ptr) Variable Input
-        129(i_f):    126(ptr) Variable Input
-             132:             TypeVector 123(float) 2
-             133:             TypePointer Function 132(fvec2)
-             135:             TypePointer Input 132(fvec2)
-       136(u_f2):    135(ptr) Variable Input
-       138(i_f2):    135(ptr) Variable Input
-             141:             TypeVector 123(float) 3
-             142:             TypePointer Function 141(fvec3)
-             144:             TypePointer Input 141(fvec3)
-       145(u_f3):    144(ptr) Variable Input
-       147(i_f3):    144(ptr) Variable Input
-             150:             TypeVector 123(float) 4
-             151:             TypePointer Function 150(fvec4)
-             153:             TypePointer Input 150(fvec4)
-       154(u_f4):    153(ptr) Variable Input
-       156(i_f4):    153(ptr) Variable Input
-             159:             TypePointer Output 150(fvec4)
-160(gl_FragColor):    159(ptr) Variable Output
-             193:             TypeInt 32 0
-             194:    193(int) Constant 0
-             198:    193(int) Constant 1
-             208:    193(int) Constant 2
-             221:    193(int) Constant 3
-             257:  123(float) Constant 1065353216
-             258:  150(fvec4) ConstantComposite 257 257 257 257
+              20:             TypeInt 32 0
+              21:     20(int) Constant 0
+        24(i_b2):     18(ptr) Variable Private
+              28:     20(int) Constant 1
+              36:             TypeVector 6(bool) 3
+              37:             TypePointer Function 36(bvec3)
+              39:             TypePointer Private 36(bvec3)
+        40(u_b3):     39(ptr) Variable Private
+        43(i_b3):     39(ptr) Variable Private
+              53:     20(int) Constant 2
+              61:             TypeVector 6(bool) 4
+              62:             TypePointer Function 61(bvec4)
+              64:             TypePointer Private 61(bvec4)
+        65(u_b4):     64(ptr) Variable Private
+        68(i_b4):     64(ptr) Variable Private
+              84:     20(int) Constant 3
+              92:             TypeInt 32 1
+              93:             TypePointer Function 92(int)
+              95:             TypePointer Input 92(int)
+         96(u_i):     95(ptr) Variable Input
+         98(i_i):     95(ptr) Variable Input
+             101:             TypeVector 92(int) 2
+             102:             TypePointer Function 101(ivec2)
+             104:             TypePointer Input 101(ivec2)
+       105(u_i2):    104(ptr) Variable Input
+       107(i_i2):    104(ptr) Variable Input
+             110:             TypeVector 92(int) 3
+             111:             TypePointer Function 110(ivec3)
+             113:             TypePointer Input 110(ivec3)
+       114(u_i3):    113(ptr) Variable Input
+       116(i_i3):    113(ptr) Variable Input
+             119:             TypeVector 92(int) 4
+             120:             TypePointer Function 119(ivec4)
+             122:             TypePointer Input 119(ivec4)
+       123(u_i4):    122(ptr) Variable Input
+       125(i_i4):    122(ptr) Variable Input
+             128:             TypeFloat 32
+             129:             TypePointer Function 128(float)
+             131:             TypePointer Input 128(float)
+        132(u_f):    131(ptr) Variable Input
+        134(i_f):    131(ptr) Variable Input
+             137:             TypeVector 128(float) 2
+             138:             TypePointer Function 137(fvec2)
+             140:             TypePointer Input 137(fvec2)
+       141(u_f2):    140(ptr) Variable Input
+       143(i_f2):    140(ptr) Variable Input
+             146:             TypeVector 128(float) 3
+             147:             TypePointer Function 146(fvec3)
+             149:             TypePointer Input 146(fvec3)
+       150(u_f3):    149(ptr) Variable Input
+       152(i_f3):    149(ptr) Variable Input
+             155:             TypeVector 128(float) 4
+             156:             TypePointer Function 155(fvec4)
+             158:             TypePointer Input 155(fvec4)
+       159(u_f4):    158(ptr) Variable Input
+       161(i_f4):    158(ptr) Variable Input
+             164:             TypePointer Output 155(fvec4)
+165(gl_FragColor):    164(ptr) Variable Output
+             257:  128(float) Constant 1065353216
+             258:  155(fvec4) ConstantComposite 257 257 257 257
          4(main):           2 Function None 3
                5:             Label
             8(b):      7(ptr) Variable Function
           17(b2):     16(ptr) Variable Function
-          35(b3):     34(ptr) Variable Function
-          59(b4):     58(ptr) Variable Function
-           89(i):     88(ptr) Variable Function
-          98(i2):     97(ptr) Variable Function
-         107(i3):    106(ptr) Variable Function
-         116(i4):    115(ptr) Variable Function
-          125(f):    124(ptr) Variable Function
-         134(f2):    133(ptr) Variable Function
-         143(f3):    142(ptr) Variable Function
-         152(f4):    151(ptr) Variable Function
-             161:    151(ptr) Variable Function
+          38(b3):     37(ptr) Variable Function
+          63(b4):     62(ptr) Variable Function
+           94(i):     93(ptr) Variable Function
+         103(i2):    102(ptr) Variable Function
+         112(i3):    111(ptr) Variable Function
+         121(i4):    120(ptr) Variable Function
+          130(f):    129(ptr) Variable Function
+         139(f2):    138(ptr) Variable Function
+         148(f3):    147(ptr) Variable Function
+         157(f4):    156(ptr) Variable Function
+             194:    156(ptr) Variable Function
               11:     6(bool) Load 10(u_b)
               13:     6(bool) Load 12(i_b)
               14:     6(bool) LogicalAnd 11 13
                               Store 8(b) 14
-              20:   15(bvec2) Load 19(u_b2)
-              21:     6(bool) CompositeExtract 20 0
-              23:   15(bvec2) Load 22(i_b2)
-              24:     6(bool) CompositeExtract 23 0
-              25:     6(bool) LogicalAnd 21 24
-              26:   15(bvec2) Load 19(u_b2)
-              27:     6(bool) CompositeExtract 26 1
-              28:     6(bool) LogicalAnd 25 27
-              29:   15(bvec2) Load 22(i_b2)
-              30:     6(bool) CompositeExtract 29 1
-              31:     6(bool) LogicalAnd 28 30
-              32:   15(bvec2) CompositeConstruct 31 31
-                              Store 17(b2) 32
-              38:   33(bvec3) Load 37(u_b3)
-              39:     6(bool) CompositeExtract 38 0
-              41:   33(bvec3) Load 40(i_b3)
-              42:     6(bool) CompositeExtract 41 0
-              43:     6(bool) LogicalAnd 39 42
-              44:   33(bvec3) Load 37(u_b3)
-              45:     6(bool) CompositeExtract 44 1
-              46:     6(bool) LogicalAnd 43 45
-              47:   33(bvec3) Load 40(i_b3)
-              48:     6(bool) CompositeExtract 47 1
+              22:      9(ptr) AccessChain 19(u_b2) 21
+              23:     6(bool) Load 22
+              25:      9(ptr) AccessChain 24(i_b2) 21
+              26:     6(bool) Load 25
+              27:     6(bool) LogicalAnd 23 26
+              29:      9(ptr) AccessChain 19(u_b2) 28
+              30:     6(bool) Load 29
+              31:     6(bool) LogicalAnd 27 30
+              32:      9(ptr) AccessChain 24(i_b2) 28
+              33:     6(bool) Load 32
+              34:     6(bool) LogicalAnd 31 33
+              35:   15(bvec2) CompositeConstruct 34 34
+                              Store 17(b2) 35
+              41:      9(ptr) AccessChain 40(u_b3) 21
+              42:     6(bool) Load 41
+              44:      9(ptr) AccessChain 43(i_b3) 21
+              45:     6(bool) Load 44
+              46:     6(bool) LogicalAnd 42 45
+              47:      9(ptr) AccessChain 40(u_b3) 28
+              48:     6(bool) Load 47
               49:     6(bool) LogicalAnd 46 48
-              50:   33(bvec3) Load 37(u_b3)
-              51:     6(bool) CompositeExtract 50 2
+              50:      9(ptr) AccessChain 43(i_b3) 28
+              51:     6(bool) Load 50
               52:     6(bool) LogicalAnd 49 51
-              53:   33(bvec3) Load 40(i_b3)
-              54:     6(bool) CompositeExtract 53 2
-              55:     6(bool) LogicalAnd 52 54
-              56:   33(bvec3) CompositeConstruct 55 55 55
-                              Store 35(b3) 56
-              62:   57(bvec4) Load 61(u_b4)
-              63:     6(bool) CompositeExtract 62 0
-              65:   57(bvec4) Load 64(i_b4)
-              66:     6(bool) CompositeExtract 65 0
-              67:     6(bool) LogicalAnd 63 66
-              68:   57(bvec4) Load 61(u_b4)
-              69:     6(bool) CompositeExtract 68 1
-              70:     6(bool) LogicalAnd 67 69
-              71:   57(bvec4) Load 64(i_b4)
-              72:     6(bool) CompositeExtract 71 1
-              73:     6(bool) LogicalAnd 70 72
-              74:   57(bvec4) Load 61(u_b4)
-              75:     6(bool) CompositeExtract 74 2
-              76:     6(bool) LogicalAnd 73 75
-              77:   57(bvec4) Load 64(i_b4)
-              78:     6(bool) CompositeExtract 77 2
-              79:     6(bool) LogicalAnd 76 78
-              80:   57(bvec4) Load 61(u_b4)
-              81:     6(bool) CompositeExtract 80 3
-              82:     6(bool) LogicalAnd 79 81
-              83:   57(bvec4) Load 64(i_b4)
-              84:     6(bool) CompositeExtract 83 3
-              85:     6(bool) LogicalAnd 82 84
-              86:   57(bvec4) CompositeConstruct 85 85 85 85
-                              Store 59(b4) 86
-              92:     87(int) Load 91(u_i)
-              94:     87(int) Load 93(i_i)
-              95:     87(int) IAdd 92 94
-                              Store 89(i) 95
-             101:   96(ivec2) Load 100(u_i2)
-             103:   96(ivec2) Load 102(i_i2)
-             104:   96(ivec2) IAdd 101 103
-                              Store 98(i2) 104
-             110:  105(ivec3) Load 109(u_i3)
-             112:  105(ivec3) Load 111(i_i3)
-             113:  105(ivec3) IAdd 110 112
-                              Store 107(i3) 113
-             119:  114(ivec4) Load 118(u_i4)
-             121:  114(ivec4) Load 120(i_i4)
-             122:  114(ivec4) IAdd 119 121
-                              Store 116(i4) 122
-             128:  123(float) Load 127(u_f)
-             130:  123(float) Load 129(i_f)
-             131:  123(float) FAdd 128 130
-                              Store 125(f) 131
-             137:  132(fvec2) Load 136(u_f2)
-             139:  132(fvec2) Load 138(i_f2)
-             140:  132(fvec2) FAdd 137 139
-                              Store 134(f2) 140
-             146:  141(fvec3) Load 145(u_f3)
-             148:  141(fvec3) Load 147(i_f3)
-             149:  141(fvec3) FAdd 146 148
-                              Store 143(f3) 149
-             155:  150(fvec4) Load 154(u_f4)
-             157:  150(fvec4) Load 156(i_f4)
-             158:  150(fvec4) FAdd 155 157
-                              Store 152(f4) 158
-             162:     6(bool) Load 8(b)
-             163:   15(bvec2) Load 17(b2)
-             164:     6(bool) CompositeExtract 163 0
-             165:     6(bool) LogicalOr 162 164
-             166:   15(bvec2) Load 17(b2)
-             167:     6(bool) CompositeExtract 166 1
-             168:     6(bool) LogicalOr 165 167
-             169:   33(bvec3) Load 35(b3)
-             170:     6(bool) CompositeExtract 169 0
-             171:     6(bool) LogicalOr 168 170
-             172:   33(bvec3) Load 35(b3)
-             173:     6(bool) CompositeExtract 172 1
-             174:     6(bool) LogicalOr 171 173
-             175:   33(bvec3) Load 35(b3)
-             176:     6(bool) CompositeExtract 175 2
-             177:     6(bool) LogicalOr 174 176
-             178:   57(bvec4) Load 59(b4)
-             179:     6(bool) CompositeExtract 178 0
-             180:     6(bool) LogicalOr 177 179
-             181:   57(bvec4) Load 59(b4)
-             182:     6(bool) CompositeExtract 181 1
-             183:     6(bool) LogicalOr 180 182
-             184:   57(bvec4) Load 59(b4)
-             185:     6(bool) CompositeExtract 184 2
-             186:     6(bool) LogicalOr 183 185
-             187:   57(bvec4) Load 59(b4)
-             188:     6(bool) CompositeExtract 187 3
-             189:     6(bool) LogicalOr 186 188
-                              SelectionMerge 191 None
-                              BranchConditional 189 190 256
-             190:               Label
-             192:     87(int)   Load 89(i)
-             195:     88(ptr)   AccessChain 98(i2) 194
-             196:     87(int)   Load 195
-             197:     87(int)   IAdd 192 196
-             199:     88(ptr)   AccessChain 98(i2) 198
-             200:     87(int)   Load 199
-             201:     87(int)   IAdd 197 200
-             202:     88(ptr)   AccessChain 107(i3) 194
-             203:     87(int)   Load 202
-             204:     87(int)   IAdd 201 203
-             205:     88(ptr)   AccessChain 107(i3) 198
-             206:     87(int)   Load 205
-             207:     87(int)   IAdd 204 206
-             209:     88(ptr)   AccessChain 107(i3) 208
-             210:     87(int)   Load 209
-             211:     87(int)   IAdd 207 210
-             212:     88(ptr)   AccessChain 116(i4) 194
-             213:     87(int)   Load 212
-             214:     87(int)   IAdd 211 213
-             215:     88(ptr)   AccessChain 116(i4) 198
-             216:     87(int)   Load 215
-             217:     87(int)   IAdd 214 216
-             218:     88(ptr)   AccessChain 116(i4) 208
-             219:     87(int)   Load 218
-             220:     87(int)   IAdd 217 219
-             222:     88(ptr)   AccessChain 116(i4) 221
-             223:     87(int)   Load 222
-             224:     87(int)   IAdd 220 223
-             225:  123(float)   ConvertSToF 224
-             226:  123(float)   Load 125(f)
-             227:  123(float)   FAdd 225 226
-             228:    124(ptr)   AccessChain 134(f2) 194
-             229:  123(float)   Load 228
-             230:  123(float)   FAdd 227 229
-             231:    124(ptr)   AccessChain 134(f2) 198
-             232:  123(float)   Load 231
-             233:  123(float)   FAdd 230 232
-             234:    124(ptr)   AccessChain 143(f3) 194
-             235:  123(float)   Load 234
-             236:  123(float)   FAdd 233 235
-             237:    124(ptr)   AccessChain 143(f3) 198
-             238:  123(float)   Load 237
-             239:  123(float)   FAdd 236 238
-             240:    124(ptr)   AccessChain 143(f3) 208
-             241:  123(float)   Load 240
-             242:  123(float)   FAdd 239 241
-             243:    124(ptr)   AccessChain 152(f4) 194
-             244:  123(float)   Load 243
-             245:  123(float)   FAdd 242 244
-             246:    124(ptr)   AccessChain 152(f4) 198
-             247:  123(float)   Load 246
-             248:  123(float)   FAdd 245 247
-             249:    124(ptr)   AccessChain 152(f4) 208
-             250:  123(float)   Load 249
-             251:  123(float)   FAdd 248 250
-             252:    124(ptr)   AccessChain 152(f4) 221
-             253:  123(float)   Load 252
-             254:  123(float)   FAdd 251 253
-             255:  150(fvec4)   CompositeConstruct 254 254 254 254
-                                Store 161 255
-                                Branch 191
+              54:      9(ptr) AccessChain 40(u_b3) 53
+              55:     6(bool) Load 54
+              56:     6(bool) LogicalAnd 52 55
+              57:      9(ptr) AccessChain 43(i_b3) 53
+              58:     6(bool) Load 57
+              59:     6(bool) LogicalAnd 56 58
+              60:   36(bvec3) CompositeConstruct 59 59 59
+                              Store 38(b3) 60
+              66:      9(ptr) AccessChain 65(u_b4) 21
+              67:     6(bool) Load 66
+              69:      9(ptr) AccessChain 68(i_b4) 21
+              70:     6(bool) Load 69
+              71:     6(bool) LogicalAnd 67 70
+              72:      9(ptr) AccessChain 65(u_b4) 28
+              73:     6(bool) Load 72
+              74:     6(bool) LogicalAnd 71 73
+              75:      9(ptr) AccessChain 68(i_b4) 28
+              76:     6(bool) Load 75
+              77:     6(bool) LogicalAnd 74 76
+              78:      9(ptr) AccessChain 65(u_b4) 53
+              79:     6(bool) Load 78
+              80:     6(bool) LogicalAnd 77 79
+              81:      9(ptr) AccessChain 68(i_b4) 53
+              82:     6(bool) Load 81
+              83:     6(bool) LogicalAnd 80 82
+              85:      9(ptr) AccessChain 65(u_b4) 84
+              86:     6(bool) Load 85
+              87:     6(bool) LogicalAnd 83 86
+              88:      9(ptr) AccessChain 68(i_b4) 84
+              89:     6(bool) Load 88
+              90:     6(bool) LogicalAnd 87 89
+              91:   61(bvec4) CompositeConstruct 90 90 90 90
+                              Store 63(b4) 91
+              97:     92(int) Load 96(u_i)
+              99:     92(int) Load 98(i_i)
+             100:     92(int) IAdd 97 99
+                              Store 94(i) 100
+             106:  101(ivec2) Load 105(u_i2)
+             108:  101(ivec2) Load 107(i_i2)
+             109:  101(ivec2) IAdd 106 108
+                              Store 103(i2) 109
+             115:  110(ivec3) Load 114(u_i3)
+             117:  110(ivec3) Load 116(i_i3)
+             118:  110(ivec3) IAdd 115 117
+                              Store 112(i3) 118
+             124:  119(ivec4) Load 123(u_i4)
+             126:  119(ivec4) Load 125(i_i4)
+             127:  119(ivec4) IAdd 124 126
+                              Store 121(i4) 127
+             133:  128(float) Load 132(u_f)
+             135:  128(float) Load 134(i_f)
+             136:  128(float) FAdd 133 135
+                              Store 130(f) 136
+             142:  137(fvec2) Load 141(u_f2)
+             144:  137(fvec2) Load 143(i_f2)
+             145:  137(fvec2) FAdd 142 144
+                              Store 139(f2) 145
+             151:  146(fvec3) Load 150(u_f3)
+             153:  146(fvec3) Load 152(i_f3)
+             154:  146(fvec3) FAdd 151 153
+                              Store 148(f3) 154
+             160:  155(fvec4) Load 159(u_f4)
+             162:  155(fvec4) Load 161(i_f4)
+             163:  155(fvec4) FAdd 160 162
+                              Store 157(f4) 163
+             166:     6(bool) Load 8(b)
+             167:      7(ptr) AccessChain 17(b2) 21
+             168:     6(bool) Load 167
+             169:     6(bool) LogicalOr 166 168
+             170:      7(ptr) AccessChain 17(b2) 28
+             171:     6(bool) Load 170
+             172:     6(bool) LogicalOr 169 171
+             173:      7(ptr) AccessChain 38(b3) 21
+             174:     6(bool) Load 173
+             175:     6(bool) LogicalOr 172 174
+             176:      7(ptr) AccessChain 38(b3) 28
+             177:     6(bool) Load 176
+             178:     6(bool) LogicalOr 175 177
+             179:      7(ptr) AccessChain 38(b3) 53
+             180:     6(bool) Load 179
+             181:     6(bool) LogicalOr 178 180
+             182:      7(ptr) AccessChain 63(b4) 21
+             183:     6(bool) Load 182
+             184:     6(bool) LogicalOr 181 183
+             185:      7(ptr) AccessChain 63(b4) 28
+             186:     6(bool) Load 185
+             187:     6(bool) LogicalOr 184 186
+             188:      7(ptr) AccessChain 63(b4) 53
+             189:     6(bool) Load 188
+             190:     6(bool) LogicalOr 187 189
+             191:      7(ptr) AccessChain 63(b4) 84
+             192:     6(bool) Load 191
+             193:     6(bool) LogicalOr 190 192
+                              SelectionMerge 196 None
+                              BranchConditional 193 195 256
+             195:               Label
+             197:     92(int)   Load 94(i)
+             198:     93(ptr)   AccessChain 103(i2) 21
+             199:     92(int)   Load 198
+             200:     92(int)   IAdd 197 199
+             201:     93(ptr)   AccessChain 103(i2) 28
+             202:     92(int)   Load 201
+             203:     92(int)   IAdd 200 202
+             204:     93(ptr)   AccessChain 112(i3) 21
+             205:     92(int)   Load 204
+             206:     92(int)   IAdd 203 205
+             207:     93(ptr)   AccessChain 112(i3) 28
+             208:     92(int)   Load 207
+             209:     92(int)   IAdd 206 208
+             210:     93(ptr)   AccessChain 112(i3) 53
+             211:     92(int)   Load 210
+             212:     92(int)   IAdd 209 211
+             213:     93(ptr)   AccessChain 121(i4) 21
+             214:     92(int)   Load 213
+             215:     92(int)   IAdd 212 214
+             216:     93(ptr)   AccessChain 121(i4) 28
+             217:     92(int)   Load 216
+             218:     92(int)   IAdd 215 217
+             219:     93(ptr)   AccessChain 121(i4) 53
+             220:     92(int)   Load 219
+             221:     92(int)   IAdd 218 220
+             222:     93(ptr)   AccessChain 121(i4) 84
+             223:     92(int)   Load 222
+             224:     92(int)   IAdd 221 223
+             225:  128(float)   ConvertSToF 224
+             226:  128(float)   Load 130(f)
+             227:  128(float)   FAdd 225 226
+             228:    129(ptr)   AccessChain 139(f2) 21
+             229:  128(float)   Load 228
+             230:  128(float)   FAdd 227 229
+             231:    129(ptr)   AccessChain 139(f2) 28
+             232:  128(float)   Load 231
+             233:  128(float)   FAdd 230 232
+             234:    129(ptr)   AccessChain 148(f3) 21
+             235:  128(float)   Load 234
+             236:  128(float)   FAdd 233 235
+             237:    129(ptr)   AccessChain 148(f3) 28
+             238:  128(float)   Load 237
+             239:  128(float)   FAdd 236 238
+             240:    129(ptr)   AccessChain 148(f3) 53
+             241:  128(float)   Load 240
+             242:  128(float)   FAdd 239 241
+             243:    129(ptr)   AccessChain 157(f4) 21
+             244:  128(float)   Load 243
+             245:  128(float)   FAdd 242 244
+             246:    129(ptr)   AccessChain 157(f4) 28
+             247:  128(float)   Load 246
+             248:  128(float)   FAdd 245 247
+             249:    129(ptr)   AccessChain 157(f4) 53
+             250:  128(float)   Load 249
+             251:  128(float)   FAdd 248 250
+             252:    129(ptr)   AccessChain 157(f4) 84
+             253:  128(float)   Load 252
+             254:  128(float)   FAdd 251 253
+             255:  155(fvec4)   CompositeConstruct 254 254 254 254
+                                Store 194 255
+                                Branch 196
              256:               Label
-                                Store 161 258
-                                Branch 191
-             191:             Label
-             259:  150(fvec4) Load 161
-                              Store 160(gl_FragColor) 259
+                                Store 194 258
+                                Branch 196
+             196:             Label
+             259:  155(fvec4) Load 194
+                              Store 165(gl_FragColor) 259
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.uint.frag.out b/Test/baseResults/spv.uint.frag.out
index 92c4ce7..dfd2d9d 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): 80002
+// Generated by (magic number): 80006
 // 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 87aa2f2..b27cb5d 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): 80002
+// Generated by (magic number): 80006
 // 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 fa682cd..3c8d0ee 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): 80002
+// Generated by (magic number): 80006
 // 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 22748ac..b93dbeb 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): 80002
+// Generated by (magic number): 80006
 // 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 701f9d1..dbb1029 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): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 70
 
                               Capability Shader
diff --git a/Test/baseResults/spv.vecMatConstruct.frag.out b/Test/baseResults/spv.vecMatConstruct.frag.out
new file mode 100755
index 0000000..d7e892d
--- /dev/null
+++ b/Test/baseResults/spv.vecMatConstruct.frag.out
@@ -0,0 +1,87 @@
+spv.vecMatConstruct.frag
+// Module Version 10000
+// Generated by (magic number): 80006
+// Id's are bound by 62
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main"
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              Name 4  "main"
+                              Name 9  "v2"
+                              Name 13  "m"
+                              Name 19  "v3"
+                              Name 27  "v4"
+                              Name 37  "iv2"
+                              Name 45  "iv3"
+                              Name 54  "iv4"
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 2
+               8:             TypePointer Function 7(fvec2)
+              10:             TypeVector 6(float) 3
+              11:             TypeMatrix 10(fvec3) 4
+              12:             TypePointer Function 11
+              18:             TypePointer Function 10(fvec3)
+              25:             TypeVector 6(float) 4
+              26:             TypePointer Function 25(fvec4)
+              34:             TypeInt 32 1
+              35:             TypeVector 34(int) 2
+              36:             TypePointer Function 35(ivec2)
+              43:             TypeVector 34(int) 3
+              44:             TypePointer Function 43(ivec3)
+              52:             TypeVector 34(int) 4
+              53:             TypePointer Function 52(ivec4)
+         4(main):           2 Function None 3
+               5:             Label
+           9(v2):      8(ptr) Variable Function
+           13(m):     12(ptr) Variable Function
+          19(v3):     18(ptr) Variable Function
+          27(v4):     26(ptr) Variable Function
+         37(iv2):     36(ptr) Variable Function
+         45(iv3):     44(ptr) Variable Function
+         54(iv4):     53(ptr) Variable Function
+              14:          11 Load 13(m)
+              15:    6(float) CompositeExtract 14 0 0
+              16:    6(float) CompositeExtract 14 0 1
+              17:    7(fvec2) CompositeConstruct 15 16
+                              Store 9(v2) 17
+              20:          11 Load 13(m)
+              21:    6(float) CompositeExtract 20 0 0
+              22:    6(float) CompositeExtract 20 0 1
+              23:    6(float) CompositeExtract 20 0 2
+              24:   10(fvec3) CompositeConstruct 21 22 23
+                              Store 19(v3) 24
+              28:          11 Load 13(m)
+              29:    6(float) CompositeExtract 28 0 0
+              30:    6(float) CompositeExtract 28 0 1
+              31:    6(float) CompositeExtract 28 0 2
+              32:    6(float) CompositeExtract 28 1 0
+              33:   25(fvec4) CompositeConstruct 29 30 31 32
+                              Store 27(v4) 33
+              38:          11 Load 13(m)
+              39:    6(float) CompositeExtract 38 0 0
+              40:    6(float) CompositeExtract 38 0 1
+              41:    7(fvec2) CompositeConstruct 39 40
+              42:   35(ivec2) ConvertFToS 41
+                              Store 37(iv2) 42
+              46:          11 Load 13(m)
+              47:    6(float) CompositeExtract 46 0 0
+              48:    6(float) CompositeExtract 46 0 1
+              49:    6(float) CompositeExtract 46 0 2
+              50:   10(fvec3) CompositeConstruct 47 48 49
+              51:   43(ivec3) ConvertFToS 50
+                              Store 45(iv3) 51
+              55:          11 Load 13(m)
+              56:    6(float) CompositeExtract 55 0 0
+              57:    6(float) CompositeExtract 55 0 1
+              58:    6(float) CompositeExtract 55 0 2
+              59:    6(float) CompositeExtract 55 1 0
+              60:   25(fvec4) CompositeConstruct 56 57 58 59
+              61:   52(ivec4) ConvertFToS 60
+                              Store 54(iv4) 61
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.viewportArray2.tesc.out b/Test/baseResults/spv.viewportArray2.tesc.out
index d62455c..342b5a2 100644
--- a/Test/baseResults/spv.viewportArray2.tesc.out
+++ b/Test/baseResults/spv.viewportArray2.tesc.out
@@ -1,6 +1,6 @@
 spv.viewportArray2.tesc
 // Module Version 10000
-// Generated by (magic number): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 25
 
                               Capability Geometry
diff --git a/Test/baseResults/spv.viewportArray2.vert.out b/Test/baseResults/spv.viewportArray2.vert.out
index b627b46..5b8e28f 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): 80002
+// Generated by (magic number): 80006
 // 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 1fbd69f..00ee940 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): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 43
 
                               Capability Shader
diff --git a/Test/baseResults/spv.vulkan100.subgroupArithmetic.comp.out b/Test/baseResults/spv.vulkan100.subgroupArithmetic.comp.out
new file mode 100755
index 0000000..9955053
--- /dev/null
+++ b/Test/baseResults/spv.vulkan100.subgroupArithmetic.comp.out
@@ -0,0 +1,305 @@
+spv.vulkan100.subgroupArithmetic.comp
+ERROR: 0:19: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:20: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:21: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:22: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:24: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:25: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:26: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:27: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:29: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:30: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:31: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:32: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:34: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:35: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:36: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:37: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:39: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:40: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:41: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:42: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:44: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:45: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:46: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:47: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:49: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:50: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:51: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:52: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:54: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:55: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:56: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:57: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:59: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:60: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:61: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:62: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:64: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:65: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:66: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:67: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:69: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:70: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:71: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:72: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:74: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:75: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:76: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:77: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:79: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:80: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:81: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:82: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:84: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:85: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:86: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:87: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:89: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:90: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:91: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:92: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:94: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:95: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:96: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:97: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:99: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:100: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:101: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:102: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:104: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:105: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:106: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:107: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:109: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:110: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:111: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:112: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:114: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:115: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:116: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:117: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:119: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:120: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:121: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:122: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:124: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:125: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:126: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:127: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:129: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:130: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:131: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:132: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:134: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:135: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:136: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:137: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:139: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:140: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:141: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:142: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:144: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:145: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:146: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:147: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:149: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:150: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:151: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:152: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:154: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:155: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:156: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:157: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:159: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:160: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:161: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:162: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:164: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:165: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:166: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:167: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:169: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:170: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:171: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:172: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:174: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:175: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:176: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:177: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:179: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:180: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:181: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:182: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:184: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:185: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:186: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:187: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:189: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:190: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:191: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:192: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:194: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:195: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:196: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:197: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:199: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:200: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:201: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:202: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:204: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:205: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:206: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:207: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:209: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:210: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:211: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:212: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:214: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:215: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:216: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:217: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:219: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:220: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:221: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:222: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:224: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:225: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:226: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:227: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:229: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:230: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:231: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:232: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:234: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:235: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:236: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:237: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:239: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:240: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:241: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:242: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:244: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:245: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:246: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:247: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:249: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:250: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:251: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:252: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:254: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:255: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:256: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:257: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:259: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:260: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:261: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:262: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:264: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:265: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:266: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:267: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:269: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:270: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:271: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:272: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:274: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:275: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:276: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:277: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:279: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:280: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:281: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:282: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:284: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:285: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:286: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:287: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:289: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:290: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:291: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:292: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:294: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:295: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:296: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:297: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:299: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:300: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:301: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:302: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:304: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:305: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:306: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:307: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:309: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:310: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:311: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:312: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:314: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:315: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:316: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:317: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:319: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:320: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:321: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:322: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:324: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:325: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:326: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:327: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:329: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:330: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:331: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:332: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:334: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:335: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:336: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:337: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:339: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:340: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:341: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:342: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:344: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:345: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:346: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:347: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:349: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:350: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:351: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:352: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:354: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:355: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:356: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:357: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:359: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:360: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:361: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:362: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:364: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:365: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:366: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:367: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:369: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:370: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:371: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:372: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:374: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:375: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:376: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:377: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:379: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:380: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:381: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:382: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:384: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:385: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:386: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:387: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:389: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:390: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:391: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:392: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 300 compilation errors.  No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/spv.vulkan100.subgroupPartitioned.comp.out b/Test/baseResults/spv.vulkan100.subgroupPartitioned.comp.out
new file mode 100755
index 0000000..3116ac1
--- /dev/null
+++ b/Test/baseResults/spv.vulkan100.subgroupPartitioned.comp.out
@@ -0,0 +1,326 @@
+spv.vulkan100.subgroupPartitioned.comp
+ERROR: 0:19: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:21: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:22: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:23: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:24: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:26: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:27: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:28: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:29: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:31: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:32: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:33: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:34: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:36: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:37: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:38: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:39: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:41: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:42: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:43: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:44: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:46: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:47: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:48: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:49: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:51: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:52: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:53: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:54: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:56: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:57: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:58: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:59: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:61: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:62: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:63: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:64: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:66: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:67: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:68: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:69: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:71: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:72: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:73: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:74: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:76: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:77: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:78: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:79: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:81: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:82: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:83: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:84: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:86: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:87: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:88: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:89: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:91: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:92: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:93: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:94: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:96: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:97: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:98: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:99: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:101: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:102: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:103: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:104: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:106: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:107: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:108: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:109: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:111: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:112: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:113: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:114: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:116: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:117: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:118: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:119: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:121: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:122: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:123: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:124: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:126: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:127: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:128: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:129: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:131: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:132: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:133: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:134: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:136: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:137: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:138: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:139: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:141: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:142: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:143: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:144: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:146: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:147: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:148: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:149: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:151: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:152: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:153: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:154: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:156: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:157: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:158: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:159: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:161: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:162: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:163: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:164: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:166: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:167: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:168: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:169: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:171: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:172: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:173: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:174: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:176: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:177: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:178: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:179: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:181: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:182: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:183: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:184: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:186: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:187: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:188: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:189: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:191: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:192: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:193: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:194: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:196: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:197: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:198: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:199: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:201: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:202: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:203: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:204: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:206: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:207: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:208: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:209: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:211: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:212: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:213: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:214: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:216: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:217: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:218: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:219: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:221: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:222: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:223: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:224: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:226: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:227: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:228: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:229: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:231: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:232: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:233: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:234: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:236: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:237: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:238: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:239: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:241: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:242: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:243: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:244: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:246: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:247: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:248: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:249: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:251: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:252: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:253: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:254: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:256: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:257: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:258: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:259: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:261: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:262: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:263: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:264: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:266: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:267: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:268: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:269: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:271: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:272: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:273: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:274: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:276: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:277: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:278: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:279: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:281: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:282: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:283: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:284: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:286: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:287: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:288: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:289: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:291: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:292: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:293: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:294: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:296: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:297: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:298: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:299: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:301: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:302: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:303: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:304: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:306: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:307: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:308: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:309: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:311: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:312: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:313: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:314: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:316: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:317: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:318: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:319: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:321: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:322: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:323: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:324: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:326: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:327: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:328: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:329: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:331: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:332: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:333: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:334: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:336: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:337: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:338: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:339: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:341: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:342: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:343: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:344: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:346: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:347: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:348: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:349: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:351: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:352: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:353: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:354: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:356: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:357: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:358: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:359: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:361: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:362: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:363: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:364: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:366: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:367: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:368: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:369: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:371: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:372: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:373: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:374: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:376: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:377: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:378: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:379: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:381: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:382: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:383: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:384: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:386: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:387: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:388: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:389: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:391: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:392: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:393: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:394: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:396: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:397: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:398: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:399: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:401: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:402: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:403: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:404: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:406: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:407: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:408: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:409: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:411: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:412: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:413: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:414: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:416: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:417: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:418: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:419: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 321 compilation errors.  No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/spv.vulkan110.int16.frag.out b/Test/baseResults/spv.vulkan110.int16.frag.out
new file mode 100755
index 0000000..6639dc7
--- /dev/null
+++ b/Test/baseResults/spv.vulkan110.int16.frag.out
@@ -0,0 +1,741 @@
+spv.vulkan110.int16.frag
+// Module Version 10300
+// Generated by (magic number): 80006
+// Id's are bound by 523
+
+                              Capability Shader
+                              Capability Float16
+                              Capability Float64
+                              Capability Int64
+                              Capability Int16
+                              Capability Int8
+                              Capability StorageUniform16
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main"
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_float16"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_float32"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_float64"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_int16"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_int32"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_int64"
+                              SourceExtension  "GL_KHX_shader_explicit_arithmetic_types_int8"
+                              Name 4  "main"
+                              Name 6  "literal("
+                              Name 8  "typeCast16("
+                              Name 10  "operators("
+                              Name 12  "builtinFuncs("
+                              Name 16  "i16"
+                              Name 24  "Uniforms"
+                              MemberName 24(Uniforms) 0  "index"
+                              Name 26  ""
+                              Name 33  "indexable"
+                              Name 38  "u16"
+                              Name 46  "indexable"
+                              Name 51  "i32v"
+                              Name 54  "i16v"
+                              Name 59  "u16v"
+                              Name 67  "u32v"
+                              Name 74  "i64v"
+                              Name 80  "u64v"
+                              Name 94  "f16v"
+                              Name 100  "f32v"
+                              Name 106  "f64v"
+                              Name 154  "i8v"
+                              Name 163  "u8v"
+                              Name 176  "bv"
+                              Name 195  "u16v"
+                              Name 200  "i16"
+                              Name 220  "i"
+                              Name 227  "uv"
+                              Name 243  "i64"
+                              Name 281  "b"
+                              Name 343  "i16v"
+                              Name 346  "i16"
+                              Name 356  "u16v"
+                              Name 358  "u16"
+                              Name 428  "i32"
+                              Name 431  "i64"
+                              Name 434  "i16v4"
+                              Name 437  "u32"
+                              Name 438  "u16v2"
+                              Name 442  "u64"
+                              Name 445  "u16v4"
+                              Name 457  "bv"
+                              Name 518  "Block"
+                              MemberName 518(Block) 0  "i16"
+                              MemberName 518(Block) 1  "i16v2"
+                              MemberName 518(Block) 2  "i16v3"
+                              MemberName 518(Block) 3  "i16v4"
+                              MemberName 518(Block) 4  "u16"
+                              MemberName 518(Block) 5  "u16v2"
+                              MemberName 518(Block) 6  "u16v3"
+                              MemberName 518(Block) 7  "u16v4"
+                              Name 520  "block"
+                              Name 521  "si16"
+                              Name 522  "su16"
+                              MemberDecorate 24(Uniforms) 0 Offset 0
+                              Decorate 24(Uniforms) Block
+                              Decorate 26 DescriptorSet 0
+                              Decorate 26 Binding 0
+                              MemberDecorate 518(Block) 0 Offset 0
+                              MemberDecorate 518(Block) 1 Offset 4
+                              MemberDecorate 518(Block) 2 Offset 8
+                              MemberDecorate 518(Block) 3 Offset 16
+                              MemberDecorate 518(Block) 4 Offset 24
+                              MemberDecorate 518(Block) 5 Offset 28
+                              MemberDecorate 518(Block) 6 Offset 32
+                              MemberDecorate 518(Block) 7 Offset 40
+                              Decorate 518(Block) Block
+                              Decorate 520(block) DescriptorSet 0
+                              Decorate 520(block) Binding 1
+                              Decorate 521(si16) SpecId 100
+                              Decorate 522(su16) SpecId 101
+               2:             TypeVoid
+               3:             TypeFunction 2
+              14:             TypeInt 16 1
+              15:             TypePointer Function 14(int)
+              17:             TypeInt 32 0
+              18:     17(int) Constant 3
+              19:             TypeArray 14(int) 18
+              20:     14(int) Constant 4294962927
+              21:     14(int) Constant 4294967295
+              22:     14(int) Constant 16384
+              23:          19 ConstantComposite 20 21 22
+    24(Uniforms):             TypeStruct 17(int)
+              25:             TypePointer Uniform 24(Uniforms)
+              26:     25(ptr) Variable Uniform
+              27:             TypeInt 32 1
+              28:     27(int) Constant 0
+              29:             TypePointer Uniform 17(int)
+              32:             TypePointer Function 19
+              36:             TypeInt 16 0
+              37:             TypePointer Function 36(int)
+              39:             TypeArray 36(int) 18
+              40:     36(int) Constant 65535
+              41:     36(int) Constant 32767
+              42:          39 ConstantComposite 40 40 41
+              45:             TypePointer Function 39
+              49:             TypeVector 27(int) 2
+              50:             TypePointer Function 49(ivec2)
+              52:             TypeVector 14(int) 2
+              53:             TypePointer Function 52(ivec2)
+              57:             TypeVector 36(int) 2
+              58:             TypePointer Function 57(ivec2)
+              65:             TypeVector 17(int) 2
+              66:             TypePointer Function 65(ivec2)
+              71:             TypeInt 64 1
+              72:             TypeVector 71(int) 2
+              73:             TypePointer Function 72(ivec2)
+              77:             TypeInt 64 0
+              78:             TypeVector 77(int) 2
+              79:             TypePointer Function 78(ivec2)
+              91:             TypeFloat 16
+              92:             TypeVector 91(float) 2
+              93:             TypePointer Function 92(fvec2)
+              97:             TypeFloat 32
+              98:             TypeVector 97(float) 2
+              99:             TypePointer Function 98(fvec2)
+             103:             TypeFloat 64
+             104:             TypeVector 103(float) 2
+             105:             TypePointer Function 104(fvec2)
+             151:             TypeInt 8 1
+             152:             TypeVector 151(int) 2
+             153:             TypePointer Function 152(ivec2)
+             160:             TypeInt 8 0
+             161:             TypeVector 160(int) 2
+             162:             TypePointer Function 161(ivec2)
+             173:             TypeBool
+             174:             TypeVector 173(bool) 2
+             175:             TypePointer Function 174(bvec2)
+             178:     14(int) Constant 0
+             179:     14(int) Constant 1
+             180:   52(ivec2) ConstantComposite 178 178
+             181:   52(ivec2) ConstantComposite 179 179
+             184:     36(int) Constant 0
+             185:     36(int) Constant 1
+             186:   57(ivec2) ConstantComposite 184 184
+             187:   57(ivec2) ConstantComposite 185 185
+             193:             TypeVector 36(int) 3
+             194:             TypePointer Function 193(ivec3)
+             197:             TypeVector 14(int) 3
+             219:             TypePointer Function 27(int)
+             225:             TypeVector 17(int) 3
+             226:             TypePointer Function 225(ivec3)
+             242:             TypePointer Function 71(int)
+             264:     17(int) Constant 1
+             270:     17(int) Constant 2
+             276:             TypeVector 27(int) 3
+             280:             TypePointer Function 173(bool)
+             282:     17(int) Constant 0
+             296:             TypePointer Function 17(int)
+             354:   52(ivec2) ConstantComposite 21 21
+             363:  193(ivec3) ConstantComposite 184 184 184
+             405:   173(bool) ConstantTrue
+             412:   173(bool) ConstantFalse
+             413:  174(bvec2) ConstantComposite 412 412
+             425:             TypeVector 173(bool) 3
+             426:  425(bvec3) ConstantComposite 412 412 412
+             432:             TypeVector 14(int) 4
+             433:             TypePointer Function 432(ivec4)
+             441:             TypePointer Function 77(int)
+             443:             TypeVector 36(int) 4
+             444:             TypePointer Function 443(ivec4)
+             456:             TypePointer Function 425(bvec3)
+      518(Block):             TypeStruct 14(int) 52(ivec2) 197(ivec3) 432(ivec4) 36(int) 57(ivec2) 193(ivec3) 443(ivec4)
+             519:             TypePointer Uniform 518(Block)
+      520(block):    519(ptr) Variable Uniform
+       521(si16):     14(int) SpecConstant 4294967286
+       522(su16):     36(int) SpecConstant 20
+         4(main):           2 Function None 3
+               5:             Label
+                              Return
+                              FunctionEnd
+     6(literal():           2 Function None 3
+               7:             Label
+         16(i16):     15(ptr) Variable Function
+   33(indexable):     32(ptr) Variable Function
+         38(u16):     37(ptr) Variable Function
+   46(indexable):     45(ptr) Variable Function
+              30:     29(ptr) AccessChain 26 28
+              31:     17(int) Load 30
+                              Store 33(indexable) 23
+              34:     15(ptr) AccessChain 33(indexable) 31
+              35:     14(int) Load 34
+                              Store 16(i16) 35
+              43:     29(ptr) AccessChain 26 28
+              44:     17(int) Load 43
+                              Store 46(indexable) 42
+              47:     37(ptr) AccessChain 46(indexable) 44
+              48:     36(int) Load 47
+                              Store 38(u16) 48
+                              Return
+                              FunctionEnd
+  8(typeCast16():           2 Function None 3
+               9:             Label
+        51(i32v):     50(ptr) Variable Function
+        54(i16v):     53(ptr) Variable Function
+        59(u16v):     58(ptr) Variable Function
+        67(u32v):     66(ptr) Variable Function
+        74(i64v):     73(ptr) Variable Function
+        80(u64v):     79(ptr) Variable Function
+        94(f16v):     93(ptr) Variable Function
+       100(f32v):     99(ptr) Variable Function
+       106(f64v):    105(ptr) Variable Function
+        154(i8v):    153(ptr) Variable Function
+        163(u8v):    162(ptr) Variable Function
+         176(bv):    175(ptr) Variable Function
+              55:   52(ivec2) Load 54(i16v)
+              56:   49(ivec2) SConvert 55
+                              Store 51(i32v) 56
+              60:   57(ivec2) Load 59(u16v)
+              61:   49(ivec2) UConvert 60
+              62:   49(ivec2) Bitcast 61
+                              Store 51(i32v) 62
+              63:   52(ivec2) Load 54(i16v)
+              64:   57(ivec2) Bitcast 63
+                              Store 59(u16v) 64
+              68:   52(ivec2) Load 54(i16v)
+              69:   49(ivec2) SConvert 68
+              70:   65(ivec2) Bitcast 69
+                              Store 67(u32v) 70
+              75:   52(ivec2) Load 54(i16v)
+              76:   72(ivec2) SConvert 75
+                              Store 74(i64v) 76
+              81:   52(ivec2) Load 54(i16v)
+              82:   72(ivec2) SConvert 81
+              83:   78(ivec2) Bitcast 82
+                              Store 80(u64v) 83
+              84:   57(ivec2) Load 59(u16v)
+              85:   65(ivec2) UConvert 84
+                              Store 67(u32v) 85
+              86:   57(ivec2) Load 59(u16v)
+              87:   72(ivec2) UConvert 86
+              88:   72(ivec2) Bitcast 87
+                              Store 74(i64v) 88
+              89:   57(ivec2) Load 59(u16v)
+              90:   78(ivec2) UConvert 89
+                              Store 80(u64v) 90
+              95:   52(ivec2) Load 54(i16v)
+              96:   92(fvec2) ConvertSToF 95
+                              Store 94(f16v) 96
+             101:   52(ivec2) Load 54(i16v)
+             102:   98(fvec2) ConvertSToF 101
+                              Store 100(f32v) 102
+             107:   52(ivec2) Load 54(i16v)
+             108:  104(fvec2) ConvertSToF 107
+                              Store 106(f64v) 108
+             109:   57(ivec2) Load 59(u16v)
+             110:   92(fvec2) ConvertUToF 109
+                              Store 94(f16v) 110
+             111:   57(ivec2) Load 59(u16v)
+             112:   98(fvec2) ConvertUToF 111
+                              Store 100(f32v) 112
+             113:   57(ivec2) Load 59(u16v)
+             114:  104(fvec2) ConvertUToF 113
+                              Store 106(f64v) 114
+             115:   52(ivec2) Load 54(i16v)
+             116:   49(ivec2) SConvert 115
+                              Store 51(i32v) 116
+             117:   57(ivec2) Load 59(u16v)
+             118:   49(ivec2) UConvert 117
+             119:   49(ivec2) Bitcast 118
+                              Store 51(i32v) 119
+             120:   52(ivec2) Load 54(i16v)
+             121:   57(ivec2) Bitcast 120
+                              Store 59(u16v) 121
+             122:   52(ivec2) Load 54(i16v)
+             123:   49(ivec2) SConvert 122
+             124:   65(ivec2) Bitcast 123
+                              Store 67(u32v) 124
+             125:   52(ivec2) Load 54(i16v)
+             126:   72(ivec2) SConvert 125
+                              Store 74(i64v) 126
+             127:   52(ivec2) Load 54(i16v)
+             128:   72(ivec2) SConvert 127
+             129:   78(ivec2) Bitcast 128
+                              Store 80(u64v) 129
+             130:   57(ivec2) Load 59(u16v)
+             131:   65(ivec2) UConvert 130
+                              Store 67(u32v) 131
+             132:   57(ivec2) Load 59(u16v)
+             133:   72(ivec2) UConvert 132
+             134:   72(ivec2) Bitcast 133
+                              Store 74(i64v) 134
+             135:   57(ivec2) Load 59(u16v)
+             136:   72(ivec2) UConvert 135
+             137:   72(ivec2) Bitcast 136
+             138:   78(ivec2) Bitcast 137
+                              Store 80(u64v) 138
+             139:   52(ivec2) Load 54(i16v)
+             140:   92(fvec2) ConvertSToF 139
+                              Store 94(f16v) 140
+             141:   52(ivec2) Load 54(i16v)
+             142:   98(fvec2) ConvertSToF 141
+                              Store 100(f32v) 142
+             143:   52(ivec2) Load 54(i16v)
+             144:  104(fvec2) ConvertSToF 143
+                              Store 106(f64v) 144
+             145:   57(ivec2) Load 59(u16v)
+             146:   92(fvec2) ConvertUToF 145
+                              Store 94(f16v) 146
+             147:   57(ivec2) Load 59(u16v)
+             148:   98(fvec2) ConvertUToF 147
+                              Store 100(f32v) 148
+             149:   57(ivec2) Load 59(u16v)
+             150:  104(fvec2) ConvertUToF 149
+                              Store 106(f64v) 150
+             155:   52(ivec2) Load 54(i16v)
+             156:  152(ivec2) SConvert 155
+                              Store 154(i8v) 156
+             157:   57(ivec2) Load 59(u16v)
+             158:  152(ivec2) UConvert 157
+             159:  152(ivec2) Bitcast 158
+                              Store 154(i8v) 159
+             164:   52(ivec2) Load 54(i16v)
+             165:  152(ivec2) SConvert 164
+             166:  161(ivec2) Bitcast 165
+                              Store 163(u8v) 166
+             167:   57(ivec2) Load 59(u16v)
+             168:  161(ivec2) UConvert 167
+                              Store 163(u8v) 168
+             169:   57(ivec2) Load 59(u16v)
+             170:  161(ivec2) UConvert 169
+             171:   52(ivec2) UConvert 170
+             172:   52(ivec2) Bitcast 171
+                              Store 54(i16v) 172
+             177:  174(bvec2) Load 176(bv)
+             182:   52(ivec2) Select 177 181 180
+                              Store 54(i16v) 182
+             183:  174(bvec2) Load 176(bv)
+             188:   57(ivec2) Select 183 187 186
+                              Store 59(u16v) 188
+             189:   52(ivec2) Load 54(i16v)
+             190:  174(bvec2) INotEqual 189 186
+                              Store 176(bv) 190
+             191:   57(ivec2) Load 59(u16v)
+             192:  174(bvec2) INotEqual 191 186
+                              Store 176(bv) 192
+                              Return
+                              FunctionEnd
+  10(operators():           2 Function None 3
+              11:             Label
+       195(u16v):    194(ptr) Variable Function
+        200(i16):     15(ptr) Variable Function
+          220(i):    219(ptr) Variable Function
+         227(uv):    226(ptr) Variable Function
+        243(i64):    242(ptr) Variable Function
+          281(b):    280(ptr) Variable Function
+             196:  193(ivec3) Load 195(u16v)
+             198:  197(ivec3) CompositeConstruct 179 179 179
+             199:  193(ivec3) IAdd 196 198
+                              Store 195(u16v) 199
+             201:     14(int) Load 200(i16)
+             202:     14(int) ISub 201 179
+                              Store 200(i16) 202
+             203:     14(int) Load 200(i16)
+             204:     14(int) IAdd 203 179
+                              Store 200(i16) 204
+             205:  193(ivec3) Load 195(u16v)
+             206:  197(ivec3) CompositeConstruct 179 179 179
+             207:  193(ivec3) ISub 205 206
+                              Store 195(u16v) 207
+             208:  193(ivec3) Load 195(u16v)
+             209:  193(ivec3) Not 208
+                              Store 195(u16v) 209
+             210:     14(int) Load 200(i16)
+                              Store 200(i16) 210
+             211:  193(ivec3) Load 195(u16v)
+             212:  193(ivec3) SNegate 211
+                              Store 195(u16v) 212
+             213:     14(int) Load 200(i16)
+             214:     14(int) Load 200(i16)
+             215:     14(int) IAdd 214 213
+                              Store 200(i16) 215
+             216:  193(ivec3) Load 195(u16v)
+             217:  193(ivec3) Load 195(u16v)
+             218:  193(ivec3) ISub 217 216
+                              Store 195(u16v) 218
+             221:     14(int) Load 200(i16)
+             222:     27(int) SConvert 221
+             223:     27(int) Load 220(i)
+             224:     27(int) IMul 223 222
+                              Store 220(i) 224
+             228:  193(ivec3) Load 195(u16v)
+             229:  225(ivec3) UConvert 228
+             230:  225(ivec3) Load 227(uv)
+             231:  225(ivec3) UDiv 230 229
+                              Store 227(uv) 231
+             232:     14(int) Load 200(i16)
+             233:     27(int) SConvert 232
+             234:     17(int) Bitcast 233
+             235:  225(ivec3) Load 227(uv)
+             236:  225(ivec3) CompositeConstruct 234 234 234
+             237:  225(ivec3) UMod 235 236
+                              Store 227(uv) 237
+             238:  193(ivec3) Load 195(u16v)
+             239:  225(ivec3) UConvert 238
+             240:  225(ivec3) Load 227(uv)
+             241:  225(ivec3) IAdd 239 240
+                              Store 227(uv) 241
+             244:     14(int) Load 200(i16)
+             245:     71(int) SConvert 244
+             246:     71(int) Load 243(i64)
+             247:     71(int) ISub 245 246
+                              Store 243(i64) 247
+             248:  193(ivec3) Load 195(u16v)
+             249:  225(ivec3) UConvert 248
+             250:  225(ivec3) Load 227(uv)
+             251:  225(ivec3) IMul 249 250
+                              Store 227(uv) 251
+             252:     14(int) Load 200(i16)
+             253:     71(int) SConvert 252
+             254:     71(int) Load 243(i64)
+             255:     71(int) IMul 253 254
+                              Store 243(i64) 255
+             256:     14(int) Load 200(i16)
+             257:     27(int) SConvert 256
+             258:     27(int) Load 220(i)
+             259:     27(int) SMod 257 258
+                              Store 220(i) 259
+             260:     14(int) Load 200(i16)
+             261:  193(ivec3) Load 195(u16v)
+             262:  197(ivec3) CompositeConstruct 260 260 260
+             263:  193(ivec3) ShiftLeftLogical 261 262
+                              Store 195(u16v) 263
+             265:     37(ptr) AccessChain 195(u16v) 264
+             266:     36(int) Load 265
+             267:     14(int) Load 200(i16)
+             268:     14(int) ShiftRightArithmetic 267 266
+                              Store 200(i16) 268
+             269:     14(int) Load 200(i16)
+             271:     37(ptr) AccessChain 195(u16v) 270
+             272:     36(int) Load 271
+             273:     14(int) ShiftLeftLogical 269 272
+                              Store 200(i16) 273
+             274:  193(ivec3) Load 195(u16v)
+             275:     27(int) Load 220(i)
+             277:  276(ivec3) CompositeConstruct 275 275 275
+             278:  193(ivec3) ShiftLeftLogical 274 277
+             279:  225(ivec3) UConvert 278
+                              Store 227(uv) 279
+             283:     37(ptr) AccessChain 195(u16v) 282
+             284:     36(int) Load 283
+             285:     14(int) Load 200(i16)
+             286:     36(int) Bitcast 285
+             287:   173(bool) INotEqual 284 286
+                              Store 281(b) 287
+             288:     14(int) Load 200(i16)
+             289:     36(int) Bitcast 288
+             290:     37(ptr) AccessChain 195(u16v) 282
+             291:     36(int) Load 290
+             292:   173(bool) IEqual 289 291
+                              Store 281(b) 292
+             293:     37(ptr) AccessChain 195(u16v) 282
+             294:     36(int) Load 293
+             295:     17(int) UConvert 294
+             297:    296(ptr) AccessChain 227(uv) 264
+             298:     17(int) Load 297
+             299:   173(bool) UGreaterThan 295 298
+                              Store 281(b) 299
+             300:     14(int) Load 200(i16)
+             301:     27(int) SConvert 300
+             302:     27(int) Load 220(i)
+             303:   173(bool) SLessThan 301 302
+                              Store 281(b) 303
+             304:     37(ptr) AccessChain 195(u16v) 264
+             305:     36(int) Load 304
+             306:     17(int) UConvert 305
+             307:    296(ptr) AccessChain 227(uv) 282
+             308:     17(int) Load 307
+             309:   173(bool) UGreaterThanEqual 306 308
+                              Store 281(b) 309
+             310:     14(int) Load 200(i16)
+             311:     27(int) SConvert 310
+             312:     27(int) Load 220(i)
+             313:   173(bool) SLessThanEqual 311 312
+                              Store 281(b) 313
+             314:     14(int) Load 200(i16)
+             315:     27(int) SConvert 314
+             316:     17(int) Bitcast 315
+             317:  225(ivec3) Load 227(uv)
+             318:  225(ivec3) CompositeConstruct 316 316 316
+             319:  225(ivec3) BitwiseOr 317 318
+                              Store 227(uv) 319
+             320:     14(int) Load 200(i16)
+             321:     27(int) SConvert 320
+             322:     27(int) Load 220(i)
+             323:     27(int) BitwiseOr 321 322
+                              Store 220(i) 323
+             324:     14(int) Load 200(i16)
+             325:     71(int) SConvert 324
+             326:     71(int) Load 243(i64)
+             327:     71(int) BitwiseAnd 326 325
+                              Store 243(i64) 327
+             328:  193(ivec3) Load 195(u16v)
+             329:  225(ivec3) UConvert 328
+             330:  225(ivec3) Load 227(uv)
+             331:  225(ivec3) BitwiseAnd 329 330
+                              Store 227(uv) 331
+             332:     14(int) Load 200(i16)
+             333:     27(int) SConvert 332
+             334:     17(int) Bitcast 333
+             335:  225(ivec3) Load 227(uv)
+             336:  225(ivec3) CompositeConstruct 334 334 334
+             337:  225(ivec3) BitwiseXor 335 336
+                              Store 227(uv) 337
+             338:  193(ivec3) Load 195(u16v)
+             339:     14(int) Load 200(i16)
+             340:     36(int) Bitcast 339
+             341:  193(ivec3) CompositeConstruct 340 340 340
+             342:  193(ivec3) BitwiseXor 338 341
+                              Store 195(u16v) 342
+                              Return
+                              FunctionEnd
+12(builtinFuncs():           2 Function None 3
+              13:             Label
+       343(i16v):     53(ptr) Variable Function
+        346(i16):     15(ptr) Variable Function
+       356(u16v):    194(ptr) Variable Function
+        358(u16):     37(ptr) Variable Function
+        428(i32):    219(ptr) Variable Function
+        431(i64):    242(ptr) Variable Function
+      434(i16v4):    433(ptr) Variable Function
+        437(u32):    296(ptr) Variable Function
+      438(u16v2):     58(ptr) Variable Function
+        442(u64):    441(ptr) Variable Function
+      445(u16v4):    444(ptr) Variable Function
+         457(bv):    456(ptr) Variable Function
+             344:   52(ivec2) Load 343(i16v)
+             345:   52(ivec2) ExtInst 1(GLSL.std.450) 5(SAbs) 344
+                              Store 343(i16v) 345
+             347:     14(int) Load 346(i16)
+             348:     14(int) ExtInst 1(GLSL.std.450) 7(SSign) 347
+                              Store 346(i16) 348
+             349:   52(ivec2) Load 343(i16v)
+             350:     14(int) Load 346(i16)
+             351:   52(ivec2) CompositeConstruct 350 350
+             352:   52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 349 351
+                              Store 343(i16v) 352
+             353:   52(ivec2) Load 343(i16v)
+             355:   52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 353 354
+                              Store 343(i16v) 355
+             357:  193(ivec3) Load 356(u16v)
+             359:     36(int) Load 358(u16)
+             360:  193(ivec3) CompositeConstruct 359 359 359
+             361:  193(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 357 360
+                              Store 356(u16v) 361
+             362:  193(ivec3) Load 356(u16v)
+             364:  193(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 362 363
+                              Store 356(u16v) 364
+             365:   52(ivec2) Load 343(i16v)
+             366:     14(int) Load 346(i16)
+             367:   52(ivec2) CompositeConstruct 366 366
+             368:   52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 365 367
+                              Store 343(i16v) 368
+             369:   52(ivec2) Load 343(i16v)
+             370:   52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 369 354
+                              Store 343(i16v) 370
+             371:  193(ivec3) Load 356(u16v)
+             372:     36(int) Load 358(u16)
+             373:  193(ivec3) CompositeConstruct 372 372 372
+             374:  193(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 371 373
+                              Store 356(u16v) 374
+             375:  193(ivec3) Load 356(u16v)
+             376:  193(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 375 363
+                              Store 356(u16v) 376
+             377:   52(ivec2) Load 343(i16v)
+             378:     14(int) Load 346(i16)
+             379:     14(int) SNegate 378
+             380:     14(int) Load 346(i16)
+             381:   52(ivec2) CompositeConstruct 379 379
+             382:   52(ivec2) CompositeConstruct 380 380
+             383:   52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 377 381 382
+                              Store 343(i16v) 383
+             384:   52(ivec2) Load 343(i16v)
+             385:   52(ivec2) Load 343(i16v)
+             386:   52(ivec2) SNegate 385
+             387:   52(ivec2) Load 343(i16v)
+             388:   52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 384 386 387
+                              Store 343(i16v) 388
+             389:  193(ivec3) Load 356(u16v)
+             390:     36(int) Load 358(u16)
+             391:     36(int) SNegate 390
+             392:     36(int) Load 358(u16)
+             393:  193(ivec3) CompositeConstruct 391 391 391
+             394:  193(ivec3) CompositeConstruct 392 392 392
+             395:  193(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 389 393 394
+                              Store 356(u16v) 395
+             396:  193(ivec3) Load 356(u16v)
+             397:  193(ivec3) Load 356(u16v)
+             398:  193(ivec3) SNegate 397
+             399:  193(ivec3) Load 356(u16v)
+             400:  193(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 396 398 399
+                              Store 356(u16v) 400
+             401:     15(ptr) AccessChain 343(i16v) 282
+             402:     14(int) Load 401
+             403:     15(ptr) AccessChain 343(i16v) 264
+             404:     14(int) Load 403
+             406:     14(int) Select 405 404 402
+                              Store 346(i16) 406
+             407:     14(int) Load 346(i16)
+             408:   52(ivec2) CompositeConstruct 407 407
+             409:     14(int) Load 346(i16)
+             410:     14(int) SNegate 409
+             411:   52(ivec2) CompositeConstruct 410 410
+             414:   52(ivec2) Select 413 411 408
+                              Store 343(i16v) 414
+             415:     37(ptr) AccessChain 356(u16v) 282
+             416:     36(int) Load 415
+             417:     37(ptr) AccessChain 356(u16v) 264
+             418:     36(int) Load 417
+             419:     36(int) Select 405 418 416
+                              Store 358(u16) 419
+             420:     36(int) Load 358(u16)
+             421:  193(ivec3) CompositeConstruct 420 420 420
+             422:     36(int) Load 358(u16)
+             423:     36(int) SNegate 422
+             424:  193(ivec3) CompositeConstruct 423 423 423
+             427:  193(ivec3) Select 426 424 421
+                              Store 356(u16v) 427
+             429:   52(ivec2) Load 343(i16v)
+             430:     27(int) Bitcast 429
+                              Store 428(i32) 430
+             435:  432(ivec4) Load 434(i16v4)
+             436:     71(int) Bitcast 435
+                              Store 431(i64) 436
+             439:   57(ivec2) Load 438(u16v2)
+             440:     17(int) Bitcast 439
+                              Store 437(u32) 440
+             446:  443(ivec4) Load 445(u16v4)
+             447:     77(int) Bitcast 446
+                              Store 442(u64) 447
+             448:     27(int) Load 428(i32)
+             449:   52(ivec2) Bitcast 448
+                              Store 343(i16v) 449
+             450:     71(int) Load 431(i64)
+             451:  432(ivec4) Bitcast 450
+                              Store 434(i16v4) 451
+             452:     17(int) Load 437(u32)
+             453:   57(ivec2) Bitcast 452
+                              Store 438(u16v2) 453
+             454:     77(int) Load 442(u64)
+             455:  443(ivec4) Bitcast 454
+                              Store 445(u16v4) 455
+             458:  193(ivec3) Load 356(u16v)
+             459:     36(int) Load 358(u16)
+             460:  193(ivec3) CompositeConstruct 459 459 459
+             461:  425(bvec3) ULessThan 458 460
+                              Store 457(bv) 461
+             462:   52(ivec2) Load 343(i16v)
+             463:     14(int) Load 346(i16)
+             464:   52(ivec2) CompositeConstruct 463 463
+             465:  174(bvec2) SLessThan 462 464
+             466:  425(bvec3) Load 457(bv)
+             467:  425(bvec3) VectorShuffle 466 465 3 4 2
+                              Store 457(bv) 467
+             468:  193(ivec3) Load 356(u16v)
+             469:     36(int) Load 358(u16)
+             470:  193(ivec3) CompositeConstruct 469 469 469
+             471:  425(bvec3) ULessThanEqual 468 470
+                              Store 457(bv) 471
+             472:   52(ivec2) Load 343(i16v)
+             473:     14(int) Load 346(i16)
+             474:   52(ivec2) CompositeConstruct 473 473
+             475:  174(bvec2) SLessThanEqual 472 474
+             476:  425(bvec3) Load 457(bv)
+             477:  425(bvec3) VectorShuffle 476 475 3 4 2
+                              Store 457(bv) 477
+             478:  193(ivec3) Load 356(u16v)
+             479:     36(int) Load 358(u16)
+             480:  193(ivec3) CompositeConstruct 479 479 479
+             481:  425(bvec3) UGreaterThan 478 480
+                              Store 457(bv) 481
+             482:   52(ivec2) Load 343(i16v)
+             483:     14(int) Load 346(i16)
+             484:   52(ivec2) CompositeConstruct 483 483
+             485:  174(bvec2) SGreaterThan 482 484
+             486:  425(bvec3) Load 457(bv)
+             487:  425(bvec3) VectorShuffle 486 485 3 4 2
+                              Store 457(bv) 487
+             488:  193(ivec3) Load 356(u16v)
+             489:     36(int) Load 358(u16)
+             490:  193(ivec3) CompositeConstruct 489 489 489
+             491:  425(bvec3) UGreaterThanEqual 488 490
+                              Store 457(bv) 491
+             492:   52(ivec2) Load 343(i16v)
+             493:     14(int) Load 346(i16)
+             494:   52(ivec2) CompositeConstruct 493 493
+             495:  174(bvec2) SGreaterThanEqual 492 494
+             496:  425(bvec3) Load 457(bv)
+             497:  425(bvec3) VectorShuffle 496 495 3 4 2
+                              Store 457(bv) 497
+             498:  193(ivec3) Load 356(u16v)
+             499:     36(int) Load 358(u16)
+             500:  193(ivec3) CompositeConstruct 499 499 499
+             501:  425(bvec3) IEqual 498 500
+                              Store 457(bv) 501
+             502:   52(ivec2) Load 343(i16v)
+             503:     14(int) Load 346(i16)
+             504:   52(ivec2) CompositeConstruct 503 503
+             505:  174(bvec2) IEqual 502 504
+             506:  425(bvec3) Load 457(bv)
+             507:  425(bvec3) VectorShuffle 506 505 3 4 2
+                              Store 457(bv) 507
+             508:  193(ivec3) Load 356(u16v)
+             509:     36(int) Load 358(u16)
+             510:  193(ivec3) CompositeConstruct 509 509 509
+             511:  425(bvec3) INotEqual 508 510
+                              Store 457(bv) 511
+             512:   52(ivec2) Load 343(i16v)
+             513:     14(int) Load 346(i16)
+             514:   52(ivec2) CompositeConstruct 513 513
+             515:  174(bvec2) INotEqual 512 514
+             516:  425(bvec3) Load 457(bv)
+             517:  425(bvec3) VectorShuffle 516 515 3 4 2
+                              Store 457(bv) 517
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.vulkan110.storageBuffer.vert.out b/Test/baseResults/spv.vulkan110.storageBuffer.vert.out
new file mode 100755
index 0000000..9da259f
--- /dev/null
+++ b/Test/baseResults/spv.vulkan110.storageBuffer.vert.out
@@ -0,0 +1,66 @@
+spv.vulkan110.storageBuffer.vert
+// Module Version 10300
+// Generated by (magic number): 80006
+// Id's are bound by 31
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4  "main" 13
+                              Source GLSL 450
+                              Name 4  "main"
+                              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  ""
+                              Name 16  "ub"
+                              MemberName 16(ub) 0  "a"
+                              Name 18  "ubi"
+                              Name 22  "bb"
+                              MemberName 22(bb) 0  "b"
+                              Name 24  "bbi"
+                              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
+                              MemberDecorate 16(ub) 0 Offset 0
+                              Decorate 16(ub) Block
+                              Decorate 18(ubi) DescriptorSet 0
+                              MemberDecorate 22(bb) 0 Offset 0
+                              Decorate 22(bb) Block
+                              Decorate 24(bbi) DescriptorSet 0
+               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(ub):             TypeStruct 7(fvec4)
+              17:             TypePointer Uniform 16(ub)
+         18(ubi):     17(ptr) Variable Uniform
+              19:             TypePointer Uniform 7(fvec4)
+          22(bb):             TypeStruct 7(fvec4)
+              23:             TypePointer StorageBuffer 22(bb)
+         24(bbi):     23(ptr) Variable StorageBuffer
+              25:             TypePointer StorageBuffer 7(fvec4)
+              29:             TypePointer Output 7(fvec4)
+         4(main):           2 Function None 3
+               5:             Label
+              20:     19(ptr) AccessChain 18(ubi) 15
+              21:    7(fvec4) Load 20
+              26:     25(ptr) AccessChain 24(bbi) 15
+              27:    7(fvec4) Load 26
+              28:    7(fvec4) FAdd 21 27
+              30:     29(ptr) AccessChain 13 15
+                              Store 30 28
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.while-continue-break.vert.out b/Test/baseResults/spv.while-continue-break.vert.out
index 1d343ed..7ec21f8 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): 80002
+// Generated by (magic number): 80006
 // 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 d956c6c..7c667d0 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): 80002
+// Generated by (magic number): 80006
 // 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 e58fb04..c791c38 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): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 35
 
                               Capability Shader
diff --git a/Test/baseResults/spv.xfb.vert.out b/Test/baseResults/spv.xfb.vert.out
new file mode 100755
index 0000000..cd8209c
--- /dev/null
+++ b/Test/baseResults/spv.xfb.vert.out
@@ -0,0 +1,55 @@
+spv.xfb.vert
+// Module Version 10000
+// Generated by (magic number): 80006
+// Id's are bound by 16
+
+                              Capability Shader
+                              Capability TransformFeedback
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4  "main" 8 11 14 15
+                              ExecutionMode 4 Xfb
+                              Source GLSL 450
+                              Name 4  "main"
+                              Name 8  "out1"
+                              Name 9  "outXfb"
+                              MemberName 9(outXfb) 0  "out2"
+                              Name 11  ""
+                              Name 12  "outXfb2"
+                              MemberName 12(outXfb2) 0  "out3"
+                              Name 14  ""
+                              Name 15  "out4"
+                              Decorate 8(out1) Location 0
+                              Decorate 8(out1) XfbBuffer 3
+                              Decorate 8(out1) XfbStride 48
+                              Decorate 8(out1) Offset 12
+                              MemberDecorate 9(outXfb) 0 Offset 8
+                              Decorate 9(outXfb) Block
+                              Decorate 11 Location 1
+                              Decorate 11 XfbBuffer 2
+                              Decorate 11 XfbStride 32
+                              MemberDecorate 12(outXfb2) 0 Offset 60
+                              Decorate 12(outXfb2) Block
+                              Decorate 14 Location 3
+                              Decorate 14 XfbBuffer 1
+                              Decorate 14 XfbStride 64
+                              Decorate 15(out4) Location 4
+                              Decorate 15(out4) XfbBuffer 0
+                              Decorate 15(out4) XfbStride 8
+                              Decorate 15(out4) Offset 4
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypePointer Output 6(float)
+         8(out1):      7(ptr) Variable Output
+       9(outXfb):             TypeStruct 6(float)
+              10:             TypePointer Output 9(outXfb)
+              11:     10(ptr) Variable Output
+     12(outXfb2):             TypeStruct 6(float)
+              13:             TypePointer Output 12(outXfb2)
+              14:     13(ptr) Variable Output
+        15(out4):      7(ptr) Variable Output
+         4(main):           2 Function None 3
+               5:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.xfb2.vert.out b/Test/baseResults/spv.xfb2.vert.out
new file mode 100755
index 0000000..019b233
--- /dev/null
+++ b/Test/baseResults/spv.xfb2.vert.out
@@ -0,0 +1,68 @@
+spv.xfb2.vert
+// Module Version 10000
+// Generated by (magic number): 80006
+// Id's are bound by 35
+
+                              Capability Shader
+                              Capability TransformFeedback
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4  "main" 10 14
+                              ExecutionMode 4 Xfb
+                              Source GLSL 450
+                              Name 4  "main"
+                              Name 8  "gl_PerVertex"
+                              MemberName 8(gl_PerVertex) 0  "gl_Position"
+                              Name 10  ""
+                              Name 14  "position"
+                              Name 17  "ComponentsBlock"
+                              MemberName 17(ComponentsBlock) 0  "c1"
+                              MemberName 17(ComponentsBlock) 1  "c2"
+                              Name 19  "components"
+                              MemberDecorate 8(gl_PerVertex) 0 Offset 16
+                              MemberDecorate 8(gl_PerVertex) 0 BuiltIn Position
+                              Decorate 8(gl_PerVertex) Block
+                              Decorate 10 XfbBuffer 3
+                              Decorate 10 XfbStride 32
+                              Decorate 14(position) Location 0
+                              MemberDecorate 17(ComponentsBlock) 0 Offset 0
+                              MemberDecorate 17(ComponentsBlock) 1 Offset 16
+                              Decorate 17(ComponentsBlock) Block
+                              Decorate 19(components) DescriptorSet 0
+                              Decorate 19(components) Binding 5
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+ 8(gl_PerVertex):             TypeStruct 7(fvec4)
+               9:             TypePointer Output 8(gl_PerVertex)
+              10:      9(ptr) Variable Output
+              11:             TypeInt 32 1
+              12:     11(int) Constant 0
+              13:             TypePointer Input 7(fvec4)
+    14(position):     13(ptr) Variable Input
+              16:             TypeVector 6(float) 2
+17(ComponentsBlock):             TypeStruct 7(fvec4) 16(fvec2)
+              18:             TypePointer Uniform 17(ComponentsBlock)
+  19(components):     18(ptr) Variable Uniform
+              20:             TypePointer Uniform 7(fvec4)
+              24:     11(int) Constant 1
+              25:             TypePointer Uniform 16(fvec2)
+              28:    6(float) Constant 0
+              33:             TypePointer Output 7(fvec4)
+         4(main):           2 Function None 3
+               5:             Label
+              15:    7(fvec4) Load 14(position)
+              21:     20(ptr) AccessChain 19(components) 12
+              22:    7(fvec4) Load 21
+              23:    7(fvec4) FAdd 15 22
+              26:     25(ptr) AccessChain 19(components) 24
+              27:   16(fvec2) Load 26
+              29:    6(float) CompositeExtract 27 0
+              30:    6(float) CompositeExtract 27 1
+              31:    7(fvec4) CompositeConstruct 29 30 28 28
+              32:    7(fvec4) FAdd 23 31
+              34:     33(ptr) AccessChain 10 12
+                              Store 34 32
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.xfb3.vert.out b/Test/baseResults/spv.xfb3.vert.out
new file mode 100755
index 0000000..bab765d
--- /dev/null
+++ b/Test/baseResults/spv.xfb3.vert.out
@@ -0,0 +1,68 @@
+spv.xfb3.vert
+// Module Version 10000
+// Generated by (magic number): 80006
+// Id's are bound by 35
+
+                              Capability Shader
+                              Capability TransformFeedback
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4  "main" 10 14
+                              ExecutionMode 4 Xfb
+                              Source GLSL 450
+                              Name 4  "main"
+                              Name 8  "gl_PerVertex"
+                              MemberName 8(gl_PerVertex) 0  "gl_Position"
+                              Name 10  ""
+                              Name 14  "position"
+                              Name 17  "ComponentsBlock"
+                              MemberName 17(ComponentsBlock) 0  "c1"
+                              MemberName 17(ComponentsBlock) 1  "c2"
+                              Name 19  "components"
+                              MemberDecorate 8(gl_PerVertex) 0 Offset 16
+                              MemberDecorate 8(gl_PerVertex) 0 BuiltIn Position
+                              Decorate 8(gl_PerVertex) Block
+                              Decorate 10 XfbBuffer 3
+                              Decorate 10 XfbStride 80
+                              Decorate 14(position) Location 0
+                              MemberDecorate 17(ComponentsBlock) 0 Offset 0
+                              MemberDecorate 17(ComponentsBlock) 1 Offset 16
+                              Decorate 17(ComponentsBlock) Block
+                              Decorate 19(components) DescriptorSet 0
+                              Decorate 19(components) Binding 5
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+ 8(gl_PerVertex):             TypeStruct 7(fvec4)
+               9:             TypePointer Output 8(gl_PerVertex)
+              10:      9(ptr) Variable Output
+              11:             TypeInt 32 1
+              12:     11(int) Constant 0
+              13:             TypePointer Input 7(fvec4)
+    14(position):     13(ptr) Variable Input
+              16:             TypeVector 6(float) 2
+17(ComponentsBlock):             TypeStruct 7(fvec4) 16(fvec2)
+              18:             TypePointer Uniform 17(ComponentsBlock)
+  19(components):     18(ptr) Variable Uniform
+              20:             TypePointer Uniform 7(fvec4)
+              24:     11(int) Constant 1
+              25:             TypePointer Uniform 16(fvec2)
+              28:    6(float) Constant 0
+              33:             TypePointer Output 7(fvec4)
+         4(main):           2 Function None 3
+               5:             Label
+              15:    7(fvec4) Load 14(position)
+              21:     20(ptr) AccessChain 19(components) 12
+              22:    7(fvec4) Load 21
+              23:    7(fvec4) FAdd 15 22
+              26:     25(ptr) AccessChain 19(components) 24
+              27:   16(fvec2) Load 26
+              29:    6(float) CompositeExtract 27 0
+              30:    6(float) CompositeExtract 27 1
+              31:    7(fvec4) CompositeConstruct 29 30 28 28
+              32:    7(fvec4) FAdd 23 31
+              34:     33(ptr) AccessChain 10 12
+                              Store 34 32
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/tokenLength.vert.out b/Test/baseResults/tokenLength.vert.out
index c473858..8c31da9 100644
--- a/Test/baseResults/tokenLength.vert.out
+++ b/Test/baseResults/tokenLength.vert.out
@@ -51,7 +51,7 @@
 0:13    move second child to first child ( temp highp int)
 0:13      'OE' ( global highp int)
 0:13      Constant:
-0:13        1073741823 (const int)
+0:13        -1 (const int)
 0:14  Sequence
 0:14    move second child to first child ( temp highp int)
 0:14      'HE' ( global highp int)
@@ -92,7 +92,7 @@
 0:34    move second child to first child ( temp highp int)
 0:34      'superO' ( global highp int)
 0:34      Constant:
-0:34        1073741823 (const int)
+0:34        -1 (const int)
 0:35  Sequence
 0:35    move second child to first child ( temp highp int)
 0:35      'superI' ( global highp int)
@@ -147,7 +147,7 @@
 0:13    move second child to first child ( temp highp int)
 0:13      'OE' ( global highp int)
 0:13      Constant:
-0:13        1073741823 (const int)
+0:13        -1 (const int)
 0:14  Sequence
 0:14    move second child to first child ( temp highp int)
 0:14      'HE' ( global highp int)
@@ -188,7 +188,7 @@
 0:34    move second child to first child ( temp highp int)
 0:34      'superO' ( global highp int)
 0:34      Constant:
-0:34        1073741823 (const int)
+0:34        -1 (const int)
 0:35  Sequence
 0:35    move second child to first child ( temp highp int)
 0:35      'superI' ( global highp int)
diff --git a/Test/baseResults/versionsClean.vert.out b/Test/baseResults/versionsClean.vert.out
index eb2e07b..4b098be 100644
--- a/Test/baseResults/versionsClean.vert.out
+++ b/Test/baseResults/versionsClean.vert.out
@@ -6,7 +6,7 @@
 0:42    Sequence
 0:42      move second child to first child ( temp 4-component vector of float)
 0:42        gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
-0:42          'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out implicitly-sized array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
+0:42          'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
 0:42          Constant:
 0:42            0 (const uint)
 0:42        Construct vec4 ( temp 4-component vector of float)
@@ -16,7 +16,7 @@
 0:?   Linker Objects
 0:?     'color' ( in 3-component vector of float)
 0:?     'foo' ( uniform sampler2DRect)
-0:?     'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out implicitly-sized array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
+0:?     'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
 0:?     'gl_VertexID' ( gl_VertexId int VertexId)
 0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
 
diff --git a/Test/baseResults/versionsErrors.vert.out b/Test/baseResults/versionsErrors.vert.out
index f11e011..6551364 100644
--- a/Test/baseResults/versionsErrors.vert.out
+++ b/Test/baseResults/versionsErrors.vert.out
@@ -13,7 +13,7 @@
 0:44    Sequence
 0:44      move second child to first child ( temp 4-component vector of float)
 0:44        gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
-0:44          'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out implicitly-sized array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
+0:44          'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
 0:44          Constant:
 0:44            0 (const uint)
 0:44        Construct vec4 ( temp 4-component vector of float)
@@ -24,7 +24,7 @@
 0:?   Linker Objects
 0:?     'color' ( in 3-component vector of float)
 0:?     'foo' ( uniform sampler2DRect)
-0:?     'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out implicitly-sized array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
+0:?     'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
 0:?     'gl_VertexID' ( gl_VertexId int VertexId)
 0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
 
diff --git a/Test/baseResults/vulkan.ast.vert.out b/Test/baseResults/vulkan.ast.vert.out
index 0712e07..9ba6518 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): 80002
+// Generated by (magic number): 80006
 // Id's are bound by 50
 
                               Capability Shader
diff --git a/Test/baseResults/vulkan.frag.out b/Test/baseResults/vulkan.frag.out
index c8e1ed6..e46345c 100644
--- a/Test/baseResults/vulkan.frag.out
+++ b/Test/baseResults/vulkan.frag.out
@@ -1,4 +1,11 @@
 vulkan.frag
+ERROR: 0:3: 'binding' : sampler/texture/image requires layout(binding=X) 
+ERROR: 0:4: 'binding' : sampler/texture/image requires layout(binding=X) 
+ERROR: 0:5: 'binding' : sampler/texture/image requires layout(binding=X) 
+ERROR: 0:6: 'binding' : sampler/texture/image requires layout(binding=X) 
+ERROR: 0:8: 'binding' : sampler/texture/image requires layout(binding=X) 
+ERROR: 0:9: 'binding' : sampler/texture/image requires layout(binding=X) 
+ERROR: 0:10: 'binding' : sampler/texture/image requires layout(binding=X) 
 ERROR: 0:14: 'sampler2D' : sampler-constructor requires two arguments 
 ERROR: 0:15: 'sampler2D' : sampler-constructor first argument must be a scalar textureXXX type 
 ERROR: 0:16: 'sampler2D' : sampler-constructor first argument must be a scalar textureXXX type 
@@ -14,13 +21,19 @@
 ERROR: 0:29: 'sampler3D' : sampler-constructor cannot make an array of samplers 
 ERROR: 0:29: 'sampler3D' : sampler/image types can only be used in uniform variables or function parameters: s3d
 ERROR: 0:29: '=' :  cannot convert from ' const float' to ' global 4-element array of highp sampler3D'
+ERROR: 0:31: 'location' : SPIR-V requires location for user input/output 
 ERROR: 0:39: 'push_constant' : can only be used with a uniform 
 ERROR: 0:43: 'non-opaque uniforms outside a block' : not allowed when using GLSL for Vulkan 
 ERROR: 0:43: 'push_constant' : can only be used with a block 
 ERROR: 0:45: 'push_constant' : cannot declare a default, can only be used on a block 
+ERROR: 0:51: 'binding' : sampler/texture/image requires layout(binding=X) 
+ERROR: 0:52: 'binding' : sampler/texture/image requires layout(binding=X) 
 ERROR: 0:52: 'input_attachment_index' : can only be used with a subpass 
+ERROR: 0:53: 'binding' : sampler/texture/image requires layout(binding=X) 
 ERROR: 0:53: 'input_attachment_index' : can only be used with a subpass 
+ERROR: 0:54: 'binding' : sampler/texture/image requires layout(binding=X) 
 ERROR: 0:54: 'subpass' : requires an input_attachment_index layout qualifier 
+ERROR: 0:55: 'binding' : sampler/texture/image requires layout(binding=X) 
 ERROR: 0:60: 'subpassLoadMS' : no matching overloaded function found 
 ERROR: 0:61: 'subpassLoad' : no matching overloaded function found 
 ERROR: 0:63: 'subpassLoadMS' : no matching overloaded function found 
@@ -39,7 +52,11 @@
 ERROR: 0:94: ':' :  wrong operand types: no operation ':' exists that takes a left-hand operand of type ' temp sampler2D' and a right operand of type ' temp sampler2D' (or there is no acceptable conversion)
 ERROR: 0:94: 'call argument' : sampler constructor must appear at point of use 
 ERROR: 0:96: 'gl_NumSamples' : undeclared identifier 
-ERROR: 38 compilation errors.  No code generated.
+ERROR: 0:101: 'noise1' : no matching overloaded function found 
+ERROR: 0:102: 'noise2' : no matching overloaded function found 
+ERROR: 0:103: 'noise3' : no matching overloaded function found 
+ERROR: 0:104: 'noise4' : no matching overloaded function found 
+ERROR: 55 compilation errors.  No code generated.
 
 
 ERROR: Linking fragment stage: Only one push_constant block is allowed per stage
diff --git a/Test/baseResults/vulkan.vert.out b/Test/baseResults/vulkan.vert.out
index 0b2ea53..19fdade 100644
--- a/Test/baseResults/vulkan.vert.out
+++ b/Test/baseResults/vulkan.vert.out
@@ -1,12 +1,20 @@
 vulkan.vert
 ERROR: 0:3: 'subpass input' : not supported in this stage: vertex
+ERROR: 0:3: 'binding' : sampler/texture/image requires layout(binding=X) 
 ERROR: 0:4: 'subpass input' : not supported in this stage: vertex
+ERROR: 0:4: 'binding' : sampler/texture/image requires layout(binding=X) 
 ERROR: 0:5: 'subpass input' : not supported in this stage: vertex
+ERROR: 0:5: 'binding' : sampler/texture/image requires layout(binding=X) 
 ERROR: 0:6: 'subpass input' : not supported in this stage: vertex
+ERROR: 0:6: 'binding' : sampler/texture/image requires layout(binding=X) 
 ERROR: 0:7: 'subpass input' : not supported in this stage: vertex
+ERROR: 0:7: 'binding' : sampler/texture/image requires layout(binding=X) 
 ERROR: 0:8: 'subpass input' : not supported in this stage: vertex
+ERROR: 0:8: 'binding' : sampler/texture/image requires layout(binding=X) 
+ERROR: 0:10: 'location' : SPIR-V requires location for user input/output 
 ERROR: 0:12: 'constant_id' : can only be applied to a scalar 
 ERROR: 0:13: 'constant_id' : specialization-constant id already used 
+ERROR: 0:13: 'binding' : sampler/texture/image requires layout(binding=X) 
 ERROR: 0:13: 'constant_id' : can only be applied to 'const'-qualified scalar 
 ERROR: 0:13: 'constant_id' : cannot be applied to this type 
 ERROR: 0:14: 'constant_id' : specialization-constant id is too large 
@@ -26,7 +34,10 @@
 ERROR: 0:50: '[]' : only outermost dimension of an array of arrays can be a specialization constant 
 ERROR: 0:51: '[]' : only outermost dimension of an array of arrays can be a specialization constant 
 ERROR: 0:54: '[]' : only outermost dimension of an array of arrays can be a specialization constant 
-ERROR: 27 compilation errors.  No code generated.
+ERROR: 0:54: 'location' : SPIR-V requires location for user input/output 
+ERROR: 0:58: 'location' : SPIR-V requires location for user input/output 
+ERROR: 0:65: 'location' : overlapping use of location 10
+ERROR: 38 compilation errors.  No code generated.
 
 
 SPIR-V is not generated for failed compile or link
diff --git a/Test/constFoldIntMin.frag b/Test/constFoldIntMin.frag
new file mode 100644
index 0000000..6861832
--- /dev/null
+++ b/Test/constFoldIntMin.frag
@@ -0,0 +1,12 @@
+#version 460 core
+#extension GL_AMD_gpu_shader_int16 : enable
+#extension GL_ARB_gpu_shader_int64 : enable
+
+void a(){
+    int16_t u = -32768S / -1S; // SHRT_MIN
+    int v = -2147483648 / -1; // INT_MIN
+    int64_t w = -9223372036854775808L / -1L; // LLONG_MIN
+    int16_t x = -32768S % -1S; // SHRT_MIN
+    int y = -2147483648 % -1; // INT_MIN
+    int64_t z = -9223372036854775808L % -1L; // LLONG_MIN
+}
\ No newline at end of file
diff --git a/Test/cppBad.vert b/Test/cppBad.vert
index 49600f9..0044c44 100644
--- a/Test/cppBad.vert
+++ b/Test/cppBad.vert
@@ -1,5 +1,5 @@
 #define m#0#

 #if m

-

+#endif

 #define n()

 int n"
\ No newline at end of file
diff --git a/Test/cppPassMacroName.frag b/Test/cppPassMacroName.frag
new file mode 100644
index 0000000..f42d9de
--- /dev/null
+++ b/Test/cppPassMacroName.frag
@@ -0,0 +1,12 @@
+#define f1(i) ((i)*(i))
+#define I2(f, n) f(n) + f(n+1)
+#define I3(f, n) I2(f, n) + f(n+2)
+
+void main()
+{
+    int f1 = 4;
+    int f2 = f1;
+    int f3 = f1(3);
+    int f4 = I2(f1, 0);
+    int f5 = I3(f1, 0);
+}
diff --git a/Test/cppRelaxSkipTokensErrors.vert b/Test/cppRelaxSkipTokensErrors.vert
new file mode 100644
index 0000000..b30af0c
--- /dev/null
+++ b/Test/cppRelaxSkipTokensErrors.vert
@@ -0,0 +1,14 @@
+#version 110

+

+#if 0

+3.5L

+3.5h

+2034h

+1.#INF

+0x1234567812345L

+12323394203923879234L

+0123s;

+123s;

+0123456712345671234L

+"string"

+#endif

diff --git a/Test/findFunction.frag b/Test/findFunction.frag
new file mode 100644
index 0000000..7e18065
--- /dev/null
+++ b/Test/findFunction.frag
@@ -0,0 +1,46 @@
+#version 450
+
+#extension GL_KHX_shader_explicit_arithmetic_types: enable
+
+int64_t func(int8_t a, int16_t b, int16_t c)
+{
+    return int64_t(a | b + c);
+}
+
+int64_t func(int8_t a, int16_t b, int32_t c)
+{
+    return int64_t(a | b - c);
+}
+
+int64_t func(int32_t a, int32_t b, int32_t c)
+{
+    return int64_t(a / b + c);
+}
+
+int64_t func(float16_t a, float16_t b, float32_t c)
+{
+    return int64_t(a - b * c);
+}
+
+int64_t func(float16_t a, int16_t b, float32_t c)
+{
+    return int64_t(a - b * c);
+}
+
+void main()
+{
+    int8_t  x;
+    int16_t y;
+    int32_t z;
+    int64_t w;
+    float16_t f16;
+    float64_t f64;
+    int64_t b1 = func(x, y, z);
+    int64_t b2 = func(y, y, z); // tie
+    int64_t b3 = func(y, y, w); // No match
+    int64_t b4 = func(y, z, f16); // No match
+    int64_t b5 = func(y, y, f16);
+    int64_t b7 = func(f16, f16, y);
+    int64_t b8 = func(f16, f16, f64); // No match
+    int64_t b9 = func(f16, x, f16); // tie
+}
diff --git a/Test/glspv.frag b/Test/glspv.frag
index 008d191..7a73cb8 100644
--- a/Test/glspv.frag
+++ b/Test/glspv.frag
@@ -11,9 +11,18 @@
 {

 }

 

-uniform float f; // ERROR, no location

+uniform float f;                           // ERROR, no location

 layout(location = 2) uniform float g;

-uniform sampler2D s1;

-layout(location = 3) uniform sampler2D s2;

+uniform sampler2D s1;                      // ERROR, no binding

+layout(location = 3) uniform sampler2D s2; // ERROR, no binding

 

+void noise()

+{

+    noise1(vec4(1));

+    noise2(4.0);

+    noise3(vec2(3));

+    noise4(1);

+}

+

+uniform atomic_uint atomic;                // ERROR, no binding

 layout(input_attachment_index = 1) uniform subpassInput sub; // ERROR, no inputs

diff --git a/Test/glspv.vert b/Test/glspv.vert
index d2724ca..b448146 100644
--- a/Test/glspv.vert
+++ b/Test/glspv.vert
@@ -5,8 +5,8 @@
 layout(set = 0, binding = 0, std140) uniform Bt1 { int a; } bt1;

 layout(set = 1, binding = 0, std140) uniform Bt2 { int a; } bt2;  // ERROR, set has to be 0

 

-layout(shared) uniform Bt3 { int a; } bt3;                        // ERROR, no shared

-layout(packed) uniform Bt4 { int a; } bt4;                        // ERROR, no shared

+layout(shared) uniform Bt3 { int a; } bt3;                        // ERROR, no shared, no binding

+layout(packed) uniform Bt4 { int a; } bt4;                        // ERROR, no shared, no binding

 

 void main()

 {

diff --git a/Test/hlsl.PointSize.geom b/Test/hlsl.PointSize.geom
new file mode 100644
index 0000000..ef66fc8
--- /dev/null
+++ b/Test/hlsl.PointSize.geom
@@ -0,0 +1,11 @@
+struct S {
+    [[vk::builtin("PointSize")]] float ps : PSIZE;
+};
+
+[maxvertexcount(4)]
+void main([[vk::builtin("PointSize")]] triangle in uint ps[3],
+       inout LineStream<S> OutputStream)
+{
+    S s;
+    OutputStream.Append(s);
+}
diff --git a/Test/hlsl.PointSize.vert b/Test/hlsl.PointSize.vert
new file mode 100644
index 0000000..4b357e0
--- /dev/null
+++ b/Test/hlsl.PointSize.vert
@@ -0,0 +1,4 @@
+[[vk::builtin("PointSize")]] float main() 

+{

+    return 2.3;

+}
\ No newline at end of file
diff --git a/Test/hlsl.attributeC11.frag b/Test/hlsl.attributeC11.frag
index 4fe663a..336511f 100644
--- a/Test/hlsl.attributeC11.frag
+++ b/Test/hlsl.attributeC11.frag
@@ -11,8 +11,12 @@
 [[vk::input_attachment_index(4)]]

 Texture2D<float4> attach;

 

+[[vk::constant_id(13)]] const int ci = 11;

+

+[[vk::push_constant]] cbuffer pcBuf { int a; };

+

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

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

 {

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

+    return input + attach.Load(float2(0.5));// * a;

 }

diff --git a/Test/hlsl.boolConv.vert b/Test/hlsl.boolConv.vert
index 7efe20b..6182b29 100755
--- a/Test/hlsl.boolConv.vert
+++ b/Test/hlsl.boolConv.vert
@@ -1,20 +1,20 @@
-static bool a, b = true;

-float4 main() : SV_Position

-{

-    int r = 0;

-

-    r += a + b;

-    r += a - b;

-    r += a * b;

-    r += a / b;

-    r += a % b;

-

-    r += a & b;

-    r += a | b;

-    r += a ^ b;

-

-    r += a << b;

-    r += a >> b;

-

-    return r;

-}
\ No newline at end of file
+static bool a, b = true;
+float4 main() : SV_Position
+{
+    int r = 0;
+
+    r += a + b;
+    r += a - b;
+    r += a * b;
+    r += a / b;
+    r += a % b;
+
+    r += a & b;
+    r += a | b;
+    r += a ^ b;
+
+    r += a << b;
+    r += a >> b;
+
+    return r;
+}
diff --git a/Test/hlsl.buffer.frag b/Test/hlsl.buffer.frag
index 520de09..73f42e8 100644
--- a/Test/hlsl.buffer.frag
+++ b/Test/hlsl.buffer.frag
@@ -31,7 +31,17 @@
     return 1.0;
 }
 
-float4 PixelShaderFunction(float4 input : SV_POSITION) : SV_TARGET0
+struct id {
+    float4 a;
+};
+
+cbuffer cbufName2 {
+    float4 v24;
+}
+
+id PixelShaderFunction(float4 input : SV_POSITION) : SV_TARGET0  // id looks like id for cbuffer name, but can't be
 {
-    return (input + v1 + v2 + v3 + v4) * foo();
+    id ret;
+    ret.a = v24 + (input + v1 + v2 + v3 + v4) * foo();
+    return ret;
 }
diff --git a/Test/hlsl.cbuffer-identifier.vert b/Test/hlsl.cbuffer-identifier.vert
new file mode 100644
index 0000000..8362f5c
--- /dev/null
+++ b/Test/hlsl.cbuffer-identifier.vert
@@ -0,0 +1,32 @@
+
+cbuffer ConstantBuffer : register( b0 )
+{
+    matrix World;
+    matrix View;
+    matrix Projection;
+};
+
+struct VS_INPUT
+{
+    float4 Pos : POSITION;
+    float3 Norm : NORMAL;
+};
+
+struct PS_INPUT
+{
+    float4 Pos : SV_POSITION;
+    float3 Norm : TEXCOORD0;
+};
+
+PS_INPUT main( VS_INPUT input )
+{
+    int ConstantBuffer = 42;  // test ConstantBuffer as an identifier
+
+    PS_INPUT output = (PS_INPUT)0;
+    output.Pos = mul( input.Pos, World );
+    output.Pos = mul( output.Pos, View );
+    output.Pos = mul( output.Pos, Projection );
+    output.Norm = mul( input.Norm, World );  // Work when output.Norm = mul( input.Norm, (float3x3)World );
+
+    return output;
+}
diff --git a/Test/hlsl.color.hull.tesc b/Test/hlsl.color.hull.tesc
new file mode 100644
index 0000000..73d9ad0
--- /dev/null
+++ b/Test/hlsl.color.hull.tesc
@@ -0,0 +1,74 @@
+/////////////
+// GLOBALS //
+/////////////
+cbuffer TessellationBuffer : register(b0)
+{
+    float tessellationAmount;
+    float3 padding;
+};
+
+
+//////////////
+// TYPEDEFS //
+//////////////
+struct HullInputType
+{
+    float3 position : POSITION;
+    float4 color : COLOR;
+};
+
+struct ConstantOutputType
+{
+    float edges[3] : SV_TessFactor;
+    float inside : SV_InsideTessFactor;
+};
+
+struct HullOutputType
+{
+    float3 position : POSITION;
+    float4 color : COLOR;
+};
+
+
+////////////////////////////////////////////////////////////////////////////////
+// Patch Constant Function
+////////////////////////////////////////////////////////////////////////////////
+ConstantOutputType ColorPatchConstantFunction(InputPatch<HullInputType, 3> inputPatch, uint patchId : SV_PrimitiveID)
+{
+    ConstantOutputType output;
+
+
+	// Set the tessellation factors for the three edges of the triangle.
+    output.edges[0] = tessellationAmount;
+    output.edges[1] = tessellationAmount;
+    output.edges[2] = tessellationAmount;
+
+	// Set the tessellation factor for tessallating inside the triangle.
+    output.inside = tessellationAmount;
+
+    return output;
+}
+
+
+////////////////////////////////////////////////////////////////////////////////
+// Hull Shader
+////////////////////////////////////////////////////////////////////////////////
+[domain("tri")]
+[partitioning("integer")]
+[outputtopology("triangle_cw")]
+[outputcontrolpoints(3)]
+[patchconstantfunc("ColorPatchConstantFunction")]
+
+HullOutputType main(InputPatch<HullInputType, 3> patch, uint pointId : SV_OutputControlPointID, uint patchId : SV_PrimitiveID)
+{
+    HullOutputType output;
+
+    // Set the position for this control point as the output position.
+    output.position = patch[pointId].position;
+
+	// Set the input color as the output color.
+    output.color = patch[pointId].color;
+
+    return output;
+}
+
diff --git a/Test/hlsl.flattenOpaqueInit.vert b/Test/hlsl.flattenOpaqueInit.vert
index bcf39ce..9ed8bc7 100644
--- a/Test/hlsl.flattenOpaqueInit.vert
+++ b/Test/hlsl.flattenOpaqueInit.vert
@@ -17,7 +17,11 @@
 float4 main() : SV_TARGET0

 {

     FxaaTex tex1 = { g_tInputTexture_sampler, g_tInputTexture };

+    float4 res = lookUp(tex1);

     FxaaTex tex2 = fillOpaque();

+    res += lookUp(tex2);

     FxaaTex tex3 = tex1;
-    return lookUp(tex3);

+    res += lookUp(tex3);
+

+    return res;

 }
diff --git a/Test/hlsl.gs-hs-mix.tesc b/Test/hlsl.gs-hs-mix.tesc
new file mode 100644
index 0000000..4519696
--- /dev/null
+++ b/Test/hlsl.gs-hs-mix.tesc
@@ -0,0 +1,119 @@
+cbuffer UniformBlock0 : register(b0)

+{

+  float4x4 model_view_matrix;

+  float4x4 proj_matrix;

+  float4x4 model_view_proj_matrix;

+  float3x3 normal_matrix;

+  float3   color;

+  float3   view_dir;

+  float3   tess_factor;

+};

+

+// =============================================================================

+// Hull Shader

+// =============================================================================

+struct HSInput {

+  float3 PositionWS : POSITION;

+  float3 NormalWS   : NORMAL;

+};

+

+struct HSOutput {

+  float3 PositionWS : POSITION;

+};

+

+struct HSTrianglePatchConstant {

+  float  EdgeTessFactor[3] : SV_TessFactor;

+  float  InsideTessFactor  : SV_InsideTessFactor;

+  float3 NormalWS[3]       : NORMAL;

+};

+

+HSTrianglePatchConstant HSPatchConstant(InputPatch<HSInput, 3> patch)

+{

+  float3 roundedEdgeTessFactor = tess_factor;

+  float  roundedInsideTessFactor = 3;

+  float  insideTessFactor = 1;

+

+  HSTrianglePatchConstant result;

+

+  // Edge and inside tessellation factors

+  result.EdgeTessFactor[0] = roundedEdgeTessFactor.x;

+  result.EdgeTessFactor[1] = roundedEdgeTessFactor.y;

+  result.EdgeTessFactor[2] = roundedEdgeTessFactor.z;

+  result.InsideTessFactor  = roundedInsideTessFactor;

+

+  // Constant data

+  result.NormalWS[0] = patch[0].NormalWS;

+  result.NormalWS[1] = patch[1].NormalWS;

+  result.NormalWS[2] = patch[2].NormalWS;

+

+  return result;

+}

+

+[domain("tri")]

+[partitioning("fractional_odd")]

+[outputtopology("triangle_ccw")]

+[outputcontrolpoints(3)]

+[patchconstantfunc("HSPatchConstant")]

+HSOutput HSMain(

+  InputPatch<HSInput, 3>  patch,

+  uint                    id : SV_OutputControlPointID

+)

+{

+  HSOutput output;

+  output.PositionWS = patch[id].PositionWS;

+  return output;

+}

+

+// =============================================================================

+// Geometry Shader

+// =============================================================================

+struct GSVertexInput {

+  float3 PositionWS : POSITION;

+  float3 NormalWS   : NORMAL;

+};

+

+struct GSVertexOutput {

+  float4 PositionCS : SV_POSITION;

+};

+

+[maxvertexcount(6)]

+void GSMain(

+  triangle GSVertexInput            input[3],

+  inout LineStream<GSVertexOutput>  output

+)

+{

+

+  float3 P0 = input[0].PositionWS.xyz;

+  float3 P1 = input[1].PositionWS.xyz;

+  float3 P2 = input[2].PositionWS.xyz;

+

+  GSVertexOutput vertex;

+  // Totally hacky...

+  P0.z += 0.001;

+  P1.z += 0.001;

+  P2.z += 0.001;

+  float4 Q0 = mul(proj_matrix, float4(P0, 1.0));

+  float4 Q1 = mul(proj_matrix, float4(P1, 1.0));

+  float4 Q2 = mul(proj_matrix, float4(P2, 1.0));

+

+  // Edge 0

+  vertex.PositionCS = Q0;

+  output.Append(vertex);

+  vertex.PositionCS = Q1;

+  output.Append(vertex);

+  output.RestartStrip();

+

+  // Edge 1

+  vertex.PositionCS = Q1;

+  output.Append(vertex);

+  vertex.PositionCS = Q2;

+  output.Append(vertex);

+  output.RestartStrip();

+

+  // Edge 2

+  vertex.PositionCS = Q2;

+  output.Append(vertex);

+  vertex.PositionCS = Q0;

+  output.Append(vertex);

+  output.RestartStrip();

+}

diff --git a/Test/hlsl.imagefetch-subvec4.comp b/Test/hlsl.imagefetch-subvec4.comp
new file mode 100644
index 0000000..2a83dd2
--- /dev/null
+++ b/Test/hlsl.imagefetch-subvec4.comp
@@ -0,0 +1,8 @@
+Texture3D<int> IN: register(t0);
+RWTexture3D<uint> OUT: register(u1);
+
+[numthreads(8,8,8)]
+void main(uint3 tid: SV_DispatchThreadID)
+{
+    OUT[tid] = IN[tid];
+}
diff --git a/Test/hlsl.intrinsics.frag b/Test/hlsl.intrinsics.frag
index 9343f6d..41b5f54 100644
--- a/Test/hlsl.intrinsics.frag
+++ b/Test/hlsl.intrinsics.frag
@@ -13,7 +13,7 @@
 groupshared uint4 gs_ub4;
 groupshared uint4 gs_uc4;
 
-float PixelShaderFunctionS(float inF0, float inF1, float inF2, uint inU0, uint inU1)
+float PixelShaderFunctionS(float inF0, float inF1, float inF2, uint inU0, int inU1)
 {
     uint out_u1;
 
@@ -23,7 +23,7 @@
     bool r003 = any(inF0);
     float r004 = asin(inF0);
     int r005 = asint(inF0);
-    uint r006 = asuint(inF0);
+    uint r006 = asuint(inU1);
     float r007 = asfloat(inU0);
     // asdouble(inU0, inU1);  // TODO: enable when HLSL parser used for intrinsics
     float r009 = atan(inF0);
diff --git a/Test/hlsl.layout.frag b/Test/hlsl.layout.frag
index 4c2f7ce..a4fa5af 100644
--- a/Test/hlsl.layout.frag
+++ b/Test/hlsl.layout.frag
@@ -14,5 +14,6 @@
 
 float4 PixelShaderFunction(float4 input) : COLOR0
 {
-    return input + v1 + v5 + v1PostLayout;
+    float4 layout = 2.0;
+    return input + v1 + v5 + v1PostLayout * layout;
 }
diff --git a/Test/hlsl.layoutOverride.vert b/Test/hlsl.layoutOverride.vert
new file mode 100644
index 0000000..4c00601
--- /dev/null
+++ b/Test/hlsl.layoutOverride.vert
@@ -0,0 +1,7 @@
+layout(set=2,binding=0) Texture2D tex : register(t16);

+SamplerState samp;

+

+float4 main() : SV_Position 

+{

+    return tex.Sample(samp, float2(0.2, 0.3));

+}
\ No newline at end of file
diff --git a/Test/hlsl.mul-truncate.frag b/Test/hlsl.mul-truncate.frag
new file mode 100644
index 0000000..7ce2c22
--- /dev/null
+++ b/Test/hlsl.mul-truncate.frag
@@ -0,0 +1,38 @@
+
+// Test v*v, v*m, m*v, and m*m argument clamping.
+
+cbuffer Matrix
+{
+    float4x4  m44;
+    float4x3  m43;
+    float3x4  m34;
+    float3x3  m33;
+    float2x4  m24;
+    float4x2  m42;
+    float4    v4;
+    float3    v3;
+    float2    v2;
+}
+
+float4 main() : SV_Target0
+{
+    // v*v:
+    float  r00 = mul(v2, v3);  // float = float2*float3; // clamp to float2 dot product
+    float  r01 = mul(v4, v2);  // float = float4*float2; // clamp to float2 dot product
+
+    // v*m
+    float4 r10 = mul(v3, m44); // float4 = float3 * float4x4;  // clamp mat to float3x4;
+    float4 r11 = mul(v4, m34); // truncate vector to vec3
+
+    // m*v
+    float4 r20 = mul(m44, v3); // float4 = float4x4 * float3;  // clamp mat to float4x3;
+    float4 r21 = mul(m43, v4); // truncate vector to vec3
+
+    // m*m
+    float2x3 r30 = mul(m24, m33);  // float2x3 = float2x4 * float3x3;
+    float3x4 r31 = mul(m33, m24);  // float3x4 = float3x3 * float2x4;
+    float3x2 r32 = mul(m33, m42);  // float3x2 = float3x3 * float4x2;
+    float4x3 r33 = mul(m42, m33);  // float4x3 = float4x2 * float3x3;
+
+    return r10 + r11 + r20 + r21 + r00 + r01 + r30[0].x + r31[0] + r32[0].x + transpose(r33)[0];
+}
diff --git a/Test/hlsl.noSemantic.functionality1.comp b/Test/hlsl.noSemantic.functionality1.comp
new file mode 100644
index 0000000..ac9a7a9
--- /dev/null
+++ b/Test/hlsl.noSemantic.functionality1.comp
@@ -0,0 +1,7 @@
+AppendStructuredBuffer<float4> Buf : register(u0);

+

+[numthreads(1, 1, 1)]

+void main()

+{

+	Buf.Append(1.0f.xxxx);

+}
\ No newline at end of file
diff --git a/Test/hlsl.numthreads.comp b/Test/hlsl.numthreads.comp
index fcc97f3..0871d3f 100644
--- a/Test/hlsl.numthreads.comp
+++ b/Test/hlsl.numthreads.comp
@@ -4,11 +4,8 @@
 {
 }
 
-[numTHreaDs(4,4,2)]  // case insensitive
-void main_aux1(uint3 tid : SV_DispatchThreadID )
+[numthreads(1,4,8)]
+void main_aux2(uint3 tid : SV_DispatchThreadID )
 {
 }
 
-[numthreads(1,4,8)]
-void main_aux2(uint3 tid : SV_DispatchThreadID );
-
diff --git a/Test/hlsl.snorm.uav.comp b/Test/hlsl.snorm.uav.comp
new file mode 100644
index 0000000..c6cafeb
--- /dev/null
+++ b/Test/hlsl.snorm.uav.comp
@@ -0,0 +1,15 @@
+
+unorm float4 uf4;
+
+Texture3D<unorm float4> ResultInU: register(t0);
+RWTexture3D<unorm float4> ResultOutU: register(u0);
+
+Texture3D<snorm float4> ResultInS: register(t1);
+RWTexture3D<snorm float4> ResultOutS: register(u1);
+
+[numthreads(16, 16, 1)]
+void main(uint3 tid: SV_DispatchThreadID)
+{
+    ResultOutS[tid] = ResultInS[tid] + uf4;
+    ResultOutU[tid] = ResultInU[tid];
+}
diff --git a/Test/hlsl.store.rwbyteaddressbuffer.type.comp b/Test/hlsl.store.rwbyteaddressbuffer.type.comp
new file mode 100644
index 0000000..5400d81
--- /dev/null
+++ b/Test/hlsl.store.rwbyteaddressbuffer.type.comp
@@ -0,0 +1,8 @@
+RWByteAddressBuffer buffer;
+
+[numthreads(64, 1, 1)]
+void main( uint3 dispatchThreadID : SV_DispatchThreadID)
+{
+    if(dispatchThreadID.x == 0)
+        buffer.Store(0, 2);
+}
\ No newline at end of file
diff --git a/Test/hlsl.texturebuffer.frag b/Test/hlsl.texturebuffer.frag
new file mode 100644
index 0000000..d069746
--- /dev/null
+++ b/Test/hlsl.texturebuffer.frag
@@ -0,0 +1,17 @@
+
+struct Data {
+    float4  f;
+    int4    i;
+};
+
+TextureBuffer<Data> TextureBuffer_var : register(t0);
+
+tbuffer tbuf2 {
+    float4 f2;
+    int4   i2;
+};
+
+float4 main(float4 pos : SV_POSITION) : SV_TARGET
+{
+    return TextureBuffer_var.f + f2;
+}
diff --git a/Test/hlsl.wavebroadcast.comp b/Test/hlsl.wavebroadcast.comp
new file mode 100644
index 0000000..4498305
--- /dev/null
+++ b/Test/hlsl.wavebroadcast.comp
@@ -0,0 +1,53 @@
+struct Types

+{

+	uint4 u;

+	int4 i;

+	float4 f;

+	double4 d;

+};

+

+RWStructuredBuffer<Types> data;

+

+[numthreads(32, 16, 1)]

+void CSMain(uint3 dti : SV_DispatchThreadID)

+{

+	data[dti.x].u = WaveReadLaneAt(data[dti.x].u, 13);

+	data[dti.x].u.x = WaveReadLaneAt(data[dti.x].u.x, 13);

+	data[dti.x].u.xy = WaveReadLaneAt(data[dti.x].u.xy, 13);

+	data[dti.x].u.xyz = WaveReadLaneAt(data[dti.x].u.xyz, 13);

+

+	data[dti.x].i = WaveReadLaneAt(data[dti.x].i, 13);

+	data[dti.x].i.x = WaveReadLaneAt(data[dti.x].i.x, 13);

+	data[dti.x].i.xy = WaveReadLaneAt(data[dti.x].i.xy, 13);

+	data[dti.x].i.xyz = WaveReadLaneAt(data[dti.x].i.xyz, 13);

+

+	data[dti.x].f = WaveReadLaneAt(data[dti.x].f, 13);

+	data[dti.x].f.x = WaveReadLaneAt(data[dti.x].f.x, 13);

+	data[dti.x].f.xy = WaveReadLaneAt(data[dti.x].f.xy, 13);

+	data[dti.x].f.xyz = WaveReadLaneAt(data[dti.x].f.xyz, 13);

+

+	data[dti.x].d = WaveReadLaneFirst(data[dti.x].d);

+	data[dti.x].d.x = WaveReadLaneFirst(data[dti.x].d.x);

+	data[dti.x].d.xy = WaveReadLaneFirst(data[dti.x].d.xy);

+	data[dti.x].d.xyz = WaveReadLaneFirst(data[dti.x].d.xyz);

+

+	data[dti.x].u = WaveReadLaneFirst(data[dti.x].u);

+	data[dti.x].u.x = WaveReadLaneFirst(data[dti.x].u.x);

+	data[dti.x].u.xy = WaveReadLaneFirst(data[dti.x].u.xy);

+	data[dti.x].u.xyz = WaveReadLaneFirst(data[dti.x].u.xyz);

+

+	data[dti.x].i = WaveReadLaneFirst(data[dti.x].i);

+	data[dti.x].i.x = WaveReadLaneFirst(data[dti.x].i.x);

+	data[dti.x].i.xy = WaveReadLaneFirst(data[dti.x].i.xy);

+	data[dti.x].i.xyz = WaveReadLaneFirst(data[dti.x].i.xyz);

+

+	data[dti.x].f = WaveReadLaneFirst(data[dti.x].f);

+	data[dti.x].f.x = WaveReadLaneFirst(data[dti.x].f.x);

+	data[dti.x].f.xy = WaveReadLaneFirst(data[dti.x].f.xy);

+	data[dti.x].f.xyz = WaveReadLaneFirst(data[dti.x].f.xyz);

+

+	data[dti.x].d = WaveReadLaneFirst(data[dti.x].d);

+	data[dti.x].d.x = WaveReadLaneFirst(data[dti.x].d.x);

+	data[dti.x].d.xy = WaveReadLaneFirst(data[dti.x].d.xy);

+	data[dti.x].d.xyz = WaveReadLaneFirst(data[dti.x].d.xyz);

+}

diff --git a/Test/hlsl.waveprefix.comp b/Test/hlsl.waveprefix.comp
new file mode 100644
index 0000000..e4b4367
--- /dev/null
+++ b/Test/hlsl.waveprefix.comp
@@ -0,0 +1,55 @@
+struct Types

+{

+	uint4 u;

+	int4 i;

+	float4 f;

+	double4 d;

+};

+

+RWStructuredBuffer<Types> data;

+

+[numthreads(32, 16, 1)]

+void CSMain(uint3 dti : SV_DispatchThreadID)

+{

+	data[dti.x].u = WavePrefixSum(data[dti.x].u);

+	data[dti.x].u.x = WavePrefixSum(data[dti.x].u.x);

+	data[dti.x].u.xy = WavePrefixSum(data[dti.x].u.xy);

+	data[dti.x].u.xyz = WavePrefixSum(data[dti.x].u.xyz);

+

+	data[dti.x].i = WavePrefixSum(data[dti.x].i);

+	data[dti.x].i.x = WavePrefixSum(data[dti.x].i.x);

+	data[dti.x].i.xy = WavePrefixSum(data[dti.x].i.xy);

+	data[dti.x].i.xyz = WavePrefixSum(data[dti.x].i.xyz);

+

+	data[dti.x].f = WavePrefixSum(data[dti.x].f);

+	data[dti.x].f.x = WavePrefixSum(data[dti.x].f.x);

+	data[dti.x].f.xy = WavePrefixSum(data[dti.x].f.xy);

+	data[dti.x].f.xyz = WavePrefixSum(data[dti.x].f.xyz);

+

+	data[dti.x].d = WavePrefixSum(data[dti.x].d);

+	data[dti.x].d.x = WavePrefixSum(data[dti.x].d.x);

+	data[dti.x].d.xy = WavePrefixSum(data[dti.x].d.xy);

+	data[dti.x].d.xyz = WavePrefixSum(data[dti.x].d.xyz);

+

+	data[dti.x].u = WavePrefixProduct(data[dti.x].u);

+	data[dti.x].u.x = WavePrefixProduct(data[dti.x].u.x);

+	data[dti.x].u.xy = WavePrefixProduct(data[dti.x].u.xy);

+	data[dti.x].u.xyz = WavePrefixProduct(data[dti.x].u.xyz);

+

+	data[dti.x].i = WavePrefixProduct(data[dti.x].i);

+	data[dti.x].i.x = WavePrefixProduct(data[dti.x].i.x);

+	data[dti.x].i.xy = WavePrefixProduct(data[dti.x].i.xy);

+	data[dti.x].i.xyz = WavePrefixProduct(data[dti.x].i.xyz);

+

+	data[dti.x].f = WavePrefixProduct(data[dti.x].f);

+	data[dti.x].f.x = WavePrefixProduct(data[dti.x].f.x);

+	data[dti.x].f.xy = WavePrefixProduct(data[dti.x].f.xy);

+	data[dti.x].f.xyz = WavePrefixProduct(data[dti.x].f.xyz);

+

+	data[dti.x].d = WavePrefixProduct(data[dti.x].d);

+	data[dti.x].d.x = WavePrefixProduct(data[dti.x].d.x);

+	data[dti.x].d.xy = WavePrefixProduct(data[dti.x].d.xy);

+	data[dti.x].d.xyz = WavePrefixProduct(data[dti.x].d.xyz);

+

+	data[dti.x].u.x = WavePrefixCountBits(data[dti.x].u.x == 0);

+}

diff --git a/Test/hlsl.wavequad.comp b/Test/hlsl.wavequad.comp
new file mode 100644
index 0000000..34e8b78
--- /dev/null
+++ b/Test/hlsl.wavequad.comp
@@ -0,0 +1,153 @@
+struct Types

+{

+	uint4 u;

+	int4 i;

+	float4 f;

+	double4 d;

+};

+

+RWStructuredBuffer<Types> data;

+

+[numthreads(32, 16, 1)]

+void CSMain(uint3 dti : SV_DispatchThreadID)

+{

+	data[dti.x].u = QuadReadLaneAt(data[dti.x].u, 0);

+	data[dti.x].u.x = QuadReadLaneAt(data[dti.x].u.x, 0);

+	data[dti.x].u.xy = QuadReadLaneAt(data[dti.x].u.xy, 0);

+	data[dti.x].u.xyz = QuadReadLaneAt(data[dti.x].u.xyz, 0);

+

+	data[dti.x].i = QuadReadLaneAt(data[dti.x].i, 0);

+	data[dti.x].i.x = QuadReadLaneAt(data[dti.x].i.x, 0);

+	data[dti.x].i.xy = QuadReadLaneAt(data[dti.x].i.xy, 0);

+	data[dti.x].i.xyz = QuadReadLaneAt(data[dti.x].i.xyz, 0);

+

+	data[dti.x].f = QuadReadLaneAt(data[dti.x].f, 0);

+	data[dti.x].f.x = QuadReadLaneAt(data[dti.x].f.x, 0);

+	data[dti.x].f.xy = QuadReadLaneAt(data[dti.x].f.xy, 0);

+	data[dti.x].f.xyz = QuadReadLaneAt(data[dti.x].f.xyz, 0);

+

+	data[dti.x].d = QuadReadLaneAt(data[dti.x].d, 0);

+	data[dti.x].d.x = QuadReadLaneAt(data[dti.x].d.x, 0);

+	data[dti.x].d.xy = QuadReadLaneAt(data[dti.x].d.xy, 0);

+	data[dti.x].d.xyz = QuadReadLaneAt(data[dti.x].d.xyz, 0);

+

+	data[dti.x].u = QuadReadLaneAt(data[dti.x].u, 1);

+	data[dti.x].u.x = QuadReadLaneAt(data[dti.x].u.x, 1);

+	data[dti.x].u.xy = QuadReadLaneAt(data[dti.x].u.xy, 1);

+	data[dti.x].u.xyz = QuadReadLaneAt(data[dti.x].u.xyz, 1);

+

+	data[dti.x].i = QuadReadLaneAt(data[dti.x].i, 1);

+	data[dti.x].i.x = QuadReadLaneAt(data[dti.x].i.x, 1);

+	data[dti.x].i.xy = QuadReadLaneAt(data[dti.x].i.xy, 1);

+	data[dti.x].i.xyz = QuadReadLaneAt(data[dti.x].i.xyz, 1);

+

+	data[dti.x].f = QuadReadLaneAt(data[dti.x].f, 1);

+	data[dti.x].f.x = QuadReadLaneAt(data[dti.x].f.x, 1);

+	data[dti.x].f.xy = QuadReadLaneAt(data[dti.x].f.xy, 1);

+	data[dti.x].f.xyz = QuadReadLaneAt(data[dti.x].f.xyz, 1);

+

+	data[dti.x].d = QuadReadLaneAt(data[dti.x].d, 1);

+	data[dti.x].d.x = QuadReadLaneAt(data[dti.x].d.x, 1);

+	data[dti.x].d.xy = QuadReadLaneAt(data[dti.x].d.xy, 1);

+	data[dti.x].d.xyz = QuadReadLaneAt(data[dti.x].d.xyz, 1);

+

+	data[dti.x].u = QuadReadLaneAt(data[dti.x].u, 2);

+	data[dti.x].u.x = QuadReadLaneAt(data[dti.x].u.x, 2);

+	data[dti.x].u.xy = QuadReadLaneAt(data[dti.x].u.xy, 2);

+	data[dti.x].u.xyz = QuadReadLaneAt(data[dti.x].u.xyz, 2);

+

+	data[dti.x].i = QuadReadLaneAt(data[dti.x].i, 2);

+	data[dti.x].i.x = QuadReadLaneAt(data[dti.x].i.x, 2);

+	data[dti.x].i.xy = QuadReadLaneAt(data[dti.x].i.xy, 2);

+	data[dti.x].i.xyz = QuadReadLaneAt(data[dti.x].i.xyz, 2);

+

+	data[dti.x].f = QuadReadLaneAt(data[dti.x].f, 2);

+	data[dti.x].f.x = QuadReadLaneAt(data[dti.x].f.x, 2);

+	data[dti.x].f.xy = QuadReadLaneAt(data[dti.x].f.xy, 2);

+	data[dti.x].f.xyz = QuadReadLaneAt(data[dti.x].f.xyz, 2);

+

+	data[dti.x].d = QuadReadLaneAt(data[dti.x].d, 2);

+	data[dti.x].d.x = QuadReadLaneAt(data[dti.x].d.x, 2);

+	data[dti.x].d.xy = QuadReadLaneAt(data[dti.x].d.xy, 2);

+	data[dti.x].d.xyz = QuadReadLaneAt(data[dti.x].d.xyz, 2);

+

+	data[dti.x].u = QuadReadLaneAt(data[dti.x].u, 3);

+	data[dti.x].u.x = QuadReadLaneAt(data[dti.x].u.x, 3);

+	data[dti.x].u.xy = QuadReadLaneAt(data[dti.x].u.xy, 3);

+	data[dti.x].u.xyz = QuadReadLaneAt(data[dti.x].u.xyz, 3);

+

+	data[dti.x].i = QuadReadLaneAt(data[dti.x].i, 3);

+	data[dti.x].i.x = QuadReadLaneAt(data[dti.x].i.x, 3);

+	data[dti.x].i.xy = QuadReadLaneAt(data[dti.x].i.xy, 3);

+	data[dti.x].i.xyz = QuadReadLaneAt(data[dti.x].i.xyz, 3);

+

+	data[dti.x].f = QuadReadLaneAt(data[dti.x].f, 3);

+	data[dti.x].f.x = QuadReadLaneAt(data[dti.x].f.x, 3);

+	data[dti.x].f.xy = QuadReadLaneAt(data[dti.x].f.xy, 3);

+	data[dti.x].f.xyz = QuadReadLaneAt(data[dti.x].f.xyz, 3);

+

+	data[dti.x].d = QuadReadLaneAt(data[dti.x].d, 3);

+	data[dti.x].d.x = QuadReadLaneAt(data[dti.x].d.x, 3);

+	data[dti.x].d.xy = QuadReadLaneAt(data[dti.x].d.xy, 3);

+	data[dti.x].d.xyz = QuadReadLaneAt(data[dti.x].d.xyz, 3);

+

+	data[dti.x].u = QuadReadAcrossX(data[dti.x].u);

+	data[dti.x].u.x = QuadReadAcrossX(data[dti.x].u.x);

+	data[dti.x].u.xy = QuadReadAcrossX(data[dti.x].u.xy);

+	data[dti.x].u.xyz = QuadReadAcrossX(data[dti.x].u.xyz);

+

+	data[dti.x].i = QuadReadAcrossX(data[dti.x].i);

+	data[dti.x].i.x = QuadReadAcrossX(data[dti.x].i.x);

+	data[dti.x].i.xy = QuadReadAcrossX(data[dti.x].i.xy);

+	data[dti.x].i.xyz = QuadReadAcrossX(data[dti.x].i.xyz);

+

+	data[dti.x].f = QuadReadAcrossX(data[dti.x].f);

+	data[dti.x].f.x = QuadReadAcrossX(data[dti.x].f.x);

+	data[dti.x].f.xy = QuadReadAcrossX(data[dti.x].f.xy);

+	data[dti.x].f.xyz = QuadReadAcrossX(data[dti.x].f.xyz);

+

+	data[dti.x].d = QuadReadAcrossX(data[dti.x].d);

+	data[dti.x].d.x = QuadReadAcrossX(data[dti.x].d.x);

+	data[dti.x].d.xy = QuadReadAcrossX(data[dti.x].d.xy);

+	data[dti.x].d.xyz = QuadReadAcrossX(data[dti.x].d.xyz);

+

+	data[dti.x].u = QuadReadAcrossY(data[dti.x].u);

+	data[dti.x].u.x = QuadReadAcrossY(data[dti.x].u.x);

+	data[dti.x].u.xy = QuadReadAcrossY(data[dti.x].u.xy);

+	data[dti.x].u.xyz = QuadReadAcrossY(data[dti.x].u.xyz);

+

+	data[dti.x].i = QuadReadAcrossY(data[dti.x].i);

+	data[dti.x].i.x = QuadReadAcrossY(data[dti.x].i.x);

+	data[dti.x].i.xy = QuadReadAcrossY(data[dti.x].i.xy);

+	data[dti.x].i.xyz = QuadReadAcrossY(data[dti.x].i.xyz);

+

+	data[dti.x].f = QuadReadAcrossY(data[dti.x].f);

+	data[dti.x].f.x = QuadReadAcrossY(data[dti.x].f.x);

+	data[dti.x].f.xy = QuadReadAcrossY(data[dti.x].f.xy);

+	data[dti.x].f.xyz = QuadReadAcrossY(data[dti.x].f.xyz);

+

+	data[dti.x].d = QuadReadAcrossY(data[dti.x].d);

+	data[dti.x].d.x = QuadReadAcrossY(data[dti.x].d.x);

+	data[dti.x].d.xy = QuadReadAcrossY(data[dti.x].d.xy);

+	data[dti.x].d.xyz = QuadReadAcrossY(data[dti.x].d.xyz);

+

+	data[dti.x].u = QuadReadAcrossDiagonal(data[dti.x].u);

+	data[dti.x].u.x = QuadReadAcrossDiagonal(data[dti.x].u.x);

+	data[dti.x].u.xy = QuadReadAcrossDiagonal(data[dti.x].u.xy);

+	data[dti.x].u.xyz = QuadReadAcrossDiagonal(data[dti.x].u.xyz);

+

+	data[dti.x].i = QuadReadAcrossDiagonal(data[dti.x].i);

+	data[dti.x].i.x = QuadReadAcrossDiagonal(data[dti.x].i.x);

+	data[dti.x].i.xy = QuadReadAcrossDiagonal(data[dti.x].i.xy);

+	data[dti.x].i.xyz = QuadReadAcrossDiagonal(data[dti.x].i.xyz);

+

+	data[dti.x].f = QuadReadAcrossDiagonal(data[dti.x].f);

+	data[dti.x].f.x = QuadReadAcrossDiagonal(data[dti.x].f.x);

+	data[dti.x].f.xy = QuadReadAcrossDiagonal(data[dti.x].f.xy);

+	data[dti.x].f.xyz = QuadReadAcrossDiagonal(data[dti.x].f.xyz);

+

+	data[dti.x].d = QuadReadAcrossDiagonal(data[dti.x].d);

+	data[dti.x].d.x = QuadReadAcrossDiagonal(data[dti.x].d.x);

+	data[dti.x].d.xy = QuadReadAcrossDiagonal(data[dti.x].d.xy);

+	data[dti.x].d.xyz = QuadReadAcrossDiagonal(data[dti.x].d.xyz);

+}

diff --git a/Test/hlsl.wavequery.comp b/Test/hlsl.wavequery.comp
new file mode 100644
index 0000000..a689e11
--- /dev/null
+++ b/Test/hlsl.wavequery.comp
@@ -0,0 +1,7 @@
+RWStructuredBuffer<uint> data;

+

+[numthreads(32, 16, 1)]

+void CSMain()

+{

+    data[WaveGetLaneIndex()] = (WaveIsFirstLane()) ? WaveGetLaneCount() : 0;

+}

diff --git a/Test/hlsl.wavequery.frag b/Test/hlsl.wavequery.frag
new file mode 100644
index 0000000..d1437f0
--- /dev/null
+++ b/Test/hlsl.wavequery.frag
@@ -0,0 +1,11 @@
+float4 PixelShaderFunction() : COLOR0

+{

+    if (WaveIsFirstLane())

+    {

+        return float4(1, 2, 3, 4);

+    }

+    else

+    {

+        return float4(4, 3, 2, 1);

+    }

+}

diff --git a/Test/hlsl.wavereduction.comp b/Test/hlsl.wavereduction.comp
new file mode 100644
index 0000000..b7604ad
--- /dev/null
+++ b/Test/hlsl.wavereduction.comp
@@ -0,0 +1,125 @@
+struct Types

+{

+	uint4 u;

+	int4 i;

+	float4 f;

+	double4 d;

+};

+

+RWStructuredBuffer<Types> data;

+

+[numthreads(32, 16, 1)]

+void CSMain(uint3 dti : SV_DispatchThreadID)

+{

+	data[dti.x].u = WaveActiveSum(data[dti.x].u);

+	data[dti.x].u.x = WaveActiveSum(data[dti.x].u.x);

+	data[dti.x].u.xy = WaveActiveSum(data[dti.x].u.xy);

+	data[dti.x].u.xyz = WaveActiveSum(data[dti.x].u.xyz);

+

+	data[dti.x].i = WaveActiveSum(data[dti.x].i);

+	data[dti.x].i.x = WaveActiveSum(data[dti.x].i.x);

+	data[dti.x].i.xy = WaveActiveSum(data[dti.x].i.xy);

+	data[dti.x].i.xyz = WaveActiveSum(data[dti.x].i.xyz);

+

+	data[dti.x].f = WaveActiveSum(data[dti.x].f);

+	data[dti.x].f.x = WaveActiveSum(data[dti.x].f.x);

+	data[dti.x].f.xy = WaveActiveSum(data[dti.x].f.xy);

+	data[dti.x].f.xyz = WaveActiveSum(data[dti.x].f.xyz);

+

+	data[dti.x].d = WaveActiveSum(data[dti.x].d);

+	data[dti.x].d.x = WaveActiveSum(data[dti.x].d.x);

+	data[dti.x].d.xy = WaveActiveSum(data[dti.x].d.xy);

+	data[dti.x].d.xyz = WaveActiveSum(data[dti.x].d.xyz);

+

+	data[dti.x].u = WaveActiveProduct(data[dti.x].u);

+	data[dti.x].u.x = WaveActiveProduct(data[dti.x].u.x);

+	data[dti.x].u.xy = WaveActiveProduct(data[dti.x].u.xy);

+	data[dti.x].u.xyz = WaveActiveProduct(data[dti.x].u.xyz);

+

+	data[dti.x].i = WaveActiveProduct(data[dti.x].i);

+	data[dti.x].i.x = WaveActiveProduct(data[dti.x].i.x);

+	data[dti.x].i.xy = WaveActiveProduct(data[dti.x].i.xy);

+	data[dti.x].i.xyz = WaveActiveProduct(data[dti.x].i.xyz);

+

+	data[dti.x].f = WaveActiveProduct(data[dti.x].f);

+	data[dti.x].f.x = WaveActiveProduct(data[dti.x].f.x);

+	data[dti.x].f.xy = WaveActiveProduct(data[dti.x].f.xy);

+	data[dti.x].f.xyz = WaveActiveProduct(data[dti.x].f.xyz);

+

+	data[dti.x].d = WaveActiveProduct(data[dti.x].d);

+	data[dti.x].d.x = WaveActiveProduct(data[dti.x].d.x);

+	data[dti.x].d.xy = WaveActiveProduct(data[dti.x].d.xy);

+	data[dti.x].d.xyz = WaveActiveProduct(data[dti.x].d.xyz);

+

+	data[dti.x].u = WaveActiveMin(data[dti.x].u);

+	data[dti.x].u.x = WaveActiveMin(data[dti.x].u.x);

+	data[dti.x].u.xy = WaveActiveMin(data[dti.x].u.xy);

+	data[dti.x].u.xyz = WaveActiveMin(data[dti.x].u.xyz);

+

+	data[dti.x].i = WaveActiveMin(data[dti.x].i);

+	data[dti.x].i.x = WaveActiveMin(data[dti.x].i.x);

+	data[dti.x].i.xy = WaveActiveMin(data[dti.x].i.xy);

+	data[dti.x].i.xyz = WaveActiveMin(data[dti.x].i.xyz);

+

+	data[dti.x].f = WaveActiveMin(data[dti.x].f);

+	data[dti.x].f.x = WaveActiveMin(data[dti.x].f.x);

+	data[dti.x].f.xy = WaveActiveMin(data[dti.x].f.xy);

+	data[dti.x].f.xyz = WaveActiveMin(data[dti.x].f.xyz);

+

+	data[dti.x].d = WaveActiveMin(data[dti.x].d);

+	data[dti.x].d.x = WaveActiveMin(data[dti.x].d.x);

+	data[dti.x].d.xy = WaveActiveMin(data[dti.x].d.xy);

+	data[dti.x].d.xyz = WaveActiveMin(data[dti.x].d.xyz);

+

+	data[dti.x].u = WaveActiveMax(data[dti.x].u);

+	data[dti.x].u.x = WaveActiveMax(data[dti.x].u.x);

+	data[dti.x].u.xy = WaveActiveMax(data[dti.x].u.xy);

+	data[dti.x].u.xyz = WaveActiveMax(data[dti.x].u.xyz);

+

+	data[dti.x].i = WaveActiveMax(data[dti.x].i);

+	data[dti.x].i.x = WaveActiveMax(data[dti.x].i.x);

+	data[dti.x].i.xy = WaveActiveMax(data[dti.x].i.xy);

+	data[dti.x].i.xyz = WaveActiveMax(data[dti.x].i.xyz);

+

+	data[dti.x].f = WaveActiveMax(data[dti.x].f);

+	data[dti.x].f.x = WaveActiveMax(data[dti.x].f.x);

+	data[dti.x].f.xy = WaveActiveMax(data[dti.x].f.xy);

+	data[dti.x].f.xyz = WaveActiveMax(data[dti.x].f.xyz);

+

+	data[dti.x].d = WaveActiveMax(data[dti.x].d);

+	data[dti.x].d.x = WaveActiveMax(data[dti.x].d.x);

+	data[dti.x].d.xy = WaveActiveMax(data[dti.x].d.xy);

+	data[dti.x].d.xyz = WaveActiveMax(data[dti.x].d.xyz);

+

+	data[dti.x].u = WaveActiveBitAnd(data[dti.x].u);

+	data[dti.x].u.x = WaveActiveBitAnd(data[dti.x].u.x);

+	data[dti.x].u.xy = WaveActiveBitAnd(data[dti.x].u.xy);

+	data[dti.x].u.xyz = WaveActiveBitAnd(data[dti.x].u.xyz);

+

+	data[dti.x].i = WaveActiveBitAnd(data[dti.x].i);

+	data[dti.x].i.x = WaveActiveBitAnd(data[dti.x].i.x);

+	data[dti.x].i.xy = WaveActiveBitAnd(data[dti.x].i.xy);

+	data[dti.x].i.xyz = WaveActiveBitAnd(data[dti.x].i.xyz);

+

+	data[dti.x].u = WaveActiveBitOr(data[dti.x].u);

+	data[dti.x].u.x = WaveActiveBitOr(data[dti.x].u.x);

+	data[dti.x].u.xy = WaveActiveBitOr(data[dti.x].u.xy);

+	data[dti.x].u.xyz = WaveActiveBitOr(data[dti.x].u.xyz);

+

+	data[dti.x].i = WaveActiveBitOr(data[dti.x].i);

+	data[dti.x].i.x = WaveActiveBitOr(data[dti.x].i.x);

+	data[dti.x].i.xy = WaveActiveBitOr(data[dti.x].i.xy);

+	data[dti.x].i.xyz = WaveActiveBitOr(data[dti.x].i.xyz);

+

+	data[dti.x].u = WaveActiveBitXor(data[dti.x].u);

+	data[dti.x].u.x = WaveActiveBitXor(data[dti.x].u.x);

+	data[dti.x].u.xy = WaveActiveBitXor(data[dti.x].u.xy);

+	data[dti.x].u.xyz = WaveActiveBitXor(data[dti.x].u.xyz);

+

+	data[dti.x].i = WaveActiveBitXor(data[dti.x].i);

+	data[dti.x].i.x = WaveActiveBitXor(data[dti.x].i.x);

+	data[dti.x].i.xy = WaveActiveBitXor(data[dti.x].i.xy);

+	data[dti.x].i.xyz = WaveActiveBitXor(data[dti.x].i.xyz);

+

+	data[dti.x].u.x = WaveActiveCountBits(data[dti.x].u.x == 0);

+}

diff --git a/Test/hlsl.wavevote.comp b/Test/hlsl.wavevote.comp
new file mode 100644
index 0000000..0370e69
--- /dev/null
+++ b/Test/hlsl.wavevote.comp
@@ -0,0 +1,10 @@
+RWStructuredBuffer<uint64_t> data;

+

+[numthreads(32, 16, 1)]

+void CSMain(uint3 dti : SV_DispatchThreadID)

+{

+	data[dti.x] = WaveActiveBallot(WaveActiveAnyTrue(dti.x == 0));

+	data[dti.y] = WaveActiveBallot(WaveActiveAllTrue(dti.y == 0));

+	data[dti.z] = WaveActiveBallot(WaveActiveAllEqualBool(dti.z == 0));

+	data[dti.z] = WaveActiveBallot(WaveActiveAllEqual(dti.z));

+}

diff --git a/Test/hlsl.y-negate-1.vert b/Test/hlsl.y-negate-1.vert
new file mode 100644
index 0000000..ee62ec2
--- /dev/null
+++ b/Test/hlsl.y-negate-1.vert
@@ -0,0 +1,9 @@
+
+// Test Y negation from entry point return
+
+float4 pos;
+
+float4 main() : SV_Position
+{
+    return pos;
+}
diff --git a/Test/hlsl.y-negate-2.vert b/Test/hlsl.y-negate-2.vert
new file mode 100644
index 0000000..01fa6ce
--- /dev/null
+++ b/Test/hlsl.y-negate-2.vert
@@ -0,0 +1,8 @@
+// Test Y negation from entry point out parameter
+
+float4 pos;
+
+void main(out float4 position : SV_Position)
+{
+    position = pos;
+}
diff --git a/Test/hlsl.y-negate-3.vert b/Test/hlsl.y-negate-3.vert
new file mode 100644
index 0000000..a0c4a8d
--- /dev/null
+++ b/Test/hlsl.y-negate-3.vert
@@ -0,0 +1,18 @@
+// Test Y negation from entry point out parameter
+
+float4 position;
+
+struct VS_OUT {
+    float4 pos : SV_Position;
+    int somethingelse;
+};
+
+VS_OUT main()
+{
+    VS_OUT vsout;
+
+    vsout.pos = position;
+    vsout.somethingelse = 42;
+
+    return vsout;
+}
diff --git a/Test/link1.vk.frag b/Test/link1.vk.frag
index 443a320..167e78e 100644
--- a/Test/link1.vk.frag
+++ b/Test/link1.vk.frag
@@ -2,9 +2,23 @@
 

 vec4 getColor();

 

-out vec4 color;

+layout(location=0) out vec4 color;

+

+int a1[];  // max size from link1

+int a2[];  // max size from link2

+int b[5];

+int c[];

+int i;

+

+buffer bnameRuntime  { float r[]; };

+buffer bnameImplicit { float m[]; };

 

 void main()

 {

     color = getColor();

+

+    a1[8] = 1;

+    a2[1] = 1;

+    b[i] = 1;

+    c[3] = 1;

 }

diff --git a/Test/link2.vk.frag b/Test/link2.vk.frag
index b1630cb..b80402c 100644
--- a/Test/link2.vk.frag
+++ b/Test/link2.vk.frag
@@ -1,8 +1,23 @@
 #version 450

 

-uniform sampler2D s2D;

+layout(binding=1) uniform sampler2D s2D;

+

+int a1[];  // max size from link1

+int a2[];  // max size from link2

+int b[];

+int c[7];

+int i;

+

+buffer bnameRuntime  { float r[]; };

+buffer bnameImplicit { float m[4]; };

 

 vec4 getColor()

 {

-  return texture(s2D, vec2(0.5));

+    a1[2] = 1;

+    a2[9] = 1;

+    b[2] = 1;

+    c[3] = 1;

+    c[i] = 1;

+

+    return texture(s2D, vec2(0.5));

 }

diff --git a/Test/matrix2.frag b/Test/matrix2.frag
index eb2c53c..df65804 100644
--- a/Test/matrix2.frag
+++ b/Test/matrix2.frag
@@ -47,4 +47,5 @@
     FragColor *= inv4;

 

     FragColor = vec4(FragColor * matrixCompMult(un34, un34), FragColor.w);

+    m34 *= colorTransform;

 }

diff --git a/Test/matrixError.vert b/Test/matrixError.vert
index 3c8cc11..0ad145b 100644
--- a/Test/matrixError.vert
+++ b/Test/matrixError.vert
@@ -19,4 +19,6 @@
     m23.xy;            // ERROR, can't use .
 
     gl_Position = vec4(m23 * m32 * v3, m24[2][4]);  // ERROR, 2 and 4 are out of range
+    m23 *= m23;        // ERROR, right side needs to be square
+    m23 *= m32;        // ERROR, left columns must match right rows
 }
diff --git a/Test/mixedArrayDecls.frag b/Test/mixedArrayDecls.frag
new file mode 100644
index 0000000..aff4f78
--- /dev/null
+++ b/Test/mixedArrayDecls.frag
@@ -0,0 +1,30 @@
+#version 450

+

+struct S {

+    int[3] a[2], b[5];

+};

+

+S s;

+

+int[5] c[4], d[8];

+int[9] e[], f[];

+int e[11][9];

+int f[13][9];

+

+int[14] g[], h[];

+

+int [14][15][6] foo(int[6] p[14][15]) { return p; }

+

+void main()

+{

+    g[3];

+    h[2];

+}

+

+float[4][3][2] bar() { float[3][2] a[4]; return a; }

+

+in inbname {

+    float[7] f[8][9];

+} inbinst[4][5][6];

+

+float[3][2] barm[4]() { float[3][2] a[4]; return a; }  // ERROR

diff --git a/Test/nonuniform.frag b/Test/nonuniform.frag
new file mode 100644
index 0000000..3f3dd67
--- /dev/null
+++ b/Test/nonuniform.frag
@@ -0,0 +1,33 @@
+#version 450

+

+int nonuniformEXT;

+

+#extension GL_EXT_nonuniform_qualifier : enable

+

+nonuniformEXT in vec4 nu_inv4;

+nonuniformEXT float nu_gf;

+

+nonuniformEXT out vec4 nu_outv4;           // ERROR, out

+nonuniformEXT uniform vec4 nu_uv4;         // ERROR, uniform

+nonuniformEXT const float nu_constf = 1.0; // ERROR, const

+

+nonuniformEXT int foo(nonuniformEXT int nupi, nonuniformEXT out int f)

+{

+    return nupi;

+}

+

+void main()

+{

+    nonuniformEXT int nu_li;

+    nonuniformEXT const int nu_ci = 2; // ERROR, const

+

+    foo(nu_li, nu_li);

+

+    int a;

+    nu_li = nonuniformEXT(a) + nonuniformEXT(a * 2);

+    nu_li = nonuniformEXT(a, a);       // ERROR, too many arguments

+    nu_li = nonuniformEXT();           // ERROR, no arguments

+}

+

+layout(location=1) in struct S { float a; nonuniformEXT float b; } ins;  // ERROR, not on member

+layout(location=3) in inbName { float a; nonuniformEXT float b; } inb;   // ERROR, not on member

diff --git a/Test/nvShaderNoperspectiveInterpolation.frag b/Test/nvShaderNoperspectiveInterpolation.frag
new file mode 100644
index 0000000..15c191d
--- /dev/null
+++ b/Test/nvShaderNoperspectiveInterpolation.frag
@@ -0,0 +1,15 @@
+#version 300 es
+
+precision mediump float;
+
+noperspective in vec4 bad; // ERROR
+
+#extension GL_NV_shader_noperspective_interpolation : enable
+
+noperspective in vec4 color;
+
+out vec4 fragColor;
+
+void main() {
+    fragColor = color;
+}
\ No newline at end of file
diff --git a/Test/preprocessor.pragma.vert b/Test/preprocessor.pragma.vert
index 79f5600..0ae7ee2 100644
--- a/Test/preprocessor.pragma.vert
+++ b/Test/preprocessor.pragma.vert
@@ -7,5 +7,7 @@
 

 #pragma undefined_pragma(x, 4)

 

+#pragma once

+

 int main() {

 }

diff --git a/Test/runtests b/Test/runtests
index 8e1135e..6ebb6ee 100755
--- a/Test/runtests
+++ b/Test/runtests
@@ -32,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 -Od hlsl.reflection.vert > $TARGETDIR/hlsl.reflection.vert.out
+$EXE -D -Od -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 -Od hlsl.reflection.binding.frag > $TARGETDIR/hlsl.reflection.binding.frag.out
+$EXE -D -Od -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 -Od hlsl.automap.frag > $TARGETDIR/hlsl.automap.frag.out
+$EXE -D -Od -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
 
 #
@@ -56,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 -Od hlsl.entry.rename.frag > $TARGETDIR/hlsl.entry.rename.frag.out
+$EXE -i -H -V -D -Od -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 -Od hlsl.deadFunctionMissingBody.vert > $TARGETDIR/hlsl.deadFunctionMissingBody.vert.out
+$EXE -D -Od -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 ]
@@ -88,27 +88,27 @@
 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 -Od hlsl.hlslOffset.vert > $TARGETDIR/hlsl.hlslOffset.vert.out
+$EXE -i  --hlsl-offsets -D -Od -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 -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
+$EXE -V -D -Od -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 -Od hlsl.explicitDescriptorSet.frag --hlsl-iomap --amb --ssb 10 --stb 20 --rsb 4 > $TARGETDIR/hlsl.explicitDescriptorSet.frag.out
+$EXE -V -D -Od -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 -Od hlsl.explicitDescriptorSet.frag --hlsl-iomap --amb --ssb 10 --stb 20 --rsb frag 3 > $TARGETDIR/hlsl.explicitDescriptorSet-2.frag.out
+$EXE -V -D -Od -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
+$EXE -e main --hlsl-iomap --ssb 10 1 15 2 --stb 20 --stb 25 2 --suavb 30 --suavb 40 2 --sub 50 6 -i -q -D -Od -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
 
 #
@@ -126,10 +126,13 @@
 # Testing debug information
 #
 echo Testing SPV Debug Information
-$EXE -g --relaxed-errors --suppress-warnings --aml --hlsl-offsets --nsf \
+$EXE -g --relaxed-errors --suppress-warnings --aml --amb --hlsl-offsets --nsf \
      -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 \
+$EXE -g -Od --target-env vulkan1.1 --relaxed-errors --suppress-warnings --aml --hlsl-offsets --nsf \
+     -G -H spv.debugInfo.frag --rsb frag 3 > $TARGETDIR/spv.debugInfo.1.1.frag.out
+diff -b $BASEDIR/spv.debugInfo.1.1.frag.out $TARGETDIR/spv.debugInfo.1.1.frag.out || HASERROR=1
+$EXE -g -D -Od -e newMain -g --amb --aml --fua --hlsl-iomap --nsf --sib 1 --ssb 2 --sbb 3 --stb 4 --suavb 5 --sub 6 \
      --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
 
@@ -137,13 +140,13 @@
 # Testing Includer
 #
 echo Testing Includer
-$EXE -D -e main -H -Od ../Test/hlsl.include.vert > $TARGETDIR/hlsl.include.vert.out
+$EXE -D -Od -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 -Od hlsl.includeNegative.vert > $TARGETDIR/hlsl.includeNegative.vert.out
+$EXE -D -Od -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 -Od -Iinc1/path1 -Iinc1/path2 hlsl.dashI.vert > $TARGETDIR/hlsl.dashI.vert.out
+$EXE -D -Od -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
 
 #
@@ -152,7 +155,7 @@
 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 -Od hlsl.-D-U.frag > $TARGETDIR/hlsl.-D-U.frag.out
+$EXE -D -Od -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
 
 #
@@ -162,6 +165,7 @@
 $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
+$EXE --target-env vulkan1.1  spv.targetVulkan.vert || HASERROR=1
 $EXE --target-env opengl     spv.targetOpenGL.vert || HASERROR=1
 $EXE -V100                   spv.targetVulkan.vert || HASERROR=1
 $EXE -G100                   spv.targetOpenGL.vert || HASERROR=1
@@ -187,6 +191,27 @@
 diff -b $BASEDIR/remap.invalid-spirv-2.out $TARGETDIR/remap.invalid-spirv-2.out || HASERROR=1
 
 #
+# Testing position Y inversion
+#
+echo "Testing position Y inversion"
+$EXE -H -e main -V -D -Od -H -i --iy hlsl.y-negate-1.vert > $TARGETDIR/hlsl.y-negate-1.vert.out
+diff -b $BASEDIR/hlsl.y-negate-1.vert.out $TARGETDIR/hlsl.y-negate-1.vert.out || HASERROR=1
+$EXE -H -e main -V -D -Od -H -i --invert-y hlsl.y-negate-2.vert > $TARGETDIR/hlsl.y-negate-2.vert.out
+diff -b $BASEDIR/hlsl.y-negate-2.vert.out $TARGETDIR/hlsl.y-negate-2.vert.out || HASERROR=1
+$EXE -H -e main -V -D -Od -H -i --invert-y hlsl.y-negate-3.vert > $TARGETDIR/hlsl.y-negate-3.vert.out
+diff -b $BASEDIR/hlsl.y-negate-3.vert.out $TARGETDIR/hlsl.y-negate-3.vert.out || HASERROR=1
+
+#
+# Testing hlsl_functionality1
+#
+$EXE -H -e main -D -Od -fhlsl_functionality1 hlsl.structbuffer.incdec.frag > \
+    $TARGETDIR/hlsl.structbuffer.incdec.frag.hlslfun1.out
+diff -b $BASEDIR/hlsl.structbuffer.incdec.frag.hlslfun1.out $TARGETDIR/hlsl.structbuffer.incdec.frag.hlslfun1.out || HASERROR=1
+$EXE -H -e main -D -Od -fhlsl_functionality1 hlsl.noSemantic.functionality1.comp > \
+    $TARGETDIR/hlsl.noSemantic.functionality1.comp.out
+diff -b $BASEDIR/hlsl.noSemantic.functionality1.comp.out $TARGETDIR/hlsl.noSemantic.functionality1.comp.out || HASERROR=1
+
+#
 # Final checking
 #
 if [ $HASERROR -eq 0 ]
diff --git a/Test/runtimeArray.vert b/Test/runtimeArray.vert
new file mode 100644
index 0000000..5961433
--- /dev/null
+++ b/Test/runtimeArray.vert
@@ -0,0 +1,108 @@
+#version 450 core

+

+buffer bn {

+    int a[];

+    float b[];

+} buf;

+

+uniform un {

+    int a[];

+    float b[];

+} ubuf;

+

+buffer bna {

+    int a[];

+    float b[];

+} bufa[4];

+

+uniform una {

+    int a[];

+    float b[];

+} ubufa[4];

+

+buffer abn {

+    int aba[];

+    float abb[];

+};

+

+uniform aun {

+    int aua[];

+    float aub[];

+};

+

+layout(binding=1)                             uniform samplerBuffer       uniformTexelBufferDyn[];

+layout(binding=2, r32f)                       uniform imageBuffer         storageTexelBufferDyn[];

+layout(binding=3)                             uniform uname { float a; }  uniformBuffer[];

+layout(binding=4)                             buffer  bname { float b; }  storageBuffer[];

+layout(binding=5)                             uniform sampler2D           sampledImage[];

+layout(binding=6, r32f)                       uniform image2D             storageImage[];

+layout(binding=8)                             uniform samplerBuffer       uniformTexelBuffer[];

+layout(binding=9, r32f)                       uniform imageBuffer         storageTexelBuffer[];

+

+int i;

+

+void main()

+{

+    ubuf.a[3];

+    ubuf.b[3];

+    buf.a[3];

+    buf.b[3];

+

+    ubufa[3].a[3];

+    ubufa[3].b[3];

+    bufa[3].a[3];

+    bufa[3].b[3];

+

+    aua[3];

+    aub[3];

+    aba[3];

+    abb[3];

+

+    ubuf.a[i];             // ERROR

+    ubuf.b[i];             // ERROR

+    buf.a[i];              // ERROR

+    buf.b[i];

+

+    ubuf.a.length();       // ERROR

+    ubuf.b.length();       // ERROR

+    buf.a.length();        // ERROR

+    buf.b.length();

+

+    ubufa[1].a[i];         // ERROR

+    ubufa[1].b[i];         // ERROR

+    bufa[1].a[i];          // ERROR

+    bufa[1].b[i];

+

+    ubufa[1].a.length();   // ERROR

+    ubufa[1].b.length();   // ERROR

+    bufa[1].a.length();    // ERROR

+    bufa[1].b.length();

+

+    aua[i];                // ERROR

+    aub[i];                // ERROR

+    aba[i];                // ERROR

+    abb[i];

+

+    aua.length();          // ERROR

+    aub.length();          // ERROR

+    aba.length();          // ERROR

+    abb.length();

+

+    uniformTexelBufferDyn[1];

+    storageTexelBufferDyn[1];

+    uniformBuffer[1];

+    storageBuffer[1];

+    sampledImage[1];

+    storageImage[1];

+    uniformTexelBuffer[1];

+    storageTexelBuffer[1];

+

+    uniformTexelBufferDyn[i];  // ERROR, need extension

+    storageTexelBufferDyn[i];  // ERROR, need extension

+    uniformBuffer[i];          // ERROR, need extension

+    storageBuffer[i];          // ERROR, need extension

+    sampledImage[i];           // ERROR, need extension

+    storageImage[i];           // ERROR, need extension

+    uniformTexelBuffer[i];     // ERROR, need extension

+    storageTexelBuffer[i];     // ERROR, need extension

+}

diff --git a/Test/spv.310.comp b/Test/spv.310.comp
index 6cbb043..53117dd 100644
--- a/Test/spv.310.comp
+++ b/Test/spv.310.comp
@@ -37,4 +37,6 @@
     outnames.va[gl_LocalInvocationID.x] = vec4(s);
     outnames.s = outbname.uns.length();
     gl_DeviceIndex;
+    memoryBarrierShared();
+    groupMemoryBarrier();
 }
diff --git a/Test/spv.accessChain.frag b/Test/spv.accessChain.frag
index c7f805b..3f4929b 100644
--- a/Test/spv.accessChain.frag
+++ b/Test/spv.accessChain.frag
@@ -74,6 +74,11 @@
     OutColor.zy[comp] += i.color.x;

 }

 

+void GetColor14(const S i, int comp)

+{ 

+    OutColor.zyx[comp] = i.color.x;

+}

+

 void main()

 {

     S s;

@@ -91,4 +96,5 @@
     GetColor11(s, u);

     GetColor12(s, u);

     GetColor13(s, u);

+    GetColor14(s, u);

 }

diff --git a/Test/spv.atomicInt64.comp b/Test/spv.atomicInt64.comp
index a56c7ec..baca4ce 100644
--- a/Test/spv.atomicInt64.comp
+++ b/Test/spv.atomicInt64.comp
@@ -22,7 +22,7 @@
 void main()

 {

     const int64_t  i64c = -24;

-    const uint64_t u64c = 0xF00000000F; 

+    const uint64_t u64c = 0xF00000000Ful; 

 

     // Test shader storage block

     int64_t  i64 = 0;

diff --git a/Test/spv.barrier.vert b/Test/spv.barrier.vert
new file mode 100644
index 0000000..c7828ce
--- /dev/null
+++ b/Test/spv.barrier.vert
@@ -0,0 +1,15 @@
+#version 450

+

+layout(location=0) out vec4 c0;

+layout(location=1) out vec4 c1;

+

+void main()

+{

+    c0 = vec4(1.0);

+    memoryBarrier();

+    c1 = vec4(1.0);

+    memoryBarrierBuffer();

+    ++c0;

+    memoryBarrierImage();

+    ++c0;

+}
\ No newline at end of file
diff --git a/Test/spv.builtInXFB.vert b/Test/spv.builtInXFB.vert
new file mode 100644
index 0000000..619bc1e
--- /dev/null
+++ b/Test/spv.builtInXFB.vert
@@ -0,0 +1,15 @@
+#version 450

+

+layout(xfb_buffer = 1, xfb_stride = 64) out;

+

+layout (xfb_buffer = 1, xfb_offset = 16) out gl_PerVertex

+{

+    float gl_PointSize;

+    vec4 gl_Position;

+};

+

+void main()

+{

+    gl_Position = vec4(1.0);

+    gl_PointSize = 2.0;

+}
\ No newline at end of file
diff --git a/Test/spv.constStruct.vert b/Test/spv.constStruct.vert
new file mode 100644
index 0000000..d5dd8da
--- /dev/null
+++ b/Test/spv.constStruct.vert
@@ -0,0 +1,22 @@
+#version 450

+

+precision highp float;

+

+struct U {

+    mat2 m;

+};

+

+struct T {

+    mat2 m;

+};

+

+struct S {

+    T t;

+    U u;

+};

+

+void main()

+{

+    S s1 = S(T(mat2(1.0)), U(mat2(1.0)));

+    S s2 = S(T(mat2(1.0)), U(mat2(1.0)));

+}

diff --git a/Test/spv.controlFlowAttributes.frag b/Test/spv.controlFlowAttributes.frag
new file mode 100644
index 0000000..6d90c0d
--- /dev/null
+++ b/Test/spv.controlFlowAttributes.frag
@@ -0,0 +1,39 @@
+#version 450
+
+#extension GL_EXT_control_flow_attributes : enable
+
+bool cond;
+
+void main()
+{
+        [[unroll]]                 for (int i = 0; i < 8; ++i) { }
+        [[loop]]                   for (;;) { }
+        [[dont_unroll]]            while(true) {  }
+        [[dependency_infinite]]    do {  } while(true);
+        [[dependency_length(1+3)]] for (int i = 0; i < 8; ++i) { }
+        [[flatten]]                if (cond) { } else { }
+        [[branch]]                 if (cond) cond = false;
+        [[dont_flatten]]           switch(3) {  }                      // dropped
+        [[dont_flatten]]           switch(3) { case 3: break; }
+
+        // warnings on all these
+        [[unroll(2)]]              for (int i = 0; i < 8; ++i) { }
+        [[dont_unroll(-2)]]        while(true) {  }
+        [[dependency_infinite(3)]] do {  } while(true);
+        [[dependency_length]]      for (int i = 0; i < 8; ++i) { }
+        [[flatten(3)]]             if (cond) { } else { }
+        [[branch(5.2)]]            if (cond) cond = false;
+        [[dont_flatten(3 + 7)]]    switch(3) { case 3: break; }
+
+        // other valid uses
+        [[ unroll, dont_unroll, dependency_length(2) ]]  while(cond) {  }
+        [ [ dont_flatten , branch ] ]                    switch(3) { case 3: break; }
+        [
+            // attribute
+            [
+                // here
+                flatten
+            ]
+        ]                       if (cond) { } else { }
+        [[ dependency_length(2), dependency_infinite ]]  while(cond) {  }
+}
diff --git a/Test/spv.explicittypes.frag b/Test/spv.explicittypes.frag
new file mode 100644
index 0000000..18c070a
--- /dev/null
+++ b/Test/spv.explicittypes.frag
@@ -0,0 +1,334 @@
+#version 450
+
+#extension GL_KHX_shader_explicit_arithmetic_types: enable
+#extension GL_KHX_shader_explicit_arithmetic_types_int8: require
+#extension GL_KHX_shader_explicit_arithmetic_types_int16: require
+#extension GL_KHX_shader_explicit_arithmetic_types_int32: require
+#extension GL_KHX_shader_explicit_arithmetic_types_int64: require
+#extension GL_KHX_shader_explicit_arithmetic_types_float16: require
+#extension GL_KHX_shader_explicit_arithmetic_types_float32: require
+#extension GL_KHX_shader_explicit_arithmetic_types_float64: require
+
+layout(binding = 0) uniform Uniforms
+{
+    uint index;
+};
+
+layout(std140, binding = 1) uniform Block
+{
+    int16_t   i16;
+    i16vec2   i16v2;
+    i16vec3   i16v3;
+    i16vec4   i16v4;
+    uint16_t  u16;
+    u16vec2   u16v2;
+    u16vec3   u16v3;
+    u16vec4   u16v4;
+
+    int32_t   i32;
+    i32vec2   i32v2;
+    i32vec3   i32v3;
+    i32vec4   i32v4;
+    uint32_t  u32;
+    u32vec2   u32v2;
+    u32vec3   u32v3;
+    u32vec4   u32v4;
+} block;
+
+void main()
+{
+}
+
+void literal()
+{
+    const int64_t i64Const[3] =
+    {
+        -0x1111111111111111l,   // Hex
+        -1l,                    // Dec
+        040000000000l,          // Oct
+    };
+
+    int64_t i64 = i64Const[index];
+
+    const uint64_t u64Const[] =
+    {
+        0xFFFFFFFFFFFFFFFFul,   // Hex
+        4294967296UL,           // Dec
+        077777777777ul,         // Oct
+    };
+
+    uint64_t u64 = u64Const[index];
+
+    const int32_t i32Const[3] =
+    {
+        -0x11111111,           // Hex
+        -1,                    // Dec
+        04000000000,           // Oct
+    };
+
+    int32_t i32 = i32Const[index];
+
+    const uint32_t u32Const[] =
+    {
+        0xFFFFFFFF,             // Hex
+        4294967295,             // Dec
+        017777777777,           // Oct
+    };
+
+    uint32_t u32 = u32Const[index];
+
+    const int16_t i16Const[3] =
+    {
+        int16_t(-0x1111),           // Hex
+        int16_t(-1),                // Dec
+        int16_t(040000),            // Oct
+    };
+
+    int16_t i16 = i16Const[index];
+
+    const uint16_t u16Const[] =
+    {
+        uint16_t(0xFFFF),             // Hex
+        uint16_t(65535),              // Dec
+        uint16_t(077777),             // Oct
+    };
+
+    uint16_t u16 = u16Const[index];
+
+    const int8_t i8Const[3] =
+    {
+        int8_t(-0x11),           // Hex
+        int8_t(-1),              // Dec
+        int8_t(0400),            // Oct
+    };
+
+    int8_t i8 = i8Const[index];
+
+    const uint8_t u8Const[] =
+    {
+        uint8_t(0xFF),             // Hex
+        uint8_t(255),              // Dec
+        uint8_t(0177),             // Oct
+    };
+
+    uint8_t u8 = u8Const[index];
+}
+
+void typeCast8()
+{
+    i8vec2 i8v;
+    u8vec2 u8v;
+    i16vec2 i16v;
+    u16vec2 u16v;
+    i32vec2 i32v;
+    u32vec2 u32v;
+    i64vec2 i64v;
+    u64vec2 u64v;
+    f16vec2 f16v;
+    f32vec2 f32v;
+    f64vec2 f64v;
+    bvec2   bv;
+
+    u8v = i8v;      // int8_t  ->  uint8_t
+    i16v = i8v;     // int8_t  ->   int16_t
+    i16v = u8v;     // uint8_t ->   int16_t
+    i32v = i8v;     // int8_t  ->   int32_t
+    i32v = u8v;     // uint8_t ->   int32_t
+    u32v = i8v;     // int8_t  ->  uint32_t
+    i64v = i8v;     // int8_t  ->   int64_t
+    u64v = i8v;     // int8_t  ->  uint64_t
+    u32v = u8v;     // uint8_t ->  uint32_t
+    i64v = u8v;     // uint8_t ->   int64_t
+    u64v = u8v;     // uint8_t ->  uint64_t
+    f16v = i8v;     // int8_t  ->  float16_t
+    f32v = i8v;     // int8_t  ->  float32_t
+    f64v = i8v;     // int8_t  ->  float64_t
+    f16v = u8v;     // uint8_t ->  float16_t
+    f32v = u8v;     // uint8_t ->  float32_t
+    f64v = u8v;     // uint8_t ->  float64_t
+
+    i8v =  i8vec2(u8v);       // uint8_t  ->   int8_t
+    i16v = i16vec2(i8v);      // int8_t   ->   int16_t
+    i16v = i16vec2(u8v);      // uint8_t  ->   int16_t
+    i32v = i32vec2(i8v);      // int8_t   ->   int32_t
+    i32v = i32vec2(u8v);      // uint8_t  ->   int32_t
+    i64v = i64vec2(i8v);      // int8_t   ->   int64_t
+    u64v = i64vec2(i8v);      // int8_t   ->  uint64_t
+    u16v = u16vec2(i8v);      // int8_t   ->  uint16_t
+    u16v = u16vec2(u8v);      // uint8_t  ->  uint16_t
+    u32v = u32vec2(u8v);      // uint8_t  ->  uint32_t
+    i64v = i64vec2(u8v);      // uint8_t  ->   int64_t
+    u64v = i64vec2(u8v);      // uint8_t  ->  uint64_t
+    f16v = f16vec2(i8v);      // int8_t   ->  float16_t
+    f32v = f32vec2(i8v);      // int8_t   ->  float32_t
+    f64v = f64vec2(i8v);      // int8_t   ->  float64_t
+    f16v = f16vec2(u8v);      // uint8_t  ->  float16_t
+    f32v = f32vec2(u8v);      // uint8_t  ->  float32_t
+    f64v = f64vec2(u8v);      // uint8_t  ->  float64_t
+
+    i8v = i8vec2(bv);       // bool     ->   int8
+    u8v = u8vec2(bv);       // bool     ->   uint8
+    bv  = bvec2(i8v);       // int8    ->   bool
+    bv  = bvec2(u8v);       // uint8   ->   bool
+}
+
+void typeCast16()
+{
+    i8vec2 i8v;
+    u8vec2 u8v;
+    i16vec2 i16v;
+    u16vec2 u16v;
+    i32vec2 i32v;
+    u32vec2 u32v;
+    i64vec2 i64v;
+    u64vec2 u64v;
+    f16vec2 f16v;
+    f32vec2 f32v;
+    f64vec2 f64v;
+    bvec2   bv;
+
+    i32v = i16v;     // int16_t  ->   int32_t
+    i32v = u16v;     // uint16_t ->   int32_t
+    u16v = i16v;     // int16_t  ->  uint16_t
+    u32v = i16v;     // int16_t  ->  uint32_t
+    i64v = i16v;     // int16_t  ->   int64_t
+    u64v = i16v;     // int16_t  ->  uint64_t
+    u32v = u16v;     // uint16_t ->  uint32_t
+    i64v = u16v;     // uint16_t ->   int64_t
+    u64v = u16v;     // uint16_t ->  uint64_t
+    f16v = i16v;     // int16_t  ->  float16_t
+    f32v = i16v;     // int16_t  ->  float32_t
+    f64v = i16v;     // int16_t  ->  float64_t
+    f16v = u16v;     // uint16_t ->  float16_t
+    f32v = u16v;     // uint16_t ->  float32_t
+    f64v = u16v;     // uint16_t ->  float64_t
+
+    i32v = i32vec2(i16v);     // int16_t  ->   int32_t
+    i32v = i32vec2(u16v);     // uint16_t ->   int32_t
+    u16v = u16vec2(i16v);     // int16_t  ->  uint16_t
+    u32v = u32vec2(i16v);     // int16_t  ->  uint32_t
+    i64v = i64vec2(i16v);     // int16_t  ->   int64_t
+    u64v = i64vec2(i16v);     // int16_t  ->  uint64_t
+    u32v = u32vec2(u16v);     // uint16_t ->  uint32_t
+    i64v = i64vec2(u16v);     // uint16_t ->   int64_t
+    u64v = i64vec2(u16v);     // uint16_t ->  uint64_t
+    f16v = f16vec2(i16v);     // int16_t  ->  float16_t
+    f32v = f32vec2(i16v);     // int16_t  ->  float32_t
+    f64v = f64vec2(i16v);     // int16_t  ->  float64_t
+    f16v = f16vec2(u16v);     // uint16_t ->  float16_t
+    f32v = f32vec2(u16v);     // uint16_t ->  float32_t
+    f64v = f64vec2(u16v);     // uint16_t ->  float64_t
+
+    i8v  = i8vec2(i16v);      // int16_t  ->   int8_t
+    i8v  = i8vec2(u16v);      // uint16_t ->   int8_t
+    u8v  = u8vec2(i16v);      // int16_t  ->  uint8_t
+    u8v  = u8vec2(u16v);      // uint16_t ->  uint8_t
+    i16v = u8vec2(u16v);      // uint16_t ->   int16_t
+    i16v = i16vec2(bv);       // bool     ->   int16
+    u16v = u16vec2(bv);       // bool     ->   uint16
+    bv   = bvec2(i16v);       // int16    ->   bool
+    bv   = bvec2(u16v);       // uint16   ->   bool
+}
+
+void typeCast32()
+{
+    i8vec2 i8v;
+    u8vec2 u8v;
+    i16vec2 i16v;
+    u16vec2 u16v;
+    i32vec2 i32v;
+    u32vec2 u32v;
+    i64vec2 i64v;
+    u64vec2 u64v;
+    f16vec2 f16v;
+    f32vec2 f32v;
+    f64vec2 f64v;
+    bvec2   bv;
+
+    u32v = i32v;     // int32_t  ->  uint32_t
+    i64v = i32v;     // int32_t  ->   int64_t
+    u64v = i32v;     // int32_t  ->  uint64_t
+    i64v = u32v;     // uint32_t ->   int64_t
+    u64v = u32v;     // uint32_t ->  uint64_t
+    f32v = i32v;     // int32_t  ->  float32_t
+    f64v = i32v;     // int32_t  ->  float64_t
+    f32v = u32v;     // uint32_t ->  float32_t
+    f64v = u32v;     // uint32_t ->  float64_t
+
+    i8v =  i8vec2(i32v);       // int32_t   ->   int8_t
+    i8v =  i8vec2(u32v);       // uint32_t  ->   int8_t
+    i16v = i16vec2(i32v);      // int32_t   ->   int16_t
+    i16v = i16vec2(u32v);      // uint32_t  ->   int16_t
+    i32v = i32vec2(i32v);      // int32_t   ->   int32_t
+    i32v = i32vec2(u32v);      // uint32_t  ->   int32_t
+    i64v = i64vec2(i32v);      // int32_t   ->   int64_t
+	i64v = i64vec2(u32v);      // uint32_t  ->   int64_t
+	u8v =  u8vec2(i32v);       // int32_t   ->   uint8_t
+    u8v =  u8vec2(u32v);       // uint32_t  ->   uint8_t
+    u16v = u16vec2(i32v);      // int32_t   ->   uint16_t
+    u16v = u16vec2(u32v);      // uint32_t  ->   uint16_t
+    u32v = u32vec2(i32v);      // int32_t   ->   uint32_t
+    u32v = u32vec2(u32v);      // uint32_t  ->   uint32_t
+    u64v = u64vec2(i32v);      // int32_t   ->   uint64_t
+    u64v = u64vec2(u32v);      // uint32_t  ->   uint64_t
+
+    f16v = f16vec2(i32v);      // int32_t   ->  float16_t
+    f32v = f32vec2(i32v);      // int32_t   ->  float32_t
+    f64v = f64vec2(i32v);      // int32_t   ->  float64_t
+    f16v = f16vec2(u32v);      // uint32_t  ->  float16_t
+    f32v = f32vec2(u32v);      // uint32_t  ->  float32_t
+    f64v = f64vec2(u32v);      // uint32_t  ->  float64_t
+
+    i32v = i32vec2(bv);       // bool     ->   int32
+    u32v = u32vec2(bv);       // bool     ->   uint32
+    bv   = bvec2(i32v);       // int32    ->   bool
+    bv   = bvec2(u32v);       // uint32   ->   bool
+}
+
+void typeCast64()
+{
+    i8vec2 i8v;
+    u8vec2 u8v;
+    i16vec2 i16v;
+    u16vec2 u16v;
+    i32vec2 i32v;
+    u32vec2 u32v;
+    i64vec2 i64v;
+    u64vec2 u64v;
+    f16vec2 f16v;
+    f32vec2 f32v;
+    f64vec2 f64v;
+    bvec2   bv;
+
+    u64v = i64v;     // int64_t  ->  uint64_t
+    f64v = i64v;     // int64_t  ->  float64_t
+    f64v = u64v;     // uint64_t ->  float64_t
+
+    i8v =  i8vec2(i64v);       // int64_t   ->   int8_t
+    i8v =  i8vec2(u64v);       // uint64_t  ->   int8_t
+    i16v = i16vec2(i64v);      // int64_t   ->   int16_t
+    i16v = i16vec2(u64v);      // uint64_t  ->   int16_t
+    i32v = i32vec2(i64v);      // int64_t   ->   int32_t
+    i32v = i32vec2(u64v);      // uint64_t  ->   int32_t
+	i64v = i64vec2(u64v);      // uint64_t  ->   int64_t
+	u8v =  u8vec2(i64v);       // int64_t   ->   uint8_t
+    u8v =  u8vec2(u64v);       // uint64_t  ->   uint8_t
+    u16v = u16vec2(i64v);      // int64_t   ->   uint16_t
+    u16v = u16vec2(u64v);      // uint64_t  ->   uint16_t
+    u32v = u32vec2(i64v);      // int64_t   ->   uint32_t
+    u32v = u32vec2(u64v);      // uint64_t  ->   uint32_t
+    u64v = u64vec2(i64v);      // int64_t   ->   uint64_t
+    u64v = u64vec2(u64v);      // uint64_t  ->   uint64_t
+
+    f16v = f16vec2(i64v);      // int64_t   ->  float16_t
+    f32v = f32vec2(i64v);      // int64_t   ->  float32_t
+    f64v = f64vec2(i64v);      // int64_t   ->  float64_t
+    f16v = f16vec2(u64v);      // uint64_t  ->  float16_t
+    f32v = f32vec2(u64v);      // uint64_t  ->  float32_t
+    f64v = f64vec2(u64v);      // uint64_t  ->  float64_t
+
+    i64v = i64vec2(bv);       // bool     ->   int64
+    u64v = u64vec2(bv);       // bool     ->   uint64
+    bv   = bvec2(i64v);       // int64    ->   bool
+    bv   = bvec2(u64v);       // uint64   ->   bool
+}
diff --git a/Test/spv.float16Fetch.frag b/Test/spv.float16Fetch.frag
new file mode 100644
index 0000000..b1ba98c
--- /dev/null
+++ b/Test/spv.float16Fetch.frag
@@ -0,0 +1,1273 @@
+#version 450 core

+

+#extension GL_ARB_sparse_texture2: enable

+#extension GL_ARB_sparse_texture_clamp: enable

+#extension GL_AMD_gpu_shader_half_float: enable

+#extension GL_AMD_gpu_shader_half_float_fetch: enable

+#extension GL_AMD_texture_gather_bias_lod: enable

+

+layout(set = 0, binding =  0) uniform f16sampler1D            s1D;

+layout(set = 0, binding =  1) uniform f16sampler2D            s2D;

+layout(set = 0, binding =  2) uniform f16sampler3D            s3D;

+layout(set = 0, binding =  3) uniform f16sampler2DRect        s2DRect;

+layout(set = 0, binding =  4) uniform f16samplerCube          sCube;

+layout(set = 0, binding =  5) uniform f16samplerBuffer        sBuffer;

+layout(set = 0, binding =  6) uniform f16sampler2DMS          s2DMS;

+layout(set = 0, binding =  7) uniform f16sampler1DArray       s1DArray;

+layout(set = 0, binding =  8) uniform f16sampler2DArray       s2DArray;

+layout(set = 0, binding =  9) uniform f16samplerCubeArray     sCubeArray;

+layout(set = 0, binding = 10) uniform f16sampler2DMSArray     s2DMSArray;

+

+layout(set = 0, binding = 11) uniform f16sampler1DShadow          s1DShadow;

+layout(set = 0, binding = 12) uniform f16sampler2DShadow          s2DShadow;

+layout(set = 0, binding = 13) uniform f16sampler2DRectShadow      s2DRectShadow;

+layout(set = 0, binding = 14) uniform f16samplerCubeShadow        sCubeShadow;

+layout(set = 0, binding = 15) uniform f16sampler1DArrayShadow     s1DArrayShadow;

+layout(set = 0, binding = 16) uniform f16sampler2DArrayShadow     s2DArrayShadow;

+layout(set = 0, binding = 17) uniform f16samplerCubeArrayShadow   sCubeArrayShadow;

+

+layout(set = 1, binding =  0) layout(rgba16f) uniform f16image1D          i1D;

+layout(set = 1, binding =  1) layout(rgba16f) uniform f16image2D          i2D;

+layout(set = 1, binding =  2) layout(rgba16f) uniform f16image3D          i3D;

+layout(set = 1, binding =  3) layout(rgba16f) uniform f16image2DRect      i2DRect;

+layout(set = 1, binding =  4) layout(rgba16f) uniform f16imageCube        iCube;

+layout(set = 1, binding =  5) layout(rgba16f) uniform f16image1DArray     i1DArray;

+layout(set = 1, binding =  6) layout(rgba16f) uniform f16image2DArray     i2DArray;

+layout(set = 1, binding =  7) layout(rgba16f) uniform f16imageCubeArray   iCubeArray;

+layout(set = 1, binding =  8) layout(rgba16f) uniform f16imageBuffer      iBuffer;

+layout(set = 1, binding =  9) layout(rgba16f) uniform f16image2DMS        i2DMS;

+layout(set = 1, binding = 10) layout(rgba16f) uniform f16image2DMSArray   i2DMSArray;

+

+layout(set = 2, binding =  0) uniform f16texture1D           t1D;

+layout(set = 2, binding =  1) uniform f16texture2D           t2D;

+layout(set = 2, binding =  2) uniform f16texture3D           t3D;

+layout(set = 2, binding =  3) uniform f16texture2DRect       t2DRect;

+layout(set = 2, binding =  4) uniform f16textureCube         tCube;

+layout(set = 2, binding =  5) uniform f16texture1DArray      t1DArray;

+layout(set = 2, binding =  6) uniform f16texture2DArray      t2DArray;

+layout(set = 2, binding =  7) uniform f16textureCubeArray    tCubeArray;

+layout(set = 2, binding =  8) uniform f16textureBuffer       tBuffer;

+layout(set = 2, binding =  9) uniform f16texture2DMS         t2DMS;

+layout(set = 2, binding = 10) uniform f16texture2DMSArray    t2DMSArray;

+

+layout(set = 2, binding = 11) uniform sampler s;

+layout(set = 2, binding = 12) uniform samplerShadow sShadow;

+

+layout(set = 3, binding = 0, input_attachment_index = 0) uniform f16subpassInput   subpass;

+layout(set = 3, binding = 1, input_attachment_index = 0) uniform f16subpassInputMS subpassMS;

+

+layout(location =  0) in float c1;

+layout(location =  1) in vec2  c2;

+layout(location =  2) in vec3  c3;

+layout(location =  3) in vec4  c4;

+

+layout(location =  4) in float compare;

+layout(location =  5) in float lod;

+layout(location =  6) in float bias;

+layout(location =  7) in float lodClamp;

+

+layout(location =  8) in float dPdxy1;

+layout(location =  9) in vec2  dPdxy2;

+layout(location = 10) in vec3  dPdxy3;

+

+layout(location = 11) in float16_t f16c1;

+layout(location = 12) in f16vec2   f16c2;

+layout(location = 13) in f16vec3   f16c3;

+layout(location = 14) in f16vec4   f16c4;

+

+layout(location = 15) in float16_t f16lod;

+layout(location = 16) in float16_t f16bias;

+layout(location = 17) in float16_t f16lodClamp;

+

+layout(location = 18) in float16_t f16dPdxy1;

+layout(location = 19) in f16vec2   f16dPdxy2;

+layout(location = 20) in f16vec3   f16dPdxy3;

+

+const int   offset1 = 1;

+const ivec2 offset2 = ivec2(1);

+const ivec3 offset3 = ivec3(1);

+const ivec2 offsets[4] = { offset2, offset2, offset2, offset2 };

+

+layout(location = 0) out vec4 fragColor;

+

+f16vec4 testTexture()

+{

+    f16vec4 texel = f16vec4(0.0hf);

+

+    texel   += texture(s1D, c1);

+    texel   += texture(s1D, f16c1, f16bias);

+    texel   += texture(s2D, c2);

+    texel   += texture(s2D, f16c2, f16bias);

+    texel   += texture(s3D, c3);

+    texel   += texture(s3D, f16c3, f16bias);

+    texel   += texture(sCube, c3);

+    texel   += texture(sCube, f16c3, f16bias);

+    texel.x += texture(s1DShadow, c3);

+    texel.x += texture(s1DShadow, f16c2, compare, f16bias);

+    texel.x += texture(s2DShadow, c3);

+    texel.x += texture(s2DShadow, f16c2, compare, f16bias);

+    texel.x += texture(sCubeShadow, c4);

+    texel.x += texture(sCubeShadow, f16c3, compare, f16bias);

+    texel   += texture(s1DArray, c2);

+    texel   += texture(s1DArray, f16c2, f16bias);

+    texel   += texture(s2DArray, c3);

+    texel   += texture(s2DArray, f16c3, f16bias);

+    texel   += texture(sCubeArray, c4);

+    texel   += texture(sCubeArray, f16c4, f16bias);

+    texel.x += texture(s1DArrayShadow, c3);

+    texel.x += texture(s1DArrayShadow, f16c2, compare, f16bias);

+    texel.x += texture(s2DArrayShadow, c4);

+    texel.x += texture(s2DArrayShadow, f16c3, compare);

+    texel   += texture(s2DRect, c2);

+    texel   += texture(s2DRect, f16c2);

+    texel.x += texture(s2DRectShadow, c3);

+    texel.x += texture(s2DRectShadow, f16c2, compare);

+    texel.x += texture(sCubeArrayShadow, c4, compare);

+    texel.x += texture(sCubeArrayShadow, f16c4, compare);

+

+    return texel;

+}

+

+f16vec4 testTextureProj()

+{

+    f16vec4 texel = f16vec4(0.0hf);

+

+    texel   += textureProj(s1D, c2);

+    texel   += textureProj(s1D, f16c2, f16bias);

+    texel   += textureProj(s1D, c4);

+    texel   += textureProj(s1D, f16c4, f16bias);

+    texel   += textureProj(s2D, c3);

+    texel   += textureProj(s2D, f16c3, f16bias);

+    texel   += textureProj(s2D, c4);

+    texel   += textureProj(s2D, f16c4, f16bias);

+    texel   += textureProj(s3D, c4);

+    texel   += textureProj(s3D, f16c4, f16bias);

+    texel.x += textureProj(s1DShadow, c4);

+    texel.x += textureProj(s1DShadow, f16c3, compare, f16bias);

+    texel.x += textureProj(s2DShadow, c4);

+    texel.x += textureProj(s2DShadow, f16c3, compare, f16bias);

+    texel   += textureProj(s2DRect, c3);

+    texel   += textureProj(s2DRect, f16c3);

+    texel   += textureProj(s2DRect, c4);

+    texel   += textureProj(s2DRect, f16c4);

+    texel.x += textureProj(s2DRectShadow, c4);

+    texel.x += textureProj(s2DRectShadow, f16c3, compare);

+

+    return texel;

+}

+

+f16vec4 testTextureLod()

+{

+    f16vec4 texel = f16vec4(0.0hf);

+

+    texel   += textureLod(s1D, c1, lod);

+    texel   += textureLod(s1D, f16c1, f16lod);

+    texel   += textureLod(s2D, c2, lod);

+    texel   += textureLod(s2D, f16c2, f16lod);

+    texel   += textureLod(s3D, c3, lod);

+    texel   += textureLod(s3D, f16c3, f16lod);

+    texel   += textureLod(sCube, c3, lod);

+    texel   += textureLod(sCube, f16c3, f16lod);

+    texel.x += textureLod(s1DShadow, c3, lod);

+    texel.x += textureLod(s1DShadow, f16c2, compare, f16lod);

+    texel.x += textureLod(s2DShadow, c3, lod);

+    texel.x += textureLod(s2DShadow, f16c2, compare, f16lod);

+    texel   += textureLod(s1DArray, c2, lod);

+    texel   += textureLod(s1DArray, f16c2, f16lod);

+    texel   += textureLod(s2DArray, c3, lod);

+    texel   += textureLod(s2DArray, f16c3, f16lod);

+    texel.x += textureLod(s1DArrayShadow, c3, lod);

+    texel.x += textureLod(s1DArrayShadow, f16c2, compare, f16lod);

+    texel   += textureLod(sCubeArray, c4, lod);

+    texel   += textureLod(sCubeArray, f16c4, f16lod);

+

+    return texel;

+}

+

+f16vec4 testTextureOffset()

+{

+    f16vec4 texel = f16vec4(0.0hf);

+

+    texel   += textureOffset(s1D, c1, offset1);

+    texel   += textureOffset(s1D, f16c1, offset1, f16bias);

+    texel   += textureOffset(s2D, c2, offset2);

+    texel   += textureOffset(s2D, f16c2, offset2, f16bias);

+    texel   += textureOffset(s3D, c3, offset3);

+    texel   += textureOffset(s3D, f16c3, offset3, f16bias);

+    texel   += textureOffset(s2DRect, c2, offset2);

+    texel   += textureOffset(s2DRect, f16c2, offset2);

+    texel.x += textureOffset(s2DRectShadow, c3, offset2);

+    texel.x += textureOffset(s2DRectShadow, f16c2, compare, offset2);

+    texel.x += textureOffset(s1DShadow, c3, offset1);

+    texel.x += textureOffset(s1DShadow, f16c2, compare, offset1, f16bias);

+    texel.x += textureOffset(s2DShadow, c3, offset2);

+    texel.x += textureOffset(s2DShadow, f16c2, compare, offset2, f16bias);

+    texel   += textureOffset(s1DArray, c2, offset1);

+    texel   += textureOffset(s1DArray, f16c2, offset1, f16bias);

+    texel   += textureOffset(s2DArray, c3, offset2);

+    texel   += textureOffset(s2DArray, f16c3, offset2, f16bias);

+    texel.x += textureOffset(s1DArrayShadow, c3, offset1);

+    texel.x += textureOffset(s1DArrayShadow, f16c2, compare, offset1, f16bias);

+    texel.x += textureOffset(s2DArrayShadow, c4, offset2);

+    texel.x += textureOffset(s2DArrayShadow, f16c3, compare, offset2);

+

+    return texel;

+}

+

+f16vec4 testTextureProjOffset()

+{

+    f16vec4 texel = f16vec4(0.0hf);

+

+    texel   += textureProjOffset(s1D, c2, offset1);

+    texel   += textureProjOffset(s1D, f16c2, offset1, f16bias);

+    texel   += textureProjOffset(s1D, c4, offset1);

+    texel   += textureProjOffset(s1D, f16c4, offset1, f16bias);

+    texel   += textureProjOffset(s2D, c3, offset2);

+    texel   += textureProjOffset(s2D, f16c3, offset2, f16bias);

+    texel   += textureProjOffset(s2D, c4, offset2);

+    texel   += textureProjOffset(s2D, f16c4, offset2, f16bias);

+    texel   += textureProjOffset(s3D, c4, offset3);

+    texel   += textureProjOffset(s3D, f16c4, offset3, f16bias);

+    texel   += textureProjOffset(s2DRect, c3, offset2);

+    texel   += textureProjOffset(s2DRect, f16c3, offset2);

+    texel   += textureProjOffset(s2DRect, c4, offset2);

+    texel   += textureProjOffset(s2DRect, f16c4, offset2);

+    texel.x += textureProjOffset(s2DRectShadow, c4, offset2);

+    texel.x += textureProjOffset(s2DRectShadow, f16c3, compare, offset2);

+    texel.x += textureProjOffset(s1DShadow, c4, offset1);

+    texel.x += textureProjOffset(s1DShadow, f16c3, compare, offset1, f16bias);

+    texel.x += textureProjOffset(s2DShadow, c4, offset2);

+    texel.x += textureProjOffset(s2DShadow, f16c3, compare, offset2, f16bias); 

+

+    return texel;

+}

+

+f16vec4 testTextureLodOffset()

+{

+    f16vec4 texel = f16vec4(0.0hf);

+

+    texel   += textureLodOffset(s1D, c1, lod, offset1);

+    texel   += textureLodOffset(s1D, f16c1, f16lod, offset1);

+    texel   += textureLodOffset(s2D, c2, lod, offset2);

+    texel   += textureLodOffset(s2D, f16c2, f16lod, offset2);

+    texel   += textureLodOffset(s3D, c3, lod, offset3);

+    texel   += textureLodOffset(s3D, f16c3, f16lod, offset3);

+    texel.x += textureLodOffset(s1DShadow, c3, lod, offset1);

+    texel.x += textureLodOffset(s1DShadow, f16c2, compare, f16lod, offset1);

+    texel.x += textureLodOffset(s2DShadow, c3, lod, offset2);

+    texel.x += textureLodOffset(s2DShadow, f16c2, compare, f16lod, offset2);

+    texel   += textureLodOffset(s1DArray, c2, lod, offset1);

+    texel   += textureLodOffset(s1DArray, f16c2, f16lod, offset1);

+    texel   += textureLodOffset(s2DArray, c3, lod, offset2);

+    texel   += textureLodOffset(s2DArray, f16c3, f16lod, offset2);

+    texel.x += textureLodOffset(s1DArrayShadow, c3, lod, offset1);

+    texel.x += textureLodOffset(s1DArrayShadow, f16c2, compare, f16lod, offset1);

+

+    return texel;

+}

+

+f16vec4 testTextureProjLodOffset()

+{

+    f16vec4 texel = f16vec4(0.0hf);

+

+    texel   += textureProjLodOffset(s1D, c2, lod, offset1);

+    texel   += textureProjLodOffset(s1D, f16c2, f16lod, offset1);

+    texel   += textureProjLodOffset(s1D, c4, lod, offset1);

+    texel   += textureProjLodOffset(s1D, f16c4, f16lod, offset1);

+    texel   += textureProjLodOffset(s2D, c3, lod, offset2);

+    texel   += textureProjLodOffset(s2D, f16c3, f16lod, offset2);

+    texel   += textureProjLodOffset(s2D, c4, lod, offset2);

+    texel   += textureProjLodOffset(s2D, f16c4, f16lod, offset2);

+    texel   += textureProjLodOffset(s3D, c4, lod, offset3);

+    texel   += textureProjLodOffset(s3D, f16c4, f16lod, offset3);

+    texel.x += textureProjLodOffset(s1DShadow, c4, lod, offset1);

+    texel.x += textureProjLodOffset(s1DShadow, f16c3, compare, f16lod, offset1);

+    texel.x += textureProjLodOffset(s2DShadow, c4, lod, offset2);

+    texel.x += textureProjLodOffset(s2DShadow, f16c3, compare, f16lod, offset2);

+

+    return texel;

+}

+

+f16vec4 testTexelFetch()

+{

+    f16vec4 texel = f16vec4(0.0hf);

+

+    texel   += texelFetch(s1D, int(c1), int(lod));

+    texel   += texelFetch(s2D, ivec2(c2), int(lod));

+    texel   += texelFetch(s3D, ivec3(c3), int(lod));

+    texel   += texelFetch(s2DRect, ivec2(c2));

+    texel   += texelFetch(s1DArray, ivec2(c2), int(lod));

+    texel   += texelFetch(s2DArray, ivec3(c3), int(lod));

+    texel   += texelFetch(sBuffer, int(c1));

+    texel   += texelFetch(s2DMS, ivec2(c2), 1);

+    texel   += texelFetch(s2DMSArray, ivec3(c3), 2);

+

+    return texel;

+}

+

+f16vec4 testTexelFetchOffset()

+{

+    f16vec4 texel = f16vec4(0.0hf);

+

+    texel   += texelFetchOffset(s1D, int(c1), int(lod), offset1);

+    texel   += texelFetchOffset(s2D, ivec2(c2), int(lod), offset2);

+    texel   += texelFetchOffset(s3D, ivec3(c3), int(lod), offset3);

+    texel   += texelFetchOffset(s2DRect, ivec2(c2), offset2);

+    texel   += texelFetchOffset(s1DArray, ivec2(c2), int(lod), offset1);

+    texel   += texelFetchOffset(s2DArray, ivec3(c3), int(lod), offset2);

+

+    return texel;

+}

+

+f16vec4 testTextureGrad()

+{

+    f16vec4 texel = f16vec4(0.0hf);

+

+    texel   += textureGrad(s1D, c1, dPdxy1, dPdxy1);

+    texel   += textureGrad(s1D, f16c1, f16dPdxy1, f16dPdxy1);

+    texel   += textureGrad(s2D, c2, dPdxy2, dPdxy2);

+    texel   += textureGrad(s2D, f16c2, f16dPdxy2, f16dPdxy2);

+    texel   += textureGrad(s3D, c3, dPdxy3, dPdxy3);

+    texel   += textureGrad(s3D, f16c3, f16dPdxy3, f16dPdxy3);

+    texel   += textureGrad(sCube, c3, dPdxy3, dPdxy3);

+    texel   += textureGrad(sCube, f16c3, f16dPdxy3, f16dPdxy3);

+    texel   += textureGrad(s2DRect, c2, dPdxy2, dPdxy2);

+    texel   += textureGrad(s2DRect, f16c2, f16dPdxy2, f16dPdxy2);

+    texel.x += textureGrad(s2DRectShadow, c3, dPdxy2, dPdxy2);

+    texel.x += textureGrad(s2DRectShadow, f16c2, compare, f16dPdxy2, f16dPdxy2);

+    texel.x += textureGrad(s1DShadow, c3, dPdxy1, dPdxy1);

+    texel.x += textureGrad(s1DShadow, f16c2, compare, f16dPdxy1, f16dPdxy1);

+    texel.x += textureGrad(s2DShadow, c3, dPdxy2, dPdxy2);

+    texel.x += textureGrad(s2DShadow, f16c2, compare, f16dPdxy2, f16dPdxy2);

+    texel.x += textureGrad(sCubeShadow, c4, dPdxy3, dPdxy3);

+    texel.x += textureGrad(sCubeShadow, f16c3, compare, f16dPdxy3, f16dPdxy3);

+    texel   += textureGrad(s1DArray, c2, dPdxy1, dPdxy1);

+    texel   += textureGrad(s1DArray, f16c2, f16dPdxy1, f16dPdxy1);

+    texel   += textureGrad(s2DArray, c3, dPdxy2, dPdxy2);

+    texel   += textureGrad(s2DArray, f16c3, f16dPdxy2, f16dPdxy2);

+    texel.x += textureGrad(s1DArrayShadow, c3, dPdxy1, dPdxy1);

+    texel.x += textureGrad(s1DArrayShadow, f16c2, compare, f16dPdxy1, f16dPdxy1);

+    texel.x += textureGrad(s2DArrayShadow, c4, dPdxy2, dPdxy2);

+    texel.x += textureGrad(s2DArrayShadow, f16c3, compare, f16dPdxy2, f16dPdxy2);

+    texel   += textureGrad(sCubeArray, c4, dPdxy3, dPdxy3);

+    texel   += textureGrad(sCubeArray, f16c4, f16dPdxy3, f16dPdxy3);

+

+    return texel;

+}

+

+f16vec4 testTextureGradOffset()

+{

+    f16vec4 texel = f16vec4(0.0hf);

+

+    texel   += textureGradOffset(s1D, c1, dPdxy1, dPdxy1, offset1);

+    texel   += textureGradOffset(s1D, f16c1, f16dPdxy1, f16dPdxy1, offset1);

+    texel   += textureGradOffset(s2D, c2, dPdxy2, dPdxy2, offset2);

+    texel   += textureGradOffset(s2D, f16c2, f16dPdxy2, f16dPdxy2, offset2);

+    texel   += textureGradOffset(s3D, c3, dPdxy3, dPdxy3, offset3);

+    texel   += textureGradOffset(s3D, f16c3, f16dPdxy3, f16dPdxy3, offset3);

+    texel   += textureGradOffset(s2DRect, c2, dPdxy2, dPdxy2, offset2);

+    texel   += textureGradOffset(s2DRect, f16c2, f16dPdxy2, f16dPdxy2, offset2);

+    texel.x += textureGradOffset(s2DRectShadow, c3, dPdxy2, dPdxy2, offset2);

+    texel.x += textureGradOffset(s2DRectShadow, f16c2, compare, f16dPdxy2, f16dPdxy2, offset2);

+    texel.x += textureGradOffset(s1DShadow, c3, dPdxy1, dPdxy1, offset1);

+    texel.x += textureGradOffset(s1DShadow, f16c2, compare, f16dPdxy1, f16dPdxy1, offset1);

+    texel.x += textureGradOffset(s2DShadow, c3, dPdxy2, dPdxy2, offset2);

+    texel.x += textureGradOffset(s2DShadow, f16c2, compare, f16dPdxy2, f16dPdxy2, offset2);

+    texel   += textureGradOffset(s1DArray, c2, dPdxy1, dPdxy1, offset1);

+    texel   += textureGradOffset(s1DArray, f16c2, f16dPdxy1, f16dPdxy1, offset1);

+    texel   += textureGradOffset(s2DArray, c3, dPdxy2, dPdxy2, offset2);

+    texel   += textureGradOffset(s2DArray, f16c3, f16dPdxy2, f16dPdxy2, offset2);

+    texel.x += textureGradOffset(s1DArrayShadow, c3, dPdxy1, dPdxy1, offset1);

+    texel.x += textureGradOffset(s1DArrayShadow, f16c2, compare, f16dPdxy1, f16dPdxy1, offset1);

+    texel.x += textureGradOffset(s2DArrayShadow, c4, dPdxy2, dPdxy2, offset2);

+    texel.x += textureGradOffset(s2DArrayShadow, f16c3, compare, f16dPdxy2, f16dPdxy2, offset2);

+

+    return texel;

+}

+

+f16vec4 testTextureProjGrad()

+{

+    f16vec4 texel = f16vec4(0.0hf);

+

+    texel   += textureProjGrad(s1D, c2, dPdxy1, dPdxy1);

+    texel   += textureProjGrad(s1D, f16c2, f16dPdxy1, f16dPdxy1);

+    texel   += textureProjGrad(s1D, c4, dPdxy1, dPdxy1);

+    texel   += textureProjGrad(s1D, f16c4, f16dPdxy1, f16dPdxy1);

+    texel   += textureProjGrad(s2D, c3, dPdxy2, dPdxy2);

+    texel   += textureProjGrad(s2D, f16c3, f16dPdxy2, f16dPdxy2);

+    texel   += textureProjGrad(s2D, c4, dPdxy2, dPdxy2);

+    texel   += textureProjGrad(s2D, f16c4, f16dPdxy2, f16dPdxy2);

+    texel   += textureProjGrad(s3D, c4, dPdxy3, dPdxy3);

+    texel   += textureProjGrad(s3D, f16c4, f16dPdxy3, f16dPdxy3);

+    texel   += textureProjGrad(s2DRect, c3, dPdxy2, dPdxy2);

+    texel   += textureProjGrad(s2DRect, f16c3, f16dPdxy2, f16dPdxy2);

+    texel   += textureProjGrad(s2DRect, c4, dPdxy2, dPdxy2);

+    texel   += textureProjGrad(s2DRect, f16c4, f16dPdxy2, f16dPdxy2);

+    texel.x += textureProjGrad(s2DRectShadow, c4, dPdxy2, dPdxy2);

+    texel.x += textureProjGrad(s2DRectShadow, f16c3, compare, f16dPdxy2, f16dPdxy2);

+    texel.x += textureProjGrad(s1DShadow, c4, dPdxy1, dPdxy1);

+    texel.x += textureProjGrad(s1DShadow, f16c3, compare, f16dPdxy1, f16dPdxy1);

+    texel.x += textureProjGrad(s2DShadow, c4, dPdxy2, dPdxy2);

+    texel.x += textureProjGrad(s2DShadow, f16c3, compare, f16dPdxy2, f16dPdxy2);

+

+    return texel;

+}

+

+f16vec4 testTextureProjGradoffset()

+{

+    f16vec4 texel = f16vec4(0.0hf);

+

+    texel   += textureProjGradOffset(s1D, c2, dPdxy1, dPdxy1, offset1);

+    texel   += textureProjGradOffset(s1D, f16c2, f16dPdxy1, f16dPdxy1, offset1);

+    texel   += textureProjGradOffset(s1D, c4, dPdxy1, dPdxy1, offset1);

+    texel   += textureProjGradOffset(s1D, f16c4, f16dPdxy1, f16dPdxy1, offset1);

+    texel   += textureProjGradOffset(s2D, c3, dPdxy2, dPdxy2, offset2);

+    texel   += textureProjGradOffset(s2D, f16c3, f16dPdxy2, f16dPdxy2, offset2);

+    texel   += textureProjGradOffset(s2D, c4, dPdxy2, dPdxy2, offset2);

+    texel   += textureProjGradOffset(s2D, f16c4, f16dPdxy2, f16dPdxy2, offset2);

+    texel   += textureProjGradOffset(s2DRect, c3, dPdxy2, dPdxy2, offset2);

+    texel   += textureProjGradOffset(s2DRect, f16c3, f16dPdxy2, f16dPdxy2, offset2);

+    texel   += textureProjGradOffset(s2DRect, c4, dPdxy2, dPdxy2, offset2);

+    texel   += textureProjGradOffset(s2DRect, f16c4, f16dPdxy2, f16dPdxy2, offset2);

+    texel.x += textureProjGradOffset(s2DRectShadow, c4, dPdxy2, dPdxy2, offset2);

+    texel.x += textureProjGradOffset(s2DRectShadow, f16c3, compare, f16dPdxy2, f16dPdxy2, offset2);

+    texel   += textureProjGradOffset(s3D, c4, dPdxy3, dPdxy3, offset3);

+    texel   += textureProjGradOffset(s3D, f16c4, f16dPdxy3, f16dPdxy3, offset3);

+    texel.x += textureProjGradOffset(s1DShadow, c4, dPdxy1, dPdxy1, offset1);

+    texel.x += textureProjGradOffset(s1DShadow, f16c3, compare, f16dPdxy1, f16dPdxy1, offset1);

+    texel.x += textureProjGradOffset(s2DShadow, c4, dPdxy2, dPdxy2, offset2);

+    texel.x += textureProjGradOffset(s2DShadow, f16c3, compare, f16dPdxy2, f16dPdxy2, offset2);

+

+    return texel;

+}

+

+f16vec4 testTextureGather()

+{

+    f16vec4 texel = f16vec4(0.0hf);

+

+    texel   += textureGather(s2D, c2, 0);

+    texel   += textureGather(s2D, f16c2, 0, f16bias);

+    texel   += textureGather(s2DArray, c3, 0);

+    texel   += textureGather(s2DArray, f16c3, 0, f16bias);

+    texel   += textureGather(sCube, c3, 0);

+    texel   += textureGather(sCube, f16c3, 0, f16bias);

+    texel   += textureGather(sCubeArray, c4, 0);

+    texel   += textureGather(sCubeArray, f16c4, 0, f16bias);

+    texel   += textureGather(s2DRect, c2, 0);

+    texel   += textureGather(s2DRect, f16c2, 0);

+    texel   += textureGather(s2DShadow, c2, compare);

+    texel   += textureGather(s2DShadow, f16c2, compare);

+    texel   += textureGather(s2DArrayShadow, c3, compare);

+    texel   += textureGather(s2DArrayShadow, f16c3, compare);

+    texel   += textureGather(sCubeShadow, c3, compare);

+    texel   += textureGather(sCubeShadow, f16c3, compare);

+    texel   += textureGather(sCubeArrayShadow, c4, compare);

+    texel   += textureGather(sCubeArrayShadow, f16c4, compare);

+    texel   += textureGather(s2DRectShadow, c2, compare);

+    texel   += textureGather(s2DRectShadow, f16c2, compare);

+

+    return texel;

+}

+

+f16vec4 testTextureGatherOffset()

+{

+    f16vec4 texel = f16vec4(0.0hf);

+

+    texel   += textureGatherOffset(s2D, c2, offset2, 0);

+    texel   += textureGatherOffset(s2D, f16c2, offset2, 0, f16bias);

+    texel   += textureGatherOffset(s2DArray, c3, offset2, 0);

+    texel   += textureGatherOffset(s2DArray, f16c3, offset2, 0, f16bias);

+    texel   += textureGatherOffset(s2DRect, c2, offset2, 0);

+    texel   += textureGatherOffset(s2DRect, f16c2, offset2, 0);

+    texel   += textureGatherOffset(s2DShadow, c2, compare, offset2);

+    texel   += textureGatherOffset(s2DShadow, f16c2, compare, offset2);

+    texel   += textureGatherOffset(s2DArrayShadow, c3, compare, offset2);

+    texel   += textureGatherOffset(s2DArrayShadow, f16c3, compare, offset2);

+    texel   += textureGatherOffset(s2DRectShadow, c2, compare, offset2);

+    texel   += textureGatherOffset(s2DRectShadow, f16c2, compare, offset2);

+

+    return texel;

+}

+

+f16vec4 testTextureGatherOffsets()

+{

+    f16vec4 texel = f16vec4(0.0hf);

+

+    texel   += textureGatherOffsets(s2D, c2, offsets, 0);

+    texel   += textureGatherOffsets(s2D, f16c2, offsets, 0, f16bias);

+    texel   += textureGatherOffsets(s2DArray, c3, offsets, 0);

+    texel   += textureGatherOffsets(s2DArray, f16c3, offsets, 0, f16bias);

+    texel   += textureGatherOffsets(s2DRect, c2, offsets, 0);

+    texel   += textureGatherOffsets(s2DRect, f16c2, offsets, 0);

+    texel   += textureGatherOffsets(s2DShadow, c2, compare, offsets);

+    texel   += textureGatherOffsets(s2DShadow, f16c2, compare, offsets);

+    texel   += textureGatherOffsets(s2DArrayShadow, c3, compare, offsets);

+    texel   += textureGatherOffsets(s2DArrayShadow, f16c3, compare, offsets);

+    texel   += textureGatherOffsets(s2DRectShadow, c2, compare, offsets);

+    texel   += textureGatherOffsets(s2DRectShadow, f16c2, compare, offsets);

+

+    return texel;

+}

+

+f16vec4 testTextureGatherLod()

+{

+    f16vec4 texel = f16vec4(0.0hf);

+

+    texel   += textureGatherLodAMD(s2D, c2, lod, 0);

+    texel   += textureGatherLodAMD(s2D, f16c2, f16lod, 0);

+    texel   += textureGatherLodAMD(s2DArray, c3, lod, 0);

+    texel   += textureGatherLodAMD(s2DArray, f16c3, f16lod, 0);

+    texel   += textureGatherLodAMD(sCube, c3, lod, 0);

+    texel   += textureGatherLodAMD(sCube, f16c3, f16lod, 0);

+    texel   += textureGatherLodAMD(sCubeArray, c4, lod, 0);

+    texel   += textureGatherLodAMD(sCubeArray, f16c4, f16lod, 0);

+

+    return texel;

+}

+

+f16vec4 testTextureGatherLodOffset()

+{

+    f16vec4 texel = f16vec4(0.0hf);

+

+    texel   += textureGatherLodOffsetAMD(s2D, c2, lod, offset2, 0);

+    texel   += textureGatherLodOffsetAMD(s2D, f16c2, f16lod, offset2, 0);

+    texel   += textureGatherLodOffsetAMD(s2DArray, c3, lod, offset2, 0);

+    texel   += textureGatherLodOffsetAMD(s2DArray, f16c3, f16lod, offset2, 0);

+

+    return texel;

+}

+

+f16vec4 testTextureGatherLodOffsets()

+{

+    f16vec4 texel = f16vec4(0.0hf);

+

+    texel   += textureGatherLodOffsetsAMD(s2D, c2, lod, offsets, 0);

+    texel   += textureGatherLodOffsetsAMD(s2D, f16c2, f16lod, offsets, 0);

+    texel   += textureGatherLodOffsetsAMD(s2DArray, c3, lod, offsets, 0);

+    texel   += textureGatherLodOffsetsAMD(s2DArray, f16c3, f16lod, offsets, 0);

+

+    return texel;

+}

+

+ivec4 testTextureSize()

+{

+    ivec4 size = ivec4(0);

+

+    size.x      += textureSize(s1D, int(lod));

+    size.xy     += textureSize(s2D, int(lod));

+    size.xyz    += textureSize(s3D, int(lod));

+    size.xy     += textureSize(sCube, int(lod));

+    size.x      += textureSize(s1DShadow, int(lod));

+    size.xy     += textureSize(s2DShadow, int(lod));

+    size.xy     += textureSize(sCubeShadow, int(lod));

+    size.xyz    += textureSize(sCubeArray, int(lod));

+    size.xyz    += textureSize(sCubeArrayShadow, int(lod));

+    size.xy     += textureSize(s2DRect);

+    size.xy     += textureSize(s2DRectShadow);

+    size.xy     += textureSize(s1DArray, int(lod));

+    size.xyz    += textureSize(s2DArray, int(lod));

+    size.xy     += textureSize(s1DArrayShadow, int(lod));

+    size.xyz    += textureSize(s2DArrayShadow, int(lod));

+    size.x      += textureSize(sBuffer);

+    size.xy     += textureSize(s2DMS);

+    size.xyz    += textureSize(s2DMSArray);

+

+    return size;

+}

+

+vec2 testTextureQueryLod()

+{

+    vec2 lod = vec2(0.0);

+

+    lod  += textureQueryLod(s1D, c1);

+    lod  += textureQueryLod(s1D, f16c1);

+    lod  += textureQueryLod(s2D, c2);

+    lod  += textureQueryLod(s2D, f16c2);

+    lod  += textureQueryLod(s3D, c3);

+    lod  += textureQueryLod(s3D, f16c3);

+    lod  += textureQueryLod(sCube, c3);

+    lod  += textureQueryLod(sCube, f16c3);

+    lod  += textureQueryLod(s1DArray, c1);

+    lod  += textureQueryLod(s1DArray, f16c1);

+    lod  += textureQueryLod(s2DArray, c2);

+    lod  += textureQueryLod(s2DArray, f16c2);

+    lod  += textureQueryLod(sCubeArray, c3);

+    lod  += textureQueryLod(sCubeArray, f16c3);

+    lod  += textureQueryLod(s1DShadow, c1);

+    lod  += textureQueryLod(s1DShadow, f16c1);

+    lod  += textureQueryLod(s2DShadow, c2);

+    lod  += textureQueryLod(s2DShadow, f16c2);

+    lod  += textureQueryLod(sCubeArrayShadow, c3);

+    lod  += textureQueryLod(sCubeArrayShadow, f16c3);

+    lod  += textureQueryLod(s1DArrayShadow, c1);

+    lod  += textureQueryLod(s1DArrayShadow, f16c1);

+    lod  += textureQueryLod(s2DArrayShadow, c2);

+    lod  += textureQueryLod(s2DArrayShadow, f16c2);

+    lod  += textureQueryLod(sCubeArrayShadow, c3);

+    lod  += textureQueryLod(sCubeArrayShadow, f16c3);

+

+    return lod;

+}

+

+int testTextureQueryLevels()

+{

+    int levels = 0;

+

+    levels  += textureQueryLevels(s1D);

+    levels  += textureQueryLevels(s2D);

+    levels  += textureQueryLevels(s3D);

+    levels  += textureQueryLevels(sCube);

+    levels  += textureQueryLevels(s1DShadow);

+    levels  += textureQueryLevels(s2DShadow);

+    levels  += textureQueryLevels(sCubeShadow);

+    levels  += textureQueryLevels(sCubeArray);

+    levels  += textureQueryLevels(sCubeArrayShadow);

+    levels  += textureQueryLevels(s1DArray);

+    levels  += textureQueryLevels(s2DArray);

+    levels  += textureQueryLevels(s1DArrayShadow);

+    levels  += textureQueryLevels(s2DArrayShadow);

+

+    return levels;

+}

+

+int testTextureSamples()

+{

+    int samples = 0;

+

+    samples += textureSamples(s2DMS);

+    samples += textureSamples(s2DMSArray);

+

+    return samples;

+}

+

+f16vec4 testImageLoad()

+{

+    f16vec4 texel = f16vec4(0.0hf);

+

+    texel += imageLoad(i1D, int(c1));

+    texel += imageLoad(i2D, ivec2(c2));

+    texel += imageLoad(i3D, ivec3(c3));

+    texel += imageLoad(i2DRect, ivec2(c2));

+    texel += imageLoad(iCube, ivec3(c3));

+    texel += imageLoad(iBuffer, int(c1));

+    texel += imageLoad(i1DArray, ivec2(c2));

+    texel += imageLoad(i2DArray, ivec3(c3));

+    texel += imageLoad(iCubeArray, ivec3(c3));

+    texel += imageLoad(i2DMS, ivec2(c2), 1);

+    texel += imageLoad(i2DMSArray, ivec3(c3), 1);

+

+    return texel;

+}

+

+void testImageStore(f16vec4 data)

+{

+    imageStore(i1D, int(c1), data);

+    imageStore(i2D, ivec2(c2), data);

+    imageStore(i3D, ivec3(c3), data);

+    imageStore(i2DRect, ivec2(c2), data);

+    imageStore(iCube, ivec3(c3), data);

+    imageStore(iBuffer, int(c1), data);

+    imageStore(i1DArray, ivec2(c2), data);

+    imageStore(i2DArray, ivec3(c3), data);

+    imageStore(iCubeArray, ivec3(c3), data);

+    imageStore(i2DMS, ivec2(c2), 1, data);

+    imageStore(i2DMSArray, ivec3(c3), 1, data);

+}

+

+f16vec4 testSparseTexture()

+{

+    f16vec4 texel = f16vec4(0.0hf);

+

+    sparseTextureARB(s2D, c2, texel);

+    sparseTextureARB(s2D, f16c2, texel, f16bias);

+    sparseTextureARB(s3D, c3, texel);

+    sparseTextureARB(s3D, f16c3, texel, f16bias);

+    sparseTextureARB(sCube, c3, texel);

+    sparseTextureARB(sCube, f16c3, texel, f16bias);

+    sparseTextureARB(s2DShadow, c3, texel.x);

+    sparseTextureARB(s2DShadow, f16c2, compare, texel.x, f16bias);

+    sparseTextureARB(sCubeShadow, c4, texel.x);

+    sparseTextureARB(sCubeShadow, f16c3, compare, texel.x, f16bias);

+    sparseTextureARB(s2DArray, c3, texel);

+    sparseTextureARB(s2DArray, f16c3, texel, f16bias);

+    sparseTextureARB(sCubeArray, c4, texel);

+    sparseTextureARB(sCubeArray, f16c4, texel, f16bias);

+    sparseTextureARB(s2DArrayShadow, c4, texel.x);

+    sparseTextureARB(s2DArrayShadow, f16c3, compare, texel.x);

+    sparseTextureARB(s2DRect, c2, texel);

+    sparseTextureARB(s2DRect, f16c2, texel);

+    sparseTextureARB(s2DRectShadow, c3, texel.x);

+    sparseTextureARB(s2DRectShadow, f16c2, compare, texel.x);

+    sparseTextureARB(sCubeArrayShadow, c4, compare, texel.x);

+    sparseTextureARB(sCubeArrayShadow, f16c4, compare, texel.x);

+

+    return texel;

+}

+

+f16vec4 testSparseTextureLod()

+{

+    f16vec4 texel = f16vec4(0.0hf);

+

+    sparseTextureLodARB(s2D, c2, lod, texel);

+    sparseTextureLodARB(s2D, f16c2, f16lod, texel);

+    sparseTextureLodARB(s3D, c3, lod, texel);

+    sparseTextureLodARB(s3D, f16c3, f16lod, texel);

+    sparseTextureLodARB(sCube, c3, lod, texel);

+    sparseTextureLodARB(sCube, f16c3, f16lod, texel);

+    sparseTextureLodARB(s2DShadow, c3, lod, texel.x);

+    sparseTextureLodARB(s2DShadow, f16c2, compare, f16lod, texel.x);

+    sparseTextureLodARB(s2DArray, c3, lod, texel);

+    sparseTextureLodARB(s2DArray, f16c3, f16lod, texel);

+    sparseTextureLodARB(sCubeArray, c4, lod, texel);

+    sparseTextureLodARB(sCubeArray, f16c4, f16lod, texel);

+

+    return texel;

+}

+

+f16vec4 testSparseTextureOffset()

+{

+    f16vec4 texel = f16vec4(0.0hf);

+

+    sparseTextureOffsetARB(s2D, c2, offset2, texel);

+    sparseTextureOffsetARB(s2D, f16c2, offset2, texel, f16bias);

+    sparseTextureOffsetARB(s3D, c3, offset3, texel);

+    sparseTextureOffsetARB(s3D, f16c3, offset3, texel, f16bias);

+    sparseTextureOffsetARB(s2DRect, c2, offset2, texel);

+    sparseTextureOffsetARB(s2DRect, f16c2, offset2, texel);

+    sparseTextureOffsetARB(s2DRectShadow, c3, offset2, texel.x);

+    sparseTextureOffsetARB(s2DRectShadow, f16c2, compare, offset2, texel.x);

+    sparseTextureOffsetARB(s2DShadow, c3, offset2, texel.x);

+    sparseTextureOffsetARB(s2DShadow, f16c2, compare, offset2, texel.x, f16bias);

+    sparseTextureOffsetARB(s2DArray, c3, offset2, texel);

+    sparseTextureOffsetARB(s2DArray, f16c3, offset2, texel, f16bias);

+    sparseTextureOffsetARB(s2DArrayShadow, c4, offset2, texel.x);

+    sparseTextureOffsetARB(s2DArrayShadow, f16c3, compare, offset2, texel.x);

+

+    return texel;

+}

+

+f16vec4 testSparseTextureLodOffset()

+{

+    f16vec4 texel = f16vec4(0.0hf);

+

+    sparseTextureLodOffsetARB(s2D, c2, lod, offset2, texel);

+    sparseTextureLodOffsetARB(s2D, f16c2, f16lod, offset2, texel);

+    sparseTextureLodOffsetARB(s3D, c3, lod, offset3, texel);

+    sparseTextureLodOffsetARB(s3D, f16c3, f16lod, offset3, texel);

+    sparseTextureLodOffsetARB(s2DShadow, c3, lod, offset2, texel.x);

+    sparseTextureLodOffsetARB(s2DShadow, f16c2, compare, f16lod, offset2, texel.x);

+    sparseTextureLodOffsetARB(s2DArray, c3, lod, offset2, texel);

+    sparseTextureLodOffsetARB(s2DArray, f16c3, f16lod, offset2, texel);

+

+    return texel;

+}

+

+f16vec4 testSparseTextureGrad()

+{

+    f16vec4 texel = f16vec4(0.0hf);

+

+    sparseTextureGradARB(s2D, c2, dPdxy2, dPdxy2, texel);

+    sparseTextureGradARB(s2D, f16c2, f16dPdxy2, f16dPdxy2, texel);

+    sparseTextureGradARB(s3D, c3, dPdxy3, dPdxy3, texel);

+    sparseTextureGradARB(s3D, f16c3, f16dPdxy3, f16dPdxy3, texel);

+    sparseTextureGradARB(sCube, c3, dPdxy3, dPdxy3, texel);

+    sparseTextureGradARB(sCube, f16c3, f16dPdxy3, f16dPdxy3, texel);

+    sparseTextureGradARB(s2DRect, c2, dPdxy2, dPdxy2, texel);

+    sparseTextureGradARB(s2DRect, f16c2, f16dPdxy2, f16dPdxy2, texel);

+    sparseTextureGradARB(s2DRectShadow, c3, dPdxy2, dPdxy2, texel.x);

+    sparseTextureGradARB(s2DRectShadow, f16c2, compare, f16dPdxy2, f16dPdxy2, texel.x);

+    sparseTextureGradARB(s2DShadow, c3, dPdxy2, dPdxy2, texel.x);

+    sparseTextureGradARB(s2DShadow, f16c2, compare, f16dPdxy2, f16dPdxy2, texel.x);

+    sparseTextureGradARB(sCubeShadow, c4, dPdxy3, dPdxy3, texel.x);

+    sparseTextureGradARB(sCubeShadow, f16c3, compare, f16dPdxy3, f16dPdxy3, texel.x);

+    sparseTextureGradARB(s2DArray, c3, dPdxy2, dPdxy2, texel);

+    sparseTextureGradARB(s2DArray, f16c3, f16dPdxy2, f16dPdxy2, texel);

+    sparseTextureGradARB(s2DArrayShadow, c4, dPdxy2, dPdxy2, texel.x);

+    sparseTextureGradARB(s2DArrayShadow, f16c3, compare, f16dPdxy2, f16dPdxy2, texel.x);

+    sparseTextureGradARB(sCubeArray, c4, dPdxy3, dPdxy3, texel);

+    sparseTextureGradARB(sCubeArray, f16c4, f16dPdxy3, f16dPdxy3, texel);

+

+    return texel;

+}

+

+f16vec4 testSparseTextureGradOffset()

+{

+    f16vec4 texel = f16vec4(0.0hf);

+

+    sparseTextureGradOffsetARB(s2D, c2, dPdxy2, dPdxy2, offset2, texel);

+    sparseTextureGradOffsetARB(s2D, f16c2, f16dPdxy2, f16dPdxy2, offset2, texel);

+    sparseTextureGradOffsetARB(s3D, c3, dPdxy3, dPdxy3, offset3, texel);

+    sparseTextureGradOffsetARB(s3D, f16c3, f16dPdxy3, f16dPdxy3, offset3, texel);

+    sparseTextureGradOffsetARB(s2DRect, c2, dPdxy2, dPdxy2, offset2, texel);

+    sparseTextureGradOffsetARB(s2DRect, f16c2, f16dPdxy2, f16dPdxy2, offset2, texel);

+    sparseTextureGradOffsetARB(s2DRectShadow, c3, dPdxy2, dPdxy2, offset2, texel.x);

+    sparseTextureGradOffsetARB(s2DRectShadow, f16c2, compare, f16dPdxy2, f16dPdxy2, offset2, texel.x);

+    sparseTextureGradOffsetARB(s2DShadow, c3, dPdxy2, dPdxy2, offset2, texel.x);

+    sparseTextureGradOffsetARB(s2DShadow, f16c2, compare, f16dPdxy2, f16dPdxy2, offset2, texel.x);

+    sparseTextureGradOffsetARB(s2DArray, c3, dPdxy2, dPdxy2, offset2, texel);

+    sparseTextureGradOffsetARB(s2DArray, f16c3, f16dPdxy2, f16dPdxy2, offset2, texel);

+    sparseTextureGradOffsetARB(s2DArrayShadow, c4, dPdxy2, dPdxy2, offset2, texel.x);

+    sparseTextureGradOffsetARB(s2DArrayShadow, f16c3, compare, f16dPdxy2, f16dPdxy2, offset2, texel.x);

+

+    return texel;

+}

+

+f16vec4 testSparseTexelFetch()

+{

+    f16vec4 texel = f16vec4(0.0hf);

+

+    sparseTexelFetchARB(s2D, ivec2(c2), int(lod), texel);

+    sparseTexelFetchARB(s3D, ivec3(c3), int(lod), texel);

+    sparseTexelFetchARB(s2DRect, ivec2(c2), texel);

+    sparseTexelFetchARB(s2DArray, ivec3(c3), int(lod), texel);

+    sparseTexelFetchARB(s2DMS, ivec2(c2), 1, texel);

+    sparseTexelFetchARB(s2DMSArray, ivec3(c3), 2, texel);

+

+    return texel;

+}

+

+f16vec4 testSparseTexelFetchOffset()

+{

+    f16vec4 texel = f16vec4(0.0hf);

+

+    sparseTexelFetchOffsetARB(s2D, ivec2(c2), int(lod), offset2, texel);

+    sparseTexelFetchOffsetARB(s3D, ivec3(c3), int(lod), offset3, texel);

+    sparseTexelFetchOffsetARB(s2DRect, ivec2(c2), offset2, texel);

+    sparseTexelFetchOffsetARB(s2DArray, ivec3(c3), int(lod), offset2, texel);

+

+    return texel;

+}

+

+f16vec4 testSparseTextureGather()

+{

+    f16vec4 texel = f16vec4(0.0hf);

+

+    sparseTextureGatherARB(s2D, c2, texel, 0);

+    sparseTextureGatherARB(s2D, f16c2, texel, 0, f16bias);

+    sparseTextureGatherARB(s2DArray, c3, texel, 0);

+    sparseTextureGatherARB(s2DArray, f16c3, texel, 0, f16bias);

+    sparseTextureGatherARB(sCube, c3, texel, 0);

+    sparseTextureGatherARB(sCube, f16c3, texel, 0, f16bias);

+    sparseTextureGatherARB(sCubeArray, c4, texel, 0);

+    sparseTextureGatherARB(sCubeArray, f16c4, texel, 0, f16bias);

+    sparseTextureGatherARB(s2DRect, c2, texel, 0);

+    sparseTextureGatherARB(s2DRect, f16c2, texel, 0);

+    sparseTextureGatherARB(s2DShadow, c2, compare, texel);

+    sparseTextureGatherARB(s2DShadow, f16c2, compare, texel);

+    sparseTextureGatherARB(s2DArrayShadow, c3, compare, texel);

+    sparseTextureGatherARB(s2DArrayShadow, f16c3, compare, texel);

+    sparseTextureGatherARB(sCubeShadow, c3, compare, texel);

+    sparseTextureGatherARB(sCubeShadow, f16c3, compare, texel);

+    sparseTextureGatherARB(sCubeArrayShadow, c4, compare, texel);

+    sparseTextureGatherARB(sCubeArrayShadow, f16c4, compare, texel);

+    sparseTextureGatherARB(s2DRectShadow, c2, compare, texel);

+    sparseTextureGatherARB(s2DRectShadow, f16c2, compare, texel);

+

+    return texel;

+}

+

+f16vec4 testSparseTextureGatherOffset()

+{

+    f16vec4 texel = f16vec4(0.0hf);

+

+    sparseTextureGatherOffsetARB(s2D, c2, offset2, texel, 0);

+    sparseTextureGatherOffsetARB(s2D, f16c2, offset2, texel, 0, f16bias);

+    sparseTextureGatherOffsetARB(s2DArray, c3, offset2, texel, 0);

+    sparseTextureGatherOffsetARB(s2DArray, f16c3, offset2, texel, 0, f16bias);

+    sparseTextureGatherOffsetARB(s2DRect, c2, offset2, texel, 0);

+    sparseTextureGatherOffsetARB(s2DRect, f16c2, offset2, texel, 0);

+    sparseTextureGatherOffsetARB(s2DShadow, c2, compare, offset2, texel);

+    sparseTextureGatherOffsetARB(s2DShadow, f16c2, compare, offset2, texel);

+    sparseTextureGatherOffsetARB(s2DArrayShadow, c3, compare, offset2, texel);

+    sparseTextureGatherOffsetARB(s2DArrayShadow, f16c3, compare, offset2, texel);

+    sparseTextureGatherOffsetARB(s2DRectShadow, c2, compare, offset2, texel);

+    sparseTextureGatherOffsetARB(s2DRectShadow, f16c2, compare, offset2, texel);

+

+    return texel;

+}

+

+f16vec4 testSparseTextureGatherOffsets()

+{

+    f16vec4 texel = f16vec4(0.0hf);

+

+    sparseTextureGatherOffsetsARB(s2D, c2, offsets, texel, 0);

+    sparseTextureGatherOffsetsARB(s2D, f16c2, offsets, texel, 0, f16bias);

+    sparseTextureGatherOffsetsARB(s2DArray, c3, offsets, texel, 0);

+    sparseTextureGatherOffsetsARB(s2DArray, f16c3, offsets, texel, 0, f16bias);

+    sparseTextureGatherOffsetsARB(s2DRect, c2, offsets, texel, 0);

+    sparseTextureGatherOffsetsARB(s2DRect, f16c2, offsets, texel, 0);

+    sparseTextureGatherOffsetsARB(s2DShadow, c2, compare, offsets, texel);

+    sparseTextureGatherOffsetsARB(s2DShadow, f16c2, compare, offsets, texel);

+    sparseTextureGatherOffsetsARB(s2DArrayShadow, c3, compare, offsets, texel);

+    sparseTextureGatherOffsetsARB(s2DArrayShadow, f16c3, compare, offsets, texel);

+    sparseTextureGatherOffsetsARB(s2DRectShadow, c2, compare, offsets, texel);

+    sparseTextureGatherOffsetsARB(s2DRectShadow, f16c2, compare, offsets, texel);

+

+    return texel;

+}

+

+f16vec4 testSparseTextureGatherLod()

+{

+    f16vec4 texel = f16vec4(0.0hf);

+

+    sparseTextureGatherLodAMD(s2D, c2, lod, texel, 0);

+    sparseTextureGatherLodAMD(s2D, f16c2, f16lod, texel, 0);

+    sparseTextureGatherLodAMD(s2DArray, c3, lod, texel, 0);

+    sparseTextureGatherLodAMD(s2DArray, f16c3, f16lod, texel, 0);

+    sparseTextureGatherLodAMD(sCube, c3, lod, texel, 0);

+    sparseTextureGatherLodAMD(sCube, f16c3, f16lod, texel, 0);

+    sparseTextureGatherLodAMD(sCubeArray, c4, lod, texel, 0);

+    sparseTextureGatherLodAMD(sCubeArray, f16c4, f16lod, texel, 0);

+

+    return texel;

+}

+

+f16vec4 testSparseTextureGatherLodOffset()

+{

+    f16vec4 texel = f16vec4(0.0hf);

+

+    sparseTextureGatherLodOffsetAMD(s2D, c2, lod, offset2, texel, 0);

+    sparseTextureGatherLodOffsetAMD(s2D, f16c2, f16lod, offset2, texel, 0);

+    sparseTextureGatherLodOffsetAMD(s2DArray, c3, lod, offset2, texel, 0);

+    sparseTextureGatherLodOffsetAMD(s2DArray, f16c3, f16lod, offset2, texel, 0);

+

+    return texel;

+}

+

+f16vec4 testSparseTextureGatherLodOffsets()

+{

+    f16vec4 texel = f16vec4(0.0hf);

+

+    sparseTextureGatherLodOffsetsAMD(s2D, c2, lod, offsets, texel, 0);

+    sparseTextureGatherLodOffsetsAMD(s2D, f16c2, f16lod, offsets, texel, 0);

+    sparseTextureGatherLodOffsetsAMD(s2DArray, c3, lod, offsets, texel, 0);

+    sparseTextureGatherLodOffsetsAMD(s2DArray, f16c3, f16lod, offsets, texel, 0);

+

+    return texel;

+}

+

+f16vec4 testSparseImageLoad()

+{

+    f16vec4 texel = f16vec4(0.0hf);

+

+    sparseImageLoadARB(i2D, ivec2(c2), texel);

+    sparseImageLoadARB(i3D, ivec3(c3), texel);

+    sparseImageLoadARB(i2DRect, ivec2(c2), texel);

+    sparseImageLoadARB(iCube, ivec3(c3), texel);

+    sparseImageLoadARB(i2DArray, ivec3(c3), texel);

+    sparseImageLoadARB(iCubeArray, ivec3(c3), texel);

+    sparseImageLoadARB(i2DMS, ivec2(c2), 1, texel);

+    sparseImageLoadARB(i2DMSArray, ivec3(c3), 2, texel);

+

+    return texel;

+}

+

+f16vec4 testSparseTextureClamp()

+{

+    f16vec4 texel = f16vec4(0.0hf);

+

+    sparseTextureClampARB(s2D, c2, lodClamp, texel);

+    sparseTextureClampARB(s2D, f16c2, f16lodClamp, texel, f16bias);

+    sparseTextureClampARB(s3D, c3, lodClamp, texel);

+    sparseTextureClampARB(s3D, f16c3, f16lodClamp, texel, f16bias);

+    sparseTextureClampARB(sCube, c3, lodClamp, texel);

+    sparseTextureClampARB(sCube, f16c3, f16lodClamp, texel, f16bias);

+    sparseTextureClampARB(s2DShadow, c3, lodClamp, texel.x);

+    sparseTextureClampARB(s2DShadow, f16c2, compare, f16lodClamp, texel.x, f16bias);

+    sparseTextureClampARB(sCubeShadow, c4, lodClamp, texel.x);

+    sparseTextureClampARB(sCubeShadow, f16c3, compare, f16lodClamp, texel.x, f16bias);

+    sparseTextureClampARB(s2DArray, c3, lodClamp, texel);

+    sparseTextureClampARB(s2DArray, f16c3, f16lodClamp, texel, f16bias);

+    sparseTextureClampARB(sCubeArray, c4, lodClamp, texel);

+    sparseTextureClampARB(sCubeArray, f16c4, f16lodClamp, texel, f16bias);

+    sparseTextureClampARB(s2DArrayShadow, c4, lodClamp, texel.x);

+    sparseTextureClampARB(s2DArrayShadow, f16c3, compare, f16lodClamp, texel.x);

+    sparseTextureClampARB(sCubeArrayShadow, c4, compare, lodClamp, texel.x);

+    sparseTextureClampARB(sCubeArrayShadow, f16c4, compare, f16lodClamp, texel.x);

+

+    return texel;

+}

+

+f16vec4 testTextureClamp()

+{

+    f16vec4 texel = f16vec4(0.0hf);

+

+    texel   += textureClampARB(s1D, c1, lodClamp);

+    texel   += textureClampARB(s1D, f16c1, f16lodClamp, f16bias);

+    texel   += textureClampARB(s2D, c2, lodClamp);

+    texel   += textureClampARB(s2D, f16c2, f16lodClamp, f16bias);

+    texel   += textureClampARB(s3D, c3, lodClamp);

+    texel   += textureClampARB(s3D, f16c3, f16lodClamp, f16bias);

+    texel   += textureClampARB(sCube, c3, lodClamp);

+    texel   += textureClampARB(sCube, f16c3, f16lodClamp, f16bias);

+    texel.x += textureClampARB(s1DShadow, c3, lodClamp);

+    texel.x += textureClampARB(s1DShadow, f16c2, compare, f16lodClamp, f16bias);

+    texel.x += textureClampARB(s2DShadow, c3, lodClamp);

+    texel.x += textureClampARB(s2DShadow, f16c2, compare, f16lodClamp, f16bias);

+    texel.x += textureClampARB(sCubeShadow, c4, lodClamp);

+    texel.x += textureClampARB(sCubeShadow, f16c3, compare, f16lodClamp, f16bias);

+    texel   += textureClampARB(s1DArray, c2, lodClamp);

+    texel   += textureClampARB(s1DArray, f16c2, f16lodClamp, f16bias);

+    texel   += textureClampARB(s2DArray, c3, lodClamp);

+    texel   += textureClampARB(s2DArray, f16c3, f16lodClamp, f16bias);

+    texel   += textureClampARB(sCubeArray, c4, lodClamp);

+    texel   += textureClampARB(sCubeArray, f16c4, f16lodClamp, f16bias);

+    texel.x += textureClampARB(s1DArrayShadow, c3, lodClamp);

+    texel.x += textureClampARB(s1DArrayShadow, f16c2, compare, f16lodClamp, f16bias);

+    texel.x += textureClampARB(s2DArrayShadow, c4, lodClamp);

+    texel.x += textureClampARB(s2DArrayShadow, f16c3, compare, f16lodClamp);

+    texel.x += textureClampARB(sCubeArrayShadow, c4, compare, lodClamp);

+    texel.x += textureClampARB(sCubeArrayShadow, f16c4, compare, f16lodClamp);

+

+    return texel;

+}

+

+f16vec4 testSparseTextureOffsetClamp()

+{

+    f16vec4 texel = f16vec4(0.0hf);

+

+    sparseTextureOffsetClampARB(s2D, c2, offset2, lodClamp, texel);

+    sparseTextureOffsetClampARB(s2D, f16c2, offset2, f16lodClamp, texel, f16bias);

+    sparseTextureOffsetClampARB(s3D, c3, offset3, lodClamp, texel);

+    sparseTextureOffsetClampARB(s3D, f16c3, offset3, f16lodClamp, texel, f16bias);

+    sparseTextureOffsetClampARB(s2DShadow, c3, offset2, lodClamp, texel.x);

+    sparseTextureOffsetClampARB(s2DShadow, f16c2, compare, offset2, f16lodClamp, texel.x, f16bias);

+    sparseTextureOffsetClampARB(s2DArray, c3, offset2, lodClamp, texel);

+    sparseTextureOffsetClampARB(s2DArray, f16c3, offset2, f16lodClamp, texel, f16bias);

+    sparseTextureOffsetClampARB(s2DArrayShadow, c4, offset2, lodClamp, texel.x);

+    sparseTextureOffsetClampARB(s2DArrayShadow, f16c3, compare, offset2, f16lodClamp, texel.x);

+

+    return texel;

+}

+

+f16vec4 testTextureOffsetClamp()

+{

+    f16vec4 texel = f16vec4(0.0hf);

+

+    texel   += textureOffsetClampARB(s1D, c1, offset1, lodClamp);

+    texel   += textureOffsetClampARB(s1D, f16c1, offset1, f16lodClamp, f16bias);

+    texel   += textureOffsetClampARB(s2D, c2, offset2, lodClamp);

+    texel   += textureOffsetClampARB(s2D, f16c2, offset2, f16lodClamp, f16bias);

+    texel   += textureOffsetClampARB(s3D, c3, offset3, lodClamp);

+    texel   += textureOffsetClampARB(s3D, f16c3, offset3, f16lodClamp, f16bias);

+    texel.x += textureOffsetClampARB(s1DShadow, c3, offset1, lodClamp);

+    texel.x += textureOffsetClampARB(s1DShadow, f16c2, compare, offset1, f16lodClamp, f16bias);

+    texel.x += textureOffsetClampARB(s2DShadow, c3, offset2, lodClamp);

+    texel.x += textureOffsetClampARB(s2DShadow, f16c2, compare, offset2, f16lodClamp, f16bias);

+    texel   += textureOffsetClampARB(s1DArray, c2, offset1, lodClamp);

+    texel   += textureOffsetClampARB(s1DArray, f16c2, offset1, f16lodClamp, f16bias);

+    texel   += textureOffsetClampARB(s2DArray, c3, offset2, lodClamp);

+    texel   += textureOffsetClampARB(s2DArray, f16c3, offset2, f16lodClamp, f16bias);

+    texel.x += textureOffsetClampARB(s1DArrayShadow, c3, offset1, lodClamp);

+    texel.x += textureOffsetClampARB(s1DArrayShadow, f16c2, compare, offset1, f16lodClamp, f16bias);

+    texel.x += textureOffsetClampARB(s2DArrayShadow, c4, offset2, lodClamp);

+    texel.x += textureOffsetClampARB(s2DArrayShadow, f16c3, compare, offset2, f16lodClamp);

+    

+    return texel;

+}

+

+f16vec4 testSparseTextureGradClamp()

+{

+    f16vec4 texel = f16vec4(0.0hf);

+

+    sparseTextureGradClampARB(s2D, c2, dPdxy2, dPdxy2, lodClamp, texel);

+    sparseTextureGradClampARB(s2D, f16c2, f16dPdxy2, f16dPdxy2, f16lodClamp, texel);

+    sparseTextureGradClampARB(s3D, c3, dPdxy3, dPdxy3, lodClamp, texel);

+    sparseTextureGradClampARB(s3D, f16c3, f16dPdxy3, f16dPdxy3, f16lodClamp, texel);

+    sparseTextureGradClampARB(sCube, c3, dPdxy3, dPdxy3, lodClamp, texel);

+    sparseTextureGradClampARB(sCube, f16c3, f16dPdxy3, f16dPdxy3, f16lodClamp, texel);

+    sparseTextureGradClampARB(s2DShadow, c3, dPdxy2, dPdxy2, lodClamp, texel.x);

+    sparseTextureGradClampARB(s2DShadow, f16c2, compare, f16dPdxy2, f16dPdxy2, f16lodClamp, texel.x);

+    sparseTextureGradClampARB(sCubeShadow, c4, dPdxy3, dPdxy3, lodClamp, texel.x);

+    sparseTextureGradClampARB(sCubeShadow, f16c3, compare, f16dPdxy3, f16dPdxy3, f16lodClamp, texel.x);

+    sparseTextureGradClampARB(s2DArray, c3, dPdxy2, dPdxy2, lodClamp, texel);

+    sparseTextureGradClampARB(s2DArray, f16c3, f16dPdxy2, f16dPdxy2, f16lodClamp, texel);

+    sparseTextureGradClampARB(s2DArrayShadow, c4, dPdxy2, dPdxy2, lodClamp, texel.x);

+    sparseTextureGradClampARB(s2DArrayShadow, f16c3, compare, f16dPdxy2, f16dPdxy2, f16lodClamp, texel.x);

+    sparseTextureGradClampARB(sCubeArray, c4, dPdxy3, dPdxy3, lodClamp, texel);

+    sparseTextureGradClampARB(sCubeArray, f16c4, f16dPdxy3, f16dPdxy3, f16lodClamp, texel);

+

+    return texel;

+}

+

+f16vec4 testTextureGradClamp()

+{

+    f16vec4 texel = f16vec4(0.0hf);

+

+    texel   += textureGradClampARB(s1D, c1, dPdxy1, dPdxy1, lodClamp);

+    texel   += textureGradClampARB(s1D, f16c1, f16dPdxy1, f16dPdxy1, f16lodClamp);

+    texel   += textureGradClampARB(s2D, c2, dPdxy2, dPdxy2, lodClamp);

+    texel   += textureGradClampARB(s2D, f16c2, f16dPdxy2, f16dPdxy2, f16lodClamp);

+    texel   += textureGradClampARB(s3D, c3, dPdxy3, dPdxy3, lodClamp);

+    texel   += textureGradClampARB(s3D, f16c3, f16dPdxy3, f16dPdxy3, f16lodClamp);

+    texel   += textureGradClampARB(sCube, c3, dPdxy3, dPdxy3, lodClamp);

+    texel   += textureGradClampARB(sCube, f16c3, f16dPdxy3, f16dPdxy3, f16lodClamp);

+    texel.x += textureGradClampARB(s1DShadow, c3, dPdxy1, dPdxy1, lodClamp);

+    texel.x += textureGradClampARB(s1DShadow, f16c2, compare, f16dPdxy1, f16dPdxy1, f16lodClamp);

+    texel.x += textureGradClampARB(s2DShadow, c3, dPdxy2, dPdxy2, lodClamp);

+    texel.x += textureGradClampARB(s2DShadow, f16c2, compare, f16dPdxy2, f16dPdxy2, f16lodClamp);

+    texel.x += textureGradClampARB(sCubeShadow, c4, dPdxy3, dPdxy3, lodClamp);

+    texel.x += textureGradClampARB(sCubeShadow, f16c3, compare, f16dPdxy3, f16dPdxy3, f16lodClamp);

+    texel   += textureGradClampARB(s1DArray, c2, dPdxy1, dPdxy1, lodClamp);

+    texel   += textureGradClampARB(s1DArray, f16c2, f16dPdxy1, f16dPdxy1, f16lodClamp);

+    texel   += textureGradClampARB(s2DArray, c3, dPdxy2, dPdxy2, lodClamp);

+    texel   += textureGradClampARB(s2DArray, f16c3, f16dPdxy2, f16dPdxy2, f16lodClamp);

+    texel.x += textureGradClampARB(s1DArrayShadow, c3, dPdxy1, dPdxy1, lodClamp);

+    texel.x += textureGradClampARB(s1DArrayShadow, f16c2, compare, f16dPdxy1, f16dPdxy1, f16lodClamp);

+    texel.x += textureGradClampARB(s2DArrayShadow, c4, dPdxy2, dPdxy2, lodClamp);

+    texel.x += textureGradClampARB(s2DArrayShadow, f16c3, compare, f16dPdxy2, f16dPdxy2, f16lodClamp);

+    texel   += textureGradClampARB(sCubeArray, c4, dPdxy3, dPdxy3, lodClamp);

+    texel   += textureGradClampARB(sCubeArray, f16c4, f16dPdxy3, f16dPdxy3, f16lodClamp);

+

+    return texel;

+}

+

+f16vec4 testSparseTextureGradOffsetClamp()

+{

+    f16vec4 texel = f16vec4(0.0hf);

+

+    sparseTextureGradOffsetClampARB(s2D, c2, dPdxy2, dPdxy2, offset2, lodClamp, texel);

+    sparseTextureGradOffsetClampARB(s2D, f16c2, f16dPdxy2, f16dPdxy2, offset2, f16lodClamp, texel);

+    sparseTextureGradOffsetClampARB(s3D, c3, dPdxy3, dPdxy3, offset3, lodClamp, texel);

+    sparseTextureGradOffsetClampARB(s3D, f16c3, f16dPdxy3, f16dPdxy3, offset3, f16lodClamp, texel);

+    sparseTextureGradOffsetClampARB(s2DShadow, c3, dPdxy2, dPdxy2, offset2, lodClamp, texel.x);

+    sparseTextureGradOffsetClampARB(s2DShadow, f16c2, compare, f16dPdxy2, f16dPdxy2, offset2, f16lodClamp, texel.x);

+    sparseTextureGradOffsetClampARB(s2DArray, c3, dPdxy2, dPdxy2, offset2, lodClamp, texel);

+    sparseTextureGradOffsetClampARB(s2DArray, f16c3, f16dPdxy2, f16dPdxy2, offset2, f16lodClamp, texel);

+    sparseTextureGradOffsetClampARB(s2DArrayShadow, c4, dPdxy2, dPdxy2, offset2, lodClamp, texel.x);

+    sparseTextureGradOffsetClampARB(s2DArrayShadow, f16c3, compare, f16dPdxy2, f16dPdxy2, offset2, f16lodClamp, texel.x);

+

+    return texel;

+}

+

+f16vec4 testTextureGradOffsetClamp()

+{

+    f16vec4 texel = f16vec4(0.0hf);

+

+    texel   += textureGradOffsetClampARB(s1D, c1, dPdxy1, dPdxy1, offset1, lodClamp);

+    texel   += textureGradOffsetClampARB(s1D, f16c1, f16dPdxy1, f16dPdxy1, offset1, f16lodClamp);

+    texel   += textureGradOffsetClampARB(s2D, c2, dPdxy2, dPdxy2, offset2, lodClamp);

+    texel   += textureGradOffsetClampARB(s2D, f16c2, f16dPdxy2, f16dPdxy2, offset2, f16lodClamp);

+    texel   += textureGradOffsetClampARB(s3D, c3, dPdxy3, dPdxy3, offset3, lodClamp);

+    texel   += textureGradOffsetClampARB(s3D, f16c3, f16dPdxy3, f16dPdxy3, offset3, f16lodClamp);

+    texel.x += textureGradOffsetClampARB(s1DShadow, c3, dPdxy1, dPdxy1, offset1, lodClamp);

+    texel.x += textureGradOffsetClampARB(s1DShadow, f16c2, compare, f16dPdxy1, f16dPdxy1, offset1, f16lodClamp);

+    texel.x += textureGradOffsetClampARB(s2DShadow, c3, dPdxy2, dPdxy2, offset2, lodClamp);

+    texel.x += textureGradOffsetClampARB(s2DShadow, f16c2, compare, f16dPdxy2, f16dPdxy2, offset2, f16lodClamp);

+    texel   += textureGradOffsetClampARB(s1DArray, c2, dPdxy1, dPdxy1, offset1, lodClamp);

+    texel   += textureGradOffsetClampARB(s1DArray, f16c2, f16dPdxy1, f16dPdxy1, offset1, f16lodClamp);

+    texel   += textureGradOffsetClampARB(s2DArray, c3, dPdxy2, dPdxy2, offset2, lodClamp);

+    texel   += textureGradOffsetClampARB(s2DArray, f16c3, f16dPdxy2, f16dPdxy2, offset2, f16lodClamp);

+    texel.x += textureGradOffsetClampARB(s1DArrayShadow, c3, dPdxy1, dPdxy1, offset1, lodClamp);

+    texel.x += textureGradOffsetClampARB(s1DArrayShadow, f16c2, compare, f16dPdxy1, f16dPdxy1, offset1, f16lodClamp);

+    texel.x += textureGradOffsetClampARB(s2DArrayShadow, c4, dPdxy2, dPdxy2, offset2, lodClamp);

+    texel.x += textureGradOffsetClampARB(s2DArrayShadow, f16c3, compare, f16dPdxy2, f16dPdxy2, offset2, f16lodClamp);

+

+    return texel;

+}

+

+f16vec4 testCombinedTextureSampler()

+{

+    f16vec4 texel = f16vec4(0.0hf);

+

+    texel   += texture(f16sampler1D(t1D, s), c1);

+    texel   += texture(f16sampler1D(t1D, s), f16c1, f16bias);

+    texel   += texture(f16sampler2D(t2D, s), c2);

+    texel   += texture(f16sampler2D(t2D, s), f16c2, f16bias);

+    texel   += texture(f16sampler3D(t3D, s), c3);

+    texel   += texture(f16sampler3D(t3D, s), f16c3, f16bias);

+    texel   += texture(f16samplerCube(tCube, s), c3);

+    texel   += texture(f16samplerCube(tCube, s), f16c3, f16bias);

+    texel.x += texture(f16sampler1DShadow(t1D, sShadow), c3);

+    texel.x += texture(f16sampler1DShadow(t1D, sShadow), f16c2, compare, f16bias);

+    texel.x += texture(f16sampler2DShadow(t2D, sShadow), c3);

+    texel.x += texture(f16sampler2DShadow(t2D, sShadow), f16c2, compare, f16bias);

+    texel.x += texture(f16samplerCubeShadow(tCube, sShadow), c4);

+    texel.x += texture(f16samplerCubeShadow(tCube, sShadow), f16c3, compare, f16bias);

+    texel   += texture(f16sampler1DArray(t1DArray, s), c2);

+    texel   += texture(f16sampler1DArray(t1DArray, s), f16c2, f16bias);

+    texel   += texture(f16sampler2DArray(t2DArray, s), c3);

+    texel   += texture(f16sampler2DArray(t2DArray, s), f16c3, f16bias);

+    texel   += texture(f16samplerCubeArray(tCubeArray, s), c4);

+    texel   += texture(f16samplerCubeArray(tCubeArray, s), f16c4, f16bias);

+    texel.x += texture(f16sampler1DArrayShadow(t1DArray, sShadow), c3);

+    texel.x += texture(f16sampler1DArrayShadow(t1DArray, sShadow), f16c2, compare, f16bias);

+    texel.x += texture(f16sampler2DArrayShadow(t2DArray, sShadow), c4);

+    texel.x += texture(f16sampler2DArrayShadow(t2DArray, sShadow), f16c3, compare);

+    texel   += texture(f16sampler2DRect(t2DRect, s), c2);

+    texel   += texture(f16sampler2DRect(t2DRect, s), f16c2);

+    texel.x += texture(f16sampler2DRectShadow(t2DRect, sShadow), c3);

+    texel.x += texture(f16sampler2DRectShadow(t2DRect, sShadow), f16c2, compare);

+    texel.x += texture(f16samplerCubeArrayShadow(tCubeArray, sShadow), c4, compare);

+    texel.x += texture(f16samplerCubeArrayShadow(tCubeArray, sShadow), f16c4, compare);

+

+    return texel;

+}

+

+f16vec4 testSubpassLoad()

+{

+    return subpassLoad(subpass) + subpassLoad(subpassMS, 2);

+}

+

+void main()

+{

+    f16vec4 result = f16vec4(0.0hf);

+

+    result  += testTexture();

+    result  += testTextureProj();

+    result  += testTextureLod();

+    result  += testTextureOffset();

+    result  += testTextureLodOffset();

+    result  += testTextureProjLodOffset();

+    result  += testTexelFetch();

+    result  += testTexelFetchOffset();

+    result  += testTextureGrad();

+    result  += testTextureGradOffset();

+    result  += testTextureProjGrad();

+    result  += testTextureProjGradoffset();

+    result  += testTextureGather();

+    result  += testTextureGatherOffset();

+    result  += testTextureGatherOffsets();

+    result  += testTextureGatherLod();

+    result  += testTextureGatherLodOffset();

+    result  += testTextureGatherLodOffsets();

+

+    result    += f16vec4(testTextureSize());

+    result.xy += f16vec2(testTextureQueryLod());

+    result.x  += float16_t(testTextureQueryLevels());

+    result.x  += float16_t(testTextureSamples());

+

+    result  += testImageLoad();

+    testImageStore(result);

+

+    result += testSparseTexture();

+    result += testSparseTextureLod();

+    result += testSparseTextureOffset();

+    result += testSparseTextureLodOffset();

+    result += testSparseTextureGrad();

+    result += testSparseTextureGradOffset();

+    result += testSparseTexelFetch();

+    result += testSparseTexelFetchOffset();

+    result += testSparseTextureGather();

+    result += testSparseTextureGatherOffset();

+    result += testSparseTextureGatherOffsets();

+    result += testSparseTextureGatherLod();

+    result += testSparseTextureGatherLodOffset();

+    result += testSparseTextureGatherLodOffsets();

+

+    result += testSparseImageLoad();

+

+    result += testSparseTextureClamp();

+    result += testTextureClamp();

+    result += testSparseTextureOffsetClamp();

+    result += testTextureOffsetClamp();

+    result += testSparseTextureGrad();

+    result += testTextureGrad();

+    result += testSparseTextureGradOffsetClamp();

+    result += testTextureGradOffsetClamp();

+

+    result += testCombinedTextureSampler();

+    result += testSubpassLoad();

+

+    fragColor = result;

+}

diff --git a/Test/spv.float32.frag b/Test/spv.float32.frag
new file mode 100644
index 0000000..471f6b3
--- /dev/null
+++ b/Test/spv.float32.frag
@@ -0,0 +1,277 @@
+#version 450
+
+#extension GL_KHX_shader_explicit_arithmetic_types: enable
+#extension GL_KHX_shader_explicit_arithmetic_types_int8: require
+#extension GL_KHX_shader_explicit_arithmetic_types_int16: require
+#extension GL_KHX_shader_explicit_arithmetic_types_int32: require
+#extension GL_KHX_shader_explicit_arithmetic_types_int64: require
+#extension GL_KHX_shader_explicit_arithmetic_types_float16: require
+#extension GL_KHX_shader_explicit_arithmetic_types_float32: require
+#extension GL_KHX_shader_explicit_arithmetic_types_float64: require
+
+void main()
+{
+}
+
+// Single float literals
+void literal()
+{
+    const float32_t f32c  = 0.000001f;
+    const f32vec2   f32cv = f32vec2(-0.25F, 0.03f);
+
+    f32vec2 f32v;
+    f32v.x  = f32c;
+    f32v   += f32cv;
+}
+
+// Block memory layout
+struct S
+{
+    float32_t  x;
+    f32vec2    y;
+    f32vec3    z;
+};
+
+layout(column_major, std140) uniform B1
+{
+    float32_t  a;
+    f32vec2    b;
+    f32vec3    c;
+    float32_t  d[2];
+    f32mat2x3  e;
+    f32mat2x3  f[2];
+    S          g;
+    S          h[2];
+};
+
+// Specialization constant
+layout(constant_id = 100) const float16_t sf16 = 0.125hf;
+layout(constant_id = 101) const float32_t sf   = 0.25;
+layout(constant_id = 102) const float64_t sd   = 0.5lf;
+
+const float  f16_to_f = float(sf16);
+const double f16_to_d = float(sf16);
+
+const float16_t f_to_f16 = float16_t(sf);
+const float16_t d_to_f16 = float16_t(sd);
+
+void operators()
+{
+    float32_t f32;
+    f32vec2   f32v;
+    f32mat2x2 f32m;
+    bool      b;
+
+    // Arithmetic
+    f32v += f32v;
+    f32v -= f32v;
+    f32v *= f32v;
+    f32v /= f32v;
+    f32v++;
+    f32v--;
+    ++f32m;
+    --f32m;
+    f32v = -f32v;
+    f32m = -f32m;
+
+    f32 = f32v.x + f32v.y;
+    f32 = f32v.x - f32v.y;
+    f32 = f32v.x * f32v.y;
+    f32 = f32v.x / f32v.y;
+
+    // Relational
+    b = (f32v.x != f32);
+    b = (f32v.y == f32);
+    b = (f32v.x >  f32);
+    b = (f32v.y <  f32);
+    b = (f32v.x >= f32);
+    b = (f32v.y <= f32);
+
+    // Vector/matrix operations
+    f32v = f32v * f32;
+    f32m = f32m * f32;
+    f32v = f32m * f32v;
+    f32v = f32v * f32m;
+    f32m = f32m * f32m;
+}
+
+void typeCast()
+{
+    bvec3   bv;
+    f32vec3   f32v;
+    f64vec3   f64v;
+    i8vec3    i8v;
+    u8vec3    u8v;
+    i16vec3   i16v;
+    u16vec3   u16v;
+    i32vec3   i32v;
+    u32vec3   u32v;
+    i64vec3   i64v;
+    u64vec3   u64v;
+    f16vec3   f16v;
+
+    f64v = f32v;            // float32_t -> float64_t
+
+    f32v = f32vec3(bv);     // bool -> float32
+    bv   = bvec3(f32v);     // float32 -> bool
+
+    f32v = f32vec3(f64v);   // double -> float32
+    f64v = f64vec3(f32v);   // float32 -> double
+
+    f32v = f32vec3(f16v);   // float16 -> float32
+    f16v = f16vec3(f32v);   // float32 -> float16
+
+    i8v  = i8vec3(f32v);    //  float32 -> int8
+    i16v = i16vec3(f32v);    // float32 -> int16
+    i32v = i32vec3(f32v);    // float32 -> int32
+    i64v = i64vec3(f32v);    // float32 -> int64
+
+    u8v  = u8vec3(f32v);    //  float32 -> uint8
+    u16v = u16vec3(f32v);    // float32 -> uint16
+    u32v = u32vec3(f32v);    // float32 -> uint32
+    u64v = u64vec3(f32v);    // float32 -> uint64
+}
+
+void builtinAngleTrigFuncs()
+{
+    f32vec4 f32v1, f32v2;
+
+    f32v2 = radians(f32v1);
+    f32v2 = degrees(f32v1);
+    f32v2 = sin(f32v1);
+    f32v2 = cos(f32v1);
+    f32v2 = tan(f32v1);
+    f32v2 = asin(f32v1);
+    f32v2 = acos(f32v1);
+    f32v2 = atan(f32v1, f32v2);
+    f32v2 = atan(f32v1);
+    f32v2 = sinh(f32v1);
+    f32v2 = cosh(f32v1);
+    f32v2 = tanh(f32v1);
+    f32v2 = asinh(f32v1);
+    f32v2 = acosh(f32v1);
+    f32v2 = atanh(f32v1);
+}
+
+void builtinExpFuncs()
+{
+    f32vec2 f32v1, f32v2;
+
+    f32v2 = pow(f32v1, f32v2);
+    f32v2 = exp(f32v1);
+    f32v2 = log(f32v1);
+    f32v2 = exp2(f32v1);
+    f32v2 = log2(f32v1);
+    f32v2 = sqrt(f32v1);
+    f32v2 = inversesqrt(f32v1);
+}
+
+void builtinCommonFuncs()
+{
+    f32vec3   f32v1, f32v2, f32v3;
+    float32_t f32;
+    bool  b;
+    bvec3 bv;
+    ivec3 iv;
+
+    f32v2 = abs(f32v1);
+    f32v2 = sign(f32v1);
+    f32v2 = floor(f32v1);
+    f32v2 = trunc(f32v1);
+    f32v2 = round(f32v1);
+    f32v2 = roundEven(f32v1);
+    f32v2 = ceil(f32v1);
+    f32v2 = fract(f32v1);
+    f32v2 = mod(f32v1, f32v2);
+    f32v2 = mod(f32v1, f32);
+    f32v3 = modf(f32v1, f32v2);
+    f32v3 = min(f32v1, f32v2);
+    f32v3 = min(f32v1, f32);
+    f32v3 = max(f32v1, f32v2);
+    f32v3 = max(f32v1, f32);
+    f32v3 = clamp(f32v1, f32, f32v2.x);
+    f32v3 = clamp(f32v1, f32v2, f32vec3(f32));
+    f32v3 = mix(f32v1, f32v2, f32);
+    f32v3 = mix(f32v1, f32v2, f32v3);
+    f32v3 = mix(f32v1, f32v2, bv);
+    f32v3 = step(f32v1, f32v2);
+    f32v3 = step(f32, f32v3);
+    f32v3 = smoothstep(f32v1, f32v2, f32v3);
+    f32v3 = smoothstep(f32, f32v1.x, f32v2);
+    b     = isnan(f32);
+    bv    = isinf(f32v1);
+    f32v3 = fma(f32v1, f32v2, f32v3);
+    f32v2 = frexp(f32v1, iv);
+    f32v2 = ldexp(f32v1, iv);
+}
+
+void builtinGeometryFuncs()
+{
+    float32_t f32;
+    f32vec3   f32v1, f32v2, f32v3;
+
+    f32   = length(f32v1);
+    f32   = distance(f32v1, f32v2);
+    f32   = dot(f32v1, f32v2);
+    f32v3 = cross(f32v1, f32v2);
+    f32v2 = normalize(f32v1);
+    f32v3 = faceforward(f32v1, f32v2, f32v3);
+    f32v3 = reflect(f32v1, f32v2);
+    f32v3 = refract(f32v1, f32v2, f32);
+}
+
+void builtinMatrixFuncs()
+{
+    f32mat2x3 f32m1, f32m2, f32m3;
+    f32mat3x2 f32m4;
+    f32mat3   f32m5;
+    f32mat4   f32m6, f32m7;
+
+    f32vec3 f32v1;
+    f32vec2 f32v2;
+
+    float32_t f32;
+
+    f32m3 = matrixCompMult(f32m1, f32m2);
+    f32m1 = outerProduct(f32v1, f32v2);
+    f32m4 = transpose(f32m1);
+    f32   = determinant(f32m5);
+    f32m6 = inverse(f32m7);
+}
+
+void builtinVecRelFuncs()
+{
+    f32vec3 f32v1, f32v2;
+    bvec3   bv;
+
+    bv = lessThan(f32v1, f32v2);
+    bv = lessThanEqual(f32v1, f32v2);
+    bv = greaterThan(f32v1, f32v2);
+    bv = greaterThanEqual(f32v1, f32v2);
+    bv = equal(f32v1, f32v2);
+    bv = notEqual(f32v1, f32v2);
+}
+
+in f32vec3 if32v;
+
+void builtinFragProcFuncs()
+{
+    f32vec3 f32v;
+
+    // Derivative
+    f32v.x  = dFdx(if32v.x);
+    f32v.y  = dFdy(if32v.y);
+    f32v.xy = dFdxFine(if32v.xy);
+    f32v.xy = dFdyFine(if32v.xy);
+    f32v    = dFdxCoarse(if32v);
+    f32v    = dFdxCoarse(if32v);
+
+    f32v.x  = fwidth(if32v.x);
+    f32v.xy = fwidthFine(if32v.xy);
+    f32v    = fwidthCoarse(if32v);
+
+    // Interpolation
+    f32v.x  = interpolateAtCentroid(if32v.x);
+    f32v.xy = interpolateAtSample(if32v.xy, 1);
+    f32v    = interpolateAtOffset(if32v, f32vec2(0.5f));
+}
diff --git a/Test/spv.float64.frag b/Test/spv.float64.frag
new file mode 100644
index 0000000..efbec77
--- /dev/null
+++ b/Test/spv.float64.frag
@@ -0,0 +1,272 @@
+#version 450
+
+#extension GL_KHX_shader_explicit_arithmetic_types: enable
+#extension GL_KHX_shader_explicit_arithmetic_types_int8: require
+#extension GL_KHX_shader_explicit_arithmetic_types_int16: require
+#extension GL_KHX_shader_explicit_arithmetic_types_int32: require
+#extension GL_KHX_shader_explicit_arithmetic_types_int64: require
+#extension GL_KHX_shader_explicit_arithmetic_types_float16: require
+#extension GL_KHX_shader_explicit_arithmetic_types_float32: require
+#extension GL_KHX_shader_explicit_arithmetic_types_float64: require
+
+void main()
+{
+}
+
+// Single float literals
+void literal()
+{
+    const float64_t f64c  = 0.000001LF;
+    const f64vec2   f64cv = f64vec2(-0.25lF, 0.03Lf);
+
+    f64vec2 f64v;
+    f64v.x  = f64c;
+    f64v   += f64cv;
+}
+
+// Block memory layout
+struct S
+{
+    float64_t  x;
+    f64vec2    y;
+    f64vec3    z;
+};
+
+layout(column_major, std140) uniform B1
+{
+    float64_t  a;
+    f64vec2    b;
+    f64vec3    c;
+    float64_t  d[2];
+    f64mat2x3  e;
+    f64mat2x3  f[2];
+    S          g;
+    S          h[2];
+};
+
+// Specialization constant
+layout(constant_id = 100) const float16_t sf16 = 0.125hf;
+layout(constant_id = 101) const float32_t sf   = 0.25;
+layout(constant_id = 102) const float64_t sd   = 0.5lf;
+
+const float  f16_to_f = float(sf16);
+const double f16_to_d = float(sf16);
+
+const float16_t f_to_f16 = float16_t(sf);
+const float16_t d_to_f16 = float16_t(sd);
+
+void operators()
+{
+    float64_t f64;
+    f64vec2   f64v;
+    f64mat2x2 f64m;
+    bool      b;
+
+    // Arithmetic
+    f64v += f64v;
+    f64v -= f64v;
+    f64v *= f64v;
+    f64v /= f64v;
+    f64v++;
+    f64v--;
+    ++f64m;
+    --f64m;
+    f64v = -f64v;
+    f64m = -f64m;
+
+    f64 = f64v.x + f64v.y;
+    f64 = f64v.x - f64v.y;
+    f64 = f64v.x * f64v.y;
+    f64 = f64v.x / f64v.y;
+
+    // Relational
+    b = (f64v.x != f64);
+    b = (f64v.y == f64);
+    b = (f64v.x >  f64);
+    b = (f64v.y <  f64);
+    b = (f64v.x >= f64);
+    b = (f64v.y <= f64);
+
+    // Vector/matrix operations
+    f64v = f64v * f64;
+    f64m = f64m * f64;
+    f64v = f64m * f64v;
+    f64v = f64v * f64m;
+    f64m = f64m * f64m;
+}
+
+void typeCast()
+{
+    bvec3   bv;
+    f32vec3   f32v;
+    f64vec3   f64v;
+    i8vec3    i8v;
+    u8vec3    u8v;
+    i16vec3   i16v;
+    u16vec3   u16v;
+    i32vec3   i32v;
+    u32vec3   u32v;
+    i64vec3   i64v;
+    u64vec3   u64v;
+    f16vec3   f16v;
+
+    f64v = f64vec3(bv);     // bool -> float64
+    bv   = bvec3(f64v);     // float64 -> bool
+
+    f64v = f64vec3(f16v);   // float16 -> float64
+    f16v = f16vec3(f64v);   // float64 -> float16
+
+    i8v  = i8vec3(f64v);    //  float64 -> int8
+    i16v = i16vec3(f64v);    // float64 -> int16
+    i32v = i32vec3(f64v);    // float64 -> int32
+    i64v = i64vec3(f64v);    // float64 -> int64
+
+    u8v  = u8vec3(f64v);    //  float64 -> uint8
+    u16v = u16vec3(f64v);    // float64 -> uint16
+    u32v = u32vec3(f64v);    // float64 -> uint32
+    u64v = u64vec3(f64v);    // float64 -> uint64
+}
+
+void builtinAngleTrigFuncs()
+{
+    f64vec4 f64v1, f64v2;
+
+    f64v2 = radians(f64v1);
+    f64v2 = degrees(f64v1);
+    f64v2 = sin(f64v1);
+    f64v2 = cos(f64v1);
+    f64v2 = tan(f64v1);
+    f64v2 = asin(f64v1);
+    f64v2 = acos(f64v1);
+    f64v2 = atan(f64v1, f64v2);
+    f64v2 = atan(f64v1);
+    f64v2 = sinh(f64v1);
+    f64v2 = cosh(f64v1);
+    f64v2 = tanh(f64v1);
+    f64v2 = asinh(f64v1);
+    f64v2 = acosh(f64v1);
+    f64v2 = atanh(f64v1);
+}
+
+void builtinExpFuncs()
+{
+    f64vec2 f64v1, f64v2;
+
+    f64v2 = pow(f64v1, f64v2);
+    f64v2 = exp(f64v1);
+    f64v2 = log(f64v1);
+    f64v2 = exp2(f64v1);
+    f64v2 = log2(f64v1);
+    f64v2 = sqrt(f64v1);
+    f64v2 = inversesqrt(f64v1);
+}
+
+void builtinCommonFuncs()
+{
+    f64vec3   f64v1, f64v2, f64v3;
+    float64_t f64;
+    bool  b;
+    bvec3 bv;
+    ivec3 iv;
+
+    f64v2 = abs(f64v1);
+    f64v2 = sign(f64v1);
+    f64v2 = floor(f64v1);
+    f64v2 = trunc(f64v1);
+    f64v2 = round(f64v1);
+    f64v2 = roundEven(f64v1);
+    f64v2 = ceil(f64v1);
+    f64v2 = fract(f64v1);
+    f64v2 = mod(f64v1, f64v2);
+    f64v2 = mod(f64v1, f64);
+    f64v3 = modf(f64v1, f64v2);
+    f64v3 = min(f64v1, f64v2);
+    f64v3 = min(f64v1, f64);
+    f64v3 = max(f64v1, f64v2);
+    f64v3 = max(f64v1, f64);
+    f64v3 = clamp(f64v1, f64, f64v2.x);
+    f64v3 = clamp(f64v1, f64v2, f64vec3(f64));
+    f64v3 = mix(f64v1, f64v2, f64);
+    f64v3 = mix(f64v1, f64v2, f64v3);
+    f64v3 = mix(f64v1, f64v2, bv);
+    f64v3 = step(f64v1, f64v2);
+    f64v3 = step(f64, f64v3);
+    f64v3 = smoothstep(f64v1, f64v2, f64v3);
+    f64v3 = smoothstep(f64, f64v1.x, f64v2);
+    b     = isnan(f64);
+    bv    = isinf(f64v1);
+    f64v3 = fma(f64v1, f64v2, f64v3);
+    f64v2 = frexp(f64v1, iv);
+    f64v2 = ldexp(f64v1, iv);
+}
+
+void builtinGeometryFuncs()
+{
+    float64_t f64;
+    f64vec3   f64v1, f64v2, f64v3;
+
+    f64   = length(f64v1);
+    f64   = distance(f64v1, f64v2);
+    f64   = dot(f64v1, f64v2);
+    f64v3 = cross(f64v1, f64v2);
+    f64v2 = normalize(f64v1);
+    f64v3 = faceforward(f64v1, f64v2, f64v3);
+    f64v3 = reflect(f64v1, f64v2);
+    f64v3 = refract(f64v1, f64v2, f64);
+}
+
+void builtinMatrixFuncs()
+{
+    f64mat2x3 f64m1, f64m2, f64m3;
+    f64mat3x2 f64m4;
+    f64mat3   f64m5;
+    f64mat4   f64m6, f64m7;
+
+    f64vec3 f64v1;
+    f64vec2 f64v2;
+
+    float64_t f64;
+
+    f64m3 = matrixCompMult(f64m1, f64m2);
+    f64m1 = outerProduct(f64v1, f64v2);
+    f64m4 = transpose(f64m1);
+    f64   = determinant(f64m5);
+    f64m6 = inverse(f64m7);
+}
+
+void builtinVecRelFuncs()
+{
+    f64vec3 f64v1, f64v2;
+    bvec3   bv;
+
+    bv = lessThan(f64v1, f64v2);
+    bv = lessThanEqual(f64v1, f64v2);
+    bv = greaterThan(f64v1, f64v2);
+    bv = greaterThanEqual(f64v1, f64v2);
+    bv = equal(f64v1, f64v2);
+    bv = notEqual(f64v1, f64v2);
+}
+
+in flat f64vec3 if64v;
+
+void builtinFragProcFuncs()
+{
+    f64vec3 f64v;
+
+    // Derivative
+    f64v.x  = dFdx(if64v.x);
+    f64v.y  = dFdy(if64v.y);
+    f64v.xy = dFdxFine(if64v.xy);
+    f64v.xy = dFdyFine(if64v.xy);
+    f64v    = dFdxCoarse(if64v);
+    f64v    = dFdxCoarse(if64v);
+
+    f64v.x  = fwidth(if64v.x);
+    f64v.xy = fwidthFine(if64v.xy);
+    f64v    = fwidthCoarse(if64v);
+
+    // Interpolation
+    f64v.x  = interpolateAtCentroid(if64v.x);
+    f64v.xy = interpolateAtSample(if64v.xy, 1);
+    f64v    = interpolateAtOffset(if64v, f64vec2(0.5f));
+}
diff --git a/Test/spv.fullyCovered.frag b/Test/spv.fullyCovered.frag
new file mode 100644
index 0000000..c7f3085
--- /dev/null
+++ b/Test/spv.fullyCovered.frag
@@ -0,0 +1,9 @@
+#version 450
+
+#extension GL_NV_conservative_raster_underestimation : enable
+
+out vec4 color;
+
+void main() {
+    color = vec4(gl_FragFullyCoveredNV, 0, 0, 0);
+}
diff --git a/Test/spv.glsl.register.noautoassign.frag b/Test/spv.glsl.register.noautoassign.frag
index f754d8a..c385fbb 100644
--- a/Test/spv.glsl.register.noautoassign.frag
+++ b/Test/spv.glsl.register.noautoassign.frag
@@ -1,23 +1,23 @@
 #version 450
 
 uniform layout(binding=0) sampler       g_sSamp1;
-uniform sampler       g_sSamp2;
+uniform layout(binding=1) sampler       g_sSamp2;
 uniform layout(binding=2) sampler       g_sSamp3[2];
-uniform sampler       g_sSamp4[3];
-uniform sampler       g_sSamp5;
+uniform layout(binding=3) sampler       g_sSamp4[3];
+uniform layout(binding=4) sampler       g_sSamp5;
 
-uniform sampler       g_sSamp_unused1;
-uniform sampler       g_sSamp_unused2;
+uniform layout(binding=5) sampler       g_sSamp_unused1;
+uniform layout(binding=6) sampler       g_sSamp_unused2;
 
-uniform layout(binding=1) texture1D          g_tTex1;
-uniform texture1D  g_tTex2;
-uniform layout(binding=3) texture1D          g_tTex3[2];
-uniform texture1D          g_tTex4[3];
-uniform texture1D          g_tTex5;
+uniform layout(binding=7) texture1D          g_tTex1;
+uniform layout(binding=8) texture1D          g_tTex2;
+uniform layout(binding=9) texture1D          g_tTex3[2];
+uniform layout(binding=10) texture1D          g_tTex4[3];
+uniform layout(binding=11) texture1D          g_tTex5;
 
-uniform layout(binding=0)  texture1D          g_tTex_unused1;
-uniform layout(binding=2)  texture1D          g_tTex_unused2;
-uniform texture1D          g_tTex_unused3;
+uniform layout(binding=12) texture1D          g_tTex_unused1;
+uniform layout(binding=13) texture1D          g_tTex_unused2;
+uniform layout(binding=14) texture1D          g_tTex_unused3;
 
 struct MyStruct_t {
     int a;
diff --git a/Test/spv.int16.amd.frag b/Test/spv.int16.amd.frag
new file mode 100644
index 0000000..818e6d8
--- /dev/null
+++ b/Test/spv.int16.amd.frag
@@ -0,0 +1,314 @@
+#version 450 core
+
+#extension GL_ARB_gpu_shader_int64: enable
+#extension GL_AMD_gpu_shader_half_float: enable
+#extension GL_AMD_gpu_shader_int16: enable
+
+layout(binding = 0) uniform Uniforms
+{
+    uint i;
+};
+
+// int16/uint16 in block
+layout(std140, binding = 1) uniform Block
+{
+    i16vec3  i16v;
+    uint16_t u16;
+} block;
+
+// int16/uint16 for input
+layout(location = 0) in flat u16vec3 iu16v;
+layout(location = 1) in flat int16_t ii16;
+
+void literal()
+{
+    const int16_t i16c[3] =
+    {
+        0x111S,         // Hex
+        -2s,            // Dec
+        0400s,          // Oct
+    };
+
+    const uint16_t u16c[] =
+    {
+        0xFFFFus,       // Hex
+        65535US,        // Dec
+        0177777us,      // Oct
+    };
+
+    uint16_t u16 = i16c[i] + u16c[i];
+}
+
+void operators()
+{
+    u16vec3  u16v;
+    int16_t  i16;
+    uint16_t u16;
+    int      i;
+    uint     u;
+    bool     b;
+
+    // Unary
+    u16v++;
+    i16--;
+    ++i16;
+    --u16v;
+
+    u16v = ~u16v;
+
+    i16 = +i16;
+    u16v = -u16v;
+
+    // Arithmetic
+    u16  += i16;
+    u16v -= u16v;
+    i16  *= i16;
+    u16v /= u16v;
+    u16v %= i16;
+
+    u16v = u16v + u16v;
+    u16  = i16 - u16;
+    u16v = u16v * i16;
+    i16  = i16 * i16;
+    i16  = i16 % i16;
+
+    // Shift
+    u16v <<= i16;
+    i16  >>= u16v.y;
+
+    i16  = i16 << u16v.z;
+    u16v = u16v << i16;
+
+    // Relational
+    b = (u16v.x != i16);
+    b = (i16 == u16v.x);
+    b = (u16v.x > u16v.y);
+    b = (i16 < u);
+    b = (u16v.y >= u16v.x);
+    b = (i16 <= i);
+
+    // Bitwise
+    u16v |= i16;
+    u16  = i16 | u16;
+    i16  &= i16;
+    u16v = u16v & u16v;
+    u16v ^= i16;
+    u16v = u16v ^ i16;
+}
+
+void typeCast()
+{
+    bvec2 bv;
+    ivec2 iv;
+    uvec2 uv;
+    vec2  fv;
+    dvec2 dv;
+
+    f16vec2 f16v;
+    i64vec2 i64v;
+    u64vec2 u64v;
+    i16vec2 i16v;
+    u16vec2 u16v;
+
+    i16v = i16vec2(bv);   // bool -> int16
+    u16v = u16vec2(bv);   // bool -> uint16
+    bv   = bvec2(i16v);   // int16  -> bool
+    bv   = bvec2(u16v);   // uint16 -> bool
+
+    i16v = i16vec2(iv);   // int -> int16
+    u16v = u16vec2(iv);   // int -> uint16
+    iv   = i16v;          // int16  -> int
+    iv   = ivec2(u16v);   // uint16 -> int
+
+    i16v = i16vec2(uv);   // uint -> int16
+    u16v = u16vec2(uv);   // uint -> uint16
+    uv   = i16v;          // int16  -> uint
+    uv   = u16v;          // uint16 -> uint
+
+    i16v = i16vec2(fv);   // float -> int16
+    u16v = u16vec2(fv);   // float -> uint16
+    fv   = i16v;          // int16  -> float
+    fv   = u16v;          // uint16 -> float
+
+    i16v = i16vec2(dv);   // double -> int16
+    u16v = u16vec2(dv);   // double -> uint16
+    dv   = i16v;          // int16  -> double
+    dv   = u16v;          // uint16 -> double
+
+    i16v = i16vec2(f16v); // float16 -> int16
+    u16v = u16vec2(f16v); // float16 -> uint16
+    f16v = i16v;          // int16  -> float16
+    f16v = u16v;          // uint16 -> float16
+
+    i16v = i16vec2(i64v); // int64 -> int16
+    u16v = u16vec2(i64v); // int64 -> uint16
+    i64v = i16v;          // int16  -> int64
+    i64v = i64vec2(u16v); // uint16 -> int64
+
+    i16v = i16vec2(u64v); // uint64 -> int16
+    u16v = u16vec2(u64v); // uint64 -> uint16
+    u64v = i16v;          // int16  -> uint64
+    u64v = u16v;          // uint16 -> uint64
+
+    i16v = i16vec2(u16v); // uint16 -> int16
+    u16v = i16v;          // int16 -> uint16
+}
+
+void builtinFuncs()
+{
+    i16vec2  i16v;
+    u16vec3  u16v;
+    f16vec3  f16v;
+    bvec3    bv;
+
+    int16_t  i16;
+    uint16_t u16;
+
+    // abs()
+    i16v = abs(i16v);
+
+    // sign()
+    i16v  = sign(i16v);
+
+    // min()
+    i16v = min(i16v, i16);
+    i16v = min(i16v, i16vec2(-1s));
+    u16v = min(u16v, u16);
+    u16v = min(u16v, u16vec3(0us));
+
+    // max()
+    i16v = max(i16v, i16);
+    i16v = max(i16v, i16vec2(-1s));
+    u16v = max(u16v, u16);
+    u16v = max(u16v, u16vec3(0us));
+
+    // clamp()
+    i16v = clamp(i16v, -i16, i16);
+    i16v = clamp(i16v, -i16v, i16v);
+    u16v = clamp(u16v, -u16, u16);
+    u16v = clamp(u16v, -u16v, u16v);
+
+    // mix()
+    i16  = mix(i16v.x, i16v.y, true);
+    i16v = mix(i16vec2(i16), i16vec2(-i16), bvec2(false));
+    u16  = mix(u16v.x, u16v.y, true);
+    u16v = mix(u16vec3(u16), u16vec3(-u16), bvec3(false));
+
+    // frexp()
+    i16vec3 exp;
+    f16v = frexp(f16v, exp);
+
+    // ldexp()
+    f16v = ldexp(f16v, exp);
+
+    // float16BitsToInt16()
+    i16v = float16BitsToInt16(f16v.xy);
+
+    // float16BitsToUint16()
+    u16v.x = float16BitsToUint16(f16v.z);
+
+    // int16BitsToFloat16()
+    f16v.xy = int16BitsToFloat16(i16v);
+
+    // uint16BitsToFloat16()
+    f16v = uint16BitsToFloat16(u16v);
+
+    // packInt2x16()
+    int packi = packInt2x16(i16v);
+
+    // unpackInt2x16()
+    i16v = unpackInt2x16(packi);
+
+    // packUint2x16()
+    uint packu = packUint2x16(u16v.xy);
+
+    // unpackUint2x16()
+    u16v.xy = unpackUint2x16(packu);
+
+    // packInt4x16()
+    int64_t packi64 = packInt4x16(i16vec4(i16));
+
+    // unpackInt4x16()
+    i16v = unpackInt4x16(packi64).xy;
+
+    // packUint4x16()
+    uint64_t packu64 = packUint4x16(u16vec4(u16));
+
+    // unpackUint4x16()
+    u16v = unpackUint4x16(packu64).xyz;
+
+    // lessThan()
+    bv    = lessThan(u16v, u16vec3(u16));
+    bv.xy = lessThan(i16v, i16vec2(i16));
+
+    // lessThanEqual()
+    bv    = lessThanEqual(u16v, u16vec3(u16));
+    bv.xy = lessThanEqual(i16v, i16vec2(i16));
+
+    // greaterThan()
+    bv    = greaterThan(u16v, u16vec3(u16));
+    bv.xy = greaterThan(i16v, i16vec2(i16));
+
+    // greaterThanEqual()
+    bv    = greaterThanEqual(u16v, u16vec3(u16));
+    bv.xy = greaterThanEqual(i16v, i16vec2(i16));
+
+    // equal()
+    bv    = equal(u16v, u16vec3(u16));
+    bv.xy = equal(i16v, i16vec2(i16));
+
+    // notEqual()
+    bv    = notEqual(u16v, u16vec3(u16));
+    bv.xy = notEqual(i16v, i16vec2(i16));
+}
+
+// Type conversion for specialization constant
+layout(constant_id = 100) const int64_t  si64 = -10L;
+layout(constant_id = 101) const uint64_t su64 = 20UL;
+layout(constant_id = 102) const int  si = -5;
+layout(constant_id = 103) const uint su = 4;
+layout(constant_id = 104) const bool sb = true;
+layout(constant_id = 105) const int16_t si16 = -5S;
+layout(constant_id = 106) const uint16_t su16 = 4US;
+
+// bool <-> int16/uint16
+const bool i16_to_b = bool(si16);
+const bool u16_to_b = bool(su16);
+const int16_t  b_to_i16 = int16_t(sb);
+const uint16_t b_to_u16 = uint16_t(sb);
+
+// int <-> int16/uint16
+const int i16_to_i = int(si16);
+const int u16_to_i = int(su16);
+const int16_t  i_to_i16 = int16_t(si);
+const uint16_t i_to_u16 = uint16_t(si);
+
+// uint <-> int16/uint16
+const uint i16_to_u = uint(si16);
+const uint u16_to_u = uint(su16);
+const int16_t  u_to_i16 = int16_t(su);
+const uint16_t u_to_u16 = uint16_t(su);
+
+// int64 <-> int16/uint16
+const int64_t i16_to_i64 = int64_t(si16);
+const int64_t u16_to_i64 = int64_t(su16);
+const int16_t  i64_to_i16 = int16_t(si64);
+const uint16_t i64_to_u16 = uint16_t(si64);
+
+// uint64 <-> int16/uint16
+const uint64_t i16_to_u64 = uint64_t(si16);
+const uint64_t u16_to_u64 = uint64_t(su16);
+const int16_t  u64_to_i16 = int16_t(su64);
+const uint16_t u64_to_u16 = uint16_t(su64);
+
+// int16 <-> uint16
+const uint16_t i16_to_u16 = uint16_t(si16);
+const int16_t  u16_to_i16 = int16_t(su16);
+
+void main()
+{
+    literal();
+    operators();
+    typeCast();
+    builtinFuncs();
+}
diff --git a/Test/spv.int16.frag b/Test/spv.int16.frag
index 9dd9090..d29894b 100644
--- a/Test/spv.int16.frag
+++ b/Test/spv.int16.frag
@@ -1,314 +1,251 @@
-#version 450 core

-

-#extension GL_ARB_gpu_shader_int64: enable

-#extension GL_AMD_gpu_shader_half_float: enable

-#extension GL_AMD_gpu_shader_int16: enable

-

-layout(binding = 0) uniform Uniforms

-{

-    uint i;

-};

-

-// int16/uint16 in block

-layout(std140, binding = 1) uniform Block

-{

-    i16vec3  i16v;

-    uint16_t u16;

-} block;

-

-// int16/uint16 for input

-layout(location = 0) in flat u16vec3 iu16v;

-layout(location = 1) in flat int16_t ii16;

-

-void literal()

-{

-    const int16_t i16c[3] =

-    {

-        0x111S,         // Hex

-        -2s,            // Dec

-        0400s,          // Oct

-    };

-

-    const uint16_t u16c[] =

-    {

-        0xFFFFus,       // Hex

-        65535US,        // Dec

-        0177777us,      // Oct

-    };

-

-    uint16_t u16 = i16c[i] + u16c[i];

-}

-

-void operators()

-{

-    u16vec3  u16v;

-    int16_t  i16;

-    uint16_t u16;

-    int      i;

-    uint     u;

-    bool     b;

-

-    // Unary

-    u16v++;

-    i16--;

-    ++i16;

-    --u16v;

-

-    u16v = ~u16v;

-

-    i16 = +i16;

-    u16v = -u16v;

-

-    // Arithmetic

-    u16  += i16;

-    u16v -= u16v;

-    i16  *= i16;

-    u16v /= u16v;

-    u16v %= i16;

-

-    u16v = u16v + u16v;

-    u16  = i16 - u16;

-    u16v = u16v * i16;

-    i16  = i16 * i16;

-    i16  = i16 % i16;

-

-    // Shift

-    u16v <<= i;

-    i16  >>= u16v.y;

-

-    i16  = i16 << u16v.z;

-    u16v = u16v << i16;

-

-    // Relational

-    b = (u16v.x != i16);

-    b = (i16 == u16v.x);

-    b = (u16v.x > u16v.y);

-    b = (i16 < u);

-    b = (u16v.y >= u16v.x);

-    b = (i16 <= i);

-

-    // Bitwise

-    u16v |= i16;

-    u16  = i16 | u16;

-    i16  &= i16;

-    u16v = u16v & u16v;

-    u16v ^= i16;

-    u16v = u16v ^ i16;

-}

-

-void typeCast()

-{

-    bvec2 bv;

-    ivec2 iv;

-    uvec2 uv;

-    vec2  fv;

-    dvec2 dv;

-

-    f16vec2 f16v;

-    i64vec2 i64v;

-    u64vec2 u64v;

-    i16vec2 i16v;

-    u16vec2 u16v;

-

-    i16v = i16vec2(bv);   // bool -> int16

-    u16v = u16vec2(bv);   // bool -> uint16

-    bv   = bvec2(i16v);   // int16  -> bool

-    bv   = bvec2(u16v);   // uint16 -> bool

-

-    i16v = i16vec2(iv);   // int -> int16

-    u16v = u16vec2(iv);   // int -> uint16

-    iv   = i16v;          // int16  -> int

-    iv   = ivec2(u16v);   // uint16 -> int

-

-    i16v = i16vec2(uv);   // uint -> int16

-    u16v = u16vec2(uv);   // uint -> uint16

-    uv   = i16v;          // int16  -> uint

-    uv   = u16v;          // uint16 -> uint

-

-    i16v = i16vec2(fv);   // float -> int16

-    u16v = u16vec2(fv);   // float -> uint16

-    fv   = i16v;          // int16  -> float

-    fv   = u16v;          // uint16 -> float

-

-    i16v = i16vec2(dv);   // double -> int16

-    u16v = u16vec2(dv);   // double -> uint16

-    dv   = i16v;          // int16  -> double

-    dv   = u16v;          // uint16 -> double

-

-    i16v = i16vec2(f16v); // float16 -> int16

-    u16v = u16vec2(f16v); // float16 -> uint16

-    f16v = i16v;          // int16  -> float16

-    f16v = u16v;          // uint16 -> float16

-

-    i16v = i16vec2(i64v); // int64 -> int16

-    u16v = u16vec2(i64v); // int64 -> uint16

-    i64v = i16v;          // int16  -> int64

-    i64v = i64vec2(u16v); // uint16 -> int64

-

-    i16v = i16vec2(u64v); // uint64 -> int16

-    u16v = u16vec2(u64v); // uint64 -> uint16

-    u64v = i16v;          // int16  -> uint64

-    u64v = u16v;          // uint16 -> uint64

-

-    i16v = i16vec2(u16v); // uint16 -> int16

-    u16v = i16v;          // int16 -> uint16

-}

-

-void builtinFuncs()

-{

-    i16vec2  i16v;

-    u16vec3  u16v;

-    f16vec3  f16v;

-    bvec3    bv;

-

-    int16_t  i16;

-    uint16_t u16;

-

-    // abs()

-    i16v = abs(i16v);

-

-    // sign()

-    i16v  = sign(i16v);

-

-    // min()

-    i16v = min(i16v, i16);

-    i16v = min(i16v, i16vec2(-1s));

-    u16v = min(u16v, u16);

-    u16v = min(u16v, u16vec3(0us));

-

-    // max()

-    i16v = max(i16v, i16);

-    i16v = max(i16v, i16vec2(-1s));

-    u16v = max(u16v, u16);

-    u16v = max(u16v, u16vec3(0us));

-

-    // clamp()

-    i16v = clamp(i16v, -i16, i16);

-    i16v = clamp(i16v, -i16v, i16v);

-    u16v = clamp(u16v, -u16, u16);

-    u16v = clamp(u16v, -u16v, u16v);

-

-    // mix()

-    i16  = mix(i16v.x, i16v.y, true);

-    i16v = mix(i16vec2(i16), i16vec2(-i16), bvec2(false));

-    u16  = mix(u16v.x, u16v.y, true);

-    u16v = mix(u16vec3(u16), u16vec3(-u16), bvec3(false));

-

-    // frexp()

-    i16vec3 exp;

-    f16v = frexp(f16v, exp);

-

-    // ldexp()

-    f16v = ldexp(f16v, exp);

-

-    // float16BitsToInt16()

-    i16v = float16BitsToInt16(f16v.xy);

-

-    // float16BitsToUint16()

-    u16v.x = float16BitsToUint16(f16v.z);

-

-    // int16BitsToFloat16()

-    f16v.xy = int16BitsToFloat16(i16v);

-

-    // uint16BitsToFloat16()

-    f16v = uint16BitsToFloat16(u16v);

-

-    // packInt2x16()

-    int packi = packInt2x16(i16v);

-

-    // unpackInt2x16()

-    i16v = unpackInt2x16(packi);

-

-    // packUint2x16()

-    uint packu = packUint2x16(u16v.xy);

-

-    // unpackUint2x16()

-    u16v.xy = unpackUint2x16(packu);

-

-    // packInt4x16()

-    int64_t packi64 = packInt4x16(i16vec4(i16));

-

-    // unpackInt4x16()

-    i16v = unpackInt4x16(packi64).xy;

-

-    // packUint4x16()

-    uint64_t packu64 = packUint4x16(u16vec4(u16));

-

-    // unpackUint4x16()

-    u16v = unpackUint4x16(packu64).xyz;

-

-    // lessThan()

-    bv    = lessThan(u16v, u16vec3(u16));

-    bv.xy = lessThan(i16v, i16vec2(i16));

-

-    // lessThanEqual()

-    bv    = lessThanEqual(u16v, u16vec3(u16));

-    bv.xy = lessThanEqual(i16v, i16vec2(i16));

-

-    // greaterThan()

-    bv    = greaterThan(u16v, u16vec3(u16));

-    bv.xy = greaterThan(i16v, i16vec2(i16));

-

-    // greaterThanEqual()

-    bv    = greaterThanEqual(u16v, u16vec3(u16));

-    bv.xy = greaterThanEqual(i16v, i16vec2(i16));

-

-    // equal()

-    bv    = equal(u16v, u16vec3(u16));

-    bv.xy = equal(i16v, i16vec2(i16));

-

-    // notEqual()

-    bv    = notEqual(u16v, u16vec3(u16));

-    bv.xy = notEqual(i16v, i16vec2(i16));

-}

-

-// Type conversion for specialization constant

-layout(constant_id = 100) const int64_t  si64 = -10L;

-layout(constant_id = 101) const uint64_t su64 = 20UL;

-layout(constant_id = 102) const int  si = -5;

-layout(constant_id = 103) const uint su = 4;

-layout(constant_id = 104) const bool sb = true;

-layout(constant_id = 105) const int16_t si16 = -5S;

-layout(constant_id = 106) const uint16_t su16 = 4US;

-

-// bool <-> int16/uint16

-const bool i16_to_b = bool(si16);

-const bool u16_to_b = bool(su16);

-const int16_t  b_to_i16 = int16_t(sb);

-const uint16_t b_to_u16 = uint16_t(sb);

-

-// int <-> int16/uint16

-const int i16_to_i = int(si16);

-const int u16_to_i = int(su16);

-const int16_t  i_to_i16 = int16_t(si);

-const uint16_t i_to_u16 = uint16_t(si);

-

-// uint <-> int16/uint16

-const uint i16_to_u = uint(si16);

-const uint u16_to_u = uint(su16);

-const int16_t  u_to_i16 = int16_t(su);

-const uint16_t u_to_u16 = uint16_t(su);

-

-// int64 <-> int16/uint16

-const int64_t i16_to_i64 = int64_t(si16);

-const int64_t u16_to_i64 = int64_t(su16);

-const int16_t  i64_to_i16 = int16_t(si64);

-const uint16_t i64_to_u16 = uint16_t(si64);

-

-// uint64 <-> int16/uint16

-const uint64_t i16_to_u64 = uint64_t(si16);

-const uint64_t u16_to_u64 = uint64_t(su16);

-const int16_t  u64_to_i16 = int16_t(su64);

-const uint16_t u64_to_u16 = uint16_t(su64);

-

-// int16 <-> uint16

-const uint16_t i16_to_u16 = uint16_t(si16);

-const int16_t  u16_to_i16 = int16_t(su16);

-

-void main()

-{

-    literal();

-    operators();

-    typeCast();

-    builtinFuncs();

-}

+#version 450
+
+#extension GL_KHX_shader_explicit_arithmetic_types: enable
+#extension GL_KHX_shader_explicit_arithmetic_types_int8: require
+#extension GL_KHX_shader_explicit_arithmetic_types_int16: require
+#extension GL_KHX_shader_explicit_arithmetic_types_int32: require
+#extension GL_KHX_shader_explicit_arithmetic_types_int64: require
+#extension GL_KHX_shader_explicit_arithmetic_types_float16: require
+#extension GL_KHX_shader_explicit_arithmetic_types_float32: require
+#extension GL_KHX_shader_explicit_arithmetic_types_float64: require
+
+layout(binding = 0) uniform Uniforms
+{
+    uint index;
+};
+
+layout(std140, binding = 1) uniform Block
+{
+    int16_t   i16;
+    i16vec2   i16v2;
+    i16vec3   i16v3;
+    i16vec4   i16v4;
+    uint16_t  u16;
+    u16vec2   u16v2;
+    u16vec3   u16v3;
+    u16vec4   u16v4;
+} block;
+
+void main()
+{
+}
+
+void literal()
+{
+    const int16_t i16Const[3] =
+    {
+        int16_t(-0x1111),           // Hex
+        int16_t(-1),                // Dec
+        int16_t(040000),            // Oct
+    };
+
+    int16_t i16 = i16Const[index];
+
+    const uint16_t u16Const[] =
+    {
+        uint16_t(0xFFFF),             // Hex
+        uint16_t(65535),              // Dec
+        uint16_t(077777),             // Oct
+    };
+
+    uint16_t u16 = u16Const[index];
+}
+
+void typeCast16()
+{
+    i8vec2 i8v;
+    u8vec2 u8v;
+    i16vec2 i16v;
+    u16vec2 u16v;
+    i32vec2 i32v;
+    u32vec2 u32v;
+    i64vec2 i64v;
+    u64vec2 u64v;
+    f16vec2 f16v;
+    f32vec2 f32v;
+    f64vec2 f64v;
+    bvec2   bv;
+
+    i32v = i16v;     // int16_t  ->   int32_t
+    i32v = u16v;     // uint16_t ->   int32_t
+    u16v = i16v;     // int16_t  ->  uint16_t
+    u32v = i16v;     // int16_t  ->  uint32_t
+    i64v = i16v;     // int16_t  ->   int64_t
+    u64v = i16v;     // int16_t  ->  uint64_t
+    u32v = u16v;     // uint16_t ->  uint32_t
+    i64v = u16v;     // uint16_t ->   int64_t
+    u64v = u16v;     // uint16_t ->  uint64_t
+    f16v = i16v;     // int16_t  ->  float16_t
+    f32v = i16v;     // int16_t  ->  float32_t
+    f64v = i16v;     // int16_t  ->  float64_t
+    f16v = u16v;     // uint16_t ->  float16_t
+    f32v = u16v;     // uint16_t ->  float32_t
+    f64v = u16v;     // uint16_t ->  float64_t
+
+    i32v = i32vec2(i16v);     // int16_t  ->   int32_t
+    i32v = i32vec2(u16v);     // uint16_t ->   int32_t
+    u16v = u16vec2(i16v);     // int16_t  ->  uint16_t
+    u32v = u32vec2(i16v);     // int16_t  ->  uint32_t
+    i64v = i64vec2(i16v);     // int16_t  ->   int64_t
+    u64v = i64vec2(i16v);     // int16_t  ->  uint64_t
+    u32v = u32vec2(u16v);     // uint16_t ->  uint32_t
+    i64v = i64vec2(u16v);     // uint16_t ->   int64_t
+    u64v = i64vec2(u16v);     // uint16_t ->  uint64_t
+    f16v = f16vec2(i16v);     // int16_t  ->  float16_t
+    f32v = f32vec2(i16v);     // int16_t  ->  float32_t
+    f64v = f64vec2(i16v);     // int16_t  ->  float64_t
+    f16v = f16vec2(u16v);     // uint16_t ->  float16_t
+    f32v = f32vec2(u16v);     // uint16_t ->  float32_t
+    f64v = f64vec2(u16v);     // uint16_t ->  float64_t
+
+    i8v  = i8vec2(i16v);      // int16_t  ->   int8_t
+    i8v  = i8vec2(u16v);      // uint16_t ->   int8_t
+    u8v  = u8vec2(i16v);      // int16_t  ->  uint8_t
+    u8v  = u8vec2(u16v);      // uint16_t ->  uint8_t
+    i16v = u8vec2(u16v);      // uint16_t ->   int16_t
+    i16v = i16vec2(bv);       // bool     ->   int16
+    u16v = u16vec2(bv);       // bool     ->   uint16
+    bv   = bvec2(i16v);       // int16    ->   bool
+    bv   = bvec2(u16v);       // uint16   ->   bool
+}
+void operators()
+{
+    u16vec3 u16v;
+    int16_t i16;
+    uvec3   uv;
+    int32_t i;
+    int64_t i64;
+    bool    b;
+
+    // Unary
+    u16v++;
+    i16--;
+    ++i16;
+    --u16v;
+
+    u16v = ~u16v;
+
+    i16 = +i16;
+    u16v = -u16v;
+
+    // Arithmetic
+    i16  += i16;
+    u16v -= u16v;
+    i  *= i16;
+    uv /= u16v;
+    uv %= i16;
+
+    uv = u16v + uv;
+    i64  = i16 - i64;
+    uv = u16v * uv;
+    i64  = i16 * i64;
+    i  = i16 % i;
+
+    // Shift
+    u16v <<= i16;
+    i16  >>= u16v.y;
+
+    i16  = i16 << u16v.z;
+    uv = u16v << i;
+
+    // Relational
+    b = (u16v.x != i16);
+    b = (i16 == u16v.x);
+    b = (u16v.x > uv.y);
+    b = (i16 < i);
+    b = (u16v.y >= uv.x);
+    b = (i16 <= i);
+
+    // Bitwise
+    uv |= i16;
+    i  = i16 | i;
+    i64  &= i16;
+    uv = u16v & uv;
+    uv ^= i16;
+    u16v = u16v ^ i16;
+}
+
+void builtinFuncs()
+{
+    i16vec2  i16v;
+    i16vec4  i16v4;
+    u16vec3  u16v;
+    u16vec2  u16v2;
+    u16vec4  u16v4;
+    bvec3   bv;
+    int16_t i16;
+    uint16_t u16;
+    int32_t i32;
+    uint32_t u32;
+    int64_t i64;
+    uint64_t u64;
+
+    // abs()
+    i16v = abs(i16v);
+
+    // sign()
+    i16  = sign(i16);
+
+    // min()
+    i16v = min(i16v, i16);
+    i16v = min(i16v, i16vec2(-1));
+    u16v = min(u16v, u16);
+    u16v = min(u16v, u16vec3(0));
+
+    // max()
+    i16v = max(i16v, i16);
+    i16v = max(i16v, i16vec2(-1));
+    u16v = max(u16v, u16);
+    u16v = max(u16v, u16vec3(0));
+
+    // clamp()
+    i16v = clamp(i16v, -i16, i16);
+    i16v = clamp(i16v, -i16v, i16v);
+    u16v = clamp(u16v, -u16, u16);
+    u16v = clamp(u16v, -u16v, u16v);
+
+    // mix()
+    i16  = mix(i16v.x, i16v.y, true);
+    i16v = mix(i16vec2(i16), i16vec2(-i16), bvec2(false));
+    u16  = mix(u16v.x, u16v.y, true);
+    u16v = mix(u16vec3(u16), u16vec3(-u16), bvec3(false));
+
+    //pack
+    i32 = pack32(i16v);
+    i64 = pack64(i16v4);
+    u32 = pack32(u16v2);
+    u64 = pack64(u16v4);
+
+    i16v  = unpack16(i32);
+    i16v4 = unpack16(i64);
+    u16v2 = unpack16(u32);
+    u16v4 = unpack16(u64);
+
+    // lessThan()
+    bv    = lessThan(u16v, u16vec3(u16));
+    bv.xy = lessThan(i16v, i16vec2(i16));
+
+    // lessThanEqual()
+    bv    = lessThanEqual(u16v, u16vec3(u16));
+    bv.xy = lessThanEqual(i16v, i16vec2(i16));
+
+    // greaterThan()
+    bv    = greaterThan(u16v, u16vec3(u16));
+    bv.xy = greaterThan(i16v, i16vec2(i16));
+
+    // greaterThanEqual()
+    bv    = greaterThanEqual(u16v, u16vec3(u16));
+    bv.xy = greaterThanEqual(i16v, i16vec2(i16));
+
+    // equal()
+    bv    = equal(u16v, u16vec3(u16));
+    bv.xy = equal(i16v, i16vec2(i16));
+
+    // notEqual()
+    bv    = notEqual(u16v, u16vec3(u16));
+    bv.xy = notEqual(i16v, i16vec2(i16));
+}
+
+// Type conversion for specialization constant
+layout(constant_id = 100) const int16_t  si16 = int16_t(-10);
+layout(constant_id = 101) const uint16_t su16 = uint16_t(20);
diff --git a/Test/spv.int32.frag b/Test/spv.int32.frag
new file mode 100644
index 0000000..3a33c67
--- /dev/null
+++ b/Test/spv.int32.frag
@@ -0,0 +1,256 @@
+#version 450
+
+#extension GL_KHX_shader_explicit_arithmetic_types: enable
+#extension GL_KHX_shader_explicit_arithmetic_types_int8: require
+#extension GL_KHX_shader_explicit_arithmetic_types_int16: require
+#extension GL_KHX_shader_explicit_arithmetic_types_int32: require
+#extension GL_KHX_shader_explicit_arithmetic_types_int64: require
+#extension GL_KHX_shader_explicit_arithmetic_types_float16: require
+#extension GL_KHX_shader_explicit_arithmetic_types_float32: require
+#extension GL_KHX_shader_explicit_arithmetic_types_float64: require
+
+layout(binding = 0) uniform Uniforms
+{
+    uint index;
+};
+
+layout(std140, binding = 1) uniform Block
+{
+    int32_t   i32;
+    i32vec2   i32v2;
+    i32vec3   i32v3;
+    i32vec4   i32v4;
+    uint32_t  u32;
+    u32vec2   u32v2;
+    u32vec3   u32v3;
+    u32vec4   u32v4;
+} block;
+
+void main()
+{
+}
+
+void literal()
+{
+
+    const int32_t i32Const[3] =
+    {
+        -0x11111111,           // Hex
+        -1,                    // Dec
+        04000000000,           // Oct
+    };
+
+    int32_t i32 = i32Const[index];
+
+    const uint32_t u32Const[] =
+    {
+        0xFFFFFFFF,             // Hex
+        4294967295,             // Dec
+        017777777777,           // Oct
+    };
+
+    uint32_t u32 = u32Const[index];
+}
+
+void typeCast32()
+{
+    i8vec2 i8v;
+    u8vec2 u8v;
+    i16vec2 i16v;
+    u16vec2 u16v;
+    i32vec2 i32v;
+    u32vec2 u32v;
+    i64vec2 i64v;
+    u64vec2 u64v;
+    f16vec2 f16v;
+    f32vec2 f32v;
+    f64vec2 f64v;
+    bvec2   bv;
+
+    u32v = i32v;     // int32_t  ->  uint32_t
+    i64v = i32v;     // int32_t  ->   int64_t
+    u64v = i32v;     // int32_t  ->  uint64_t
+    i64v = u32v;     // uint32_t ->   int64_t
+    u64v = u32v;     // uint32_t ->  uint64_t
+    f32v = i32v;     // int32_t  ->  float32_t
+    f64v = i32v;     // int32_t  ->  float64_t
+    f32v = u32v;     // uint32_t ->  float32_t
+    f64v = u32v;     // uint32_t ->  float64_t
+
+    i8v =  i8vec2(i32v);       // int32_t   ->   int8_t
+    i8v =  i8vec2(u32v);       // uint32_t  ->   int8_t
+    i16v = i16vec2(i32v);      // int32_t   ->   int16_t
+    i16v = i16vec2(u32v);      // uint32_t  ->   int16_t
+    i32v = i32vec2(i32v);      // int32_t   ->   int32_t
+    i32v = i32vec2(u32v);      // uint32_t  ->   int32_t
+    i64v = i64vec2(i32v);      // int32_t   ->   int64_t
+	i64v = i64vec2(u32v);      // uint32_t  ->   int64_t
+	u8v =  u8vec2(i32v);       // int32_t   ->   uint8_t
+    u8v =  u8vec2(u32v);       // uint32_t  ->   uint8_t
+    u16v = u16vec2(i32v);      // int32_t   ->   uint16_t
+    u16v = u16vec2(u32v);      // uint32_t  ->   uint16_t
+    u32v = u32vec2(i32v);      // int32_t   ->   uint32_t
+    u32v = u32vec2(u32v);      // uint32_t  ->   uint32_t
+    u64v = u64vec2(i32v);      // int32_t   ->   uint64_t
+    u64v = u64vec2(u32v);      // uint32_t  ->   uint64_t
+
+    f16v = f16vec2(i32v);      // int32_t   ->  float16_t
+    f32v = f32vec2(i32v);      // int32_t   ->  float32_t
+    f64v = f64vec2(i32v);      // int32_t   ->  float64_t
+    f16v = f16vec2(u32v);      // uint32_t  ->  float16_t
+    f32v = f32vec2(u32v);      // uint32_t  ->  float32_t
+    f64v = f64vec2(u32v);      // uint32_t  ->  float64_t
+
+    i32v = i32vec2(bv);       // bool     ->   int32
+    u32v = u32vec2(bv);       // bool     ->   uint32
+    bv   = bvec2(i32v);       // int32    ->   bool
+    bv   = bvec2(u32v);       // uint32   ->   bool
+}
+
+void operators()
+{
+    u32vec3 u32v;
+    int32_t i32;
+    uvec3   uv;
+    int32_t i;
+    int64_t i64;
+    bool    b;
+
+    // Unary
+    u32v++;
+    i32--;
+    ++i32;
+    --u32v;
+
+    u32v = ~u32v;
+
+    i32 = +i32;
+    u32v = -u32v;
+
+    // Arithmetic
+    i32  += i32;
+    u32v -= u32v;
+    i  *= i32;
+    uv /= u32v;
+    uv %= i32;
+
+    uv = u32v + uv;
+    i64  = i32 - i64;
+    uv = u32v * uv;
+    i64  = i32 * i64;
+    i  = i32 % i;
+
+    // Shift
+    u32v <<= i32;
+    i32  >>= u32v.y;
+
+    i64  = i64 << u32v.z;
+    uv = u32v << i;
+
+    // Relational
+    b = (u32v.x != i32);
+    b = (i32 == u32v.x);
+    b = (u32v.x > uv.y);
+    b = (i32 < i);
+    b = (u32v.y >= uv.x);
+    b = (i32 <= i);
+
+    // Bitwise
+    uv |= i32;
+    i  = i32 | i;
+    i64  &= i32;
+    uv = u32v & uv;
+    uv ^= i32;
+    u32v = u32v ^ i32;
+}
+
+void builtinFuncs()
+{
+    i32vec2  i32v;
+    i32vec4  i32v4;
+    u32vec3  u32v;
+    u32vec2  u32v2;
+    u32vec4  u32v4;
+    bvec3   bv;
+    int32_t i32;
+    uint32_t u32;
+    int64_t i64;
+    uint64_t u64;
+    i8vec4  i8v4;
+    u8vec4  u8v4;
+    i16vec2  i16v2;
+    u16vec2  u16v2;
+
+    // abs()
+    i32v = abs(i32v);
+
+    // sign()
+    i32  = sign(i32);
+
+    // min()
+    i32v = min(i32v, i32);
+    i32v = min(i32v, i32vec2(-1));
+    u32v = min(u32v, u32);
+    u32v = min(u32v, u32vec3(0));
+
+    // max()
+    i32v = max(i32v, i32);
+    i32v = max(i32v, i32vec2(-1));
+    u32v = max(u32v, u32);
+    u32v = max(u32v, u32vec3(0));
+
+    // clamp()
+    i32v = clamp(i32v, -i32, i32);
+    i32v = clamp(i32v, -i32v, i32v);
+    u32v = clamp(u32v, -u32, u32);
+    u32v = clamp(u32v, -u32v, u32v);
+
+    // mix()
+    i32  = mix(i32v.x, i32v.y, true);
+    i32v = mix(i32vec2(i32), i32vec2(-i32), bvec2(false));
+    u32  = mix(u32v.x, u32v.y, true);
+    u32v = mix(u32vec3(u32), u32vec3(-u32), bvec3(false));
+
+    //pack
+    i32 = pack32(i8v4);
+    i32 = pack32(i16v2);
+    u32 = pack32(u8v4);
+    u32 = pack32(u16v2);
+
+    i32v  = unpack32(i64);
+    u32v2  = unpack32(u64);
+
+    // lessThan()
+    bv    = lessThan(u32v, u32vec3(u32));
+    bv.xy = lessThan(i32v, i32vec2(i32));
+
+    // lessThanEqual()
+    bv    = lessThanEqual(u32v, u32vec3(u32));
+    bv.xy = lessThanEqual(i32v, i32vec2(i32));
+
+    // greaterThan()
+    bv    = greaterThan(u32v, u32vec3(u32));
+    bv.xy = greaterThan(i32v, i32vec2(i32));
+
+    // greaterThanEqual()
+    bv    = greaterThanEqual(u32v, u32vec3(u32));
+    bv.xy = greaterThanEqual(i32v, i32vec2(i32));
+
+    // equal()
+    bv    = equal(u32v, u32vec3(u32));
+    bv.xy = equal(i32v, i32vec2(i32));
+
+    // notEqual()
+    bv    = notEqual(u32v, u32vec3(u32));
+    bv.xy = notEqual(i32v, i32vec2(i32));
+}
+
+// Type conversion for specialization constant
+layout(constant_id = 100) const int32_t  si32 = -10;
+layout(constant_id = 101) const uint32_t su32 = 20U;
+layout(constant_id = 102) const int  si = -5;
+layout(constant_id = 103) const uint su = 4;
+layout(constant_id = 104) const bool sb = true;
+
+#define UINT32_MAX  4294967295u
+uint32_t u32Max = UINT32_MAX;
diff --git a/Test/spv.int64.frag b/Test/spv.int64.frag
index 8021b7e..8fda12b 100644
--- a/Test/spv.int64.frag
+++ b/Test/spv.int64.frag
@@ -1,6 +1,7 @@
 #version 450

 

 #extension GL_ARB_gpu_shader_int64: enable

+#extension GL_KHX_shader_explicit_arithmetic_types_int64: require

 

 layout(binding = 0) uniform Uniforms

 {

@@ -115,6 +116,8 @@
     i64  = i64 % i;

 

     // Shift

+    u64v = u64v << i;

+    i64 = i64 >> uv.y;

     u64v <<= i;

     i64  >>= uv.y;

 

diff --git a/Test/spv.int8.frag b/Test/spv.int8.frag
new file mode 100644
index 0000000..f41c62f
--- /dev/null
+++ b/Test/spv.int8.frag
@@ -0,0 +1,253 @@
+#version 450
+
+#extension GL_KHX_shader_explicit_arithmetic_types: enable
+#extension GL_KHX_shader_explicit_arithmetic_types_int8: require
+#extension GL_KHX_shader_explicit_arithmetic_types_int16: require
+#extension GL_KHX_shader_explicit_arithmetic_types_int32: require
+#extension GL_KHX_shader_explicit_arithmetic_types_int64: require
+#extension GL_KHX_shader_explicit_arithmetic_types_float16: require
+#extension GL_KHX_shader_explicit_arithmetic_types_float32: require
+#extension GL_KHX_shader_explicit_arithmetic_types_float64: require
+
+layout(binding = 0) uniform Uniforms
+{
+    uint index;
+};
+
+layout(std140, binding = 1) uniform Block
+{
+    int8_t   i8;
+    i8vec2   i8v2;
+    i8vec3   i8v3;
+    i8vec4   i8v4;
+    uint8_t  u8;
+    u8vec2   u8v2;
+    u8vec3   u8v3;
+    u8vec4   u8v4;
+} block;
+
+void main()
+{
+}
+
+void literal()
+{
+    const int8_t i8Const[3] =
+    {
+        int8_t(-0x11),           // Hex
+        int8_t(-1),              // Dec
+        int8_t(0400),            // Oct
+    };
+
+    int8_t i8 = i8Const[index];
+
+    const uint8_t u8Const[] =
+    {
+        uint8_t(0xFF),             // Hex
+        uint8_t(255),              // Dec
+        uint8_t(0177),             // Oct
+    };
+
+    uint8_t u8 = u8Const[index];
+}
+
+void typeCast8()
+{
+    i8vec2 i8v;
+    u8vec2 u8v;
+    i16vec2 i16v;
+    u16vec2 u16v;
+    i32vec2 i32v;
+    u32vec2 u32v;
+    i64vec2 i64v;
+    u64vec2 u64v;
+    f16vec2 f16v;
+    f32vec2 f32v;
+    f64vec2 f64v;
+    bvec2   bv;
+
+    u8v = i8v;      // int8_t  ->  uint8_t
+    i16v = i8v;     // int8_t  ->   int16_t
+    i16v = u8v;     // uint8_t ->   int16_t
+    i32v = i8v;     // int8_t  ->   int32_t
+    i32v = u8v;     // uint8_t ->   int32_t
+    u32v = i8v;     // int8_t  ->  uint32_t
+    i64v = i8v;     // int8_t  ->   int64_t
+    u64v = i8v;     // int8_t  ->  uint64_t
+    u32v = u8v;     // uint8_t ->  uint32_t
+    i64v = u8v;     // uint8_t ->   int64_t
+    u64v = u8v;     // uint8_t ->  uint64_t
+    f16v = i8v;     // int8_t  ->  float16_t
+    f32v = i8v;     // int8_t  ->  float32_t
+    f64v = i8v;     // int8_t  ->  float64_t
+    f16v = u8v;     // uint8_t ->  float16_t
+    f32v = u8v;     // uint8_t ->  float32_t
+    f64v = u8v;     // uint8_t ->  float64_t
+
+    i8v =  i8vec2(u8v);       // uint8_t  ->   int8_t
+    i16v = i16vec2(i8v);      // int8_t   ->   int16_t
+    i16v = i16vec2(u8v);      // uint8_t  ->   int16_t
+    i32v = i32vec2(i8v);      // int8_t   ->   int32_t
+    i32v = i32vec2(u8v);      // uint8_t  ->   int32_t
+    i64v = i64vec2(i8v);      // int8_t   ->   int64_t
+    u64v = i64vec2(i8v);      // int8_t   ->  uint64_t
+    u16v = u16vec2(i8v);      // int8_t   ->  uint16_t
+    u16v = u16vec2(u8v);      // uint8_t  ->  uint16_t
+    u32v = u32vec2(u8v);      // uint8_t  ->  uint32_t
+    i64v = i64vec2(u8v);      // uint8_t  ->   int64_t
+    u64v = i64vec2(u8v);      // uint8_t  ->  uint64_t
+    f16v = f16vec2(i8v);      // int8_t   ->  float16_t
+    f32v = f32vec2(i8v);      // int8_t   ->  float32_t
+    f64v = f64vec2(i8v);      // int8_t   ->  float64_t
+    f16v = f16vec2(u8v);      // uint8_t  ->  float16_t
+    f32v = f32vec2(u8v);      // uint8_t  ->  float32_t
+    f64v = f64vec2(u8v);      // uint8_t  ->  float64_t
+
+    i8v = i8vec2(bv);       // bool     ->   int8
+    u8v = u8vec2(bv);       // bool     ->   uint8
+    bv  = bvec2(i8v);       // int8    ->   bool
+    bv  = bvec2(u8v);       // uint8   ->   bool
+}
+
+void operators()
+{
+    u8vec3 u8v;
+    int8_t i8;
+    uvec3   uv;
+    int32_t i;
+    int16_t i16;
+    bool    b;
+
+    // Unary
+    u8v++;
+    i8--;
+    ++i8;
+    --u8v;
+
+    u8v = ~u8v;
+
+    i8 = +i8;
+    u8v = -u8v;
+
+    // Arithmetic
+    i8  += i8;
+    u8v -= u8v;
+    i  *= i8;
+    uv /= u8v;
+    uv %= i8;
+
+    uv = u8v + uv;
+    i16  = i8 - i16;
+    uv = u8v * uv;
+    i16  = i8 * i16;
+    i  = i8 % i;
+
+    // Shift
+    u8v <<= i8;
+    i8  >>= u8v.y;
+
+    i8  = i8 << u8v.z;
+    u8v = u8v << i8;
+
+    // Relational
+    b = (u8v.x != i8);
+    b = (i8 == u8v.x);
+    b = (u8v.x > uv.y);
+    b = (i8 < i);
+    b = (u8v.y >= uv.x);
+    b = (i8 <= i);
+
+    // Bitwise
+    uv |= i8;
+    i  = i8 | i;
+    i16  &= i8;
+    uv = u8v & uv;
+    uv ^= i8;
+    u8v = u8v ^ i8;
+}
+
+void builtinFuncs()
+{
+    i8vec2  i8v;
+    i8vec4  i8v4;
+    u8vec3  u8v;
+    u8vec2  u8v2;
+    u8vec4  u8v4;
+    bvec3   bv;
+    int16_t i16;
+    int32_t i32;
+    uint16_t u16;
+    uint32_t u32;
+
+    int8_t  i8;
+    uint8_t u8;
+
+    // abs()
+    i8v = abs(i8v);
+
+    // sign()
+    i8  = sign(i8);
+
+    // min()
+    i8v = min(i8v, i8);
+    i8v = min(i8v, i8vec2(-1));
+    u8v = min(u8v, u8);
+    u8v = min(u8v, u8vec3(0));
+
+    // max()
+    i8v = max(i8v, i8);
+    i8v = max(i8v, i8vec2(-1));
+    u8v = max(u8v, u8);
+    u8v = max(u8v, u8vec3(0));
+
+    // clamp()
+    i8v = clamp(i8v, -i8, i8);
+    i8v = clamp(i8v, -i8v, i8v);
+    u8v = clamp(u8v, -u8, u8);
+    u8v = clamp(u8v, -u8v, u8v);
+
+    // mix()
+    i8  = mix(i8v.x, i8v.y, true);
+    i8v = mix(i8vec2(i8), i8vec2(-i8), bvec2(false));
+    u8  = mix(u8v.x, u8v.y, true);
+    u8v = mix(u8vec3(u8), u8vec3(-u8), bvec3(false));
+
+    //pack
+    i16 = pack16(i8v);
+    i32 = pack32(i8v4);
+    u16 = pack16(u8v2);
+    u32 = pack32(u8v4);
+
+    i8v  = unpack8(i16);
+    i8v4 = unpack8(i32);
+    u8v2 = unpack8(u16);
+    u8v4 = unpack8(u32);
+
+    // lessThan()
+    bv    = lessThan(u8v, u8vec3(u8));
+    bv.xy = lessThan(i8v, i8vec2(i8));
+
+    // lessThanEqual()
+    bv    = lessThanEqual(u8v, u8vec3(u8));
+    bv.xy = lessThanEqual(i8v, i8vec2(i8));
+
+    // greaterThan()
+    bv    = greaterThan(u8v, u8vec3(u8));
+    bv.xy = greaterThan(i8v, i8vec2(i8));
+
+    // greaterThanEqual()
+    bv    = greaterThanEqual(u8v, u8vec3(u8));
+    bv.xy = greaterThanEqual(i8v, i8vec2(i8));
+
+    // equal()
+    bv    = equal(u8v, u8vec3(u8));
+    bv.xy = equal(i8v, i8vec2(i8));
+
+    // notEqual()
+    bv    = notEqual(u8v, u8vec3(u8));
+    bv.xy = notEqual(i8v, i8vec2(i8));
+}
+
+// Type conversion for specialization constant
+layout(constant_id = 100) const int8_t  si8 = int8_t(-10);
+layout(constant_id = 101) const uint8_t su8 = uint8_t(20);
diff --git a/Test/spv.noBuiltInLoc.vert b/Test/spv.noBuiltInLoc.vert
index 5fbe252..4087ab3 100644
--- a/Test/spv.noBuiltInLoc.vert
+++ b/Test/spv.noBuiltInLoc.vert
@@ -10,6 +10,8 @@
 uniform float uv2;

 uniform vec3 uv3;

 

+layout(binding = 0) uniform atomic_uint a_uint;

+

 void main()

 {

     bar = foo;

diff --git a/Test/spv.nonuniform.frag b/Test/spv.nonuniform.frag
new file mode 100644
index 0000000..d3b05a5
--- /dev/null
+++ b/Test/spv.nonuniform.frag
@@ -0,0 +1,55 @@
+#version 450

+

+#extension GL_EXT_nonuniform_qualifier : enable

+

+layout(location=0) nonuniformEXT in vec4 nu_inv4;

+nonuniformEXT float nu_gf;

+layout(location=1) in nonuniformEXT flat int nu_ii;

+

+layout(binding=0, input_attachment_index = 0) uniform subpassInput        inputAttachmentDyn[];

+layout(binding=1)                             uniform samplerBuffer       uniformTexelBufferDyn[];

+layout(binding=2, r32f)                       uniform imageBuffer         storageTexelBufferDyn[];

+layout(binding=3)                             uniform uname { float a; }  uniformBuffer[];

+layout(binding=4)                             buffer  bname { float b; }  storageBuffer[];

+layout(binding=5)                             uniform sampler2D           sampledImage[];

+layout(binding=6, r32f)                       uniform image2D             storageImage[];

+layout(binding=7, input_attachment_index = 1) uniform subpassInput        inputAttachment[];

+layout(binding=8)                             uniform samplerBuffer       uniformTexelBuffer[];

+layout(binding=9, r32f)                       uniform imageBuffer         storageTexelBuffer[];

+

+nonuniformEXT int foo(nonuniformEXT int nupi, nonuniformEXT out int f)

+{

+    return nupi;

+}

+

+void main()

+{

+    nonuniformEXT int nu_li;

+    int dyn_i;

+

+    int a = foo(nu_li, nu_li);

+    nu_li = nonuniformEXT(a) + nonuniformEXT(a * 2);

+

+    float b;

+    b = nu_inv4.x * nu_gf;

+    b += subpassLoad(inputAttachmentDyn[dyn_i]).x;

+    b += texelFetch(uniformTexelBufferDyn[dyn_i], 1).x;

+    b += imageLoad(storageTexelBufferDyn[dyn_i], 1).x;

+    b += uniformBuffer[nu_ii].a;

+    b += storageBuffer[nu_ii].b;

+    b += texture(sampledImage[nu_ii], vec2(0.5)).x;

+    b += imageLoad(storageImage[nu_ii], ivec2(1)).x;

+    b += subpassLoad(inputAttachment[nu_ii]).x;

+    b += texelFetch(uniformTexelBuffer[nu_ii], 1).x;

+    b += imageLoad(storageTexelBuffer[nu_ii], 1).x;

+

+    nonuniformEXT ivec4 v;

+    nonuniformEXT mat4 m;

+    nonuniformEXT struct S { int a; } s;

+    ivec4 uv;

+    b += uniformBuffer[v.y].a;

+    b += uniformBuffer[v[2]].a;

+    b += uniformBuffer[uv[nu_ii]].a;

+    b += uniformBuffer[int(m[2].z)].a;

+    b += uniformBuffer[s.a].a;

+}

diff --git a/Test/spv.rankShift.comp b/Test/spv.rankShift.comp
new file mode 100644
index 0000000..1761ad1
--- /dev/null
+++ b/Test/spv.rankShift.comp
@@ -0,0 +1,15 @@
+#version 450

+#extension GL_ARB_gpu_shader_int64 : require

+

+layout(local_size_x = 54) in;

+

+layout(location=4) uniform int64_t arg0;

+layout(location=5) uniform uint arg1;

+

+void main()

+{

+    uint64_t result = arg0 << arg1;

+    result = arg0 >> arg1;

+    result <<= arg1;

+    result >>= arg1;

+}
\ No newline at end of file
diff --git a/Test/spv.sample.frag b/Test/spv.sample.frag
new file mode 100644
index 0000000..b62afe2
--- /dev/null
+++ b/Test/spv.sample.frag
@@ -0,0 +1,9 @@
+#version 450
+
+layout(location = 0) in sample vec4 samp;
+layout(location = 0) out vec4 color;
+
+void main()
+{
+    color = samp;
+}
\ No newline at end of file
diff --git a/Test/spv.sampleId.frag b/Test/spv.sampleId.frag
new file mode 100644
index 0000000..d5473f7
--- /dev/null
+++ b/Test/spv.sampleId.frag
@@ -0,0 +1,12 @@
+#version 450
+
+layout(location = 0) in vec4 samp;
+layout(location = 0) out vec4 color;
+
+void main()
+{
+    if (gl_SampleID < 3)
+        color = samp;
+    else
+        color = 2 * samp;
+}
\ No newline at end of file
diff --git a/Test/spv.samplePosition.frag b/Test/spv.samplePosition.frag
new file mode 100644
index 0000000..b73dd61
--- /dev/null
+++ b/Test/spv.samplePosition.frag
@@ -0,0 +1,12 @@
+#version 450
+
+layout(location = 0) in vec4 samp;
+layout(location = 0) out vec4 color;
+
+void main()
+{
+    if (gl_SamplePosition.y < 0.5)
+        color = samp;
+    else
+        color = 2 * samp;
+}
\ No newline at end of file
diff --git a/Test/spv.shaderBallotAMD.comp b/Test/spv.shaderBallotAMD.comp
index d6d370a..9cf9546 100644
--- a/Test/spv.shaderBallotAMD.comp
+++ b/Test/spv.shaderBallotAMD.comp
@@ -2,6 +2,7 @@
 

 #extension GL_ARB_gpu_shader_int64: enable

 #extension GL_AMD_gpu_shader_half_float: enable

+#extension GL_AMD_gpu_shader_int16: enable

 #extension GL_AMD_shader_ballot: enable

 

 layout (local_size_x = 8, local_size_y = 8, local_size_z = 1) in;

@@ -15,17 +16,21 @@
     int64_t i64;

     u64vec2 u64v;

     f16vec3 f16v;

+    i16vec4 i16v;

+    uint16_t u16;

 };

 

 void main()

 {

-	i    = minInvocationsAMD(i);

+    i    = minInvocationsAMD(i);

     uv   = minInvocationsAMD(uv);

     fv   = minInvocationsAMD(fv);

     dv   = minInvocationsAMD(dv);

     i64  = minInvocationsAMD(i64);

     u64v = minInvocationsAMD(u64v);

     f16v = minInvocationsAMD(f16v);

+    i16v = minInvocationsAMD(i16v);

+    u16  = minInvocationsAMD(u16);

 

     i    = maxInvocationsAMD(i);

     uv   = maxInvocationsAMD(uv);

@@ -34,6 +39,8 @@
     i64  = maxInvocationsAMD(i64);

     u64v = maxInvocationsAMD(u64v);

     f16v = maxInvocationsAMD(f16v);

+    i16v = maxInvocationsAMD(i16v);

+    u16  = maxInvocationsAMD(u16);

 

     i    = addInvocationsAMD(i);

     uv   = addInvocationsAMD(uv);

@@ -42,6 +49,8 @@
     i64  = addInvocationsAMD(i64);

     u64v = addInvocationsAMD(u64v);

     f16v = addInvocationsAMD(f16v);

+    i16v = addInvocationsAMD(i16v);

+    u16  = addInvocationsAMD(u16);

 

 	i    = minInvocationsNonUniformAMD(i);

     uv   = minInvocationsNonUniformAMD(uv);

@@ -50,6 +59,8 @@
     i64  = minInvocationsNonUniformAMD(i64);

     u64v = minInvocationsNonUniformAMD(u64v);

     f16v = minInvocationsNonUniformAMD(f16v);

+    i16v = minInvocationsNonUniformAMD(i16v);

+    u16  = minInvocationsNonUniformAMD(u16);

 

     i    = maxInvocationsNonUniformAMD(i);

     uv   = maxInvocationsNonUniformAMD(uv);

@@ -58,6 +69,8 @@
     i64  = maxInvocationsNonUniformAMD(i64);

     u64v = maxInvocationsNonUniformAMD(u64v);

     f16v = maxInvocationsNonUniformAMD(f16v);

+    i16v = maxInvocationsNonUniformAMD(i16v);

+    u16  = maxInvocationsNonUniformAMD(u16);

 

     i    = addInvocationsNonUniformAMD(i);

     uv   = addInvocationsNonUniformAMD(uv);

@@ -66,6 +79,8 @@
     i64  = addInvocationsNonUniformAMD(i64);

     u64v = addInvocationsNonUniformAMD(u64v);

     f16v = addInvocationsNonUniformAMD(f16v);

+    i16v = addInvocationsNonUniformAMD(i16v);

+    u16  = addInvocationsNonUniformAMD(u16);

 

     i    = minInvocationsInclusiveScanAMD(i);

     uv   = minInvocationsInclusiveScanAMD(uv);

@@ -74,6 +89,8 @@
     i64  = minInvocationsInclusiveScanAMD(i64);

     u64v = minInvocationsInclusiveScanAMD(u64v);

     f16v = minInvocationsInclusiveScanAMD(f16v);

+    i16v = minInvocationsInclusiveScanAMD(i16v);

+    u16  = minInvocationsInclusiveScanAMD(u16);

 

     i    = maxInvocationsInclusiveScanAMD(i);

     uv   = maxInvocationsInclusiveScanAMD(uv);

@@ -82,6 +99,8 @@
     i64  = maxInvocationsInclusiveScanAMD(i64);

     u64v = maxInvocationsInclusiveScanAMD(u64v);

     f16v = maxInvocationsInclusiveScanAMD(f16v);

+    i16v = maxInvocationsInclusiveScanAMD(i16v);

+    u16  = maxInvocationsInclusiveScanAMD(u16);

 

     i    = addInvocationsInclusiveScanAMD(i);

     uv   = addInvocationsInclusiveScanAMD(uv);

@@ -90,6 +109,8 @@
     i64  = addInvocationsInclusiveScanAMD(i64);

     u64v = addInvocationsInclusiveScanAMD(u64v);

     f16v = addInvocationsInclusiveScanAMD(f16v);

+    i16v = addInvocationsInclusiveScanAMD(i16v);

+    u16  = addInvocationsInclusiveScanAMD(u16);

 

     i    = minInvocationsExclusiveScanAMD(i);

     uv   = minInvocationsExclusiveScanAMD(uv);

@@ -98,6 +119,8 @@
     i64  = minInvocationsExclusiveScanAMD(i64);

     u64v = minInvocationsExclusiveScanAMD(u64v);

     f16v = minInvocationsExclusiveScanAMD(f16v);

+    i16v = minInvocationsExclusiveScanAMD(i16v);

+    u16  = minInvocationsExclusiveScanAMD(u16);

 

     i    = maxInvocationsExclusiveScanAMD(i);

     uv   = maxInvocationsExclusiveScanAMD(uv);

@@ -106,6 +129,8 @@
     i64  = maxInvocationsExclusiveScanAMD(i64);

     u64v = maxInvocationsExclusiveScanAMD(u64v);

     f16v = maxInvocationsExclusiveScanAMD(f16v);

+    i16v = maxInvocationsExclusiveScanAMD(i16v);

+    u16  = maxInvocationsExclusiveScanAMD(u16);

 

     i    = addInvocationsExclusiveScanAMD(i);

     uv   = addInvocationsExclusiveScanAMD(uv);

@@ -114,6 +139,8 @@
     i64  = addInvocationsExclusiveScanAMD(i64);

     u64v = addInvocationsExclusiveScanAMD(u64v);

     f16v = addInvocationsExclusiveScanAMD(f16v);

+    i16v = addInvocationsExclusiveScanAMD(i16v);

+    u16  = addInvocationsExclusiveScanAMD(u16);

 

     i    = minInvocationsInclusiveScanNonUniformAMD(i);

     uv   = minInvocationsInclusiveScanNonUniformAMD(uv);

@@ -122,6 +149,8 @@
     i64  = minInvocationsInclusiveScanNonUniformAMD(i64);

     u64v = minInvocationsInclusiveScanNonUniformAMD(u64v);

     f16v = minInvocationsInclusiveScanNonUniformAMD(f16v);

+    i16v = minInvocationsInclusiveScanNonUniformAMD(i16v);

+    u16  = minInvocationsInclusiveScanNonUniformAMD(u16);

 

     i    = maxInvocationsInclusiveScanNonUniformAMD(i);

     uv   = maxInvocationsInclusiveScanNonUniformAMD(uv);

@@ -130,6 +159,8 @@
     i64  = maxInvocationsInclusiveScanNonUniformAMD(i64);

     u64v = maxInvocationsInclusiveScanNonUniformAMD(u64v);

     f16v = maxInvocationsInclusiveScanNonUniformAMD(f16v);

+    i16v = maxInvocationsInclusiveScanNonUniformAMD(i16v);

+    u16  = maxInvocationsInclusiveScanNonUniformAMD(u16);

 

     i    = addInvocationsInclusiveScanNonUniformAMD(i);

     uv   = addInvocationsInclusiveScanNonUniformAMD(uv);

@@ -138,6 +169,8 @@
     i64  = addInvocationsInclusiveScanNonUniformAMD(i64);

     u64v = addInvocationsInclusiveScanNonUniformAMD(u64v);

     f16v = addInvocationsInclusiveScanNonUniformAMD(f16v);

+    i16v = addInvocationsInclusiveScanNonUniformAMD(i16v);

+    u16  = addInvocationsInclusiveScanNonUniformAMD(u16);

 

     i    = minInvocationsExclusiveScanNonUniformAMD(i);

     uv   = minInvocationsExclusiveScanNonUniformAMD(uv);

@@ -146,6 +179,8 @@
     i64  = minInvocationsExclusiveScanNonUniformAMD(i64);

     u64v = minInvocationsExclusiveScanNonUniformAMD(u64v);

     f16v = minInvocationsExclusiveScanNonUniformAMD(f16v);

+    i16v = minInvocationsExclusiveScanNonUniformAMD(i16v);

+    u16  = minInvocationsExclusiveScanNonUniformAMD(u16);

 

     i    = maxInvocationsExclusiveScanNonUniformAMD(i);

     uv   = maxInvocationsExclusiveScanNonUniformAMD(uv);

@@ -154,6 +189,8 @@
     i64  = maxInvocationsExclusiveScanNonUniformAMD(i64);

     u64v = maxInvocationsExclusiveScanNonUniformAMD(u64v);

     f16v = maxInvocationsExclusiveScanNonUniformAMD(f16v);

+    i16v = maxInvocationsExclusiveScanNonUniformAMD(i16v);

+    u16  = maxInvocationsExclusiveScanNonUniformAMD(u16);

 

     i    = addInvocationsExclusiveScanNonUniformAMD(i);

     uv   = addInvocationsExclusiveScanNonUniformAMD(uv);

@@ -162,4 +199,6 @@
     i64  = addInvocationsExclusiveScanNonUniformAMD(i64);

     u64v = addInvocationsExclusiveScanNonUniformAMD(u64v);

     f16v = addInvocationsExclusiveScanNonUniformAMD(f16v);

+    i16v = addInvocationsExclusiveScanNonUniformAMD(i16v);

+    u16  = addInvocationsExclusiveScanNonUniformAMD(u16);

 }

diff --git a/Test/spv.subgroup.frag b/Test/spv.subgroup.frag
new file mode 100644
index 0000000..520052f
--- /dev/null
+++ b/Test/spv.subgroup.frag
@@ -0,0 +1,7 @@
+#version 450

+#extension GL_KHR_shader_subgroup_basic: enable

+layout(location = 0) out uvec4 data;

+void main (void)

+{

+  data = uvec4(gl_SubgroupSize, gl_SubgroupInvocationID, 0, 0);

+}

diff --git a/Test/spv.subgroup.geom b/Test/spv.subgroup.geom
new file mode 100644
index 0000000..70e9dd4
--- /dev/null
+++ b/Test/spv.subgroup.geom
@@ -0,0 +1,13 @@
+#version 450

+#extension GL_KHR_shader_subgroup_basic: enable

+layout(points) in;

+layout(points, max_vertices = 1) out;

+layout(set = 0, binding = 0, std430) buffer Output

+{

+  uvec4 result[];

+};

+

+void main (void)

+{

+  result[gl_PrimitiveIDIn] = uvec4(gl_SubgroupSize, gl_SubgroupInvocationID, 0, 0);

+}

diff --git a/Test/spv.subgroup.tesc b/Test/spv.subgroup.tesc
new file mode 100644
index 0000000..63bf5e5
--- /dev/null
+++ b/Test/spv.subgroup.tesc
@@ -0,0 +1,12 @@
+#version 450

+#extension GL_KHR_shader_subgroup_basic: enable

+layout(vertices=1) out;

+layout(set = 0, binding = 0, std430) buffer Output

+{

+  uvec4 result[];

+};

+

+void main (void)

+{

+  result[gl_PrimitiveID] = uvec4(gl_SubgroupSize, gl_SubgroupInvocationID, 0, 0);

+}

diff --git a/Test/spv.subgroup.tese b/Test/spv.subgroup.tese
new file mode 100644
index 0000000..e504df7
--- /dev/null
+++ b/Test/spv.subgroup.tese
@@ -0,0 +1,12 @@
+#version 450

+#extension GL_KHR_shader_subgroup_basic: enable

+layout(isolines) in;

+layout(set = 0, binding = 0, std430) buffer Output

+{

+  uvec4 result[];

+};

+

+void main (void)

+{

+  result[gl_PrimitiveID] = uvec4(gl_SubgroupSize, gl_SubgroupInvocationID, 0, 0);

+}

diff --git a/Test/spv.subgroup.vert b/Test/spv.subgroup.vert
new file mode 100644
index 0000000..779b758
--- /dev/null
+++ b/Test/spv.subgroup.vert
@@ -0,0 +1,11 @@
+#version 450

+#extension GL_KHR_shader_subgroup_basic: enable

+layout(set = 0, binding = 0, std430) buffer Output

+{

+  uvec4 result[];

+};

+

+void main (void)

+{

+  result[gl_VertexIndex] = uvec4(gl_SubgroupSize, gl_SubgroupInvocationID, 0, 0);

+}

diff --git a/Test/spv.subgroupArithmetic.comp b/Test/spv.subgroupArithmetic.comp
new file mode 100644
index 0000000..6cc9337
--- /dev/null
+++ b/Test/spv.subgroupArithmetic.comp
@@ -0,0 +1,393 @@
+#version 450

+

+#extension GL_KHR_shader_subgroup_arithmetic: enable

+

+layout (local_size_x = 8) in;

+

+layout(binding = 0) buffer Buffers

+{

+    vec4  f4;

+    ivec4 i4;

+    uvec4 u4;

+    dvec4 d4;

+} data[4];

+

+void main()

+{

+    uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;

+

+    data[invocation].f4.x   = subgroupAdd(data[0].f4.x);

+    data[invocation].f4.xy  = subgroupAdd(data[1].f4.xy);

+    data[invocation].f4.xyz = subgroupAdd(data[2].f4.xyz);

+    data[invocation].f4     = subgroupAdd(data[3].f4);

+

+    data[invocation].i4.x   = subgroupAdd(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupAdd(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupAdd(data[2].i4.xyz);

+    data[invocation].i4     = subgroupAdd(data[3].i4);

+

+    data[invocation].u4.x   = subgroupAdd(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupAdd(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupAdd(data[2].u4.xyz);

+    data[invocation].u4     = subgroupAdd(data[3].u4);

+

+    data[invocation].d4.x   = subgroupAdd(data[0].d4.x);

+    data[invocation].d4.xy  = subgroupAdd(data[1].d4.xy);

+    data[invocation].d4.xyz = subgroupAdd(data[2].d4.xyz);

+    data[invocation].d4     = subgroupAdd(data[3].d4);

+

+    data[invocation].f4.x   = subgroupMul(data[0].f4.x);

+    data[invocation].f4.xy  = subgroupMul(data[1].f4.xy);

+    data[invocation].f4.xyz = subgroupMul(data[2].f4.xyz);

+    data[invocation].f4     = subgroupMul(data[3].f4);

+

+    data[invocation].i4.x   = subgroupMul(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupMul(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupMul(data[2].i4.xyz);

+    data[invocation].i4     = subgroupMul(data[3].i4);

+

+    data[invocation].u4.x   = subgroupMul(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupMul(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupMul(data[2].u4.xyz);

+    data[invocation].u4     = subgroupMul(data[3].u4);

+

+    data[invocation].d4.x   = subgroupMul(data[0].d4.x);

+    data[invocation].d4.xy  = subgroupMul(data[1].d4.xy);

+    data[invocation].d4.xyz = subgroupMul(data[2].d4.xyz);

+    data[invocation].d4     = subgroupMul(data[3].d4);

+

+    data[invocation].f4.x   = subgroupMin(data[0].f4.x);

+    data[invocation].f4.xy  = subgroupMin(data[1].f4.xy);

+    data[invocation].f4.xyz = subgroupMin(data[2].f4.xyz);

+    data[invocation].f4     = subgroupMin(data[3].f4);

+

+    data[invocation].i4.x   = subgroupMin(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupMin(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupMin(data[2].i4.xyz);

+    data[invocation].i4     = subgroupMin(data[3].i4);

+

+    data[invocation].u4.x   = subgroupMin(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupMin(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupMin(data[2].u4.xyz);

+    data[invocation].u4     = subgroupMin(data[3].u4);

+

+    data[invocation].d4.x   = subgroupMin(data[0].d4.x);

+    data[invocation].d4.xy  = subgroupMin(data[1].d4.xy);

+    data[invocation].d4.xyz = subgroupMin(data[2].d4.xyz);

+    data[invocation].d4     = subgroupMin(data[3].d4);

+

+    data[invocation].f4.x   = subgroupMax(data[0].f4.x);

+    data[invocation].f4.xy  = subgroupMax(data[1].f4.xy);

+    data[invocation].f4.xyz = subgroupMax(data[2].f4.xyz);

+    data[invocation].f4     = subgroupMax(data[3].f4);

+

+    data[invocation].i4.x   = subgroupMax(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupMax(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupMax(data[2].i4.xyz);

+    data[invocation].i4     = subgroupMax(data[3].i4);

+

+    data[invocation].u4.x   = subgroupMax(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupMax(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupMax(data[2].u4.xyz);

+    data[invocation].u4     = subgroupMax(data[3].u4);

+

+    data[invocation].d4.x   = subgroupMax(data[0].d4.x);

+    data[invocation].d4.xy  = subgroupMax(data[1].d4.xy);

+    data[invocation].d4.xyz = subgroupMax(data[2].d4.xyz);

+    data[invocation].d4     = subgroupMax(data[3].d4);

+

+    data[invocation].i4.x   = subgroupAnd(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupAnd(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupAnd(data[2].i4.xyz);

+    data[invocation].i4     = subgroupAnd(data[3].i4);

+

+    data[invocation].u4.x   = subgroupAnd(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupAnd(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupAnd(data[2].u4.xyz);

+    data[invocation].u4     = subgroupAnd(data[3].u4);

+

+    data[invocation].i4.x   =   int(subgroupAnd(data[0].i4.x < 0));

+    data[invocation].i4.xy  = ivec2(subgroupAnd(lessThan(data[1].i4.xy, ivec2(0))));

+    data[invocation].i4.xyz = ivec3(subgroupAnd(lessThan(data[1].i4.xyz, ivec3(0))));

+    data[invocation].i4     = ivec4(subgroupAnd(lessThan(data[1].i4, ivec4(0))));

+

+    data[invocation].i4.x   = subgroupOr(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupOr(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupOr(data[2].i4.xyz);

+    data[invocation].i4     = subgroupOr(data[3].i4);

+

+    data[invocation].u4.x   = subgroupOr(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupOr(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupOr(data[2].u4.xyz);

+    data[invocation].u4     = subgroupOr(data[3].u4);

+

+    data[invocation].i4.x   =   int(subgroupOr(data[0].i4.x < 0));

+    data[invocation].i4.xy  = ivec2(subgroupOr(lessThan(data[1].i4.xy, ivec2(0))));

+    data[invocation].i4.xyz = ivec3(subgroupOr(lessThan(data[1].i4.xyz, ivec3(0))));

+    data[invocation].i4     = ivec4(subgroupOr(lessThan(data[1].i4, ivec4(0))));

+

+    data[invocation].i4.x   = subgroupXor(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupXor(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupXor(data[2].i4.xyz);

+    data[invocation].i4     = subgroupXor(data[3].i4);

+

+    data[invocation].u4.x   = subgroupXor(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupXor(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupXor(data[2].u4.xyz);

+    data[invocation].u4     = subgroupXor(data[3].u4);

+

+    data[invocation].i4.x   =   int(subgroupXor(data[0].i4.x < 0));

+    data[invocation].i4.xy  = ivec2(subgroupXor(lessThan(data[1].i4.xy, ivec2(0))));

+    data[invocation].i4.xyz = ivec3(subgroupXor(lessThan(data[1].i4.xyz, ivec3(0))));

+    data[invocation].i4     = ivec4(subgroupXor(lessThan(data[1].i4, ivec4(0))));

+

+    data[invocation].f4.x   = subgroupInclusiveAdd(data[0].f4.x);

+    data[invocation].f4.xy  = subgroupInclusiveAdd(data[1].f4.xy);

+    data[invocation].f4.xyz = subgroupInclusiveAdd(data[2].f4.xyz);

+    data[invocation].f4     = subgroupInclusiveAdd(data[3].f4);

+

+    data[invocation].i4.x   = subgroupInclusiveAdd(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupInclusiveAdd(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupInclusiveAdd(data[2].i4.xyz);

+    data[invocation].i4     = subgroupInclusiveAdd(data[3].i4);

+

+    data[invocation].u4.x   = subgroupInclusiveAdd(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupInclusiveAdd(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupInclusiveAdd(data[2].u4.xyz);

+    data[invocation].u4     = subgroupInclusiveAdd(data[3].u4);

+

+    data[invocation].d4.x   = subgroupInclusiveAdd(data[0].d4.x);

+    data[invocation].d4.xy  = subgroupInclusiveAdd(data[1].d4.xy);

+    data[invocation].d4.xyz = subgroupInclusiveAdd(data[2].d4.xyz);

+    data[invocation].d4     = subgroupInclusiveAdd(data[3].d4);

+

+    data[invocation].f4.x   = subgroupInclusiveMul(data[0].f4.x);

+    data[invocation].f4.xy  = subgroupInclusiveMul(data[1].f4.xy);

+    data[invocation].f4.xyz = subgroupInclusiveMul(data[2].f4.xyz);

+    data[invocation].f4     = subgroupInclusiveMul(data[3].f4);

+

+    data[invocation].i4.x   = subgroupInclusiveMul(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupInclusiveMul(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupInclusiveMul(data[2].i4.xyz);

+    data[invocation].i4     = subgroupInclusiveMul(data[3].i4);

+

+    data[invocation].u4.x   = subgroupInclusiveMul(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupInclusiveMul(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupInclusiveMul(data[2].u4.xyz);

+    data[invocation].u4     = subgroupInclusiveMul(data[3].u4);

+

+    data[invocation].d4.x   = subgroupInclusiveMul(data[0].d4.x);

+    data[invocation].d4.xy  = subgroupInclusiveMul(data[1].d4.xy);

+    data[invocation].d4.xyz = subgroupInclusiveMul(data[2].d4.xyz);

+    data[invocation].d4     = subgroupInclusiveMul(data[3].d4);

+

+    data[invocation].f4.x   = subgroupInclusiveMin(data[0].f4.x);

+    data[invocation].f4.xy  = subgroupInclusiveMin(data[1].f4.xy);

+    data[invocation].f4.xyz = subgroupInclusiveMin(data[2].f4.xyz);

+    data[invocation].f4     = subgroupInclusiveMin(data[3].f4);

+

+    data[invocation].i4.x   = subgroupInclusiveMin(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupInclusiveMin(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupInclusiveMin(data[2].i4.xyz);

+    data[invocation].i4     = subgroupInclusiveMin(data[3].i4);

+

+    data[invocation].u4.x   = subgroupInclusiveMin(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupInclusiveMin(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupInclusiveMin(data[2].u4.xyz);

+    data[invocation].u4     = subgroupInclusiveMin(data[3].u4);

+

+    data[invocation].d4.x   = subgroupInclusiveMin(data[0].d4.x);

+    data[invocation].d4.xy  = subgroupInclusiveMin(data[1].d4.xy);

+    data[invocation].d4.xyz = subgroupInclusiveMin(data[2].d4.xyz);

+    data[invocation].d4     = subgroupInclusiveMin(data[3].d4);

+

+    data[invocation].f4.x   = subgroupInclusiveMax(data[0].f4.x);

+    data[invocation].f4.xy  = subgroupInclusiveMax(data[1].f4.xy);

+    data[invocation].f4.xyz = subgroupInclusiveMax(data[2].f4.xyz);

+    data[invocation].f4     = subgroupInclusiveMax(data[3].f4);

+

+    data[invocation].i4.x   = subgroupInclusiveMax(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupInclusiveMax(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupInclusiveMax(data[2].i4.xyz);

+    data[invocation].i4     = subgroupInclusiveMax(data[3].i4);

+

+    data[invocation].u4.x   = subgroupInclusiveMax(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupInclusiveMax(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupInclusiveMax(data[2].u4.xyz);

+    data[invocation].u4     = subgroupInclusiveMax(data[3].u4);

+

+    data[invocation].d4.x   = subgroupInclusiveMax(data[0].d4.x);

+    data[invocation].d4.xy  = subgroupInclusiveMax(data[1].d4.xy);

+    data[invocation].d4.xyz = subgroupInclusiveMax(data[2].d4.xyz);

+    data[invocation].d4     = subgroupInclusiveMax(data[3].d4);

+

+    data[invocation].i4.x   = subgroupInclusiveAnd(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupInclusiveAnd(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupInclusiveAnd(data[2].i4.xyz);

+    data[invocation].i4     = subgroupInclusiveAnd(data[3].i4);

+

+    data[invocation].u4.x   = subgroupInclusiveAnd(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupInclusiveAnd(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupInclusiveAnd(data[2].u4.xyz);

+    data[invocation].u4     = subgroupInclusiveAnd(data[3].u4);

+

+    data[invocation].i4.x   =   int(subgroupInclusiveAnd(data[0].i4.x < 0));

+    data[invocation].i4.xy  = ivec2(subgroupInclusiveAnd(lessThan(data[1].i4.xy, ivec2(0))));

+    data[invocation].i4.xyz = ivec3(subgroupInclusiveAnd(lessThan(data[1].i4.xyz, ivec3(0))));

+    data[invocation].i4     = ivec4(subgroupInclusiveAnd(lessThan(data[1].i4, ivec4(0))));

+

+    data[invocation].i4.x   = subgroupInclusiveOr(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupInclusiveOr(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupInclusiveOr(data[2].i4.xyz);

+    data[invocation].i4     = subgroupInclusiveOr(data[3].i4);

+

+    data[invocation].u4.x   = subgroupInclusiveOr(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupInclusiveOr(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupInclusiveOr(data[2].u4.xyz);

+    data[invocation].u4     = subgroupInclusiveOr(data[3].u4);

+

+    data[invocation].i4.x   =   int(subgroupInclusiveOr(data[0].i4.x < 0));

+    data[invocation].i4.xy  = ivec2(subgroupInclusiveOr(lessThan(data[1].i4.xy, ivec2(0))));

+    data[invocation].i4.xyz = ivec3(subgroupInclusiveOr(lessThan(data[1].i4.xyz, ivec3(0))));

+    data[invocation].i4     = ivec4(subgroupInclusiveOr(lessThan(data[1].i4, ivec4(0))));

+

+    data[invocation].i4.x   = subgroupInclusiveXor(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupInclusiveXor(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupInclusiveXor(data[2].i4.xyz);

+    data[invocation].i4     = subgroupInclusiveXor(data[3].i4);

+

+    data[invocation].u4.x   = subgroupInclusiveXor(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupInclusiveXor(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupInclusiveXor(data[2].u4.xyz);

+    data[invocation].u4     = subgroupInclusiveXor(data[3].u4);

+

+    data[invocation].i4.x   =   int(subgroupInclusiveXor(data[0].i4.x < 0));

+    data[invocation].i4.xy  = ivec2(subgroupInclusiveXor(lessThan(data[1].i4.xy, ivec2(0))));

+    data[invocation].i4.xyz = ivec3(subgroupInclusiveXor(lessThan(data[1].i4.xyz, ivec3(0))));

+    data[invocation].i4     = ivec4(subgroupInclusiveXor(lessThan(data[1].i4, ivec4(0))));

+

+    data[invocation].f4.x   = subgroupExclusiveAdd(data[0].f4.x);

+    data[invocation].f4.xy  = subgroupExclusiveAdd(data[1].f4.xy);

+    data[invocation].f4.xyz = subgroupExclusiveAdd(data[2].f4.xyz);

+    data[invocation].f4     = subgroupExclusiveAdd(data[3].f4);

+

+    data[invocation].i4.x   = subgroupExclusiveAdd(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupExclusiveAdd(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupExclusiveAdd(data[2].i4.xyz);

+    data[invocation].i4     = subgroupExclusiveAdd(data[3].i4);

+

+    data[invocation].u4.x   = subgroupExclusiveAdd(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupExclusiveAdd(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupExclusiveAdd(data[2].u4.xyz);

+    data[invocation].u4     = subgroupExclusiveAdd(data[3].u4);

+

+    data[invocation].d4.x   = subgroupExclusiveAdd(data[0].d4.x);

+    data[invocation].d4.xy  = subgroupExclusiveAdd(data[1].d4.xy);

+    data[invocation].d4.xyz = subgroupExclusiveAdd(data[2].d4.xyz);

+    data[invocation].d4     = subgroupExclusiveAdd(data[3].d4);

+

+    data[invocation].f4.x   = subgroupExclusiveMul(data[0].f4.x);

+    data[invocation].f4.xy  = subgroupExclusiveMul(data[1].f4.xy);

+    data[invocation].f4.xyz = subgroupExclusiveMul(data[2].f4.xyz);

+    data[invocation].f4     = subgroupExclusiveMul(data[3].f4);

+

+    data[invocation].i4.x   = subgroupExclusiveMul(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupExclusiveMul(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupExclusiveMul(data[2].i4.xyz);

+    data[invocation].i4     = subgroupExclusiveMul(data[3].i4);

+

+    data[invocation].u4.x   = subgroupExclusiveMul(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupExclusiveMul(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupExclusiveMul(data[2].u4.xyz);

+    data[invocation].u4     = subgroupExclusiveMul(data[3].u4);

+

+    data[invocation].d4.x   = subgroupExclusiveMul(data[0].d4.x);

+    data[invocation].d4.xy  = subgroupExclusiveMul(data[1].d4.xy);

+    data[invocation].d4.xyz = subgroupExclusiveMul(data[2].d4.xyz);

+    data[invocation].d4     = subgroupExclusiveMul(data[3].d4);

+

+    data[invocation].f4.x   = subgroupExclusiveMin(data[0].f4.x);

+    data[invocation].f4.xy  = subgroupExclusiveMin(data[1].f4.xy);

+    data[invocation].f4.xyz = subgroupExclusiveMin(data[2].f4.xyz);

+    data[invocation].f4     = subgroupExclusiveMin(data[3].f4);

+

+    data[invocation].i4.x   = subgroupExclusiveMin(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupExclusiveMin(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupExclusiveMin(data[2].i4.xyz);

+    data[invocation].i4     = subgroupExclusiveMin(data[3].i4);

+

+    data[invocation].u4.x   = subgroupExclusiveMin(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupExclusiveMin(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupExclusiveMin(data[2].u4.xyz);

+    data[invocation].u4     = subgroupExclusiveMin(data[3].u4);

+

+    data[invocation].d4.x   = subgroupExclusiveMin(data[0].d4.x);

+    data[invocation].d4.xy  = subgroupExclusiveMin(data[1].d4.xy);

+    data[invocation].d4.xyz = subgroupExclusiveMin(data[2].d4.xyz);

+    data[invocation].d4     = subgroupExclusiveMin(data[3].d4);

+

+    data[invocation].f4.x   = subgroupExclusiveMax(data[0].f4.x);

+    data[invocation].f4.xy  = subgroupExclusiveMax(data[1].f4.xy);

+    data[invocation].f4.xyz = subgroupExclusiveMax(data[2].f4.xyz);

+    data[invocation].f4     = subgroupExclusiveMax(data[3].f4);

+

+    data[invocation].i4.x   = subgroupExclusiveMax(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupExclusiveMax(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupExclusiveMax(data[2].i4.xyz);

+    data[invocation].i4     = subgroupExclusiveMax(data[3].i4);

+

+    data[invocation].u4.x   = subgroupExclusiveMax(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupExclusiveMax(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupExclusiveMax(data[2].u4.xyz);

+    data[invocation].u4     = subgroupExclusiveMax(data[3].u4);

+

+    data[invocation].d4.x   = subgroupExclusiveMax(data[0].d4.x);

+    data[invocation].d4.xy  = subgroupExclusiveMax(data[1].d4.xy);

+    data[invocation].d4.xyz = subgroupExclusiveMax(data[2].d4.xyz);

+    data[invocation].d4     = subgroupExclusiveMax(data[3].d4);

+

+    data[invocation].i4.x   = subgroupExclusiveAnd(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupExclusiveAnd(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupExclusiveAnd(data[2].i4.xyz);

+    data[invocation].i4     = subgroupExclusiveAnd(data[3].i4);

+

+    data[invocation].u4.x   = subgroupExclusiveAnd(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupExclusiveAnd(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupExclusiveAnd(data[2].u4.xyz);

+    data[invocation].u4     = subgroupExclusiveAnd(data[3].u4);

+

+    data[invocation].i4.x   =   int(subgroupExclusiveAnd(data[0].i4.x < 0));

+    data[invocation].i4.xy  = ivec2(subgroupExclusiveAnd(lessThan(data[1].i4.xy, ivec2(0))));

+    data[invocation].i4.xyz = ivec3(subgroupExclusiveAnd(lessThan(data[1].i4.xyz, ivec3(0))));

+    data[invocation].i4     = ivec4(subgroupExclusiveAnd(lessThan(data[1].i4, ivec4(0))));

+

+    data[invocation].i4.x   = subgroupExclusiveOr(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupExclusiveOr(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupExclusiveOr(data[2].i4.xyz);

+    data[invocation].i4     = subgroupExclusiveOr(data[3].i4);

+

+    data[invocation].u4.x   = subgroupExclusiveOr(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupExclusiveOr(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupExclusiveOr(data[2].u4.xyz);

+    data[invocation].u4     = subgroupExclusiveOr(data[3].u4);

+

+    data[invocation].i4.x   =   int(subgroupExclusiveOr(data[0].i4.x < 0));

+    data[invocation].i4.xy  = ivec2(subgroupExclusiveOr(lessThan(data[1].i4.xy, ivec2(0))));

+    data[invocation].i4.xyz = ivec3(subgroupExclusiveOr(lessThan(data[1].i4.xyz, ivec3(0))));

+    data[invocation].i4     = ivec4(subgroupExclusiveOr(lessThan(data[1].i4, ivec4(0))));

+

+    data[invocation].i4.x   = subgroupExclusiveXor(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupExclusiveXor(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupExclusiveXor(data[2].i4.xyz);

+    data[invocation].i4     = subgroupExclusiveXor(data[3].i4);

+

+    data[invocation].u4.x   = subgroupExclusiveXor(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupExclusiveXor(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupExclusiveXor(data[2].u4.xyz);

+    data[invocation].u4     = subgroupExclusiveXor(data[3].u4);

+

+    data[invocation].i4.x   =   int(subgroupExclusiveXor(data[0].i4.x < 0));

+    data[invocation].i4.xy  = ivec2(subgroupExclusiveXor(lessThan(data[1].i4.xy, ivec2(0))));

+    data[invocation].i4.xyz = ivec3(subgroupExclusiveXor(lessThan(data[1].i4.xyz, ivec3(0))));

+    data[invocation].i4     = ivec4(subgroupExclusiveXor(lessThan(data[1].i4, ivec4(0))));

+}

diff --git a/Test/spv.subgroupBallot.comp b/Test/spv.subgroupBallot.comp
new file mode 100644
index 0000000..2875468
--- /dev/null
+++ b/Test/spv.subgroupBallot.comp
@@ -0,0 +1,86 @@
+#version 450

+

+#extension GL_KHR_shader_subgroup_ballot: enable

+

+layout (local_size_x = 8, local_size_y = 8, local_size_z = 1) in;

+

+layout(binding = 0) buffer Buffers

+{

+    vec4  f4;

+    ivec4 i4;

+    uvec4 u4;

+    dvec4 d4;

+} data[4];

+

+void main()

+{

+    uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;

+

+    uvec4 relMask = gl_SubgroupEqMask +

+                       gl_SubgroupGeMask +

+                       gl_SubgroupGtMask +

+                       gl_SubgroupLeMask +

+                       gl_SubgroupLtMask;

+

+    uvec4 result = subgroupBallot(true);

+

+    data[invocation].u4.x = subgroupBallotBitCount(result);

+    data[invocation].u4.y = subgroupBallotBitExtract(result, 0) ? 1 : 0;

+    data[invocation].u4.z = subgroupBallotInclusiveBitCount(result) + subgroupBallotExclusiveBitCount(result);

+    data[invocation].u4.w = subgroupBallotFindLSB(result) + subgroupBallotFindMSB(result);

+

+    if ((relMask == result) && subgroupInverseBallot(data[0].u4))

+    {

+        data[invocation].f4.x   = subgroupBroadcast(data[0].f4.x,    invocation);

+        data[invocation].f4.xy  = subgroupBroadcast(data[1].f4.xy,   invocation);

+        data[invocation].f4.xyz = subgroupBroadcast(data[2].f4.xyz,  invocation);

+        data[invocation].f4     = subgroupBroadcast(data[3].f4,      invocation);

+

+        data[invocation].i4.x   = subgroupBroadcast(data[0].i4.x,    invocation);

+        data[invocation].i4.xy  = subgroupBroadcast(data[1].i4.xy,   invocation);

+        data[invocation].i4.xyz = subgroupBroadcast(data[2].i4.xyz,  invocation);

+        data[invocation].i4     = subgroupBroadcast(data[3].i4,      invocation);

+

+        data[invocation].u4.x   = subgroupBroadcast(data[0].u4.x,    invocation);

+        data[invocation].u4.xy  = subgroupBroadcast(data[1].u4.xy,   invocation);

+        data[invocation].u4.xyz = subgroupBroadcast(data[2].u4.xyz,  invocation);

+        data[invocation].u4     = subgroupBroadcast(data[3].u4,      invocation);

+

+        data[invocation].d4.x   = subgroupBroadcast(data[0].d4.x,    invocation);

+        data[invocation].d4.xy  = subgroupBroadcast(data[1].d4.xy,   invocation);

+        data[invocation].d4.xyz = subgroupBroadcast(data[2].d4.xyz,  invocation);

+        data[invocation].d4     = subgroupBroadcast(data[3].d4,      invocation);

+

+        data[invocation].i4.x   = int(subgroupBroadcast(data[0].i4.x < 0,            invocation));

+        data[invocation].i4.xy  = ivec2(subgroupBroadcast(lessThan(data[1].i4.xy, ivec2(0)), invocation));

+        data[invocation].i4.xyz = ivec3(subgroupBroadcast(lessThan(data[1].i4.xyz, ivec3(0)), invocation));

+        data[invocation].i4     = ivec4(subgroupBroadcast(lessThan(data[1].i4, ivec4(0)), invocation));

+    }

+    else

+    {

+        data[invocation].f4.x   = subgroupBroadcastFirst(data[0].f4.x);

+        data[invocation].f4.xy  = subgroupBroadcastFirst(data[1].f4.xy);

+        data[invocation].f4.xyz = subgroupBroadcastFirst(data[2].f4.xyz);

+        data[invocation].f4     = subgroupBroadcastFirst(data[3].f4);

+

+        data[invocation].i4.x   = subgroupBroadcastFirst(data[0].i4.x);

+        data[invocation].i4.xy  = subgroupBroadcastFirst(data[1].i4.xy);

+        data[invocation].i4.xyz = subgroupBroadcastFirst(data[2].i4.xyz);

+        data[invocation].i4     = subgroupBroadcastFirst(data[3].i4);

+

+        data[invocation].u4.x   = subgroupBroadcastFirst(data[0].u4.x);

+        data[invocation].u4.xy  = subgroupBroadcastFirst(data[1].u4.xy);

+        data[invocation].u4.xyz = subgroupBroadcastFirst(data[2].u4.xyz);

+        data[invocation].u4     = subgroupBroadcastFirst(data[3].u4);

+

+        data[invocation].d4.x   = subgroupBroadcastFirst(data[0].d4.x);

+        data[invocation].d4.xy  = subgroupBroadcastFirst(data[1].d4.xy);

+        data[invocation].d4.xyz = subgroupBroadcastFirst(data[2].d4.xyz);

+        data[invocation].d4     = subgroupBroadcastFirst(data[3].d4);

+

+        data[invocation].i4.x   = int(subgroupBroadcastFirst(data[0].i4.x < 0));

+        data[invocation].i4.xy  = ivec2(subgroupBroadcastFirst(lessThan(data[1].i4.xy, ivec2(0))));

+        data[invocation].i4.xyz = ivec3(subgroupBroadcastFirst(lessThan(data[1].i4.xyz, ivec3(0))));

+        data[invocation].i4     = ivec4(subgroupBroadcastFirst(lessThan(data[1].i4, ivec4(0))));

+    }

+}

diff --git a/Test/spv.subgroupBasic.comp b/Test/spv.subgroupBasic.comp
new file mode 100644
index 0000000..4801c10
--- /dev/null
+++ b/Test/spv.subgroupBasic.comp
@@ -0,0 +1,23 @@
+#version 450

+

+#extension GL_KHR_shader_subgroup_basic: enable

+

+layout (local_size_x = 8, local_size_y = 8, local_size_z = 1) in;

+

+layout(binding = 0) buffer Buffer

+{

+    int a[];

+} data;

+

+void main()

+{

+    data.a[gl_SubgroupSize] = 1;

+    data.a[gl_SubgroupInvocationID] = 1;

+    data.a[gl_NumSubgroups] = 1;

+    data.a[gl_SubgroupID] = (subgroupElect()) ? 1 : 0;

+    subgroupBarrier();

+    subgroupMemoryBarrier();

+    subgroupMemoryBarrierBuffer();

+    subgroupMemoryBarrierShared();

+    subgroupMemoryBarrierImage();

+}

diff --git a/Test/spv.subgroupClustered.comp b/Test/spv.subgroupClustered.comp
new file mode 100644
index 0000000..128a24c
--- /dev/null
+++ b/Test/spv.subgroupClustered.comp
@@ -0,0 +1,143 @@
+#version 450

+

+#extension GL_KHR_shader_subgroup_clustered: enable

+

+layout (local_size_x = 8) in;

+

+layout(binding = 0) buffer Buffers

+{

+    vec4  f4;

+    ivec4 i4;

+    uvec4 u4;

+    dvec4 d4;

+} data[4];

+

+void main()

+{

+    uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;

+

+    data[invocation].f4.x   = subgroupClusteredAdd(data[0].f4.x, 1);

+    data[invocation].f4.xy  = subgroupClusteredAdd(data[1].f4.xy, 1);

+    data[invocation].f4.xyz = subgroupClusteredAdd(data[2].f4.xyz, 1);

+    data[invocation].f4     = subgroupClusteredAdd(data[3].f4, 1);

+

+    data[invocation].i4.x   = subgroupClusteredAdd(data[0].i4.x, 1);

+    data[invocation].i4.xy  = subgroupClusteredAdd(data[1].i4.xy, 1);

+    data[invocation].i4.xyz = subgroupClusteredAdd(data[2].i4.xyz, 1);

+    data[invocation].i4     = subgroupClusteredAdd(data[3].i4, 1);

+

+    data[invocation].u4.x   = subgroupClusteredAdd(data[0].u4.x, 1);

+    data[invocation].u4.xy  = subgroupClusteredAdd(data[1].u4.xy, 1);

+    data[invocation].u4.xyz = subgroupClusteredAdd(data[2].u4.xyz, 1);

+    data[invocation].u4     = subgroupClusteredAdd(data[3].u4, 1);

+

+    data[invocation].d4.x   = subgroupClusteredAdd(data[0].d4.x, 1);

+    data[invocation].d4.xy  = subgroupClusteredAdd(data[1].d4.xy, 1);

+    data[invocation].d4.xyz = subgroupClusteredAdd(data[2].d4.xyz, 1);

+    data[invocation].d4     = subgroupClusteredAdd(data[3].d4, 1);

+

+    data[invocation].f4.x   = subgroupClusteredMul(data[0].f4.x, 1);

+    data[invocation].f4.xy  = subgroupClusteredMul(data[1].f4.xy, 1);

+    data[invocation].f4.xyz = subgroupClusteredMul(data[2].f4.xyz, 1);

+    data[invocation].f4     = subgroupClusteredMul(data[3].f4, 1);

+

+    data[invocation].i4.x   = subgroupClusteredMul(data[0].i4.x, 1);

+    data[invocation].i4.xy  = subgroupClusteredMul(data[1].i4.xy, 1);

+    data[invocation].i4.xyz = subgroupClusteredMul(data[2].i4.xyz, 1);

+    data[invocation].i4     = subgroupClusteredMul(data[3].i4, 1);

+

+    data[invocation].u4.x   = subgroupClusteredMul(data[0].u4.x, 1);

+    data[invocation].u4.xy  = subgroupClusteredMul(data[1].u4.xy, 1);

+    data[invocation].u4.xyz = subgroupClusteredMul(data[2].u4.xyz, 1);

+    data[invocation].u4     = subgroupClusteredMul(data[3].u4, 1);

+

+    data[invocation].d4.x   = subgroupClusteredMul(data[0].d4.x, 1);

+    data[invocation].d4.xy  = subgroupClusteredMul(data[1].d4.xy, 1);

+    data[invocation].d4.xyz = subgroupClusteredMul(data[2].d4.xyz, 1);

+    data[invocation].d4     = subgroupClusteredMul(data[3].d4, 1);

+

+    data[invocation].f4.x   = subgroupClusteredMin(data[0].f4.x, 1);

+    data[invocation].f4.xy  = subgroupClusteredMin(data[1].f4.xy, 1);

+    data[invocation].f4.xyz = subgroupClusteredMin(data[2].f4.xyz, 1);

+    data[invocation].f4     = subgroupClusteredMin(data[3].f4, 1);

+

+    data[invocation].i4.x   = subgroupClusteredMin(data[0].i4.x, 1);

+    data[invocation].i4.xy  = subgroupClusteredMin(data[1].i4.xy, 1);

+    data[invocation].i4.xyz = subgroupClusteredMin(data[2].i4.xyz, 1);

+    data[invocation].i4     = subgroupClusteredMin(data[3].i4, 1);

+

+    data[invocation].u4.x   = subgroupClusteredMin(data[0].u4.x, 1);

+    data[invocation].u4.xy  = subgroupClusteredMin(data[1].u4.xy, 1);

+    data[invocation].u4.xyz = subgroupClusteredMin(data[2].u4.xyz, 1);

+    data[invocation].u4     = subgroupClusteredMin(data[3].u4, 1);

+

+    data[invocation].d4.x   = subgroupClusteredMin(data[0].d4.x, 1);

+    data[invocation].d4.xy  = subgroupClusteredMin(data[1].d4.xy, 1);

+    data[invocation].d4.xyz = subgroupClusteredMin(data[2].d4.xyz, 1);

+    data[invocation].d4     = subgroupClusteredMin(data[3].d4, 1);

+

+    data[invocation].f4.x   = subgroupClusteredMax(data[0].f4.x, 1);

+    data[invocation].f4.xy  = subgroupClusteredMax(data[1].f4.xy, 1);

+    data[invocation].f4.xyz = subgroupClusteredMax(data[2].f4.xyz, 1);

+    data[invocation].f4     = subgroupClusteredMax(data[3].f4, 1);

+

+    data[invocation].i4.x   = subgroupClusteredMax(data[0].i4.x, 1);

+    data[invocation].i4.xy  = subgroupClusteredMax(data[1].i4.xy, 1);

+    data[invocation].i4.xyz = subgroupClusteredMax(data[2].i4.xyz, 1);

+    data[invocation].i4     = subgroupClusteredMax(data[3].i4, 1);

+

+    data[invocation].u4.x   = subgroupClusteredMax(data[0].u4.x, 1);

+    data[invocation].u4.xy  = subgroupClusteredMax(data[1].u4.xy, 1);

+    data[invocation].u4.xyz = subgroupClusteredMax(data[2].u4.xyz, 1);

+    data[invocation].u4     = subgroupClusteredMax(data[3].u4, 1);

+

+    data[invocation].d4.x   = subgroupClusteredMax(data[0].d4.x, 1);

+    data[invocation].d4.xy  = subgroupClusteredMax(data[1].d4.xy, 1);

+    data[invocation].d4.xyz = subgroupClusteredMax(data[2].d4.xyz, 1);

+    data[invocation].d4     = subgroupClusteredMax(data[3].d4, 1);

+

+    data[invocation].i4.x   = subgroupClusteredAnd(data[0].i4.x, 1);

+    data[invocation].i4.xy  = subgroupClusteredAnd(data[1].i4.xy, 1);

+    data[invocation].i4.xyz = subgroupClusteredAnd(data[2].i4.xyz, 1);

+    data[invocation].i4     = subgroupClusteredAnd(data[3].i4, 1);

+

+    data[invocation].u4.x   = subgroupClusteredAnd(data[0].u4.x, 1);

+    data[invocation].u4.xy  = subgroupClusteredAnd(data[1].u4.xy, 1);

+    data[invocation].u4.xyz = subgroupClusteredAnd(data[2].u4.xyz, 1);

+    data[invocation].u4     = subgroupClusteredAnd(data[3].u4, 1);

+

+    data[invocation].i4.x   =   int(subgroupClusteredAnd(data[0].i4.x < 0, 1));

+    data[invocation].i4.xy  = ivec2(subgroupClusteredAnd(lessThan(data[1].i4.xy, ivec2(0)), 1));

+    data[invocation].i4.xyz = ivec3(subgroupClusteredAnd(lessThan(data[1].i4.xyz, ivec3(0)), 1));

+    data[invocation].i4     = ivec4(subgroupClusteredAnd(lessThan(data[1].i4, ivec4(0)), 1));

+

+    data[invocation].i4.x   = subgroupClusteredOr(data[0].i4.x, 1);

+    data[invocation].i4.xy  = subgroupClusteredOr(data[1].i4.xy, 1);

+    data[invocation].i4.xyz = subgroupClusteredOr(data[2].i4.xyz, 1);

+    data[invocation].i4     = subgroupClusteredOr(data[3].i4, 1);

+

+    data[invocation].u4.x   = subgroupClusteredOr(data[0].u4.x, 1);

+    data[invocation].u4.xy  = subgroupClusteredOr(data[1].u4.xy, 1);

+    data[invocation].u4.xyz = subgroupClusteredOr(data[2].u4.xyz, 1);

+    data[invocation].u4     = subgroupClusteredOr(data[3].u4, 1);

+

+    data[invocation].i4.x   =   int(subgroupClusteredOr(data[0].i4.x < 0, 1));

+    data[invocation].i4.xy  = ivec2(subgroupClusteredOr(lessThan(data[1].i4.xy, ivec2(0)), 1));

+    data[invocation].i4.xyz = ivec3(subgroupClusteredOr(lessThan(data[1].i4.xyz, ivec3(0)), 1));

+    data[invocation].i4     = ivec4(subgroupClusteredOr(lessThan(data[1].i4, ivec4(0)), 1));

+

+    data[invocation].i4.x   = subgroupClusteredXor(data[0].i4.x, 1);

+    data[invocation].i4.xy  = subgroupClusteredXor(data[1].i4.xy, 1);

+    data[invocation].i4.xyz = subgroupClusteredXor(data[2].i4.xyz, 1);

+    data[invocation].i4     = subgroupClusteredXor(data[3].i4, 1);

+

+    data[invocation].u4.x   = subgroupClusteredXor(data[0].u4.x, 1);

+    data[invocation].u4.xy  = subgroupClusteredXor(data[1].u4.xy, 1);

+    data[invocation].u4.xyz = subgroupClusteredXor(data[2].u4.xyz, 1);

+    data[invocation].u4     = subgroupClusteredXor(data[3].u4, 1);

+

+    data[invocation].i4.x   =   int(subgroupClusteredXor(data[0].i4.x < 0, 1));

+    data[invocation].i4.xy  = ivec2(subgroupClusteredXor(lessThan(data[1].i4.xy, ivec2(0)), 1));

+    data[invocation].i4.xyz = ivec3(subgroupClusteredXor(lessThan(data[1].i4.xyz, ivec3(0)), 1));

+    data[invocation].i4     = ivec4(subgroupClusteredXor(lessThan(data[1].i4, ivec4(0)), 1));

+}

diff --git a/Test/spv.subgroupClusteredNeg.comp b/Test/spv.subgroupClusteredNeg.comp
new file mode 100644
index 0000000..ec15413
--- /dev/null
+++ b/Test/spv.subgroupClusteredNeg.comp
@@ -0,0 +1,39 @@
+#version 450

+

+#extension GL_KHR_shader_subgroup_clustered: enable

+

+layout (local_size_x = 8) in;

+

+layout(binding = 0) buffer Buffers

+{

+    vec4  f4;

+    ivec4 i4;

+    uvec4 u4;

+    dvec4 d4;

+} data[4];

+

+void main()

+{

+    int a = 1;

+    const int aConst = 1;

+

+    uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;

+

+    data[invocation].f4.xy  = subgroupClusteredAdd(data[1].f4.xy, 0);          // ERROR, less than 1

+

+    data[invocation].f4.x   = subgroupClusteredMul(data[0].f4.x, 3);           // ERROR, not a power of 2

+

+    data[invocation].i4.xy  = subgroupClusteredMin(data[1].i4.xy, 8);

+    data[invocation].i4.xyz = subgroupClusteredMin(data[2].i4.xyz, 6);         // ERROR, not a power of 2

+

+    data[invocation].f4.x   = subgroupClusteredMax(data[0].f4.x, -1);          // ERROR, less than 1

+

+    data[invocation].i4     = subgroupClusteredAnd(data[3].i4, -3);            // ERROR, less than 1

+

+    data[invocation].i4.x   = subgroupClusteredOr(data[0].i4.x, a);            // ERROR, not constant

+    data[invocation].i4.xy  = subgroupClusteredOr(data[1].i4.xy, aConst);

+

+    data[invocation].i4.x   = subgroupClusteredXor(data[0].i4.x, 1 + a);       // ERROR, not constant

+    data[invocation].i4.xy  = subgroupClusteredXor(data[1].i4.xy, aConst + a); // ERROR, not constant

+    data[invocation].i4.xyz = subgroupClusteredXor(data[2].i4.xyz, 1 + aConst);

+}

diff --git a/Test/spv.subgroupPartitioned.comp b/Test/spv.subgroupPartitioned.comp
new file mode 100755
index 0000000..604833e
--- /dev/null
+++ b/Test/spv.subgroupPartitioned.comp
@@ -0,0 +1,420 @@
+#version 450

+

+#extension GL_NV_shader_subgroup_partitioned: enable

+

+layout (local_size_x = 8) in;

+

+layout(binding = 0) buffer Buffers

+{

+    vec4  f4;

+    ivec4 i4;

+    uvec4 u4;

+    dvec4 d4;

+} data[4];

+

+void main()

+{

+    uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;

+

+    uvec4 ballot = subgroupPartitionNV(invocation);

+

+    data[invocation].u4 = subgroupPartitionNV(data[0].f4.x);

+    data[invocation].u4 = subgroupPartitionNV(data[0].f4.xy);

+    data[invocation].u4 = subgroupPartitionNV(data[0].f4.xyz);

+    data[invocation].u4 = subgroupPartitionNV(data[0].f4);

+

+    data[invocation].u4 = subgroupPartitionNV(data[0].i4.x);

+    data[invocation].u4 = subgroupPartitionNV(data[0].i4.xy);

+    data[invocation].u4 = subgroupPartitionNV(data[0].i4.xyz);

+    data[invocation].u4 = subgroupPartitionNV(data[0].i4);

+

+    data[invocation].u4 = subgroupPartitionNV(data[0].u4.x);

+    data[invocation].u4 = subgroupPartitionNV(data[0].u4.xy);

+    data[invocation].u4 = subgroupPartitionNV(data[0].u4.xyz);

+    data[invocation].u4 = subgroupPartitionNV(data[0].u4);

+

+    data[invocation].u4 = subgroupPartitionNV(data[0].d4.x);

+    data[invocation].u4 = subgroupPartitionNV(data[0].d4.xy);

+    data[invocation].u4 = subgroupPartitionNV(data[0].d4.xyz);

+    data[invocation].u4 = subgroupPartitionNV(data[0].d4);

+

+    data[invocation].u4 = subgroupPartitionNV(bool(data[0].i4.x));

+    data[invocation].u4 = subgroupPartitionNV(bvec2(data[0].i4.xy));

+    data[invocation].u4 = subgroupPartitionNV(bvec3(data[0].i4.xyz));

+    data[invocation].u4 = subgroupPartitionNV(bvec4(data[0].i4));

+

+    data[invocation].f4.x   = subgroupPartitionedAddNV(data[0].f4.x, ballot);

+    data[invocation].f4.xy  = subgroupPartitionedAddNV(data[1].f4.xy, ballot);

+    data[invocation].f4.xyz = subgroupPartitionedAddNV(data[2].f4.xyz, ballot);

+    data[invocation].f4     = subgroupPartitionedAddNV(data[3].f4, ballot);

+

+    data[invocation].i4.x   = subgroupPartitionedAddNV(data[0].i4.x, ballot);

+    data[invocation].i4.xy  = subgroupPartitionedAddNV(data[1].i4.xy, ballot);

+    data[invocation].i4.xyz = subgroupPartitionedAddNV(data[2].i4.xyz, ballot);

+    data[invocation].i4     = subgroupPartitionedAddNV(data[3].i4, ballot);

+

+    data[invocation].u4.x   = subgroupPartitionedAddNV(data[0].u4.x, ballot);

+    data[invocation].u4.xy  = subgroupPartitionedAddNV(data[1].u4.xy, ballot);

+    data[invocation].u4.xyz = subgroupPartitionedAddNV(data[2].u4.xyz, ballot);

+    data[invocation].u4     = subgroupPartitionedAddNV(data[3].u4, ballot);

+

+    data[invocation].d4.x   = subgroupPartitionedAddNV(data[0].d4.x, ballot);

+    data[invocation].d4.xy  = subgroupPartitionedAddNV(data[1].d4.xy, ballot);

+    data[invocation].d4.xyz = subgroupPartitionedAddNV(data[2].d4.xyz, ballot);

+    data[invocation].d4     = subgroupPartitionedAddNV(data[3].d4, ballot);

+

+    data[invocation].f4.x   = subgroupPartitionedMulNV(data[0].f4.x, ballot);

+    data[invocation].f4.xy  = subgroupPartitionedMulNV(data[1].f4.xy, ballot);

+    data[invocation].f4.xyz = subgroupPartitionedMulNV(data[2].f4.xyz, ballot);

+    data[invocation].f4     = subgroupPartitionedMulNV(data[3].f4, ballot);

+

+    data[invocation].i4.x   = subgroupPartitionedMulNV(data[0].i4.x, ballot);

+    data[invocation].i4.xy  = subgroupPartitionedMulNV(data[1].i4.xy, ballot);

+    data[invocation].i4.xyz = subgroupPartitionedMulNV(data[2].i4.xyz, ballot);

+    data[invocation].i4     = subgroupPartitionedMulNV(data[3].i4, ballot);

+

+    data[invocation].u4.x   = subgroupPartitionedMulNV(data[0].u4.x, ballot);

+    data[invocation].u4.xy  = subgroupPartitionedMulNV(data[1].u4.xy, ballot);

+    data[invocation].u4.xyz = subgroupPartitionedMulNV(data[2].u4.xyz, ballot);

+    data[invocation].u4     = subgroupPartitionedMulNV(data[3].u4, ballot);

+

+    data[invocation].d4.x   = subgroupPartitionedMulNV(data[0].d4.x, ballot);

+    data[invocation].d4.xy  = subgroupPartitionedMulNV(data[1].d4.xy, ballot);

+    data[invocation].d4.xyz = subgroupPartitionedMulNV(data[2].d4.xyz, ballot);

+    data[invocation].d4     = subgroupPartitionedMulNV(data[3].d4, ballot);

+

+    data[invocation].f4.x   = subgroupPartitionedMinNV(data[0].f4.x, ballot);

+    data[invocation].f4.xy  = subgroupPartitionedMinNV(data[1].f4.xy, ballot);

+    data[invocation].f4.xyz = subgroupPartitionedMinNV(data[2].f4.xyz, ballot);

+    data[invocation].f4     = subgroupPartitionedMinNV(data[3].f4, ballot);

+

+    data[invocation].i4.x   = subgroupPartitionedMinNV(data[0].i4.x, ballot);

+    data[invocation].i4.xy  = subgroupPartitionedMinNV(data[1].i4.xy, ballot);

+    data[invocation].i4.xyz = subgroupPartitionedMinNV(data[2].i4.xyz, ballot);

+    data[invocation].i4     = subgroupPartitionedMinNV(data[3].i4, ballot);

+

+    data[invocation].u4.x   = subgroupPartitionedMinNV(data[0].u4.x, ballot);

+    data[invocation].u4.xy  = subgroupPartitionedMinNV(data[1].u4.xy, ballot);

+    data[invocation].u4.xyz = subgroupPartitionedMinNV(data[2].u4.xyz, ballot);

+    data[invocation].u4     = subgroupPartitionedMinNV(data[3].u4, ballot);

+

+    data[invocation].d4.x   = subgroupPartitionedMinNV(data[0].d4.x, ballot);

+    data[invocation].d4.xy  = subgroupPartitionedMinNV(data[1].d4.xy, ballot);

+    data[invocation].d4.xyz = subgroupPartitionedMinNV(data[2].d4.xyz, ballot);

+    data[invocation].d4     = subgroupPartitionedMinNV(data[3].d4, ballot);

+

+    data[invocation].f4.x   = subgroupPartitionedMaxNV(data[0].f4.x, ballot);

+    data[invocation].f4.xy  = subgroupPartitionedMaxNV(data[1].f4.xy, ballot);

+    data[invocation].f4.xyz = subgroupPartitionedMaxNV(data[2].f4.xyz, ballot);

+    data[invocation].f4     = subgroupPartitionedMaxNV(data[3].f4, ballot);

+

+    data[invocation].i4.x   = subgroupPartitionedMaxNV(data[0].i4.x, ballot);

+    data[invocation].i4.xy  = subgroupPartitionedMaxNV(data[1].i4.xy, ballot);

+    data[invocation].i4.xyz = subgroupPartitionedMaxNV(data[2].i4.xyz, ballot);

+    data[invocation].i4     = subgroupPartitionedMaxNV(data[3].i4, ballot);

+

+    data[invocation].u4.x   = subgroupPartitionedMaxNV(data[0].u4.x, ballot);

+    data[invocation].u4.xy  = subgroupPartitionedMaxNV(data[1].u4.xy, ballot);

+    data[invocation].u4.xyz = subgroupPartitionedMaxNV(data[2].u4.xyz, ballot);

+    data[invocation].u4     = subgroupPartitionedMaxNV(data[3].u4, ballot);

+

+    data[invocation].d4.x   = subgroupPartitionedMaxNV(data[0].d4.x, ballot);

+    data[invocation].d4.xy  = subgroupPartitionedMaxNV(data[1].d4.xy, ballot);

+    data[invocation].d4.xyz = subgroupPartitionedMaxNV(data[2].d4.xyz, ballot);

+    data[invocation].d4     = subgroupPartitionedMaxNV(data[3].d4, ballot);

+

+    data[invocation].i4.x   = subgroupPartitionedAndNV(data[0].i4.x, ballot);

+    data[invocation].i4.xy  = subgroupPartitionedAndNV(data[1].i4.xy, ballot);

+    data[invocation].i4.xyz = subgroupPartitionedAndNV(data[2].i4.xyz, ballot);

+    data[invocation].i4     = subgroupPartitionedAndNV(data[3].i4, ballot);

+

+    data[invocation].u4.x   = subgroupPartitionedAndNV(data[0].u4.x, ballot);

+    data[invocation].u4.xy  = subgroupPartitionedAndNV(data[1].u4.xy, ballot);

+    data[invocation].u4.xyz = subgroupPartitionedAndNV(data[2].u4.xyz, ballot);

+    data[invocation].u4     = subgroupPartitionedAndNV(data[3].u4, ballot);

+

+    data[invocation].i4.x   =   int(subgroupPartitionedAndNV(data[0].i4.x < 0, ballot));

+    data[invocation].i4.xy  = ivec2(subgroupPartitionedAndNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));

+    data[invocation].i4.xyz = ivec3(subgroupPartitionedAndNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));

+    data[invocation].i4     = ivec4(subgroupPartitionedAndNV(lessThan(data[1].i4, ivec4(0)), ballot));

+

+    data[invocation].i4.x   = subgroupPartitionedOrNV(data[0].i4.x, ballot);

+    data[invocation].i4.xy  = subgroupPartitionedOrNV(data[1].i4.xy, ballot);

+    data[invocation].i4.xyz = subgroupPartitionedOrNV(data[2].i4.xyz, ballot);

+    data[invocation].i4     = subgroupPartitionedOrNV(data[3].i4, ballot);

+

+    data[invocation].u4.x   = subgroupPartitionedOrNV(data[0].u4.x, ballot);

+    data[invocation].u4.xy  = subgroupPartitionedOrNV(data[1].u4.xy, ballot);

+    data[invocation].u4.xyz = subgroupPartitionedOrNV(data[2].u4.xyz, ballot);

+    data[invocation].u4     = subgroupPartitionedOrNV(data[3].u4, ballot);

+

+    data[invocation].i4.x   =   int(subgroupPartitionedOrNV(data[0].i4.x < 0, ballot));

+    data[invocation].i4.xy  = ivec2(subgroupPartitionedOrNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));

+    data[invocation].i4.xyz = ivec3(subgroupPartitionedOrNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));

+    data[invocation].i4     = ivec4(subgroupPartitionedOrNV(lessThan(data[1].i4, ivec4(0)), ballot));

+

+    data[invocation].i4.x   = subgroupPartitionedXorNV(data[0].i4.x, ballot);

+    data[invocation].i4.xy  = subgroupPartitionedXorNV(data[1].i4.xy, ballot);

+    data[invocation].i4.xyz = subgroupPartitionedXorNV(data[2].i4.xyz, ballot);

+    data[invocation].i4     = subgroupPartitionedXorNV(data[3].i4, ballot);

+

+    data[invocation].u4.x   = subgroupPartitionedXorNV(data[0].u4.x, ballot);

+    data[invocation].u4.xy  = subgroupPartitionedXorNV(data[1].u4.xy, ballot);

+    data[invocation].u4.xyz = subgroupPartitionedXorNV(data[2].u4.xyz, ballot);

+    data[invocation].u4     = subgroupPartitionedXorNV(data[3].u4, ballot);

+

+    data[invocation].i4.x   =   int(subgroupPartitionedXorNV(data[0].i4.x < 0, ballot));

+    data[invocation].i4.xy  = ivec2(subgroupPartitionedXorNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));

+    data[invocation].i4.xyz = ivec3(subgroupPartitionedXorNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));

+    data[invocation].i4     = ivec4(subgroupPartitionedXorNV(lessThan(data[1].i4, ivec4(0)), ballot));

+

+    data[invocation].f4.x   = subgroupPartitionedInclusiveAddNV(data[0].f4.x, ballot);

+    data[invocation].f4.xy  = subgroupPartitionedInclusiveAddNV(data[1].f4.xy, ballot);

+    data[invocation].f4.xyz = subgroupPartitionedInclusiveAddNV(data[2].f4.xyz, ballot);

+    data[invocation].f4     = subgroupPartitionedInclusiveAddNV(data[3].f4, ballot);

+

+    data[invocation].i4.x   = subgroupPartitionedInclusiveAddNV(data[0].i4.x, ballot);

+    data[invocation].i4.xy  = subgroupPartitionedInclusiveAddNV(data[1].i4.xy, ballot);

+    data[invocation].i4.xyz = subgroupPartitionedInclusiveAddNV(data[2].i4.xyz, ballot);

+    data[invocation].i4     = subgroupPartitionedInclusiveAddNV(data[3].i4, ballot);

+

+    data[invocation].u4.x   = subgroupPartitionedInclusiveAddNV(data[0].u4.x, ballot);

+    data[invocation].u4.xy  = subgroupPartitionedInclusiveAddNV(data[1].u4.xy, ballot);

+    data[invocation].u4.xyz = subgroupPartitionedInclusiveAddNV(data[2].u4.xyz, ballot);

+    data[invocation].u4     = subgroupPartitionedInclusiveAddNV(data[3].u4, ballot);

+

+    data[invocation].d4.x   = subgroupPartitionedInclusiveAddNV(data[0].d4.x, ballot);

+    data[invocation].d4.xy  = subgroupPartitionedInclusiveAddNV(data[1].d4.xy, ballot);

+    data[invocation].d4.xyz = subgroupPartitionedInclusiveAddNV(data[2].d4.xyz, ballot);

+    data[invocation].d4     = subgroupPartitionedInclusiveAddNV(data[3].d4, ballot);

+

+    data[invocation].f4.x   = subgroupPartitionedInclusiveMulNV(data[0].f4.x, ballot);

+    data[invocation].f4.xy  = subgroupPartitionedInclusiveMulNV(data[1].f4.xy, ballot);

+    data[invocation].f4.xyz = subgroupPartitionedInclusiveMulNV(data[2].f4.xyz, ballot);

+    data[invocation].f4     = subgroupPartitionedInclusiveMulNV(data[3].f4, ballot);

+

+    data[invocation].i4.x   = subgroupPartitionedInclusiveMulNV(data[0].i4.x, ballot);

+    data[invocation].i4.xy  = subgroupPartitionedInclusiveMulNV(data[1].i4.xy, ballot);

+    data[invocation].i4.xyz = subgroupPartitionedInclusiveMulNV(data[2].i4.xyz, ballot);

+    data[invocation].i4     = subgroupPartitionedInclusiveMulNV(data[3].i4, ballot);

+

+    data[invocation].u4.x   = subgroupPartitionedInclusiveMulNV(data[0].u4.x, ballot);

+    data[invocation].u4.xy  = subgroupPartitionedInclusiveMulNV(data[1].u4.xy, ballot);

+    data[invocation].u4.xyz = subgroupPartitionedInclusiveMulNV(data[2].u4.xyz, ballot);

+    data[invocation].u4     = subgroupPartitionedInclusiveMulNV(data[3].u4, ballot);

+

+    data[invocation].d4.x   = subgroupPartitionedInclusiveMulNV(data[0].d4.x, ballot);

+    data[invocation].d4.xy  = subgroupPartitionedInclusiveMulNV(data[1].d4.xy, ballot);

+    data[invocation].d4.xyz = subgroupPartitionedInclusiveMulNV(data[2].d4.xyz, ballot);

+    data[invocation].d4     = subgroupPartitionedInclusiveMulNV(data[3].d4, ballot);

+

+    data[invocation].f4.x   = subgroupPartitionedInclusiveMinNV(data[0].f4.x, ballot);

+    data[invocation].f4.xy  = subgroupPartitionedInclusiveMinNV(data[1].f4.xy, ballot);

+    data[invocation].f4.xyz = subgroupPartitionedInclusiveMinNV(data[2].f4.xyz, ballot);

+    data[invocation].f4     = subgroupPartitionedInclusiveMinNV(data[3].f4, ballot);

+

+    data[invocation].i4.x   = subgroupPartitionedInclusiveMinNV(data[0].i4.x, ballot);

+    data[invocation].i4.xy  = subgroupPartitionedInclusiveMinNV(data[1].i4.xy, ballot);

+    data[invocation].i4.xyz = subgroupPartitionedInclusiveMinNV(data[2].i4.xyz, ballot);

+    data[invocation].i4     = subgroupPartitionedInclusiveMinNV(data[3].i4, ballot);

+

+    data[invocation].u4.x   = subgroupPartitionedInclusiveMinNV(data[0].u4.x, ballot);

+    data[invocation].u4.xy  = subgroupPartitionedInclusiveMinNV(data[1].u4.xy, ballot);

+    data[invocation].u4.xyz = subgroupPartitionedInclusiveMinNV(data[2].u4.xyz, ballot);

+    data[invocation].u4     = subgroupPartitionedInclusiveMinNV(data[3].u4, ballot);

+

+    data[invocation].d4.x   = subgroupPartitionedInclusiveMinNV(data[0].d4.x, ballot);

+    data[invocation].d4.xy  = subgroupPartitionedInclusiveMinNV(data[1].d4.xy, ballot);

+    data[invocation].d4.xyz = subgroupPartitionedInclusiveMinNV(data[2].d4.xyz, ballot);

+    data[invocation].d4     = subgroupPartitionedInclusiveMinNV(data[3].d4, ballot);

+

+    data[invocation].f4.x   = subgroupPartitionedInclusiveMaxNV(data[0].f4.x, ballot);

+    data[invocation].f4.xy  = subgroupPartitionedInclusiveMaxNV(data[1].f4.xy, ballot);

+    data[invocation].f4.xyz = subgroupPartitionedInclusiveMaxNV(data[2].f4.xyz, ballot);

+    data[invocation].f4     = subgroupPartitionedInclusiveMaxNV(data[3].f4, ballot);

+

+    data[invocation].i4.x   = subgroupPartitionedInclusiveMaxNV(data[0].i4.x, ballot);

+    data[invocation].i4.xy  = subgroupPartitionedInclusiveMaxNV(data[1].i4.xy, ballot);

+    data[invocation].i4.xyz = subgroupPartitionedInclusiveMaxNV(data[2].i4.xyz, ballot);

+    data[invocation].i4     = subgroupPartitionedInclusiveMaxNV(data[3].i4, ballot);

+

+    data[invocation].u4.x   = subgroupPartitionedInclusiveMaxNV(data[0].u4.x, ballot);

+    data[invocation].u4.xy  = subgroupPartitionedInclusiveMaxNV(data[1].u4.xy, ballot);

+    data[invocation].u4.xyz = subgroupPartitionedInclusiveMaxNV(data[2].u4.xyz, ballot);

+    data[invocation].u4     = subgroupPartitionedInclusiveMaxNV(data[3].u4, ballot);

+

+    data[invocation].d4.x   = subgroupPartitionedInclusiveMaxNV(data[0].d4.x, ballot);

+    data[invocation].d4.xy  = subgroupPartitionedInclusiveMaxNV(data[1].d4.xy, ballot);

+    data[invocation].d4.xyz = subgroupPartitionedInclusiveMaxNV(data[2].d4.xyz, ballot);

+    data[invocation].d4     = subgroupPartitionedInclusiveMaxNV(data[3].d4, ballot);

+

+    data[invocation].i4.x   = subgroupPartitionedInclusiveAndNV(data[0].i4.x, ballot);

+    data[invocation].i4.xy  = subgroupPartitionedInclusiveAndNV(data[1].i4.xy, ballot);

+    data[invocation].i4.xyz = subgroupPartitionedInclusiveAndNV(data[2].i4.xyz, ballot);

+    data[invocation].i4     = subgroupPartitionedInclusiveAndNV(data[3].i4, ballot);

+

+    data[invocation].u4.x   = subgroupPartitionedInclusiveAndNV(data[0].u4.x, ballot);

+    data[invocation].u4.xy  = subgroupPartitionedInclusiveAndNV(data[1].u4.xy, ballot);

+    data[invocation].u4.xyz = subgroupPartitionedInclusiveAndNV(data[2].u4.xyz, ballot);

+    data[invocation].u4     = subgroupPartitionedInclusiveAndNV(data[3].u4, ballot);

+

+    data[invocation].i4.x   =   int(subgroupPartitionedInclusiveAndNV(data[0].i4.x < 0, ballot));

+    data[invocation].i4.xy  = ivec2(subgroupPartitionedInclusiveAndNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));

+    data[invocation].i4.xyz = ivec3(subgroupPartitionedInclusiveAndNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));

+    data[invocation].i4     = ivec4(subgroupPartitionedInclusiveAndNV(lessThan(data[1].i4, ivec4(0)), ballot));

+

+    data[invocation].i4.x   = subgroupPartitionedInclusiveOrNV(data[0].i4.x, ballot);

+    data[invocation].i4.xy  = subgroupPartitionedInclusiveOrNV(data[1].i4.xy, ballot);

+    data[invocation].i4.xyz = subgroupPartitionedInclusiveOrNV(data[2].i4.xyz, ballot);

+    data[invocation].i4     = subgroupPartitionedInclusiveOrNV(data[3].i4, ballot);

+

+    data[invocation].u4.x   = subgroupPartitionedInclusiveOrNV(data[0].u4.x, ballot);

+    data[invocation].u4.xy  = subgroupPartitionedInclusiveOrNV(data[1].u4.xy, ballot);

+    data[invocation].u4.xyz = subgroupPartitionedInclusiveOrNV(data[2].u4.xyz, ballot);

+    data[invocation].u4     = subgroupPartitionedInclusiveOrNV(data[3].u4, ballot);

+

+    data[invocation].i4.x   =   int(subgroupPartitionedInclusiveOrNV(data[0].i4.x < 0, ballot));

+    data[invocation].i4.xy  = ivec2(subgroupPartitionedInclusiveOrNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));

+    data[invocation].i4.xyz = ivec3(subgroupPartitionedInclusiveOrNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));

+    data[invocation].i4     = ivec4(subgroupPartitionedInclusiveOrNV(lessThan(data[1].i4, ivec4(0)), ballot));

+

+    data[invocation].i4.x   = subgroupPartitionedInclusiveXorNV(data[0].i4.x, ballot);

+    data[invocation].i4.xy  = subgroupPartitionedInclusiveXorNV(data[1].i4.xy, ballot);

+    data[invocation].i4.xyz = subgroupPartitionedInclusiveXorNV(data[2].i4.xyz, ballot);

+    data[invocation].i4     = subgroupPartitionedInclusiveXorNV(data[3].i4, ballot);

+

+    data[invocation].u4.x   = subgroupPartitionedInclusiveXorNV(data[0].u4.x, ballot);

+    data[invocation].u4.xy  = subgroupPartitionedInclusiveXorNV(data[1].u4.xy, ballot);

+    data[invocation].u4.xyz = subgroupPartitionedInclusiveXorNV(data[2].u4.xyz, ballot);

+    data[invocation].u4     = subgroupPartitionedInclusiveXorNV(data[3].u4, ballot);

+

+    data[invocation].i4.x   =   int(subgroupPartitionedInclusiveXorNV(data[0].i4.x < 0, ballot));

+    data[invocation].i4.xy  = ivec2(subgroupPartitionedInclusiveXorNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));

+    data[invocation].i4.xyz = ivec3(subgroupPartitionedInclusiveXorNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));

+    data[invocation].i4     = ivec4(subgroupPartitionedInclusiveXorNV(lessThan(data[1].i4, ivec4(0)), ballot));

+

+    data[invocation].f4.x   = subgroupPartitionedExclusiveAddNV(data[0].f4.x, ballot);

+    data[invocation].f4.xy  = subgroupPartitionedExclusiveAddNV(data[1].f4.xy, ballot);

+    data[invocation].f4.xyz = subgroupPartitionedExclusiveAddNV(data[2].f4.xyz, ballot);

+    data[invocation].f4     = subgroupPartitionedExclusiveAddNV(data[3].f4, ballot);

+

+    data[invocation].i4.x   = subgroupPartitionedExclusiveAddNV(data[0].i4.x, ballot);

+    data[invocation].i4.xy  = subgroupPartitionedExclusiveAddNV(data[1].i4.xy, ballot);

+    data[invocation].i4.xyz = subgroupPartitionedExclusiveAddNV(data[2].i4.xyz, ballot);

+    data[invocation].i4     = subgroupPartitionedExclusiveAddNV(data[3].i4, ballot);

+

+    data[invocation].u4.x   = subgroupPartitionedExclusiveAddNV(data[0].u4.x, ballot);

+    data[invocation].u4.xy  = subgroupPartitionedExclusiveAddNV(data[1].u4.xy, ballot);

+    data[invocation].u4.xyz = subgroupPartitionedExclusiveAddNV(data[2].u4.xyz, ballot);

+    data[invocation].u4     = subgroupPartitionedExclusiveAddNV(data[3].u4, ballot);

+

+    data[invocation].d4.x   = subgroupPartitionedExclusiveAddNV(data[0].d4.x, ballot);

+    data[invocation].d4.xy  = subgroupPartitionedExclusiveAddNV(data[1].d4.xy, ballot);

+    data[invocation].d4.xyz = subgroupPartitionedExclusiveAddNV(data[2].d4.xyz, ballot);

+    data[invocation].d4     = subgroupPartitionedExclusiveAddNV(data[3].d4, ballot);

+

+    data[invocation].f4.x   = subgroupPartitionedExclusiveMulNV(data[0].f4.x, ballot);

+    data[invocation].f4.xy  = subgroupPartitionedExclusiveMulNV(data[1].f4.xy, ballot);

+    data[invocation].f4.xyz = subgroupPartitionedExclusiveMulNV(data[2].f4.xyz, ballot);

+    data[invocation].f4     = subgroupPartitionedExclusiveMulNV(data[3].f4, ballot);

+

+    data[invocation].i4.x   = subgroupPartitionedExclusiveMulNV(data[0].i4.x, ballot);

+    data[invocation].i4.xy  = subgroupPartitionedExclusiveMulNV(data[1].i4.xy, ballot);

+    data[invocation].i4.xyz = subgroupPartitionedExclusiveMulNV(data[2].i4.xyz, ballot);

+    data[invocation].i4     = subgroupPartitionedExclusiveMulNV(data[3].i4, ballot);

+

+    data[invocation].u4.x   = subgroupPartitionedExclusiveMulNV(data[0].u4.x, ballot);

+    data[invocation].u4.xy  = subgroupPartitionedExclusiveMulNV(data[1].u4.xy, ballot);

+    data[invocation].u4.xyz = subgroupPartitionedExclusiveMulNV(data[2].u4.xyz, ballot);

+    data[invocation].u4     = subgroupPartitionedExclusiveMulNV(data[3].u4, ballot);

+

+    data[invocation].d4.x   = subgroupPartitionedExclusiveMulNV(data[0].d4.x, ballot);

+    data[invocation].d4.xy  = subgroupPartitionedExclusiveMulNV(data[1].d4.xy, ballot);

+    data[invocation].d4.xyz = subgroupPartitionedExclusiveMulNV(data[2].d4.xyz, ballot);

+    data[invocation].d4     = subgroupPartitionedExclusiveMulNV(data[3].d4, ballot);

+

+    data[invocation].f4.x   = subgroupPartitionedExclusiveMinNV(data[0].f4.x, ballot);

+    data[invocation].f4.xy  = subgroupPartitionedExclusiveMinNV(data[1].f4.xy, ballot);

+    data[invocation].f4.xyz = subgroupPartitionedExclusiveMinNV(data[2].f4.xyz, ballot);

+    data[invocation].f4     = subgroupPartitionedExclusiveMinNV(data[3].f4, ballot);

+

+    data[invocation].i4.x   = subgroupPartitionedExclusiveMinNV(data[0].i4.x, ballot);

+    data[invocation].i4.xy  = subgroupPartitionedExclusiveMinNV(data[1].i4.xy, ballot);

+    data[invocation].i4.xyz = subgroupPartitionedExclusiveMinNV(data[2].i4.xyz, ballot);

+    data[invocation].i4     = subgroupPartitionedExclusiveMinNV(data[3].i4, ballot);

+

+    data[invocation].u4.x   = subgroupPartitionedExclusiveMinNV(data[0].u4.x, ballot);

+    data[invocation].u4.xy  = subgroupPartitionedExclusiveMinNV(data[1].u4.xy, ballot);

+    data[invocation].u4.xyz = subgroupPartitionedExclusiveMinNV(data[2].u4.xyz, ballot);

+    data[invocation].u4     = subgroupPartitionedExclusiveMinNV(data[3].u4, ballot);

+

+    data[invocation].d4.x   = subgroupPartitionedExclusiveMinNV(data[0].d4.x, ballot);

+    data[invocation].d4.xy  = subgroupPartitionedExclusiveMinNV(data[1].d4.xy, ballot);

+    data[invocation].d4.xyz = subgroupPartitionedExclusiveMinNV(data[2].d4.xyz, ballot);

+    data[invocation].d4     = subgroupPartitionedExclusiveMinNV(data[3].d4, ballot);

+

+    data[invocation].f4.x   = subgroupPartitionedExclusiveMaxNV(data[0].f4.x, ballot);

+    data[invocation].f4.xy  = subgroupPartitionedExclusiveMaxNV(data[1].f4.xy, ballot);

+    data[invocation].f4.xyz = subgroupPartitionedExclusiveMaxNV(data[2].f4.xyz, ballot);

+    data[invocation].f4     = subgroupPartitionedExclusiveMaxNV(data[3].f4, ballot);

+

+    data[invocation].i4.x   = subgroupPartitionedExclusiveMaxNV(data[0].i4.x, ballot);

+    data[invocation].i4.xy  = subgroupPartitionedExclusiveMaxNV(data[1].i4.xy, ballot);

+    data[invocation].i4.xyz = subgroupPartitionedExclusiveMaxNV(data[2].i4.xyz, ballot);

+    data[invocation].i4     = subgroupPartitionedExclusiveMaxNV(data[3].i4, ballot);

+

+    data[invocation].u4.x   = subgroupPartitionedExclusiveMaxNV(data[0].u4.x, ballot);

+    data[invocation].u4.xy  = subgroupPartitionedExclusiveMaxNV(data[1].u4.xy, ballot);

+    data[invocation].u4.xyz = subgroupPartitionedExclusiveMaxNV(data[2].u4.xyz, ballot);

+    data[invocation].u4     = subgroupPartitionedExclusiveMaxNV(data[3].u4, ballot);

+

+    data[invocation].d4.x   = subgroupPartitionedExclusiveMaxNV(data[0].d4.x, ballot);

+    data[invocation].d4.xy  = subgroupPartitionedExclusiveMaxNV(data[1].d4.xy, ballot);

+    data[invocation].d4.xyz = subgroupPartitionedExclusiveMaxNV(data[2].d4.xyz, ballot);

+    data[invocation].d4     = subgroupPartitionedExclusiveMaxNV(data[3].d4, ballot);

+

+    data[invocation].i4.x   = subgroupPartitionedExclusiveAndNV(data[0].i4.x, ballot);

+    data[invocation].i4.xy  = subgroupPartitionedExclusiveAndNV(data[1].i4.xy, ballot);

+    data[invocation].i4.xyz = subgroupPartitionedExclusiveAndNV(data[2].i4.xyz, ballot);

+    data[invocation].i4     = subgroupPartitionedExclusiveAndNV(data[3].i4, ballot);

+

+    data[invocation].u4.x   = subgroupPartitionedExclusiveAndNV(data[0].u4.x, ballot);

+    data[invocation].u4.xy  = subgroupPartitionedExclusiveAndNV(data[1].u4.xy, ballot);

+    data[invocation].u4.xyz = subgroupPartitionedExclusiveAndNV(data[2].u4.xyz, ballot);

+    data[invocation].u4     = subgroupPartitionedExclusiveAndNV(data[3].u4, ballot);

+

+    data[invocation].i4.x   =   int(subgroupPartitionedExclusiveAndNV(data[0].i4.x < 0, ballot));

+    data[invocation].i4.xy  = ivec2(subgroupPartitionedExclusiveAndNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));

+    data[invocation].i4.xyz = ivec3(subgroupPartitionedExclusiveAndNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));

+    data[invocation].i4     = ivec4(subgroupPartitionedExclusiveAndNV(lessThan(data[1].i4, ivec4(0)), ballot));

+

+    data[invocation].i4.x   = subgroupPartitionedExclusiveOrNV(data[0].i4.x, ballot);

+    data[invocation].i4.xy  = subgroupPartitionedExclusiveOrNV(data[1].i4.xy, ballot);

+    data[invocation].i4.xyz = subgroupPartitionedExclusiveOrNV(data[2].i4.xyz, ballot);

+    data[invocation].i4     = subgroupPartitionedExclusiveOrNV(data[3].i4, ballot);

+

+    data[invocation].u4.x   = subgroupPartitionedExclusiveOrNV(data[0].u4.x, ballot);

+    data[invocation].u4.xy  = subgroupPartitionedExclusiveOrNV(data[1].u4.xy, ballot);

+    data[invocation].u4.xyz = subgroupPartitionedExclusiveOrNV(data[2].u4.xyz, ballot);

+    data[invocation].u4     = subgroupPartitionedExclusiveOrNV(data[3].u4, ballot);

+

+    data[invocation].i4.x   =   int(subgroupPartitionedExclusiveOrNV(data[0].i4.x < 0, ballot));

+    data[invocation].i4.xy  = ivec2(subgroupPartitionedExclusiveOrNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));

+    data[invocation].i4.xyz = ivec3(subgroupPartitionedExclusiveOrNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));

+    data[invocation].i4     = ivec4(subgroupPartitionedExclusiveOrNV(lessThan(data[1].i4, ivec4(0)), ballot));

+

+    data[invocation].i4.x   = subgroupPartitionedExclusiveXorNV(data[0].i4.x, ballot);

+    data[invocation].i4.xy  = subgroupPartitionedExclusiveXorNV(data[1].i4.xy, ballot);

+    data[invocation].i4.xyz = subgroupPartitionedExclusiveXorNV(data[2].i4.xyz, ballot);

+    data[invocation].i4     = subgroupPartitionedExclusiveXorNV(data[3].i4, ballot);

+

+    data[invocation].u4.x   = subgroupPartitionedExclusiveXorNV(data[0].u4.x, ballot);

+    data[invocation].u4.xy  = subgroupPartitionedExclusiveXorNV(data[1].u4.xy, ballot);

+    data[invocation].u4.xyz = subgroupPartitionedExclusiveXorNV(data[2].u4.xyz, ballot);

+    data[invocation].u4     = subgroupPartitionedExclusiveXorNV(data[3].u4, ballot);

+

+    data[invocation].i4.x   =   int(subgroupPartitionedExclusiveXorNV(data[0].i4.x < 0, ballot));

+    data[invocation].i4.xy  = ivec2(subgroupPartitionedExclusiveXorNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));

+    data[invocation].i4.xyz = ivec3(subgroupPartitionedExclusiveXorNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));

+    data[invocation].i4     = ivec4(subgroupPartitionedExclusiveXorNV(lessThan(data[1].i4, ivec4(0)), ballot));

+}

diff --git a/Test/spv.subgroupQuad.comp b/Test/spv.subgroupQuad.comp
new file mode 100644
index 0000000..223a7cd
--- /dev/null
+++ b/Test/spv.subgroupQuad.comp
@@ -0,0 +1,118 @@
+#version 450

+

+#extension GL_KHR_shader_subgroup_quad: enable

+

+layout (local_size_x = 8) in;

+

+layout(binding = 0) buffer Buffers

+{

+    vec4  f4;

+    ivec4 i4;

+    uvec4 u4;

+    dvec4 d4;

+} data[4];

+

+void main()

+{

+    uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;

+

+    data[invocation].f4.x   = subgroupQuadBroadcast(data[0].f4.x, 1);

+    data[invocation].f4.xy  = subgroupQuadBroadcast(data[1].f4.xy, 1);

+    data[invocation].f4.xyz = subgroupQuadBroadcast(data[2].f4.xyz, 1);

+    data[invocation].f4     = subgroupQuadBroadcast(data[3].f4, 1);

+

+    data[invocation].i4.x   = subgroupQuadBroadcast(data[0].i4.x, 1);

+    data[invocation].i4.xy  = subgroupQuadBroadcast(data[1].i4.xy, 1);

+    data[invocation].i4.xyz = subgroupQuadBroadcast(data[2].i4.xyz, 1);

+    data[invocation].i4     = subgroupQuadBroadcast(data[3].i4, 1);

+

+    data[invocation].u4.x   = subgroupQuadBroadcast(data[0].u4.x, 1);

+    data[invocation].u4.xy  = subgroupQuadBroadcast(data[1].u4.xy, 1);

+    data[invocation].u4.xyz = subgroupQuadBroadcast(data[2].u4.xyz, 1);

+    data[invocation].u4     = subgroupQuadBroadcast(data[3].u4, 1);

+

+    data[invocation].d4.x   = subgroupQuadBroadcast(data[0].d4.x, 1);

+    data[invocation].d4.xy  = subgroupQuadBroadcast(data[1].d4.xy, 1);

+    data[invocation].d4.xyz = subgroupQuadBroadcast(data[2].d4.xyz, 1);

+    data[invocation].d4     = subgroupQuadBroadcast(data[3].d4, 1);

+

+    data[invocation].i4.x   =   int(subgroupQuadBroadcast(data[0].i4.x < 0, 1));

+    data[invocation].i4.xy  = ivec2(subgroupQuadBroadcast(lessThan(data[1].i4.xy, ivec2(0)), 1));

+    data[invocation].i4.xyz = ivec3(subgroupQuadBroadcast(lessThan(data[1].i4.xyz, ivec3(0)), 1));

+    data[invocation].i4     = ivec4(subgroupQuadBroadcast(lessThan(data[1].i4, ivec4(0)), 1));

+

+    data[invocation].f4.x   = subgroupQuadSwapHorizontal(data[0].f4.x);

+    data[invocation].f4.xy  = subgroupQuadSwapHorizontal(data[1].f4.xy);

+    data[invocation].f4.xyz = subgroupQuadSwapHorizontal(data[2].f4.xyz);

+    data[invocation].f4     = subgroupQuadSwapHorizontal(data[3].f4);

+

+    data[invocation].i4.x   = subgroupQuadSwapHorizontal(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupQuadSwapHorizontal(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupQuadSwapHorizontal(data[2].i4.xyz);

+    data[invocation].i4     = subgroupQuadSwapHorizontal(data[3].i4);

+

+    data[invocation].u4.x   = subgroupQuadSwapHorizontal(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupQuadSwapHorizontal(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupQuadSwapHorizontal(data[2].u4.xyz);

+    data[invocation].u4     = subgroupQuadSwapHorizontal(data[3].u4);

+

+    data[invocation].d4.x   = subgroupQuadSwapHorizontal(data[0].d4.x);

+    data[invocation].d4.xy  = subgroupQuadSwapHorizontal(data[1].d4.xy);

+    data[invocation].d4.xyz = subgroupQuadSwapHorizontal(data[2].d4.xyz);

+    data[invocation].d4     = subgroupQuadSwapHorizontal(data[3].d4);

+

+    data[invocation].i4.x   =   int(subgroupQuadSwapHorizontal(data[0].i4.x < 0));

+    data[invocation].i4.xy  = ivec2(subgroupQuadSwapHorizontal(lessThan(data[1].i4.xy, ivec2(0))));

+    data[invocation].i4.xyz = ivec3(subgroupQuadSwapHorizontal(lessThan(data[1].i4.xyz, ivec3(0))));

+    data[invocation].i4     = ivec4(subgroupQuadSwapHorizontal(lessThan(data[1].i4, ivec4(0))));

+

+    data[invocation].f4.x   = subgroupQuadSwapVertical(data[0].f4.x);

+    data[invocation].f4.xy  = subgroupQuadSwapVertical(data[1].f4.xy);

+    data[invocation].f4.xyz = subgroupQuadSwapVertical(data[2].f4.xyz);

+    data[invocation].f4     = subgroupQuadSwapVertical(data[3].f4);

+

+    data[invocation].i4.x   = subgroupQuadSwapVertical(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupQuadSwapVertical(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupQuadSwapVertical(data[2].i4.xyz);

+    data[invocation].i4     = subgroupQuadSwapVertical(data[3].i4);

+

+    data[invocation].u4.x   = subgroupQuadSwapVertical(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupQuadSwapVertical(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupQuadSwapVertical(data[2].u4.xyz);

+    data[invocation].u4     = subgroupQuadSwapVertical(data[3].u4);

+

+    data[invocation].d4.x   = subgroupQuadSwapVertical(data[0].d4.x);

+    data[invocation].d4.xy  = subgroupQuadSwapVertical(data[1].d4.xy);

+    data[invocation].d4.xyz = subgroupQuadSwapVertical(data[2].d4.xyz);

+    data[invocation].d4     = subgroupQuadSwapVertical(data[3].d4);

+

+    data[invocation].i4.x   =   int(subgroupQuadSwapVertical(data[0].i4.x < 0));

+    data[invocation].i4.xy  = ivec2(subgroupQuadSwapVertical(lessThan(data[1].i4.xy, ivec2(0))));

+    data[invocation].i4.xyz = ivec3(subgroupQuadSwapVertical(lessThan(data[1].i4.xyz, ivec3(0))));

+    data[invocation].i4     = ivec4(subgroupQuadSwapVertical(lessThan(data[1].i4, ivec4(0))));

+

+    data[invocation].f4.x   = subgroupQuadSwapDiagonal(data[0].f4.x);

+    data[invocation].f4.xy  = subgroupQuadSwapDiagonal(data[1].f4.xy);

+    data[invocation].f4.xyz = subgroupQuadSwapDiagonal(data[2].f4.xyz);

+    data[invocation].f4     = subgroupQuadSwapDiagonal(data[3].f4);

+

+    data[invocation].i4.x   = subgroupQuadSwapDiagonal(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupQuadSwapDiagonal(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupQuadSwapDiagonal(data[2].i4.xyz);

+    data[invocation].i4     = subgroupQuadSwapDiagonal(data[3].i4);

+

+    data[invocation].u4.x   = subgroupQuadSwapDiagonal(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupQuadSwapDiagonal(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupQuadSwapDiagonal(data[2].u4.xyz);

+    data[invocation].u4     = subgroupQuadSwapDiagonal(data[3].u4);

+

+    data[invocation].d4.x   = subgroupQuadSwapDiagonal(data[0].d4.x);

+    data[invocation].d4.xy  = subgroupQuadSwapDiagonal(data[1].d4.xy);

+    data[invocation].d4.xyz = subgroupQuadSwapDiagonal(data[2].d4.xyz);

+    data[invocation].d4     = subgroupQuadSwapDiagonal(data[3].d4);

+

+    data[invocation].i4.x   =   int(subgroupQuadSwapDiagonal(data[0].i4.x < 0));

+    data[invocation].i4.xy  = ivec2(subgroupQuadSwapDiagonal(lessThan(data[1].i4.xy, ivec2(0))));

+    data[invocation].i4.xyz = ivec3(subgroupQuadSwapDiagonal(lessThan(data[1].i4.xyz, ivec3(0))));

+    data[invocation].i4     = ivec4(subgroupQuadSwapDiagonal(lessThan(data[1].i4, ivec4(0))));

+}

diff --git a/Test/spv.subgroupShuffle.comp b/Test/spv.subgroupShuffle.comp
new file mode 100644
index 0000000..6d26488
--- /dev/null
+++ b/Test/spv.subgroupShuffle.comp
@@ -0,0 +1,68 @@
+#version 450

+

+#extension GL_KHR_shader_subgroup_shuffle: enable

+

+layout (local_size_x = 8, local_size_y = 8, local_size_z = 1) in;

+

+layout(binding = 0) buffer Buffers

+{

+    vec4  f4;

+    ivec4 i4;

+    uvec4 u4;

+    dvec4 d4;

+} data[4];

+

+void main()

+{

+    uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;

+

+    data[invocation].f4.x   = subgroupShuffle(data[0].f4.x,    invocation);

+    data[invocation].f4.xy  = subgroupShuffle(data[1].f4.xy,   invocation);

+    data[invocation].f4.xyz = subgroupShuffle(data[2].f4.xyz,  invocation);

+    data[invocation].f4     = subgroupShuffle(data[3].f4,      invocation);

+

+    data[invocation].i4.x   = subgroupShuffle(data[0].i4.x,    invocation);

+    data[invocation].i4.xy  = subgroupShuffle(data[1].i4.xy,   invocation);

+    data[invocation].i4.xyz = subgroupShuffle(data[2].i4.xyz,  invocation);

+    data[invocation].i4     = subgroupShuffle(data[3].i4,      invocation);

+

+    data[invocation].u4.x   = subgroupShuffle(data[0].u4.x,    invocation);

+    data[invocation].u4.xy  = subgroupShuffle(data[1].u4.xy,   invocation);

+    data[invocation].u4.xyz = subgroupShuffle(data[2].u4.xyz,  invocation);

+    data[invocation].u4     = subgroupShuffle(data[3].u4,      invocation);

+

+    data[invocation].d4.x   = subgroupShuffle(data[0].d4.x,    invocation);

+    data[invocation].d4.xy  = subgroupShuffle(data[1].d4.xy,   invocation);

+    data[invocation].d4.xyz = subgroupShuffle(data[2].d4.xyz,  invocation);

+    data[invocation].d4     = subgroupShuffle(data[3].d4,      invocation);

+

+    data[invocation].i4.x   =   int(subgroupShuffle(data[0].i4.x < 0,                   invocation));

+    data[invocation].i4.xy  = ivec2(subgroupShuffle(lessThan(data[1].i4.xy, ivec2(0)),  invocation));

+    data[invocation].i4.xyz = ivec3(subgroupShuffle(lessThan(data[1].i4.xyz, ivec3(0)), invocation));

+    data[invocation].i4     = ivec4(subgroupShuffle(lessThan(data[1].i4, ivec4(0)),     invocation));

+

+    data[invocation].f4.x   = subgroupShuffleXor(data[0].f4.x,    invocation);

+    data[invocation].f4.xy  = subgroupShuffleXor(data[1].f4.xy,   invocation);

+    data[invocation].f4.xyz = subgroupShuffleXor(data[2].f4.xyz,  invocation);

+    data[invocation].f4     = subgroupShuffleXor(data[3].f4,      invocation);

+

+    data[invocation].i4.x   = subgroupShuffleXor(data[0].i4.x,    invocation);

+    data[invocation].i4.xy  = subgroupShuffleXor(data[1].i4.xy,   invocation);

+    data[invocation].i4.xyz = subgroupShuffleXor(data[2].i4.xyz,  invocation);

+    data[invocation].i4     = subgroupShuffleXor(data[3].i4,      invocation);

+

+    data[invocation].u4.x   = subgroupShuffleXor(data[0].u4.x,    invocation);

+    data[invocation].u4.xy  = subgroupShuffleXor(data[1].u4.xy,   invocation);

+    data[invocation].u4.xyz = subgroupShuffleXor(data[2].u4.xyz,  invocation);

+    data[invocation].u4     = subgroupShuffleXor(data[3].u4,      invocation);

+

+    data[invocation].d4.x   = subgroupShuffleXor(data[0].d4.x,    invocation);

+    data[invocation].d4.xy  = subgroupShuffleXor(data[1].d4.xy,   invocation);

+    data[invocation].d4.xyz = subgroupShuffleXor(data[2].d4.xyz,  invocation);

+    data[invocation].d4     = subgroupShuffleXor(data[3].d4,      invocation);

+

+    data[invocation].i4.x   =   int(subgroupShuffleXor(data[0].i4.x < 0,                   invocation));

+    data[invocation].i4.xy  = ivec2(subgroupShuffleXor(lessThan(data[1].i4.xy, ivec2(0)),  invocation));

+    data[invocation].i4.xyz = ivec3(subgroupShuffleXor(lessThan(data[1].i4.xyz, ivec3(0)), invocation));

+    data[invocation].i4     = ivec4(subgroupShuffleXor(lessThan(data[1].i4, ivec4(0)),     invocation));

+}

diff --git a/Test/spv.subgroupShuffleRelative.comp b/Test/spv.subgroupShuffleRelative.comp
new file mode 100644
index 0000000..1864de1
--- /dev/null
+++ b/Test/spv.subgroupShuffleRelative.comp
@@ -0,0 +1,68 @@
+#version 450

+

+#extension GL_KHR_shader_subgroup_shuffle_relative: enable

+

+layout (local_size_x = 8, local_size_y = 8, local_size_z = 1) in;

+

+layout(binding = 0) buffer Buffers

+{

+    vec4  f4;

+    ivec4 i4;

+    uvec4 u4;

+    dvec4 d4;

+} data[4];

+

+void main()

+{

+    uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;

+

+    data[invocation].f4.x   = subgroupShuffleUp(data[0].f4.x,    invocation);

+    data[invocation].f4.xy  = subgroupShuffleUp(data[1].f4.xy,   invocation);

+    data[invocation].f4.xyz = subgroupShuffleUp(data[2].f4.xyz,  invocation);

+    data[invocation].f4     = subgroupShuffleUp(data[3].f4,      invocation);

+

+    data[invocation].i4.x   = subgroupShuffleUp(data[0].i4.x,    invocation);

+    data[invocation].i4.xy  = subgroupShuffleUp(data[1].i4.xy,   invocation);

+    data[invocation].i4.xyz = subgroupShuffleUp(data[2].i4.xyz,  invocation);

+    data[invocation].i4     = subgroupShuffleUp(data[3].i4,      invocation);

+

+    data[invocation].u4.x   = subgroupShuffleUp(data[0].u4.x,    invocation);

+    data[invocation].u4.xy  = subgroupShuffleUp(data[1].u4.xy,   invocation);

+    data[invocation].u4.xyz = subgroupShuffleUp(data[2].u4.xyz,  invocation);

+    data[invocation].u4     = subgroupShuffleUp(data[3].u4,      invocation);

+

+    data[invocation].d4.x   = subgroupShuffleUp(data[0].d4.x,    invocation);

+    data[invocation].d4.xy  = subgroupShuffleUp(data[1].d4.xy,   invocation);

+    data[invocation].d4.xyz = subgroupShuffleUp(data[2].d4.xyz,  invocation);

+    data[invocation].d4     = subgroupShuffleUp(data[3].d4,      invocation);

+

+    data[invocation].i4.x   =   int(subgroupShuffleUp(data[0].i4.x < 0,                   invocation));

+    data[invocation].i4.xy  = ivec2(subgroupShuffleUp(lessThan(data[1].i4.xy, ivec2(0)),  invocation));

+    data[invocation].i4.xyz = ivec3(subgroupShuffleUp(lessThan(data[1].i4.xyz, ivec3(0)), invocation));

+    data[invocation].i4     = ivec4(subgroupShuffleUp(lessThan(data[1].i4, ivec4(0)),     invocation));

+

+    data[invocation].f4.x   = subgroupShuffleDown(data[0].f4.x,    invocation);

+    data[invocation].f4.xy  = subgroupShuffleDown(data[1].f4.xy,   invocation);

+    data[invocation].f4.xyz = subgroupShuffleDown(data[2].f4.xyz,  invocation);

+    data[invocation].f4     = subgroupShuffleDown(data[3].f4,      invocation);

+

+    data[invocation].i4.x   = subgroupShuffleDown(data[0].i4.x,    invocation);

+    data[invocation].i4.xy  = subgroupShuffleDown(data[1].i4.xy,   invocation);

+    data[invocation].i4.xyz = subgroupShuffleDown(data[2].i4.xyz,  invocation);

+    data[invocation].i4     = subgroupShuffleDown(data[3].i4,      invocation);

+

+    data[invocation].u4.x   = subgroupShuffleDown(data[0].u4.x,    invocation);

+    data[invocation].u4.xy  = subgroupShuffleDown(data[1].u4.xy,   invocation);

+    data[invocation].u4.xyz = subgroupShuffleDown(data[2].u4.xyz,  invocation);

+    data[invocation].u4     = subgroupShuffleDown(data[3].u4,      invocation);

+

+    data[invocation].d4.x   = subgroupShuffleDown(data[0].d4.x,    invocation);

+    data[invocation].d4.xy  = subgroupShuffleDown(data[1].d4.xy,   invocation);

+    data[invocation].d4.xyz = subgroupShuffleDown(data[2].d4.xyz,  invocation);

+    data[invocation].d4     = subgroupShuffleDown(data[3].d4,      invocation);

+

+    data[invocation].i4.x   =   int(subgroupShuffleDown(data[0].i4.x < 0,                   invocation));

+    data[invocation].i4.xy  = ivec2(subgroupShuffleDown(lessThan(data[1].i4.xy, ivec2(0)),  invocation));

+    data[invocation].i4.xyz = ivec3(subgroupShuffleDown(lessThan(data[1].i4.xyz, ivec3(0)), invocation));

+    data[invocation].i4     = ivec4(subgroupShuffleDown(lessThan(data[1].i4, ivec4(0)),     invocation));

+}

diff --git a/Test/spv.subgroupVote.comp b/Test/spv.subgroupVote.comp
new file mode 100644
index 0000000..c1c877a
--- /dev/null
+++ b/Test/spv.subgroupVote.comp
@@ -0,0 +1,49 @@
+#version 450

+

+#extension GL_KHR_shader_subgroup_vote: enable

+

+layout (local_size_x = 8, local_size_y = 8, local_size_z = 1) in;

+

+layout(binding = 0) buffer Buffers

+{

+    vec4  f4;

+    ivec4 i4;

+    uvec4 u4;

+    dvec4 d4;

+    int r;

+} data[4];

+

+void main()

+{

+    uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;

+

+    if (subgroupAll(data[invocation].r < 0))

+    {

+        data[invocation].r = int(subgroupAllEqual(data[0].f4.x));

+        data[invocation].r = int(subgroupAllEqual(data[1].f4.xy));

+        data[invocation].r = int(subgroupAllEqual(data[2].f4.xyz));

+        data[invocation].r = int(subgroupAllEqual(data[3].f4));

+

+        data[invocation].r = int(subgroupAllEqual(data[0].i4.x));

+        data[invocation].r = int(subgroupAllEqual(data[1].i4.xy));

+        data[invocation].r = int(subgroupAllEqual(data[2].i4.xyz));

+        data[invocation].r = int(subgroupAllEqual(data[3].i4));

+

+        data[invocation].r = int(subgroupAllEqual(data[0].u4.x));

+        data[invocation].r = int(subgroupAllEqual(data[1].u4.xy));

+        data[invocation].r = int(subgroupAllEqual(data[2].u4.xyz));

+        data[invocation].r = int(subgroupAllEqual(data[3].u4));

+    }

+    else if (subgroupAny(data[invocation].r < 0))

+    {

+        data[invocation].r = int(subgroupAllEqual(data[0].d4.x));

+        data[invocation].r = int(subgroupAllEqual(data[1].d4.xy));

+        data[invocation].r = int(subgroupAllEqual(data[2].d4.xyz));

+        data[invocation].r = int(subgroupAllEqual(data[3].d4));

+

+        data[invocation].r = int(int(subgroupAllEqual(data[0].i4.x < 0)));

+        data[invocation].r = int(ivec2(subgroupAllEqual(lessThan(data[1].i4.xy, ivec2(0)))));

+        data[invocation].r = int(ivec3(subgroupAllEqual(lessThan(data[1].i4.xyz, ivec3(0)))));

+        data[invocation].r = int(ivec4(subgroupAllEqual(lessThan(data[1].i4, ivec4(0)))));

+    }

+}

diff --git a/Test/spv.targetOpenGL.vert b/Test/spv.targetOpenGL.vert
index 6d68a33..501a3e5 100755
--- a/Test/spv.targetOpenGL.vert
+++ b/Test/spv.targetOpenGL.vert
@@ -2,8 +2,8 @@
 

 layout(constant_id = 3) const int a = 2;

 layout(location = 2) uniform float f;

-layout(location = 4) uniform sampler2D s1;

-uniform sampler2D s2;

+layout(location = 4, binding = 1) uniform sampler2D s1;

+layout(binding = 2) uniform sampler2D s2;

 

 void main()

 {

diff --git a/Test/spv.vecMatConstruct.frag b/Test/spv.vecMatConstruct.frag
new file mode 100644
index 0000000..54a0017
--- /dev/null
+++ b/Test/spv.vecMatConstruct.frag
@@ -0,0 +1,14 @@
+#version 450

+

+void main()

+{

+    mat4x3 m;

+

+    vec2 v2 = vec2(m);

+    vec3 v3 = vec3(m);

+    vec4 v4 = vec4(m);

+

+    ivec2 iv2 = ivec2(m);

+    ivec3 iv3 = ivec3(m);

+    ivec4 iv4 = ivec4(m);

+}

diff --git a/Test/spv.vulkan100.subgroupArithmetic.comp b/Test/spv.vulkan100.subgroupArithmetic.comp
new file mode 100644
index 0000000..6cc9337
--- /dev/null
+++ b/Test/spv.vulkan100.subgroupArithmetic.comp
@@ -0,0 +1,393 @@
+#version 450

+

+#extension GL_KHR_shader_subgroup_arithmetic: enable

+

+layout (local_size_x = 8) in;

+

+layout(binding = 0) buffer Buffers

+{

+    vec4  f4;

+    ivec4 i4;

+    uvec4 u4;

+    dvec4 d4;

+} data[4];

+

+void main()

+{

+    uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;

+

+    data[invocation].f4.x   = subgroupAdd(data[0].f4.x);

+    data[invocation].f4.xy  = subgroupAdd(data[1].f4.xy);

+    data[invocation].f4.xyz = subgroupAdd(data[2].f4.xyz);

+    data[invocation].f4     = subgroupAdd(data[3].f4);

+

+    data[invocation].i4.x   = subgroupAdd(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupAdd(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupAdd(data[2].i4.xyz);

+    data[invocation].i4     = subgroupAdd(data[3].i4);

+

+    data[invocation].u4.x   = subgroupAdd(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupAdd(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupAdd(data[2].u4.xyz);

+    data[invocation].u4     = subgroupAdd(data[3].u4);

+

+    data[invocation].d4.x   = subgroupAdd(data[0].d4.x);

+    data[invocation].d4.xy  = subgroupAdd(data[1].d4.xy);

+    data[invocation].d4.xyz = subgroupAdd(data[2].d4.xyz);

+    data[invocation].d4     = subgroupAdd(data[3].d4);

+

+    data[invocation].f4.x   = subgroupMul(data[0].f4.x);

+    data[invocation].f4.xy  = subgroupMul(data[1].f4.xy);

+    data[invocation].f4.xyz = subgroupMul(data[2].f4.xyz);

+    data[invocation].f4     = subgroupMul(data[3].f4);

+

+    data[invocation].i4.x   = subgroupMul(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupMul(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupMul(data[2].i4.xyz);

+    data[invocation].i4     = subgroupMul(data[3].i4);

+

+    data[invocation].u4.x   = subgroupMul(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupMul(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupMul(data[2].u4.xyz);

+    data[invocation].u4     = subgroupMul(data[3].u4);

+

+    data[invocation].d4.x   = subgroupMul(data[0].d4.x);

+    data[invocation].d4.xy  = subgroupMul(data[1].d4.xy);

+    data[invocation].d4.xyz = subgroupMul(data[2].d4.xyz);

+    data[invocation].d4     = subgroupMul(data[3].d4);

+

+    data[invocation].f4.x   = subgroupMin(data[0].f4.x);

+    data[invocation].f4.xy  = subgroupMin(data[1].f4.xy);

+    data[invocation].f4.xyz = subgroupMin(data[2].f4.xyz);

+    data[invocation].f4     = subgroupMin(data[3].f4);

+

+    data[invocation].i4.x   = subgroupMin(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupMin(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupMin(data[2].i4.xyz);

+    data[invocation].i4     = subgroupMin(data[3].i4);

+

+    data[invocation].u4.x   = subgroupMin(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupMin(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupMin(data[2].u4.xyz);

+    data[invocation].u4     = subgroupMin(data[3].u4);

+

+    data[invocation].d4.x   = subgroupMin(data[0].d4.x);

+    data[invocation].d4.xy  = subgroupMin(data[1].d4.xy);

+    data[invocation].d4.xyz = subgroupMin(data[2].d4.xyz);

+    data[invocation].d4     = subgroupMin(data[3].d4);

+

+    data[invocation].f4.x   = subgroupMax(data[0].f4.x);

+    data[invocation].f4.xy  = subgroupMax(data[1].f4.xy);

+    data[invocation].f4.xyz = subgroupMax(data[2].f4.xyz);

+    data[invocation].f4     = subgroupMax(data[3].f4);

+

+    data[invocation].i4.x   = subgroupMax(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupMax(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupMax(data[2].i4.xyz);

+    data[invocation].i4     = subgroupMax(data[3].i4);

+

+    data[invocation].u4.x   = subgroupMax(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupMax(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupMax(data[2].u4.xyz);

+    data[invocation].u4     = subgroupMax(data[3].u4);

+

+    data[invocation].d4.x   = subgroupMax(data[0].d4.x);

+    data[invocation].d4.xy  = subgroupMax(data[1].d4.xy);

+    data[invocation].d4.xyz = subgroupMax(data[2].d4.xyz);

+    data[invocation].d4     = subgroupMax(data[3].d4);

+

+    data[invocation].i4.x   = subgroupAnd(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupAnd(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupAnd(data[2].i4.xyz);

+    data[invocation].i4     = subgroupAnd(data[3].i4);

+

+    data[invocation].u4.x   = subgroupAnd(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupAnd(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupAnd(data[2].u4.xyz);

+    data[invocation].u4     = subgroupAnd(data[3].u4);

+

+    data[invocation].i4.x   =   int(subgroupAnd(data[0].i4.x < 0));

+    data[invocation].i4.xy  = ivec2(subgroupAnd(lessThan(data[1].i4.xy, ivec2(0))));

+    data[invocation].i4.xyz = ivec3(subgroupAnd(lessThan(data[1].i4.xyz, ivec3(0))));

+    data[invocation].i4     = ivec4(subgroupAnd(lessThan(data[1].i4, ivec4(0))));

+

+    data[invocation].i4.x   = subgroupOr(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupOr(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupOr(data[2].i4.xyz);

+    data[invocation].i4     = subgroupOr(data[3].i4);

+

+    data[invocation].u4.x   = subgroupOr(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupOr(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupOr(data[2].u4.xyz);

+    data[invocation].u4     = subgroupOr(data[3].u4);

+

+    data[invocation].i4.x   =   int(subgroupOr(data[0].i4.x < 0));

+    data[invocation].i4.xy  = ivec2(subgroupOr(lessThan(data[1].i4.xy, ivec2(0))));

+    data[invocation].i4.xyz = ivec3(subgroupOr(lessThan(data[1].i4.xyz, ivec3(0))));

+    data[invocation].i4     = ivec4(subgroupOr(lessThan(data[1].i4, ivec4(0))));

+

+    data[invocation].i4.x   = subgroupXor(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupXor(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupXor(data[2].i4.xyz);

+    data[invocation].i4     = subgroupXor(data[3].i4);

+

+    data[invocation].u4.x   = subgroupXor(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupXor(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupXor(data[2].u4.xyz);

+    data[invocation].u4     = subgroupXor(data[3].u4);

+

+    data[invocation].i4.x   =   int(subgroupXor(data[0].i4.x < 0));

+    data[invocation].i4.xy  = ivec2(subgroupXor(lessThan(data[1].i4.xy, ivec2(0))));

+    data[invocation].i4.xyz = ivec3(subgroupXor(lessThan(data[1].i4.xyz, ivec3(0))));

+    data[invocation].i4     = ivec4(subgroupXor(lessThan(data[1].i4, ivec4(0))));

+

+    data[invocation].f4.x   = subgroupInclusiveAdd(data[0].f4.x);

+    data[invocation].f4.xy  = subgroupInclusiveAdd(data[1].f4.xy);

+    data[invocation].f4.xyz = subgroupInclusiveAdd(data[2].f4.xyz);

+    data[invocation].f4     = subgroupInclusiveAdd(data[3].f4);

+

+    data[invocation].i4.x   = subgroupInclusiveAdd(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupInclusiveAdd(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupInclusiveAdd(data[2].i4.xyz);

+    data[invocation].i4     = subgroupInclusiveAdd(data[3].i4);

+

+    data[invocation].u4.x   = subgroupInclusiveAdd(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupInclusiveAdd(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupInclusiveAdd(data[2].u4.xyz);

+    data[invocation].u4     = subgroupInclusiveAdd(data[3].u4);

+

+    data[invocation].d4.x   = subgroupInclusiveAdd(data[0].d4.x);

+    data[invocation].d4.xy  = subgroupInclusiveAdd(data[1].d4.xy);

+    data[invocation].d4.xyz = subgroupInclusiveAdd(data[2].d4.xyz);

+    data[invocation].d4     = subgroupInclusiveAdd(data[3].d4);

+

+    data[invocation].f4.x   = subgroupInclusiveMul(data[0].f4.x);

+    data[invocation].f4.xy  = subgroupInclusiveMul(data[1].f4.xy);

+    data[invocation].f4.xyz = subgroupInclusiveMul(data[2].f4.xyz);

+    data[invocation].f4     = subgroupInclusiveMul(data[3].f4);

+

+    data[invocation].i4.x   = subgroupInclusiveMul(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupInclusiveMul(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupInclusiveMul(data[2].i4.xyz);

+    data[invocation].i4     = subgroupInclusiveMul(data[3].i4);

+

+    data[invocation].u4.x   = subgroupInclusiveMul(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupInclusiveMul(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupInclusiveMul(data[2].u4.xyz);

+    data[invocation].u4     = subgroupInclusiveMul(data[3].u4);

+

+    data[invocation].d4.x   = subgroupInclusiveMul(data[0].d4.x);

+    data[invocation].d4.xy  = subgroupInclusiveMul(data[1].d4.xy);

+    data[invocation].d4.xyz = subgroupInclusiveMul(data[2].d4.xyz);

+    data[invocation].d4     = subgroupInclusiveMul(data[3].d4);

+

+    data[invocation].f4.x   = subgroupInclusiveMin(data[0].f4.x);

+    data[invocation].f4.xy  = subgroupInclusiveMin(data[1].f4.xy);

+    data[invocation].f4.xyz = subgroupInclusiveMin(data[2].f4.xyz);

+    data[invocation].f4     = subgroupInclusiveMin(data[3].f4);

+

+    data[invocation].i4.x   = subgroupInclusiveMin(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupInclusiveMin(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupInclusiveMin(data[2].i4.xyz);

+    data[invocation].i4     = subgroupInclusiveMin(data[3].i4);

+

+    data[invocation].u4.x   = subgroupInclusiveMin(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupInclusiveMin(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupInclusiveMin(data[2].u4.xyz);

+    data[invocation].u4     = subgroupInclusiveMin(data[3].u4);

+

+    data[invocation].d4.x   = subgroupInclusiveMin(data[0].d4.x);

+    data[invocation].d4.xy  = subgroupInclusiveMin(data[1].d4.xy);

+    data[invocation].d4.xyz = subgroupInclusiveMin(data[2].d4.xyz);

+    data[invocation].d4     = subgroupInclusiveMin(data[3].d4);

+

+    data[invocation].f4.x   = subgroupInclusiveMax(data[0].f4.x);

+    data[invocation].f4.xy  = subgroupInclusiveMax(data[1].f4.xy);

+    data[invocation].f4.xyz = subgroupInclusiveMax(data[2].f4.xyz);

+    data[invocation].f4     = subgroupInclusiveMax(data[3].f4);

+

+    data[invocation].i4.x   = subgroupInclusiveMax(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupInclusiveMax(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupInclusiveMax(data[2].i4.xyz);

+    data[invocation].i4     = subgroupInclusiveMax(data[3].i4);

+

+    data[invocation].u4.x   = subgroupInclusiveMax(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupInclusiveMax(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupInclusiveMax(data[2].u4.xyz);

+    data[invocation].u4     = subgroupInclusiveMax(data[3].u4);

+

+    data[invocation].d4.x   = subgroupInclusiveMax(data[0].d4.x);

+    data[invocation].d4.xy  = subgroupInclusiveMax(data[1].d4.xy);

+    data[invocation].d4.xyz = subgroupInclusiveMax(data[2].d4.xyz);

+    data[invocation].d4     = subgroupInclusiveMax(data[3].d4);

+

+    data[invocation].i4.x   = subgroupInclusiveAnd(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupInclusiveAnd(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupInclusiveAnd(data[2].i4.xyz);

+    data[invocation].i4     = subgroupInclusiveAnd(data[3].i4);

+

+    data[invocation].u4.x   = subgroupInclusiveAnd(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupInclusiveAnd(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupInclusiveAnd(data[2].u4.xyz);

+    data[invocation].u4     = subgroupInclusiveAnd(data[3].u4);

+

+    data[invocation].i4.x   =   int(subgroupInclusiveAnd(data[0].i4.x < 0));

+    data[invocation].i4.xy  = ivec2(subgroupInclusiveAnd(lessThan(data[1].i4.xy, ivec2(0))));

+    data[invocation].i4.xyz = ivec3(subgroupInclusiveAnd(lessThan(data[1].i4.xyz, ivec3(0))));

+    data[invocation].i4     = ivec4(subgroupInclusiveAnd(lessThan(data[1].i4, ivec4(0))));

+

+    data[invocation].i4.x   = subgroupInclusiveOr(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupInclusiveOr(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupInclusiveOr(data[2].i4.xyz);

+    data[invocation].i4     = subgroupInclusiveOr(data[3].i4);

+

+    data[invocation].u4.x   = subgroupInclusiveOr(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupInclusiveOr(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupInclusiveOr(data[2].u4.xyz);

+    data[invocation].u4     = subgroupInclusiveOr(data[3].u4);

+

+    data[invocation].i4.x   =   int(subgroupInclusiveOr(data[0].i4.x < 0));

+    data[invocation].i4.xy  = ivec2(subgroupInclusiveOr(lessThan(data[1].i4.xy, ivec2(0))));

+    data[invocation].i4.xyz = ivec3(subgroupInclusiveOr(lessThan(data[1].i4.xyz, ivec3(0))));

+    data[invocation].i4     = ivec4(subgroupInclusiveOr(lessThan(data[1].i4, ivec4(0))));

+

+    data[invocation].i4.x   = subgroupInclusiveXor(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupInclusiveXor(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupInclusiveXor(data[2].i4.xyz);

+    data[invocation].i4     = subgroupInclusiveXor(data[3].i4);

+

+    data[invocation].u4.x   = subgroupInclusiveXor(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupInclusiveXor(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupInclusiveXor(data[2].u4.xyz);

+    data[invocation].u4     = subgroupInclusiveXor(data[3].u4);

+

+    data[invocation].i4.x   =   int(subgroupInclusiveXor(data[0].i4.x < 0));

+    data[invocation].i4.xy  = ivec2(subgroupInclusiveXor(lessThan(data[1].i4.xy, ivec2(0))));

+    data[invocation].i4.xyz = ivec3(subgroupInclusiveXor(lessThan(data[1].i4.xyz, ivec3(0))));

+    data[invocation].i4     = ivec4(subgroupInclusiveXor(lessThan(data[1].i4, ivec4(0))));

+

+    data[invocation].f4.x   = subgroupExclusiveAdd(data[0].f4.x);

+    data[invocation].f4.xy  = subgroupExclusiveAdd(data[1].f4.xy);

+    data[invocation].f4.xyz = subgroupExclusiveAdd(data[2].f4.xyz);

+    data[invocation].f4     = subgroupExclusiveAdd(data[3].f4);

+

+    data[invocation].i4.x   = subgroupExclusiveAdd(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupExclusiveAdd(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupExclusiveAdd(data[2].i4.xyz);

+    data[invocation].i4     = subgroupExclusiveAdd(data[3].i4);

+

+    data[invocation].u4.x   = subgroupExclusiveAdd(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupExclusiveAdd(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupExclusiveAdd(data[2].u4.xyz);

+    data[invocation].u4     = subgroupExclusiveAdd(data[3].u4);

+

+    data[invocation].d4.x   = subgroupExclusiveAdd(data[0].d4.x);

+    data[invocation].d4.xy  = subgroupExclusiveAdd(data[1].d4.xy);

+    data[invocation].d4.xyz = subgroupExclusiveAdd(data[2].d4.xyz);

+    data[invocation].d4     = subgroupExclusiveAdd(data[3].d4);

+

+    data[invocation].f4.x   = subgroupExclusiveMul(data[0].f4.x);

+    data[invocation].f4.xy  = subgroupExclusiveMul(data[1].f4.xy);

+    data[invocation].f4.xyz = subgroupExclusiveMul(data[2].f4.xyz);

+    data[invocation].f4     = subgroupExclusiveMul(data[3].f4);

+

+    data[invocation].i4.x   = subgroupExclusiveMul(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupExclusiveMul(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupExclusiveMul(data[2].i4.xyz);

+    data[invocation].i4     = subgroupExclusiveMul(data[3].i4);

+

+    data[invocation].u4.x   = subgroupExclusiveMul(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupExclusiveMul(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupExclusiveMul(data[2].u4.xyz);

+    data[invocation].u4     = subgroupExclusiveMul(data[3].u4);

+

+    data[invocation].d4.x   = subgroupExclusiveMul(data[0].d4.x);

+    data[invocation].d4.xy  = subgroupExclusiveMul(data[1].d4.xy);

+    data[invocation].d4.xyz = subgroupExclusiveMul(data[2].d4.xyz);

+    data[invocation].d4     = subgroupExclusiveMul(data[3].d4);

+

+    data[invocation].f4.x   = subgroupExclusiveMin(data[0].f4.x);

+    data[invocation].f4.xy  = subgroupExclusiveMin(data[1].f4.xy);

+    data[invocation].f4.xyz = subgroupExclusiveMin(data[2].f4.xyz);

+    data[invocation].f4     = subgroupExclusiveMin(data[3].f4);

+

+    data[invocation].i4.x   = subgroupExclusiveMin(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupExclusiveMin(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupExclusiveMin(data[2].i4.xyz);

+    data[invocation].i4     = subgroupExclusiveMin(data[3].i4);

+

+    data[invocation].u4.x   = subgroupExclusiveMin(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupExclusiveMin(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupExclusiveMin(data[2].u4.xyz);

+    data[invocation].u4     = subgroupExclusiveMin(data[3].u4);

+

+    data[invocation].d4.x   = subgroupExclusiveMin(data[0].d4.x);

+    data[invocation].d4.xy  = subgroupExclusiveMin(data[1].d4.xy);

+    data[invocation].d4.xyz = subgroupExclusiveMin(data[2].d4.xyz);

+    data[invocation].d4     = subgroupExclusiveMin(data[3].d4);

+

+    data[invocation].f4.x   = subgroupExclusiveMax(data[0].f4.x);

+    data[invocation].f4.xy  = subgroupExclusiveMax(data[1].f4.xy);

+    data[invocation].f4.xyz = subgroupExclusiveMax(data[2].f4.xyz);

+    data[invocation].f4     = subgroupExclusiveMax(data[3].f4);

+

+    data[invocation].i4.x   = subgroupExclusiveMax(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupExclusiveMax(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupExclusiveMax(data[2].i4.xyz);

+    data[invocation].i4     = subgroupExclusiveMax(data[3].i4);

+

+    data[invocation].u4.x   = subgroupExclusiveMax(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupExclusiveMax(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupExclusiveMax(data[2].u4.xyz);

+    data[invocation].u4     = subgroupExclusiveMax(data[3].u4);

+

+    data[invocation].d4.x   = subgroupExclusiveMax(data[0].d4.x);

+    data[invocation].d4.xy  = subgroupExclusiveMax(data[1].d4.xy);

+    data[invocation].d4.xyz = subgroupExclusiveMax(data[2].d4.xyz);

+    data[invocation].d4     = subgroupExclusiveMax(data[3].d4);

+

+    data[invocation].i4.x   = subgroupExclusiveAnd(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupExclusiveAnd(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupExclusiveAnd(data[2].i4.xyz);

+    data[invocation].i4     = subgroupExclusiveAnd(data[3].i4);

+

+    data[invocation].u4.x   = subgroupExclusiveAnd(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupExclusiveAnd(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupExclusiveAnd(data[2].u4.xyz);

+    data[invocation].u4     = subgroupExclusiveAnd(data[3].u4);

+

+    data[invocation].i4.x   =   int(subgroupExclusiveAnd(data[0].i4.x < 0));

+    data[invocation].i4.xy  = ivec2(subgroupExclusiveAnd(lessThan(data[1].i4.xy, ivec2(0))));

+    data[invocation].i4.xyz = ivec3(subgroupExclusiveAnd(lessThan(data[1].i4.xyz, ivec3(0))));

+    data[invocation].i4     = ivec4(subgroupExclusiveAnd(lessThan(data[1].i4, ivec4(0))));

+

+    data[invocation].i4.x   = subgroupExclusiveOr(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupExclusiveOr(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupExclusiveOr(data[2].i4.xyz);

+    data[invocation].i4     = subgroupExclusiveOr(data[3].i4);

+

+    data[invocation].u4.x   = subgroupExclusiveOr(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupExclusiveOr(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupExclusiveOr(data[2].u4.xyz);

+    data[invocation].u4     = subgroupExclusiveOr(data[3].u4);

+

+    data[invocation].i4.x   =   int(subgroupExclusiveOr(data[0].i4.x < 0));

+    data[invocation].i4.xy  = ivec2(subgroupExclusiveOr(lessThan(data[1].i4.xy, ivec2(0))));

+    data[invocation].i4.xyz = ivec3(subgroupExclusiveOr(lessThan(data[1].i4.xyz, ivec3(0))));

+    data[invocation].i4     = ivec4(subgroupExclusiveOr(lessThan(data[1].i4, ivec4(0))));

+

+    data[invocation].i4.x   = subgroupExclusiveXor(data[0].i4.x);

+    data[invocation].i4.xy  = subgroupExclusiveXor(data[1].i4.xy);

+    data[invocation].i4.xyz = subgroupExclusiveXor(data[2].i4.xyz);

+    data[invocation].i4     = subgroupExclusiveXor(data[3].i4);

+

+    data[invocation].u4.x   = subgroupExclusiveXor(data[0].u4.x);

+    data[invocation].u4.xy  = subgroupExclusiveXor(data[1].u4.xy);

+    data[invocation].u4.xyz = subgroupExclusiveXor(data[2].u4.xyz);

+    data[invocation].u4     = subgroupExclusiveXor(data[3].u4);

+

+    data[invocation].i4.x   =   int(subgroupExclusiveXor(data[0].i4.x < 0));

+    data[invocation].i4.xy  = ivec2(subgroupExclusiveXor(lessThan(data[1].i4.xy, ivec2(0))));

+    data[invocation].i4.xyz = ivec3(subgroupExclusiveXor(lessThan(data[1].i4.xyz, ivec3(0))));

+    data[invocation].i4     = ivec4(subgroupExclusiveXor(lessThan(data[1].i4, ivec4(0))));

+}

diff --git a/Test/spv.vulkan100.subgroupPartitioned.comp b/Test/spv.vulkan100.subgroupPartitioned.comp
new file mode 100755
index 0000000..604833e
--- /dev/null
+++ b/Test/spv.vulkan100.subgroupPartitioned.comp
@@ -0,0 +1,420 @@
+#version 450

+

+#extension GL_NV_shader_subgroup_partitioned: enable

+

+layout (local_size_x = 8) in;

+

+layout(binding = 0) buffer Buffers

+{

+    vec4  f4;

+    ivec4 i4;

+    uvec4 u4;

+    dvec4 d4;

+} data[4];

+

+void main()

+{

+    uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;

+

+    uvec4 ballot = subgroupPartitionNV(invocation);

+

+    data[invocation].u4 = subgroupPartitionNV(data[0].f4.x);

+    data[invocation].u4 = subgroupPartitionNV(data[0].f4.xy);

+    data[invocation].u4 = subgroupPartitionNV(data[0].f4.xyz);

+    data[invocation].u4 = subgroupPartitionNV(data[0].f4);

+

+    data[invocation].u4 = subgroupPartitionNV(data[0].i4.x);

+    data[invocation].u4 = subgroupPartitionNV(data[0].i4.xy);

+    data[invocation].u4 = subgroupPartitionNV(data[0].i4.xyz);

+    data[invocation].u4 = subgroupPartitionNV(data[0].i4);

+

+    data[invocation].u4 = subgroupPartitionNV(data[0].u4.x);

+    data[invocation].u4 = subgroupPartitionNV(data[0].u4.xy);

+    data[invocation].u4 = subgroupPartitionNV(data[0].u4.xyz);

+    data[invocation].u4 = subgroupPartitionNV(data[0].u4);

+

+    data[invocation].u4 = subgroupPartitionNV(data[0].d4.x);

+    data[invocation].u4 = subgroupPartitionNV(data[0].d4.xy);

+    data[invocation].u4 = subgroupPartitionNV(data[0].d4.xyz);

+    data[invocation].u4 = subgroupPartitionNV(data[0].d4);

+

+    data[invocation].u4 = subgroupPartitionNV(bool(data[0].i4.x));

+    data[invocation].u4 = subgroupPartitionNV(bvec2(data[0].i4.xy));

+    data[invocation].u4 = subgroupPartitionNV(bvec3(data[0].i4.xyz));

+    data[invocation].u4 = subgroupPartitionNV(bvec4(data[0].i4));

+

+    data[invocation].f4.x   = subgroupPartitionedAddNV(data[0].f4.x, ballot);

+    data[invocation].f4.xy  = subgroupPartitionedAddNV(data[1].f4.xy, ballot);

+    data[invocation].f4.xyz = subgroupPartitionedAddNV(data[2].f4.xyz, ballot);

+    data[invocation].f4     = subgroupPartitionedAddNV(data[3].f4, ballot);

+

+    data[invocation].i4.x   = subgroupPartitionedAddNV(data[0].i4.x, ballot);

+    data[invocation].i4.xy  = subgroupPartitionedAddNV(data[1].i4.xy, ballot);

+    data[invocation].i4.xyz = subgroupPartitionedAddNV(data[2].i4.xyz, ballot);

+    data[invocation].i4     = subgroupPartitionedAddNV(data[3].i4, ballot);

+

+    data[invocation].u4.x   = subgroupPartitionedAddNV(data[0].u4.x, ballot);

+    data[invocation].u4.xy  = subgroupPartitionedAddNV(data[1].u4.xy, ballot);

+    data[invocation].u4.xyz = subgroupPartitionedAddNV(data[2].u4.xyz, ballot);

+    data[invocation].u4     = subgroupPartitionedAddNV(data[3].u4, ballot);

+

+    data[invocation].d4.x   = subgroupPartitionedAddNV(data[0].d4.x, ballot);

+    data[invocation].d4.xy  = subgroupPartitionedAddNV(data[1].d4.xy, ballot);

+    data[invocation].d4.xyz = subgroupPartitionedAddNV(data[2].d4.xyz, ballot);

+    data[invocation].d4     = subgroupPartitionedAddNV(data[3].d4, ballot);

+

+    data[invocation].f4.x   = subgroupPartitionedMulNV(data[0].f4.x, ballot);

+    data[invocation].f4.xy  = subgroupPartitionedMulNV(data[1].f4.xy, ballot);

+    data[invocation].f4.xyz = subgroupPartitionedMulNV(data[2].f4.xyz, ballot);

+    data[invocation].f4     = subgroupPartitionedMulNV(data[3].f4, ballot);

+

+    data[invocation].i4.x   = subgroupPartitionedMulNV(data[0].i4.x, ballot);

+    data[invocation].i4.xy  = subgroupPartitionedMulNV(data[1].i4.xy, ballot);

+    data[invocation].i4.xyz = subgroupPartitionedMulNV(data[2].i4.xyz, ballot);

+    data[invocation].i4     = subgroupPartitionedMulNV(data[3].i4, ballot);

+

+    data[invocation].u4.x   = subgroupPartitionedMulNV(data[0].u4.x, ballot);

+    data[invocation].u4.xy  = subgroupPartitionedMulNV(data[1].u4.xy, ballot);

+    data[invocation].u4.xyz = subgroupPartitionedMulNV(data[2].u4.xyz, ballot);

+    data[invocation].u4     = subgroupPartitionedMulNV(data[3].u4, ballot);

+

+    data[invocation].d4.x   = subgroupPartitionedMulNV(data[0].d4.x, ballot);

+    data[invocation].d4.xy  = subgroupPartitionedMulNV(data[1].d4.xy, ballot);

+    data[invocation].d4.xyz = subgroupPartitionedMulNV(data[2].d4.xyz, ballot);

+    data[invocation].d4     = subgroupPartitionedMulNV(data[3].d4, ballot);

+

+    data[invocation].f4.x   = subgroupPartitionedMinNV(data[0].f4.x, ballot);

+    data[invocation].f4.xy  = subgroupPartitionedMinNV(data[1].f4.xy, ballot);

+    data[invocation].f4.xyz = subgroupPartitionedMinNV(data[2].f4.xyz, ballot);

+    data[invocation].f4     = subgroupPartitionedMinNV(data[3].f4, ballot);

+

+    data[invocation].i4.x   = subgroupPartitionedMinNV(data[0].i4.x, ballot);

+    data[invocation].i4.xy  = subgroupPartitionedMinNV(data[1].i4.xy, ballot);

+    data[invocation].i4.xyz = subgroupPartitionedMinNV(data[2].i4.xyz, ballot);

+    data[invocation].i4     = subgroupPartitionedMinNV(data[3].i4, ballot);

+

+    data[invocation].u4.x   = subgroupPartitionedMinNV(data[0].u4.x, ballot);

+    data[invocation].u4.xy  = subgroupPartitionedMinNV(data[1].u4.xy, ballot);

+    data[invocation].u4.xyz = subgroupPartitionedMinNV(data[2].u4.xyz, ballot);

+    data[invocation].u4     = subgroupPartitionedMinNV(data[3].u4, ballot);

+

+    data[invocation].d4.x   = subgroupPartitionedMinNV(data[0].d4.x, ballot);

+    data[invocation].d4.xy  = subgroupPartitionedMinNV(data[1].d4.xy, ballot);

+    data[invocation].d4.xyz = subgroupPartitionedMinNV(data[2].d4.xyz, ballot);

+    data[invocation].d4     = subgroupPartitionedMinNV(data[3].d4, ballot);

+

+    data[invocation].f4.x   = subgroupPartitionedMaxNV(data[0].f4.x, ballot);

+    data[invocation].f4.xy  = subgroupPartitionedMaxNV(data[1].f4.xy, ballot);

+    data[invocation].f4.xyz = subgroupPartitionedMaxNV(data[2].f4.xyz, ballot);

+    data[invocation].f4     = subgroupPartitionedMaxNV(data[3].f4, ballot);

+

+    data[invocation].i4.x   = subgroupPartitionedMaxNV(data[0].i4.x, ballot);

+    data[invocation].i4.xy  = subgroupPartitionedMaxNV(data[1].i4.xy, ballot);

+    data[invocation].i4.xyz = subgroupPartitionedMaxNV(data[2].i4.xyz, ballot);

+    data[invocation].i4     = subgroupPartitionedMaxNV(data[3].i4, ballot);

+

+    data[invocation].u4.x   = subgroupPartitionedMaxNV(data[0].u4.x, ballot);

+    data[invocation].u4.xy  = subgroupPartitionedMaxNV(data[1].u4.xy, ballot);

+    data[invocation].u4.xyz = subgroupPartitionedMaxNV(data[2].u4.xyz, ballot);

+    data[invocation].u4     = subgroupPartitionedMaxNV(data[3].u4, ballot);

+

+    data[invocation].d4.x   = subgroupPartitionedMaxNV(data[0].d4.x, ballot);

+    data[invocation].d4.xy  = subgroupPartitionedMaxNV(data[1].d4.xy, ballot);

+    data[invocation].d4.xyz = subgroupPartitionedMaxNV(data[2].d4.xyz, ballot);

+    data[invocation].d4     = subgroupPartitionedMaxNV(data[3].d4, ballot);

+

+    data[invocation].i4.x   = subgroupPartitionedAndNV(data[0].i4.x, ballot);

+    data[invocation].i4.xy  = subgroupPartitionedAndNV(data[1].i4.xy, ballot);

+    data[invocation].i4.xyz = subgroupPartitionedAndNV(data[2].i4.xyz, ballot);

+    data[invocation].i4     = subgroupPartitionedAndNV(data[3].i4, ballot);

+

+    data[invocation].u4.x   = subgroupPartitionedAndNV(data[0].u4.x, ballot);

+    data[invocation].u4.xy  = subgroupPartitionedAndNV(data[1].u4.xy, ballot);

+    data[invocation].u4.xyz = subgroupPartitionedAndNV(data[2].u4.xyz, ballot);

+    data[invocation].u4     = subgroupPartitionedAndNV(data[3].u4, ballot);

+

+    data[invocation].i4.x   =   int(subgroupPartitionedAndNV(data[0].i4.x < 0, ballot));

+    data[invocation].i4.xy  = ivec2(subgroupPartitionedAndNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));

+    data[invocation].i4.xyz = ivec3(subgroupPartitionedAndNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));

+    data[invocation].i4     = ivec4(subgroupPartitionedAndNV(lessThan(data[1].i4, ivec4(0)), ballot));

+

+    data[invocation].i4.x   = subgroupPartitionedOrNV(data[0].i4.x, ballot);

+    data[invocation].i4.xy  = subgroupPartitionedOrNV(data[1].i4.xy, ballot);

+    data[invocation].i4.xyz = subgroupPartitionedOrNV(data[2].i4.xyz, ballot);

+    data[invocation].i4     = subgroupPartitionedOrNV(data[3].i4, ballot);

+

+    data[invocation].u4.x   = subgroupPartitionedOrNV(data[0].u4.x, ballot);

+    data[invocation].u4.xy  = subgroupPartitionedOrNV(data[1].u4.xy, ballot);

+    data[invocation].u4.xyz = subgroupPartitionedOrNV(data[2].u4.xyz, ballot);

+    data[invocation].u4     = subgroupPartitionedOrNV(data[3].u4, ballot);

+

+    data[invocation].i4.x   =   int(subgroupPartitionedOrNV(data[0].i4.x < 0, ballot));

+    data[invocation].i4.xy  = ivec2(subgroupPartitionedOrNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));

+    data[invocation].i4.xyz = ivec3(subgroupPartitionedOrNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));

+    data[invocation].i4     = ivec4(subgroupPartitionedOrNV(lessThan(data[1].i4, ivec4(0)), ballot));

+

+    data[invocation].i4.x   = subgroupPartitionedXorNV(data[0].i4.x, ballot);

+    data[invocation].i4.xy  = subgroupPartitionedXorNV(data[1].i4.xy, ballot);

+    data[invocation].i4.xyz = subgroupPartitionedXorNV(data[2].i4.xyz, ballot);

+    data[invocation].i4     = subgroupPartitionedXorNV(data[3].i4, ballot);

+

+    data[invocation].u4.x   = subgroupPartitionedXorNV(data[0].u4.x, ballot);

+    data[invocation].u4.xy  = subgroupPartitionedXorNV(data[1].u4.xy, ballot);

+    data[invocation].u4.xyz = subgroupPartitionedXorNV(data[2].u4.xyz, ballot);

+    data[invocation].u4     = subgroupPartitionedXorNV(data[3].u4, ballot);

+

+    data[invocation].i4.x   =   int(subgroupPartitionedXorNV(data[0].i4.x < 0, ballot));

+    data[invocation].i4.xy  = ivec2(subgroupPartitionedXorNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));

+    data[invocation].i4.xyz = ivec3(subgroupPartitionedXorNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));

+    data[invocation].i4     = ivec4(subgroupPartitionedXorNV(lessThan(data[1].i4, ivec4(0)), ballot));

+

+    data[invocation].f4.x   = subgroupPartitionedInclusiveAddNV(data[0].f4.x, ballot);

+    data[invocation].f4.xy  = subgroupPartitionedInclusiveAddNV(data[1].f4.xy, ballot);

+    data[invocation].f4.xyz = subgroupPartitionedInclusiveAddNV(data[2].f4.xyz, ballot);

+    data[invocation].f4     = subgroupPartitionedInclusiveAddNV(data[3].f4, ballot);

+

+    data[invocation].i4.x   = subgroupPartitionedInclusiveAddNV(data[0].i4.x, ballot);

+    data[invocation].i4.xy  = subgroupPartitionedInclusiveAddNV(data[1].i4.xy, ballot);

+    data[invocation].i4.xyz = subgroupPartitionedInclusiveAddNV(data[2].i4.xyz, ballot);

+    data[invocation].i4     = subgroupPartitionedInclusiveAddNV(data[3].i4, ballot);

+

+    data[invocation].u4.x   = subgroupPartitionedInclusiveAddNV(data[0].u4.x, ballot);

+    data[invocation].u4.xy  = subgroupPartitionedInclusiveAddNV(data[1].u4.xy, ballot);

+    data[invocation].u4.xyz = subgroupPartitionedInclusiveAddNV(data[2].u4.xyz, ballot);

+    data[invocation].u4     = subgroupPartitionedInclusiveAddNV(data[3].u4, ballot);

+

+    data[invocation].d4.x   = subgroupPartitionedInclusiveAddNV(data[0].d4.x, ballot);

+    data[invocation].d4.xy  = subgroupPartitionedInclusiveAddNV(data[1].d4.xy, ballot);

+    data[invocation].d4.xyz = subgroupPartitionedInclusiveAddNV(data[2].d4.xyz, ballot);

+    data[invocation].d4     = subgroupPartitionedInclusiveAddNV(data[3].d4, ballot);

+

+    data[invocation].f4.x   = subgroupPartitionedInclusiveMulNV(data[0].f4.x, ballot);

+    data[invocation].f4.xy  = subgroupPartitionedInclusiveMulNV(data[1].f4.xy, ballot);

+    data[invocation].f4.xyz = subgroupPartitionedInclusiveMulNV(data[2].f4.xyz, ballot);

+    data[invocation].f4     = subgroupPartitionedInclusiveMulNV(data[3].f4, ballot);

+

+    data[invocation].i4.x   = subgroupPartitionedInclusiveMulNV(data[0].i4.x, ballot);

+    data[invocation].i4.xy  = subgroupPartitionedInclusiveMulNV(data[1].i4.xy, ballot);

+    data[invocation].i4.xyz = subgroupPartitionedInclusiveMulNV(data[2].i4.xyz, ballot);

+    data[invocation].i4     = subgroupPartitionedInclusiveMulNV(data[3].i4, ballot);

+

+    data[invocation].u4.x   = subgroupPartitionedInclusiveMulNV(data[0].u4.x, ballot);

+    data[invocation].u4.xy  = subgroupPartitionedInclusiveMulNV(data[1].u4.xy, ballot);

+    data[invocation].u4.xyz = subgroupPartitionedInclusiveMulNV(data[2].u4.xyz, ballot);

+    data[invocation].u4     = subgroupPartitionedInclusiveMulNV(data[3].u4, ballot);

+

+    data[invocation].d4.x   = subgroupPartitionedInclusiveMulNV(data[0].d4.x, ballot);

+    data[invocation].d4.xy  = subgroupPartitionedInclusiveMulNV(data[1].d4.xy, ballot);

+    data[invocation].d4.xyz = subgroupPartitionedInclusiveMulNV(data[2].d4.xyz, ballot);

+    data[invocation].d4     = subgroupPartitionedInclusiveMulNV(data[3].d4, ballot);

+

+    data[invocation].f4.x   = subgroupPartitionedInclusiveMinNV(data[0].f4.x, ballot);

+    data[invocation].f4.xy  = subgroupPartitionedInclusiveMinNV(data[1].f4.xy, ballot);

+    data[invocation].f4.xyz = subgroupPartitionedInclusiveMinNV(data[2].f4.xyz, ballot);

+    data[invocation].f4     = subgroupPartitionedInclusiveMinNV(data[3].f4, ballot);

+

+    data[invocation].i4.x   = subgroupPartitionedInclusiveMinNV(data[0].i4.x, ballot);

+    data[invocation].i4.xy  = subgroupPartitionedInclusiveMinNV(data[1].i4.xy, ballot);

+    data[invocation].i4.xyz = subgroupPartitionedInclusiveMinNV(data[2].i4.xyz, ballot);

+    data[invocation].i4     = subgroupPartitionedInclusiveMinNV(data[3].i4, ballot);

+

+    data[invocation].u4.x   = subgroupPartitionedInclusiveMinNV(data[0].u4.x, ballot);

+    data[invocation].u4.xy  = subgroupPartitionedInclusiveMinNV(data[1].u4.xy, ballot);

+    data[invocation].u4.xyz = subgroupPartitionedInclusiveMinNV(data[2].u4.xyz, ballot);

+    data[invocation].u4     = subgroupPartitionedInclusiveMinNV(data[3].u4, ballot);

+

+    data[invocation].d4.x   = subgroupPartitionedInclusiveMinNV(data[0].d4.x, ballot);

+    data[invocation].d4.xy  = subgroupPartitionedInclusiveMinNV(data[1].d4.xy, ballot);

+    data[invocation].d4.xyz = subgroupPartitionedInclusiveMinNV(data[2].d4.xyz, ballot);

+    data[invocation].d4     = subgroupPartitionedInclusiveMinNV(data[3].d4, ballot);

+

+    data[invocation].f4.x   = subgroupPartitionedInclusiveMaxNV(data[0].f4.x, ballot);

+    data[invocation].f4.xy  = subgroupPartitionedInclusiveMaxNV(data[1].f4.xy, ballot);

+    data[invocation].f4.xyz = subgroupPartitionedInclusiveMaxNV(data[2].f4.xyz, ballot);

+    data[invocation].f4     = subgroupPartitionedInclusiveMaxNV(data[3].f4, ballot);

+

+    data[invocation].i4.x   = subgroupPartitionedInclusiveMaxNV(data[0].i4.x, ballot);

+    data[invocation].i4.xy  = subgroupPartitionedInclusiveMaxNV(data[1].i4.xy, ballot);

+    data[invocation].i4.xyz = subgroupPartitionedInclusiveMaxNV(data[2].i4.xyz, ballot);

+    data[invocation].i4     = subgroupPartitionedInclusiveMaxNV(data[3].i4, ballot);

+

+    data[invocation].u4.x   = subgroupPartitionedInclusiveMaxNV(data[0].u4.x, ballot);

+    data[invocation].u4.xy  = subgroupPartitionedInclusiveMaxNV(data[1].u4.xy, ballot);

+    data[invocation].u4.xyz = subgroupPartitionedInclusiveMaxNV(data[2].u4.xyz, ballot);

+    data[invocation].u4     = subgroupPartitionedInclusiveMaxNV(data[3].u4, ballot);

+

+    data[invocation].d4.x   = subgroupPartitionedInclusiveMaxNV(data[0].d4.x, ballot);

+    data[invocation].d4.xy  = subgroupPartitionedInclusiveMaxNV(data[1].d4.xy, ballot);

+    data[invocation].d4.xyz = subgroupPartitionedInclusiveMaxNV(data[2].d4.xyz, ballot);

+    data[invocation].d4     = subgroupPartitionedInclusiveMaxNV(data[3].d4, ballot);

+

+    data[invocation].i4.x   = subgroupPartitionedInclusiveAndNV(data[0].i4.x, ballot);

+    data[invocation].i4.xy  = subgroupPartitionedInclusiveAndNV(data[1].i4.xy, ballot);

+    data[invocation].i4.xyz = subgroupPartitionedInclusiveAndNV(data[2].i4.xyz, ballot);

+    data[invocation].i4     = subgroupPartitionedInclusiveAndNV(data[3].i4, ballot);

+

+    data[invocation].u4.x   = subgroupPartitionedInclusiveAndNV(data[0].u4.x, ballot);

+    data[invocation].u4.xy  = subgroupPartitionedInclusiveAndNV(data[1].u4.xy, ballot);

+    data[invocation].u4.xyz = subgroupPartitionedInclusiveAndNV(data[2].u4.xyz, ballot);

+    data[invocation].u4     = subgroupPartitionedInclusiveAndNV(data[3].u4, ballot);

+

+    data[invocation].i4.x   =   int(subgroupPartitionedInclusiveAndNV(data[0].i4.x < 0, ballot));

+    data[invocation].i4.xy  = ivec2(subgroupPartitionedInclusiveAndNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));

+    data[invocation].i4.xyz = ivec3(subgroupPartitionedInclusiveAndNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));

+    data[invocation].i4     = ivec4(subgroupPartitionedInclusiveAndNV(lessThan(data[1].i4, ivec4(0)), ballot));

+

+    data[invocation].i4.x   = subgroupPartitionedInclusiveOrNV(data[0].i4.x, ballot);

+    data[invocation].i4.xy  = subgroupPartitionedInclusiveOrNV(data[1].i4.xy, ballot);

+    data[invocation].i4.xyz = subgroupPartitionedInclusiveOrNV(data[2].i4.xyz, ballot);

+    data[invocation].i4     = subgroupPartitionedInclusiveOrNV(data[3].i4, ballot);

+

+    data[invocation].u4.x   = subgroupPartitionedInclusiveOrNV(data[0].u4.x, ballot);

+    data[invocation].u4.xy  = subgroupPartitionedInclusiveOrNV(data[1].u4.xy, ballot);

+    data[invocation].u4.xyz = subgroupPartitionedInclusiveOrNV(data[2].u4.xyz, ballot);

+    data[invocation].u4     = subgroupPartitionedInclusiveOrNV(data[3].u4, ballot);

+

+    data[invocation].i4.x   =   int(subgroupPartitionedInclusiveOrNV(data[0].i4.x < 0, ballot));

+    data[invocation].i4.xy  = ivec2(subgroupPartitionedInclusiveOrNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));

+    data[invocation].i4.xyz = ivec3(subgroupPartitionedInclusiveOrNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));

+    data[invocation].i4     = ivec4(subgroupPartitionedInclusiveOrNV(lessThan(data[1].i4, ivec4(0)), ballot));

+

+    data[invocation].i4.x   = subgroupPartitionedInclusiveXorNV(data[0].i4.x, ballot);

+    data[invocation].i4.xy  = subgroupPartitionedInclusiveXorNV(data[1].i4.xy, ballot);

+    data[invocation].i4.xyz = subgroupPartitionedInclusiveXorNV(data[2].i4.xyz, ballot);

+    data[invocation].i4     = subgroupPartitionedInclusiveXorNV(data[3].i4, ballot);

+

+    data[invocation].u4.x   = subgroupPartitionedInclusiveXorNV(data[0].u4.x, ballot);

+    data[invocation].u4.xy  = subgroupPartitionedInclusiveXorNV(data[1].u4.xy, ballot);

+    data[invocation].u4.xyz = subgroupPartitionedInclusiveXorNV(data[2].u4.xyz, ballot);

+    data[invocation].u4     = subgroupPartitionedInclusiveXorNV(data[3].u4, ballot);

+

+    data[invocation].i4.x   =   int(subgroupPartitionedInclusiveXorNV(data[0].i4.x < 0, ballot));

+    data[invocation].i4.xy  = ivec2(subgroupPartitionedInclusiveXorNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));

+    data[invocation].i4.xyz = ivec3(subgroupPartitionedInclusiveXorNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));

+    data[invocation].i4     = ivec4(subgroupPartitionedInclusiveXorNV(lessThan(data[1].i4, ivec4(0)), ballot));

+

+    data[invocation].f4.x   = subgroupPartitionedExclusiveAddNV(data[0].f4.x, ballot);

+    data[invocation].f4.xy  = subgroupPartitionedExclusiveAddNV(data[1].f4.xy, ballot);

+    data[invocation].f4.xyz = subgroupPartitionedExclusiveAddNV(data[2].f4.xyz, ballot);

+    data[invocation].f4     = subgroupPartitionedExclusiveAddNV(data[3].f4, ballot);

+

+    data[invocation].i4.x   = subgroupPartitionedExclusiveAddNV(data[0].i4.x, ballot);

+    data[invocation].i4.xy  = subgroupPartitionedExclusiveAddNV(data[1].i4.xy, ballot);

+    data[invocation].i4.xyz = subgroupPartitionedExclusiveAddNV(data[2].i4.xyz, ballot);

+    data[invocation].i4     = subgroupPartitionedExclusiveAddNV(data[3].i4, ballot);

+

+    data[invocation].u4.x   = subgroupPartitionedExclusiveAddNV(data[0].u4.x, ballot);

+    data[invocation].u4.xy  = subgroupPartitionedExclusiveAddNV(data[1].u4.xy, ballot);

+    data[invocation].u4.xyz = subgroupPartitionedExclusiveAddNV(data[2].u4.xyz, ballot);

+    data[invocation].u4     = subgroupPartitionedExclusiveAddNV(data[3].u4, ballot);

+

+    data[invocation].d4.x   = subgroupPartitionedExclusiveAddNV(data[0].d4.x, ballot);

+    data[invocation].d4.xy  = subgroupPartitionedExclusiveAddNV(data[1].d4.xy, ballot);

+    data[invocation].d4.xyz = subgroupPartitionedExclusiveAddNV(data[2].d4.xyz, ballot);

+    data[invocation].d4     = subgroupPartitionedExclusiveAddNV(data[3].d4, ballot);

+

+    data[invocation].f4.x   = subgroupPartitionedExclusiveMulNV(data[0].f4.x, ballot);

+    data[invocation].f4.xy  = subgroupPartitionedExclusiveMulNV(data[1].f4.xy, ballot);

+    data[invocation].f4.xyz = subgroupPartitionedExclusiveMulNV(data[2].f4.xyz, ballot);

+    data[invocation].f4     = subgroupPartitionedExclusiveMulNV(data[3].f4, ballot);

+

+    data[invocation].i4.x   = subgroupPartitionedExclusiveMulNV(data[0].i4.x, ballot);

+    data[invocation].i4.xy  = subgroupPartitionedExclusiveMulNV(data[1].i4.xy, ballot);

+    data[invocation].i4.xyz = subgroupPartitionedExclusiveMulNV(data[2].i4.xyz, ballot);

+    data[invocation].i4     = subgroupPartitionedExclusiveMulNV(data[3].i4, ballot);

+

+    data[invocation].u4.x   = subgroupPartitionedExclusiveMulNV(data[0].u4.x, ballot);

+    data[invocation].u4.xy  = subgroupPartitionedExclusiveMulNV(data[1].u4.xy, ballot);

+    data[invocation].u4.xyz = subgroupPartitionedExclusiveMulNV(data[2].u4.xyz, ballot);

+    data[invocation].u4     = subgroupPartitionedExclusiveMulNV(data[3].u4, ballot);

+

+    data[invocation].d4.x   = subgroupPartitionedExclusiveMulNV(data[0].d4.x, ballot);

+    data[invocation].d4.xy  = subgroupPartitionedExclusiveMulNV(data[1].d4.xy, ballot);

+    data[invocation].d4.xyz = subgroupPartitionedExclusiveMulNV(data[2].d4.xyz, ballot);

+    data[invocation].d4     = subgroupPartitionedExclusiveMulNV(data[3].d4, ballot);

+

+    data[invocation].f4.x   = subgroupPartitionedExclusiveMinNV(data[0].f4.x, ballot);

+    data[invocation].f4.xy  = subgroupPartitionedExclusiveMinNV(data[1].f4.xy, ballot);

+    data[invocation].f4.xyz = subgroupPartitionedExclusiveMinNV(data[2].f4.xyz, ballot);

+    data[invocation].f4     = subgroupPartitionedExclusiveMinNV(data[3].f4, ballot);

+

+    data[invocation].i4.x   = subgroupPartitionedExclusiveMinNV(data[0].i4.x, ballot);

+    data[invocation].i4.xy  = subgroupPartitionedExclusiveMinNV(data[1].i4.xy, ballot);

+    data[invocation].i4.xyz = subgroupPartitionedExclusiveMinNV(data[2].i4.xyz, ballot);

+    data[invocation].i4     = subgroupPartitionedExclusiveMinNV(data[3].i4, ballot);

+

+    data[invocation].u4.x   = subgroupPartitionedExclusiveMinNV(data[0].u4.x, ballot);

+    data[invocation].u4.xy  = subgroupPartitionedExclusiveMinNV(data[1].u4.xy, ballot);

+    data[invocation].u4.xyz = subgroupPartitionedExclusiveMinNV(data[2].u4.xyz, ballot);

+    data[invocation].u4     = subgroupPartitionedExclusiveMinNV(data[3].u4, ballot);

+

+    data[invocation].d4.x   = subgroupPartitionedExclusiveMinNV(data[0].d4.x, ballot);

+    data[invocation].d4.xy  = subgroupPartitionedExclusiveMinNV(data[1].d4.xy, ballot);

+    data[invocation].d4.xyz = subgroupPartitionedExclusiveMinNV(data[2].d4.xyz, ballot);

+    data[invocation].d4     = subgroupPartitionedExclusiveMinNV(data[3].d4, ballot);

+

+    data[invocation].f4.x   = subgroupPartitionedExclusiveMaxNV(data[0].f4.x, ballot);

+    data[invocation].f4.xy  = subgroupPartitionedExclusiveMaxNV(data[1].f4.xy, ballot);

+    data[invocation].f4.xyz = subgroupPartitionedExclusiveMaxNV(data[2].f4.xyz, ballot);

+    data[invocation].f4     = subgroupPartitionedExclusiveMaxNV(data[3].f4, ballot);

+

+    data[invocation].i4.x   = subgroupPartitionedExclusiveMaxNV(data[0].i4.x, ballot);

+    data[invocation].i4.xy  = subgroupPartitionedExclusiveMaxNV(data[1].i4.xy, ballot);

+    data[invocation].i4.xyz = subgroupPartitionedExclusiveMaxNV(data[2].i4.xyz, ballot);

+    data[invocation].i4     = subgroupPartitionedExclusiveMaxNV(data[3].i4, ballot);

+

+    data[invocation].u4.x   = subgroupPartitionedExclusiveMaxNV(data[0].u4.x, ballot);

+    data[invocation].u4.xy  = subgroupPartitionedExclusiveMaxNV(data[1].u4.xy, ballot);

+    data[invocation].u4.xyz = subgroupPartitionedExclusiveMaxNV(data[2].u4.xyz, ballot);

+    data[invocation].u4     = subgroupPartitionedExclusiveMaxNV(data[3].u4, ballot);

+

+    data[invocation].d4.x   = subgroupPartitionedExclusiveMaxNV(data[0].d4.x, ballot);

+    data[invocation].d4.xy  = subgroupPartitionedExclusiveMaxNV(data[1].d4.xy, ballot);

+    data[invocation].d4.xyz = subgroupPartitionedExclusiveMaxNV(data[2].d4.xyz, ballot);

+    data[invocation].d4     = subgroupPartitionedExclusiveMaxNV(data[3].d4, ballot);

+

+    data[invocation].i4.x   = subgroupPartitionedExclusiveAndNV(data[0].i4.x, ballot);

+    data[invocation].i4.xy  = subgroupPartitionedExclusiveAndNV(data[1].i4.xy, ballot);

+    data[invocation].i4.xyz = subgroupPartitionedExclusiveAndNV(data[2].i4.xyz, ballot);

+    data[invocation].i4     = subgroupPartitionedExclusiveAndNV(data[3].i4, ballot);

+

+    data[invocation].u4.x   = subgroupPartitionedExclusiveAndNV(data[0].u4.x, ballot);

+    data[invocation].u4.xy  = subgroupPartitionedExclusiveAndNV(data[1].u4.xy, ballot);

+    data[invocation].u4.xyz = subgroupPartitionedExclusiveAndNV(data[2].u4.xyz, ballot);

+    data[invocation].u4     = subgroupPartitionedExclusiveAndNV(data[3].u4, ballot);

+

+    data[invocation].i4.x   =   int(subgroupPartitionedExclusiveAndNV(data[0].i4.x < 0, ballot));

+    data[invocation].i4.xy  = ivec2(subgroupPartitionedExclusiveAndNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));

+    data[invocation].i4.xyz = ivec3(subgroupPartitionedExclusiveAndNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));

+    data[invocation].i4     = ivec4(subgroupPartitionedExclusiveAndNV(lessThan(data[1].i4, ivec4(0)), ballot));

+

+    data[invocation].i4.x   = subgroupPartitionedExclusiveOrNV(data[0].i4.x, ballot);

+    data[invocation].i4.xy  = subgroupPartitionedExclusiveOrNV(data[1].i4.xy, ballot);

+    data[invocation].i4.xyz = subgroupPartitionedExclusiveOrNV(data[2].i4.xyz, ballot);

+    data[invocation].i4     = subgroupPartitionedExclusiveOrNV(data[3].i4, ballot);

+

+    data[invocation].u4.x   = subgroupPartitionedExclusiveOrNV(data[0].u4.x, ballot);

+    data[invocation].u4.xy  = subgroupPartitionedExclusiveOrNV(data[1].u4.xy, ballot);

+    data[invocation].u4.xyz = subgroupPartitionedExclusiveOrNV(data[2].u4.xyz, ballot);

+    data[invocation].u4     = subgroupPartitionedExclusiveOrNV(data[3].u4, ballot);

+

+    data[invocation].i4.x   =   int(subgroupPartitionedExclusiveOrNV(data[0].i4.x < 0, ballot));

+    data[invocation].i4.xy  = ivec2(subgroupPartitionedExclusiveOrNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));

+    data[invocation].i4.xyz = ivec3(subgroupPartitionedExclusiveOrNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));

+    data[invocation].i4     = ivec4(subgroupPartitionedExclusiveOrNV(lessThan(data[1].i4, ivec4(0)), ballot));

+

+    data[invocation].i4.x   = subgroupPartitionedExclusiveXorNV(data[0].i4.x, ballot);

+    data[invocation].i4.xy  = subgroupPartitionedExclusiveXorNV(data[1].i4.xy, ballot);

+    data[invocation].i4.xyz = subgroupPartitionedExclusiveXorNV(data[2].i4.xyz, ballot);

+    data[invocation].i4     = subgroupPartitionedExclusiveXorNV(data[3].i4, ballot);

+

+    data[invocation].u4.x   = subgroupPartitionedExclusiveXorNV(data[0].u4.x, ballot);

+    data[invocation].u4.xy  = subgroupPartitionedExclusiveXorNV(data[1].u4.xy, ballot);

+    data[invocation].u4.xyz = subgroupPartitionedExclusiveXorNV(data[2].u4.xyz, ballot);

+    data[invocation].u4     = subgroupPartitionedExclusiveXorNV(data[3].u4, ballot);

+

+    data[invocation].i4.x   =   int(subgroupPartitionedExclusiveXorNV(data[0].i4.x < 0, ballot));

+    data[invocation].i4.xy  = ivec2(subgroupPartitionedExclusiveXorNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));

+    data[invocation].i4.xyz = ivec3(subgroupPartitionedExclusiveXorNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));

+    data[invocation].i4     = ivec4(subgroupPartitionedExclusiveXorNV(lessThan(data[1].i4, ivec4(0)), ballot));

+}

diff --git a/Test/spv.vulkan110.int16.frag b/Test/spv.vulkan110.int16.frag
new file mode 100644
index 0000000..d29894b
--- /dev/null
+++ b/Test/spv.vulkan110.int16.frag
@@ -0,0 +1,251 @@
+#version 450
+
+#extension GL_KHX_shader_explicit_arithmetic_types: enable
+#extension GL_KHX_shader_explicit_arithmetic_types_int8: require
+#extension GL_KHX_shader_explicit_arithmetic_types_int16: require
+#extension GL_KHX_shader_explicit_arithmetic_types_int32: require
+#extension GL_KHX_shader_explicit_arithmetic_types_int64: require
+#extension GL_KHX_shader_explicit_arithmetic_types_float16: require
+#extension GL_KHX_shader_explicit_arithmetic_types_float32: require
+#extension GL_KHX_shader_explicit_arithmetic_types_float64: require
+
+layout(binding = 0) uniform Uniforms
+{
+    uint index;
+};
+
+layout(std140, binding = 1) uniform Block
+{
+    int16_t   i16;
+    i16vec2   i16v2;
+    i16vec3   i16v3;
+    i16vec4   i16v4;
+    uint16_t  u16;
+    u16vec2   u16v2;
+    u16vec3   u16v3;
+    u16vec4   u16v4;
+} block;
+
+void main()
+{
+}
+
+void literal()
+{
+    const int16_t i16Const[3] =
+    {
+        int16_t(-0x1111),           // Hex
+        int16_t(-1),                // Dec
+        int16_t(040000),            // Oct
+    };
+
+    int16_t i16 = i16Const[index];
+
+    const uint16_t u16Const[] =
+    {
+        uint16_t(0xFFFF),             // Hex
+        uint16_t(65535),              // Dec
+        uint16_t(077777),             // Oct
+    };
+
+    uint16_t u16 = u16Const[index];
+}
+
+void typeCast16()
+{
+    i8vec2 i8v;
+    u8vec2 u8v;
+    i16vec2 i16v;
+    u16vec2 u16v;
+    i32vec2 i32v;
+    u32vec2 u32v;
+    i64vec2 i64v;
+    u64vec2 u64v;
+    f16vec2 f16v;
+    f32vec2 f32v;
+    f64vec2 f64v;
+    bvec2   bv;
+
+    i32v = i16v;     // int16_t  ->   int32_t
+    i32v = u16v;     // uint16_t ->   int32_t
+    u16v = i16v;     // int16_t  ->  uint16_t
+    u32v = i16v;     // int16_t  ->  uint32_t
+    i64v = i16v;     // int16_t  ->   int64_t
+    u64v = i16v;     // int16_t  ->  uint64_t
+    u32v = u16v;     // uint16_t ->  uint32_t
+    i64v = u16v;     // uint16_t ->   int64_t
+    u64v = u16v;     // uint16_t ->  uint64_t
+    f16v = i16v;     // int16_t  ->  float16_t
+    f32v = i16v;     // int16_t  ->  float32_t
+    f64v = i16v;     // int16_t  ->  float64_t
+    f16v = u16v;     // uint16_t ->  float16_t
+    f32v = u16v;     // uint16_t ->  float32_t
+    f64v = u16v;     // uint16_t ->  float64_t
+
+    i32v = i32vec2(i16v);     // int16_t  ->   int32_t
+    i32v = i32vec2(u16v);     // uint16_t ->   int32_t
+    u16v = u16vec2(i16v);     // int16_t  ->  uint16_t
+    u32v = u32vec2(i16v);     // int16_t  ->  uint32_t
+    i64v = i64vec2(i16v);     // int16_t  ->   int64_t
+    u64v = i64vec2(i16v);     // int16_t  ->  uint64_t
+    u32v = u32vec2(u16v);     // uint16_t ->  uint32_t
+    i64v = i64vec2(u16v);     // uint16_t ->   int64_t
+    u64v = i64vec2(u16v);     // uint16_t ->  uint64_t
+    f16v = f16vec2(i16v);     // int16_t  ->  float16_t
+    f32v = f32vec2(i16v);     // int16_t  ->  float32_t
+    f64v = f64vec2(i16v);     // int16_t  ->  float64_t
+    f16v = f16vec2(u16v);     // uint16_t ->  float16_t
+    f32v = f32vec2(u16v);     // uint16_t ->  float32_t
+    f64v = f64vec2(u16v);     // uint16_t ->  float64_t
+
+    i8v  = i8vec2(i16v);      // int16_t  ->   int8_t
+    i8v  = i8vec2(u16v);      // uint16_t ->   int8_t
+    u8v  = u8vec2(i16v);      // int16_t  ->  uint8_t
+    u8v  = u8vec2(u16v);      // uint16_t ->  uint8_t
+    i16v = u8vec2(u16v);      // uint16_t ->   int16_t
+    i16v = i16vec2(bv);       // bool     ->   int16
+    u16v = u16vec2(bv);       // bool     ->   uint16
+    bv   = bvec2(i16v);       // int16    ->   bool
+    bv   = bvec2(u16v);       // uint16   ->   bool
+}
+void operators()
+{
+    u16vec3 u16v;
+    int16_t i16;
+    uvec3   uv;
+    int32_t i;
+    int64_t i64;
+    bool    b;
+
+    // Unary
+    u16v++;
+    i16--;
+    ++i16;
+    --u16v;
+
+    u16v = ~u16v;
+
+    i16 = +i16;
+    u16v = -u16v;
+
+    // Arithmetic
+    i16  += i16;
+    u16v -= u16v;
+    i  *= i16;
+    uv /= u16v;
+    uv %= i16;
+
+    uv = u16v + uv;
+    i64  = i16 - i64;
+    uv = u16v * uv;
+    i64  = i16 * i64;
+    i  = i16 % i;
+
+    // Shift
+    u16v <<= i16;
+    i16  >>= u16v.y;
+
+    i16  = i16 << u16v.z;
+    uv = u16v << i;
+
+    // Relational
+    b = (u16v.x != i16);
+    b = (i16 == u16v.x);
+    b = (u16v.x > uv.y);
+    b = (i16 < i);
+    b = (u16v.y >= uv.x);
+    b = (i16 <= i);
+
+    // Bitwise
+    uv |= i16;
+    i  = i16 | i;
+    i64  &= i16;
+    uv = u16v & uv;
+    uv ^= i16;
+    u16v = u16v ^ i16;
+}
+
+void builtinFuncs()
+{
+    i16vec2  i16v;
+    i16vec4  i16v4;
+    u16vec3  u16v;
+    u16vec2  u16v2;
+    u16vec4  u16v4;
+    bvec3   bv;
+    int16_t i16;
+    uint16_t u16;
+    int32_t i32;
+    uint32_t u32;
+    int64_t i64;
+    uint64_t u64;
+
+    // abs()
+    i16v = abs(i16v);
+
+    // sign()
+    i16  = sign(i16);
+
+    // min()
+    i16v = min(i16v, i16);
+    i16v = min(i16v, i16vec2(-1));
+    u16v = min(u16v, u16);
+    u16v = min(u16v, u16vec3(0));
+
+    // max()
+    i16v = max(i16v, i16);
+    i16v = max(i16v, i16vec2(-1));
+    u16v = max(u16v, u16);
+    u16v = max(u16v, u16vec3(0));
+
+    // clamp()
+    i16v = clamp(i16v, -i16, i16);
+    i16v = clamp(i16v, -i16v, i16v);
+    u16v = clamp(u16v, -u16, u16);
+    u16v = clamp(u16v, -u16v, u16v);
+
+    // mix()
+    i16  = mix(i16v.x, i16v.y, true);
+    i16v = mix(i16vec2(i16), i16vec2(-i16), bvec2(false));
+    u16  = mix(u16v.x, u16v.y, true);
+    u16v = mix(u16vec3(u16), u16vec3(-u16), bvec3(false));
+
+    //pack
+    i32 = pack32(i16v);
+    i64 = pack64(i16v4);
+    u32 = pack32(u16v2);
+    u64 = pack64(u16v4);
+
+    i16v  = unpack16(i32);
+    i16v4 = unpack16(i64);
+    u16v2 = unpack16(u32);
+    u16v4 = unpack16(u64);
+
+    // lessThan()
+    bv    = lessThan(u16v, u16vec3(u16));
+    bv.xy = lessThan(i16v, i16vec2(i16));
+
+    // lessThanEqual()
+    bv    = lessThanEqual(u16v, u16vec3(u16));
+    bv.xy = lessThanEqual(i16v, i16vec2(i16));
+
+    // greaterThan()
+    bv    = greaterThan(u16v, u16vec3(u16));
+    bv.xy = greaterThan(i16v, i16vec2(i16));
+
+    // greaterThanEqual()
+    bv    = greaterThanEqual(u16v, u16vec3(u16));
+    bv.xy = greaterThanEqual(i16v, i16vec2(i16));
+
+    // equal()
+    bv    = equal(u16v, u16vec3(u16));
+    bv.xy = equal(i16v, i16vec2(i16));
+
+    // notEqual()
+    bv    = notEqual(u16v, u16vec3(u16));
+    bv.xy = notEqual(i16v, i16vec2(i16));
+}
+
+// Type conversion for specialization constant
+layout(constant_id = 100) const int16_t  si16 = int16_t(-10);
+layout(constant_id = 101) const uint16_t su16 = uint16_t(20);
diff --git a/Test/spv.vulkan110.storageBuffer.vert b/Test/spv.vulkan110.storageBuffer.vert
new file mode 100644
index 0000000..6dd629e
--- /dev/null
+++ b/Test/spv.vulkan110.storageBuffer.vert
@@ -0,0 +1,16 @@
+#version 450

+

+#pragma use_storage_buffer

+

+uniform ub {

+    vec4 a;

+} ubi;

+

+buffer bb {

+    vec4 b;

+} bbi;

+

+void main()

+{

+    gl_Position = ubi.a + bbi.b;

+}

diff --git a/Test/spv.xfb.vert b/Test/spv.xfb.vert
new file mode 100644
index 0000000..ad762bc
--- /dev/null
+++ b/Test/spv.xfb.vert
@@ -0,0 +1,20 @@
+#version 450

+

+layout(xfb_buffer = 3) out;

+layout(xfb_stride = 48) out;

+layout(xfb_offset = 12, location = 0) out float out1;

+

+layout(xfb_buffer = 2) out;

+layout(location=1) out outXfb {

+    layout(xfb_buffer = 2, xfb_stride = 32, xfb_offset = 8) float out2;

+};

+

+layout(xfb_buffer = 1, location=3) out outXfb2 {

+    layout(xfb_stride = 64, xfb_offset = 60) float out3;

+};

+

+layout(location = 4, xfb_buffer = 0, xfb_offset = 4) out float out4;

+

+void main()

+{

+}
\ No newline at end of file
diff --git a/Test/spv.xfb2.vert b/Test/spv.xfb2.vert
new file mode 100644
index 0000000..895666d
--- /dev/null
+++ b/Test/spv.xfb2.vert
@@ -0,0 +1,18 @@
+#version 450

+

+layout (location = 0) in vec4 position;

+layout (binding = 5) uniform ComponentsBlock

+{

+    vec4 c1;

+    vec2 c2;

+} components;

+

+layout (xfb_buffer = 3, xfb_offset = 16) out gl_PerVertex

+{

+    vec4 gl_Position;

+};

+

+void main()

+{

+    gl_Position = position + components.c1 + vec4(components.c2, 0.0, 0.0);

+}
\ No newline at end of file
diff --git a/Test/spv.xfb3.vert b/Test/spv.xfb3.vert
new file mode 100644
index 0000000..2eae7c9
--- /dev/null
+++ b/Test/spv.xfb3.vert
@@ -0,0 +1,18 @@
+#version 450

+

+layout (location = 0) in vec4 position;

+layout (binding = 5) uniform ComponentsBlock

+{

+    vec4 c1;

+    vec2 c2;

+} components;

+

+layout (xfb_buffer = 3, xfb_offset = 16) out gl_PerVertex

+{

+    layout(xfb_stride = 80) vec4 gl_Position;

+};

+

+void main()

+{

+    gl_Position = position + components.c1 + vec4(components.c2, 0.0, 0.0);

+}
\ No newline at end of file
diff --git a/Test/validate-shaders.sh b/Test/validate-shaders.sh
new file mode 100755
index 0000000..9211106
--- /dev/null
+++ b/Test/validate-shaders.sh
@@ -0,0 +1,269 @@
+#!/bin/bash
+
+# This script validates shaders (if successfully compiled) using spirv-val.
+# It is not meant to preclude the possible addition of the validator to
+# glslang.
+
+declare -r EXE='../build/install/bin/glslangValidator'
+
+# search common locations for spirv-tools: keep first one
+for toolsdir in '../External/spirv-tools/build/tools' '../../SPIRV-Tools/build/tools' '/usr/local/bin'; do
+    [[ -z "$VAL" && -x "${toolsdir}/spirv-val" ]] && declare -r VAL="${toolsdir}/spirv-val"
+    [[ -z "$DIS" && -x "${toolsdir}/spirv-dis" ]] && declare -r DIS="${toolsdir}/spirv-dis"
+done
+
+declare -r gtests='../gtests/Hlsl.FromFile.cpp ../gtests/Spv.FromFile.cpp'
+
+declare -r targetenv='vulkan1.0'
+
+function fatal() { echo "ERROR: $@"; exit 5; }
+
+function usage
+{
+    echo
+    echo "Usage: $(basename $0) [options...] shaders..."
+    echo
+    echo "   Validates shaders (if successfully compiled) through spirv-val."
+    echo
+    echo "General options:"
+    echo "   --help          prints this text"
+    echo "   --no-color      disables output colorization"
+    echo "   --dump-asm      dumps all successfully compiled shader assemblies"
+    echo "   --dump-val      dumps all validation results"
+    echo "   --dump-comp     dumps all compilation logs"
+    echo "Spam reduction options:"
+    echo "   --no-summary    disables result summaries"
+    echo "   --skip-ok       do not print successful validations"
+    echo "   --skip-comperr  do not print compilation errors"
+    echo "   --skip-valerr   do not print validation errors"
+    echo "   --quiet         synonym for --skip-ok --skip-comperr --skip-valerr --no-summary"
+    echo "   --terse         print terse single line progress summary"
+    echo "Disassembly options:"
+    echo "   --raw-id        uses raw ids for disassembly"
+    echo
+    echo "Usage examples.  Note most non-hlsl tests fail to compile for expected reasons."
+    echo "   Exercise all hlsl.* files:"
+    echo "       $(basename $0) hlsl.*"
+    echo "   Exercise all hlsl.* files, tersely:"
+    echo "       $(basename $0) --terse hlsl.*"
+    echo "   Print validator output for myfile.frag:"
+    echo "       $(basename $0) --quiet --dump-val myfile.frag"
+    echo "   Exercise hlsl.* files, only printing validation errors:"
+    echo "       $(basename $0) --skip-ok --skip-comperr hlsl.*"
+
+    exit 5
+}
+
+function status()
+{
+    printf "%-40s: %b\n" "$1" "$2"
+}
+
+# make sure we can find glslang
+[[ -x "$EXE" ]] || fatal "Unable to locate $(basename "$EXE") executable"
+[[ -x "$VAL" ]] || fatal "Unable to locate spirv-val executable"
+[[ -x "$DIS" ]] || fatal "Unable to locate spirv-dis executable"
+
+for gtest in $gtests; do
+    [[ -r "$gtest" ]] || fatal "Unable to locate source file: $(basename $gtest)"
+done
+
+# temp files
+declare -r spvfile='out.spv' \
+        complog='comp.out' \
+        vallog='val.out' \
+        dislog='dis.out' \
+
+# options
+declare opt_vallog=false \
+        opt_complog=false \
+        opt_dislog=false \
+        opt_summary=true \
+        opt_stat_comperr=true \
+        opt_stat_ok=true \
+        opt_stat_valerr=true \
+        opt_color=true \
+        opt_raw_id=false \
+        opt_quiet=false \
+        opt_terse=false
+
+# clean up on exit
+trap "rm -f ${spvfile} ${complog} ${vallog} ${dislog}" EXIT
+
+# Language guesser: there is no fixed mapping from filenames to language,
+# so this examines the file and return one of:
+#     hlsl
+#     glsl
+#     bin
+#     unknown
+# This is easier WRT future expansion than a big explicit list.
+function FindLanguage()
+{
+    local test="$1"
+
+    # If it starts with hlsl, assume it's hlsl.
+    if [[ "$test" == *hlsl.* ]]; then
+        echo hlsl
+        return
+    fi
+
+    if [[ "$test" == *.spv ]]; then
+        echo bin
+        return;
+    fi
+
+    # If it doesn't start with spv., assume it's GLSL.
+    if [[ ! "$test" == spv.* && ! "$test" == remap.* ]]; then
+        echo glsl
+        return
+    fi
+
+    # Otherwise, attempt to guess from shader contents, since there's no
+    # fixed mapping of filenames to languages.
+    local contents="$(cat "$test")"
+
+    if [[ "$contents" == *#version* ]]; then
+        echo glsl
+        return
+    fi
+
+    if [[ "$contents" == *SamplerState* ||
+          "$contents" == *cbuffer* ||
+          "$contents" == *SV_* ]]; then
+        echo hlsl
+        return
+    fi
+
+    echo unknown
+}
+
+# Attempt to discover entry point
+function FindEntryPoint()
+{
+    local test="$1"
+
+    # if it's not hlsl, always use main
+    if [[ "$language" != 'hlsl' ]]; then
+        echo 'main'
+        return
+    fi
+
+    # Try to find it in test sources
+    awk -F '[ (){",]+' -e "\$2 == \"${test}\" { print \$3; found=1; } END { if (found==0) print \"main\"; } " $gtests
+}
+
+# command line options
+while [ $# -gt 0 ]
+do
+    case "$1" in
+        # -c) glslang="$2"; shift 2;;
+        --help|-?)      usage;;
+        --no-color)     opt_color=false;        shift;;
+        --no-summary)   opt_summary=false;      shift;;
+        --skip-ok)      opt_stat_ok=false;      shift;;
+        --skip-comperr) opt_stat_comperr=false; shift;;
+        --skip-valerr)  opt_stat_valerr=false;  shift;;
+        --dump-asm)     opt_dislog=true;        shift;;
+        --dump-val)     opt_vallog=true;        shift;;
+        --dump-comp)    opt_complog=true;       shift;;
+        --raw-id)       opt_raw_id=true;        shift;;
+        --quiet)        opt_quiet=true;         shift;;
+        --terse)        opt_quiet=true
+                        opt_terse=true
+                        shift;;
+        --*)            fatal "Unknown command line option: $1";;
+        *) break;;
+    esac
+done
+
+# this is what quiet means
+if $opt_quiet; then
+    opt_stat_ok=false
+    opt_stat_comperr=false
+    opt_stat_valerr=false
+    $opt_terse || opt_summary=false
+fi
+
+if $opt_color; then
+    declare -r white="\e[1;37m" cyan="\e[1;36m" red="\e[0;31m" no_color="\e[0m"
+else
+    declare -r white="" cyan="" red="" no_color=""
+fi
+
+# stats
+declare -i count_ok=0 count_err=0 count_nocomp=0 count_total=0
+
+declare -r dashsep='------------------------------------------------------------------------'
+
+testfiles=(${@})
+# if no shaders given, look for everything in current directory
+[[ ${#testfiles[*]} == 0 ]] && testfiles=(*.frag *.vert *.tesc *.tese *.geom *.comp)
+
+$opt_summary && printf "\nValidating: ${#testfiles[*]} shaders\n\n"
+
+# Loop through the shaders we were given, compiling them if we can.
+for test in ${testfiles[*]}
+do
+    if [[ ! -r "$test" ]]; then
+        $opt_quiet || status "$test" "${red}FILE NOT FOUND${no_color}"
+        continue
+    fi
+
+    ((++count_total))
+
+    $opt_terse && printf "\r[%-3d/%-3d : ${white}comperr=%-3d ${red}valerr=%-3d ${cyan}ok=%-3d${no_color}]" \
+                         ${count_total} ${#testfiles[*]} ${count_nocomp} ${count_err} ${count_ok}
+
+    language="$(FindLanguage $test)"
+    entry="$(FindEntryPoint $test)"
+    langops=''
+
+    case "$language" in
+        hlsl) langops='-D --hlsl-iomap --hlsl-offsets';;
+        glsl) ;;
+        bin) continue;;   # skip binaries
+        *) $opt_quiet || status "$test" "${red}UNKNOWN LANGUAGE${no_color}"; continue;;
+    esac
+
+    # compile the test file
+    if compout=$("$EXE" -e "$entry" $langops -V -o "$spvfile" "$test" 2>&1)
+    then
+        # successful compilation: validate
+        if valout=$("$VAL" --target-env ${targetenv} "$spvfile" 2>&1)
+        then
+            # validated OK
+            $opt_stat_ok && status "$test" "${cyan}OK${no_color}"
+            ((++count_ok))
+        else
+            # validation failure
+            $opt_stat_valerr && status "$test" "${red}VAL ERROR${no_color}"
+            printf "%s\n%s:\n%s\n" "$dashsep" "$test" "$valout" >> "$vallog"
+            ((++count_err))
+        fi
+
+        if $opt_dislog; then
+            printf "%s\n%s:\n" "$dashsep" "$test" >> "$dislog"
+            $opt_raw_id && id_opt=--raw-id
+            "$DIS" ${id_opt} "$spvfile" >> "$dislog"
+        fi
+    else
+        # compile failure
+        $opt_stat_comperr && status "$test" "${white}COMP ERROR${no_color}"
+        printf "%s\n%s\n" "$dashsep" "$compout" >> "$complog"
+        ((++count_nocomp))
+    fi
+done
+
+$opt_terse && echo
+
+# summarize
+$opt_summary && printf "\nSummary: ${white}${count_nocomp} compile errors${no_color}, ${red}${count_err} validation errors${no_color}, ${cyan}${count_ok} successes${no_color}\n"
+
+# dump logs
+$opt_vallog  && [[ -r $vallog ]]  && cat "$vallog"
+$opt_complog && [[ -r $complog ]] && cat "$complog"
+$opt_dislog  && [[ -r $dislog ]]  && cat "$dislog"
+
+# exit code
+[[ ${count_err} -gt 0 ]] && exit 1
+exit 0
diff --git a/Test/vulkan.frag b/Test/vulkan.frag
index 1447ec1..74a5aa1 100644
--- a/Test/vulkan.frag
+++ b/Test/vulkan.frag
@@ -1,9 +1,9 @@
 #version 450

 

-uniform sampler s;

-uniform sampler sA[4];

-uniform texture2D t2d;

-uniform texture3D t3d[4];

+uniform sampler s;         // ERROR, no binding

+uniform sampler sA[4];     // ERROR, no binding

+uniform texture2D t2d;     // ERROR, no binding

+uniform texture3D t3d[4];  // ERROR, no binding

 int i;

 uniform samplerShadow sShadow;

 uniform texture3D t3d5[5];

@@ -28,7 +28,7 @@
 sampler2D s2D = sampler2D(t2d, s);            // ERROR, no sampler constructor

 sampler3D s3d[4] = sampler3D[4](t3d, sA[2]);  // ERROR, no sampler constructor

 

-out vec4 color;

+out vec4 color; // ERROR, no location

 

 void main()

 {

@@ -95,3 +95,11 @@
 

     gl_NumSamples;   // ERROR, not for Vulkan

 }

+

+void noise()

+{

+    noise1(dv4);

+    noise2(4.0);

+    noise3(vec2(3));

+    noise4(dv4);

+}

diff --git a/Test/vulkan.vert b/Test/vulkan.vert
index a6dc8ad..a6af2d5 100644
--- a/Test/vulkan.vert
+++ b/Test/vulkan.vert
@@ -58,3 +58,8 @@
 out ban2 {

     float f;

 } bai2[arraySize][2];

+

+layout(binding = 3000) uniform sampler2D s3000;

+layout(binding = 3001) uniform b3001 { int a; };

+layout(location = 10) in vec4 in1;

+layout(location = 10) in vec4 in2;  // ERROR, no location aliasing

diff --git a/glslang/CMakeLists.txt b/glslang/CMakeLists.txt
index ac39733..4f33b53 100644
--- a/glslang/CMakeLists.txt
+++ b/glslang/CMakeLists.txt
@@ -9,6 +9,7 @@
 set(SOURCES
     MachineIndependent/glslang.y
     MachineIndependent/glslang_tab.cpp
+    MachineIndependent/attribute.cpp
     MachineIndependent/Constant.cpp
     MachineIndependent/iomapper.cpp
     MachineIndependent/InfoSink.cpp
@@ -51,6 +52,7 @@
     Include/revision.h
     Include/ShHandle.h
     Include/Types.h
+    MachineIndependent/attribute.h
     MachineIndependent/glslang_tab.cpp.h
     MachineIndependent/gl_types.h
     MachineIndependent/Initialize.h
@@ -78,10 +80,15 @@
 #                    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
 # set(BISON_GLSLParser_OUTPUT_SOURCE ${CMAKE_CURRENT_SOURCE_DIR}/MachineIndependent/glslang_tab.cpp)
 
-add_library(glslang STATIC ${BISON_GLSLParser_OUTPUT_SOURCE} ${SOURCES} ${HEADERS})
+add_library(glslang ${LIB_TYPE} ${BISON_GLSLParser_OUTPUT_SOURCE} ${SOURCES} ${HEADERS})
 set_property(TARGET glslang PROPERTY FOLDER glslang)
 set_property(TARGET glslang PROPERTY POSITION_INDEPENDENT_CODE ON)
 target_link_libraries(glslang OGLCompiler OSDependent)
+
+if(WIN32 AND BUILD_SHARED_LIBS)
+    set_target_properties(glslang PROPERTIES PREFIX "")
+endif()
+
 if(ENABLE_HLSL)
     target_link_libraries(glslang HLSL)
 endif()
diff --git a/glslang/Include/BaseTypes.h b/glslang/Include/BaseTypes.h
index 0a46a7c..46fe159 100644
--- a/glslang/Include/BaseTypes.h
+++ b/glslang/Include/BaseTypes.h
@@ -1,6 +1,7 @@
 //
 // Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
 // Copyright (C) 2012-2013 LunarG, Inc.
+// Copyright (C) 2017 ARM Limited.
 //
 // All rights reserved.
 //
@@ -46,17 +47,15 @@
     EbtVoid,
     EbtFloat,
     EbtDouble,
-#ifdef AMD_EXTENSIONS
     EbtFloat16,
-#endif
+    EbtInt8,
+    EbtUint8,
+    EbtInt16,
+    EbtUint16,
     EbtInt,
     EbtUint,
     EbtInt64,
     EbtUint64,
-#ifdef AMD_EXTENSIONS
-    EbtInt16,
-    EbtUint16,
-#endif
     EbtBool,
     EbtAtomicUint,
     EbtSampler,
@@ -141,6 +140,8 @@
     EbvLocalInvocationId,
     EbvGlobalInvocationId,
     EbvLocalInvocationIndex,
+    EbvNumSubgroups,
+    EbvSubgroupID,
     EbvSubGroupSize,
     EbvSubGroupInvocation,
     EbvSubGroupEqMask,
@@ -148,6 +149,13 @@
     EbvSubGroupGtMask,
     EbvSubGroupLeMask,
     EbvSubGroupLtMask,
+    EbvSubgroupSize2,
+    EbvSubgroupInvocation2,
+    EbvSubgroupEqMask2,
+    EbvSubgroupGeMask2,
+    EbvSubgroupGtMask2,
+    EbvSubgroupLeMask2,
+    EbvSubgroupLtMask2,
     EbvVertexId,
     EbvInstanceId,
     EbvVertexIndex,
@@ -218,6 +226,7 @@
     EbvSecondaryViewportMaskNV,
     EbvPositionPerViewNV,
     EbvViewportMaskPerViewNV,
+    EbvFragFullyCoveredNV,
 #endif 
 
     // HLSL built-ins that live only temporarily, until they get remapped
@@ -355,6 +364,7 @@
     case EbvSecondaryViewportMaskNV:    return "SecondaryViewportMaskNV";
     case EbvPositionPerViewNV:          return "PositionPerViewNV";
     case EbvViewportMaskPerViewNV:      return "ViewportMaskPerViewNV";
+    case EbvFragFullyCoveredNV:         return "FragFullyCoveredNV";
 #endif 
     default:                      return "unknown built-in variable";
     }
@@ -371,7 +381,7 @@
 
 __inline const char* GetPrecisionQualifierString(TPrecisionQualifier p)
 {
-    switch(p) {
+    switch (p) {
     case EpqNone:   return "";        break;
     case EpqLow:    return "lowp";    break;
     case EpqMedium: return "mediump"; break;
@@ -380,6 +390,75 @@
     }
 }
 
+__inline bool isTypeSignedInt(TBasicType type)
+{
+    switch (type) {
+    case EbtInt8:
+    case EbtInt16:
+    case EbtInt:
+    case EbtInt64:
+        return true;
+    default:
+        return false;
+    }
+}
+
+__inline bool isTypeUnsignedInt(TBasicType type)
+{
+    switch (type) {
+    case EbtUint8:
+    case EbtUint16:
+    case EbtUint:
+    case EbtUint64:
+        return true;
+    default:
+        return false;
+    }
+}
+
+__inline bool isTypeInt(TBasicType type)
+{
+    return isTypeSignedInt(type) || isTypeUnsignedInt(type);
+}
+
+__inline bool isTypeFloat(TBasicType type)
+{
+    switch (type) {
+    case EbtFloat:
+    case EbtDouble:
+    case EbtFloat16:
+        return true;
+    default:
+        return false;
+    }
+}
+
+__inline int getTypeRank(TBasicType type) {
+    int res = -1;
+    switch(type) {
+    case EbtInt8:
+    case EbtUint8:
+        res = 0;
+        break;
+    case EbtInt16:
+    case EbtUint16:
+        res = 1;
+        break;
+    case EbtInt:
+    case EbtUint:
+        res = 2;
+        break;
+    case EbtInt64:
+    case EbtUint64:
+        res = 3;
+        break;
+    default:
+        assert(false);
+        break;
+    }
+    return res;
+}
+
 } // end namespace glslang
 
 #endif // _BASICTYPES_INCLUDED_
diff --git a/glslang/Include/Common.h b/glslang/Include/Common.h
index 6e201e3..35eaa31 100644
--- a/glslang/Include/Common.h
+++ b/glslang/Include/Common.h
@@ -37,19 +37,6 @@
 #ifndef _COMMON_INCLUDED_
 #define _COMMON_INCLUDED_
 
-#if (defined(_MSC_VER) && _MSC_VER < 1900 /*vs2015*/) || defined MINGW_HAS_SECURE_API
-    #include <basetsd.h>
-    #define snprintf sprintf_s
-    #define safe_vsprintf(buf,max,format,args) vsnprintf_s((buf), (max), (max), (format), (args))
-#elif defined (solaris)
-    #define safe_vsprintf(buf,max,format,args) vsnprintf((buf), (max), (format), (args))
-    #include <sys/int_types.h>
-    #define UINT_PTR uintptr_t
-#else
-    #define safe_vsprintf(buf,max,format,args) vsnprintf((buf), (max), (format), (args))
-    #include <stdint.h>
-    #define UINT_PTR uintptr_t
-#endif
 
 #if defined(__ANDROID__) || _MSC_VER < 1700
 #include <sstream>
@@ -63,19 +50,36 @@
 }
 #endif
 
+#if (defined(_MSC_VER) && _MSC_VER < 1900 /*vs2015*/) || defined MINGW_HAS_SECURE_API
+    #include <basetsd.h>
+    #ifndef snprintf
+    #define snprintf sprintf_s
+    #endif
+    #define safe_vsprintf(buf,max,format,args) vsnprintf_s((buf), (max), (max), (format), (args))
+#elif defined (solaris)
+    #define safe_vsprintf(buf,max,format,args) vsnprintf((buf), (max), (format), (args))
+    #include <sys/int_types.h>
+    #define UINT_PTR uintptr_t
+#else
+    #define safe_vsprintf(buf,max,format,args) vsnprintf((buf), (max), (format), (args))
+    #include <stdint.h>
+    #define UINT_PTR uintptr_t
+#endif
+
 #if defined(_MSC_VER) && _MSC_VER < 1800
-inline long long int strtoll (const char* str, char** endptr, int base)
-{
-  return _strtoi64(str, endptr, base);
-}
-inline unsigned long long int strtoull (const char* str, char** endptr, int base)
-{
-  return _strtoui64(str, endptr, base);
-}
-inline long long int atoll (const char* str)
-{
-  return strtoll(str, NULL, 10);
-}
+    #include <stdlib.h>
+    inline long long int strtoll (const char* str, char** endptr, int base)
+    {
+        return _strtoi64(str, endptr, base);
+    }
+    inline unsigned long long int strtoull (const char* str, char** endptr, int base)
+    {
+        return _strtoui64(str, endptr, base);
+    }
+    inline long long int atoll (const char* str)
+    {
+        return strtoll(str, NULL, 10);
+    }
 #endif
 
 #if defined(_MSC_VER)
@@ -155,7 +159,7 @@
     return new(memory) TString(s);
 }
 
-template<class T> inline T* NewPoolObject(T)
+template<class T> inline T* NewPoolObject(T*)
 {
     return new(GetThreadPoolAllocator().allocate(sizeof(T))) T;
 }
@@ -240,7 +244,10 @@
     int column;
 };
 
-typedef TMap<TString, TString> TPragmaTable;
+class TPragmaTable : public TMap<TString, TString> {
+public:
+    POOL_ALLOCATOR_NEW_DELETE(GetThreadPoolAllocator())
+};
 
 const int MaxTokenLength = 1024;
 
diff --git a/glslang/Include/ConstantUnion.h b/glslang/Include/ConstantUnion.h
index f66a7ff..3e93340 100644
--- a/glslang/Include/ConstantUnion.h
+++ b/glslang/Include/ConstantUnion.h
@@ -1,6 +1,7 @@
 //
 // Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
 // Copyright (C) 2013 LunarG, Inc.
+// Copyright (C) 2017 ARM Limited.
 //
 // All rights reserved.
 //
@@ -37,6 +38,9 @@
 #ifndef _CONSTANT_UNION_INCLUDED_
 #define _CONSTANT_UNION_INCLUDED_
 
+#include "../Include/Common.h"
+#include "../Include/BaseTypes.h"
+
 namespace glslang {
 
 class TConstUnion {
@@ -45,6 +49,30 @@
 
     TConstUnion() : iConst(0), type(EbtInt) { }
 
+    void setI8Const(signed char i)
+    {
+       i8Const = i;
+       type = EbtInt8;
+    }
+
+    void setU8Const(unsigned char u)
+    {
+       u8Const = u;
+       type = EbtUint8;
+    }
+
+    void setI16Const(signed short i)
+    {
+       i16Const = i;
+       type = EbtInt16;
+    }
+
+    void setU16Const(unsigned short u)
+    {
+       u16Const = u;
+       type = EbtUint16;
+    }
+
     void setIConst(int i)
     {
         iConst = i;
@@ -87,6 +115,10 @@
         type = EbtString;
     }
 
+    signed char        getI8Const() const  { return i8Const; }
+    unsigned char      getU8Const() const  { return u8Const; }
+    signed short       getI16Const() const { return i16Const; }
+    unsigned short     getU16Const() const { return u16Const; }
     int                getIConst() const   { return iConst; }
     unsigned int       getUConst() const   { return uConst; }
     long long          getI64Const() const { return i64Const; }
@@ -95,6 +127,38 @@
     bool               getBConst() const   { return bConst; }
     const TString*     getSConst() const   { return sConst; }
 
+    bool operator==(const signed char i) const
+    {
+        if (i == i8Const)
+            return true;
+
+        return false;
+    }
+
+    bool operator==(const unsigned char u) const
+    {
+        if (u == u8Const)
+            return true;
+
+        return false;
+    }
+
+   bool operator==(const signed short i) const
+    {
+        if (i == i16Const)
+            return true;
+
+        return false;
+    }
+
+    bool operator==(const unsigned short u) const
+    {
+        if (u == u16Const)
+            return true;
+
+        return false;
+    }
+
     bool operator==(const int i) const
     {
         if (i == iConst)
@@ -149,6 +213,26 @@
             return false;
 
         switch (type) {
+        case EbtInt16:
+            if (constant.i16Const == i16Const)
+                return true;
+
+            break;
+         case EbtUint16:
+            if (constant.u16Const == u16Const)
+                return true;
+
+            break;
+        case EbtInt8:
+            if (constant.i8Const == i8Const)
+                return true;
+
+            break;
+         case EbtUint8:
+            if (constant.u8Const == u8Const)
+                return true;
+
+            break;
         case EbtInt:
             if (constant.iConst == iConst)
                 return true;
@@ -186,6 +270,26 @@
         return false;
     }
 
+    bool operator!=(const signed char i) const
+    {
+        return !operator==(i);
+    }
+
+    bool operator!=(const unsigned char u) const
+    {
+        return !operator==(u);
+    }
+
+    bool operator!=(const signed short i) const
+    {
+        return !operator==(i);
+    }
+
+    bool operator!=(const unsigned short u) const
+    {
+        return !operator==(u);
+    }
+
     bool operator!=(const int i) const
     {
         return !operator==(i);
@@ -225,6 +329,26 @@
     {
         assert(type == constant.type);
         switch (type) {
+        case EbtInt8:
+            if (i8Const > constant.i8Const)
+                return true;
+
+            return false;
+        case EbtUint8:
+            if (u8Const > constant.u8Const)
+                return true;
+
+            return false;
+        case EbtInt16:
+            if (i16Const > constant.i16Const)
+                return true;
+
+            return false;
+        case EbtUint16:
+            if (u16Const > constant.u16Const)
+                return true;
+
+            return false;
         case EbtInt:
             if (iConst > constant.iConst)
                 return true;
@@ -260,6 +384,26 @@
     {
         assert(type == constant.type);
         switch (type) {
+        case EbtInt8:
+            if (i8Const < constant.i8Const)
+                return true;
+
+            return false;
+        case EbtUint8:
+            if (u8Const < constant.u8Const)
+                return true;
+
+            return false;
+       case EbtInt16:
+            if (i16Const < constant.i16Const)
+                return true;
+
+            return false;
+        case EbtUint16:
+            if (u16Const < constant.u16Const)
+                return true;
+
+            return false;
         case EbtInt:
             if (iConst < constant.iConst)
                 return true;
@@ -296,9 +440,13 @@
         TConstUnion returnValue;
         assert(type == constant.type);
         switch (type) {
-        case EbtInt: returnValue.setIConst(iConst + constant.iConst); break;
-        case EbtInt64: returnValue.setI64Const(i64Const + constant.i64Const); break;
-        case EbtUint: returnValue.setUConst(uConst + constant.uConst); break;
+        case EbtInt8:   returnValue.setI8Const(i8Const + constant.i8Const); break;
+        case EbtInt16:  returnValue.setI16Const(i16Const + constant.i16Const); break;
+        case EbtInt:    returnValue.setIConst(iConst + constant.iConst); break;
+        case EbtInt64:  returnValue.setI64Const(i64Const + constant.i64Const); break;
+        case EbtUint8:  returnValue.setU8Const(u8Const + constant.u8Const); break;
+        case EbtUint16: returnValue.setU16Const(u16Const + constant.u16Const); break;
+        case EbtUint:   returnValue.setUConst(uConst + constant.uConst); break;
         case EbtUint64: returnValue.setU64Const(u64Const + constant.u64Const); break;
         case EbtDouble: returnValue.setDConst(dConst + constant.dConst); break;
         default: assert(false && "Default missing");
@@ -312,9 +460,13 @@
         TConstUnion returnValue;
         assert(type == constant.type);
         switch (type) {
-        case EbtInt: returnValue.setIConst(iConst - constant.iConst); break;
-        case EbtInt64: returnValue.setI64Const(i64Const - constant.i64Const); break;
-        case EbtUint: returnValue.setUConst(uConst - constant.uConst); break;
+        case EbtInt8:   returnValue.setI8Const(i8Const - constant.i8Const); break;
+        case EbtInt16:  returnValue.setI16Const(i16Const - constant.i16Const); break;
+        case EbtInt:    returnValue.setIConst(iConst - constant.iConst); break;
+        case EbtInt64:  returnValue.setI64Const(i64Const - constant.i64Const); break;
+        case EbtUint8:  returnValue.setU8Const(u8Const - constant.u8Const); break;
+        case EbtUint16: returnValue.setU16Const(u16Const - constant.u16Const); break;
+        case EbtUint:   returnValue.setUConst(uConst - constant.uConst); break;
         case EbtUint64: returnValue.setU64Const(u64Const - constant.u64Const); break;
         case EbtDouble: returnValue.setDConst(dConst - constant.dConst); break;
         default: assert(false && "Default missing");
@@ -328,9 +480,13 @@
         TConstUnion returnValue;
         assert(type == constant.type);
         switch (type) {
-        case EbtInt: returnValue.setIConst(iConst * constant.iConst); break;
-        case EbtInt64: returnValue.setI64Const(i64Const * constant.i64Const); break;
-        case EbtUint: returnValue.setUConst(uConst * constant.uConst); break;
+        case EbtInt8:   returnValue.setI8Const(i8Const * constant.i8Const); break;
+        case EbtInt16:  returnValue.setI16Const(i16Const * constant.i16Const); break;
+        case EbtInt:    returnValue.setIConst(iConst * constant.iConst); break;
+        case EbtInt64:  returnValue.setI64Const(i64Const * constant.i64Const); break;
+        case EbtUint8:  returnValue.setU8Const(u8Const * constant.u8Const); break;
+        case EbtUint16: returnValue.setU16Const(u16Const * constant.u16Const); break;
+        case EbtUint:   returnValue.setUConst(uConst * constant.uConst); break;
         case EbtUint64: returnValue.setU64Const(u64Const * constant.u64Const); break;
         case EbtDouble: returnValue.setDConst(dConst * constant.dConst); break;
         default: assert(false && "Default missing");
@@ -344,9 +500,13 @@
         TConstUnion returnValue;
         assert(type == constant.type);
         switch (type) {
-        case EbtInt: returnValue.setIConst(iConst % constant.iConst); break;
-        case EbtInt64: returnValue.setI64Const(i64Const % constant.i64Const); break;
-        case EbtUint: returnValue.setUConst(uConst % constant.uConst); break;
+        case EbtInt8:   returnValue.setI8Const(i8Const % constant.i8Const); break;
+        case EbtInt16:  returnValue.setI8Const(i8Const % constant.i16Const); break;
+        case EbtInt:    returnValue.setIConst(iConst % constant.iConst); break;
+        case EbtInt64:  returnValue.setI64Const(i64Const % constant.i64Const); break;
+        case EbtUint8:  returnValue.setU8Const(u8Const % constant.u8Const); break;
+        case EbtUint16: returnValue.setU16Const(u16Const % constant.u16Const); break;
+        case EbtUint:   returnValue.setUConst(uConst % constant.uConst); break;
         case EbtUint64: returnValue.setU64Const(u64Const % constant.u64Const); break;
         default:     assert(false && "Default missing");
         }
@@ -358,8 +518,64 @@
     {
         TConstUnion returnValue;
         switch (type) {
+        case EbtInt8:
+            switch (constant.type) {
+            case EbtInt8:   returnValue.setI8Const(i8Const >> constant.i8Const);  break;
+            case EbtUint8:  returnValue.setI8Const(i8Const >> constant.u8Const);  break;
+            case EbtInt16:  returnValue.setI8Const(i8Const >> constant.i16Const); break;
+            case EbtUint16: returnValue.setI8Const(i8Const >> constant.u16Const); break;
+            case EbtInt:    returnValue.setI8Const(i8Const >> constant.iConst);   break;
+            case EbtUint:   returnValue.setI8Const(i8Const >> constant.uConst);   break;
+            case EbtInt64:  returnValue.setI8Const(i8Const >> constant.i64Const); break;
+            case EbtUint64: returnValue.setI8Const(i8Const >> constant.u64Const); break;
+            default:       assert(false && "Default missing");
+            }
+            break;
+        case EbtUint8:
+            switch (constant.type) {
+            case EbtInt8:   returnValue.setU8Const(u8Const >> constant.i8Const);  break;
+            case EbtUint8:  returnValue.setU8Const(u8Const >> constant.u8Const);  break;
+            case EbtInt16:  returnValue.setU8Const(u8Const >> constant.i16Const); break;
+            case EbtUint16: returnValue.setU8Const(u8Const >> constant.u16Const); break;
+            case EbtInt:    returnValue.setU8Const(u8Const >> constant.iConst);   break;
+            case EbtUint:   returnValue.setU8Const(u8Const >> constant.uConst);   break;
+            case EbtInt64:  returnValue.setU8Const(u8Const >> constant.i64Const); break;
+            case EbtUint64: returnValue.setU8Const(u8Const >> constant.u64Const); break;
+            default:       assert(false && "Default missing");
+            }
+            break;
+        case EbtInt16:
+            switch (constant.type) {
+            case EbtInt8:   returnValue.setI16Const(i16Const >> constant.i8Const);  break;
+            case EbtUint8:  returnValue.setI16Const(i16Const >> constant.u8Const);  break;
+            case EbtInt16:  returnValue.setI16Const(i16Const >> constant.i16Const); break;
+            case EbtUint16: returnValue.setI16Const(i16Const >> constant.u16Const); break;
+            case EbtInt:    returnValue.setI16Const(i16Const >> constant.iConst);   break;
+            case EbtUint:   returnValue.setI16Const(i16Const >> constant.uConst);   break;
+            case EbtInt64:  returnValue.setI16Const(i16Const >> constant.i64Const); break;
+            case EbtUint64: returnValue.setI16Const(i16Const >> constant.u64Const); break;
+            default:       assert(false && "Default missing");
+            }
+            break;
+        case EbtUint16:
+            switch (constant.type) {
+            case EbtInt8:   returnValue.setU16Const(u16Const >> constant.i8Const);  break;
+            case EbtUint8:  returnValue.setU16Const(u16Const >> constant.u8Const);  break;
+            case EbtInt16:  returnValue.setU16Const(u16Const >> constant.i16Const); break;
+            case EbtUint16: returnValue.setU16Const(u16Const >> constant.u16Const); break;
+            case EbtInt:    returnValue.setU16Const(u16Const >> constant.iConst);   break;
+            case EbtUint:   returnValue.setU16Const(u16Const >> constant.uConst);   break;
+            case EbtInt64:  returnValue.setU16Const(u16Const >> constant.i64Const); break;
+            case EbtUint64: returnValue.setU16Const(u16Const >> constant.u64Const); break;
+            default:       assert(false && "Default missing");
+            }
+            break;
         case EbtInt:
             switch (constant.type) {
+            case EbtInt8:   returnValue.setIConst(iConst >> constant.i8Const);  break;
+            case EbtUint8:  returnValue.setIConst(iConst >> constant.u8Const);  break;
+            case EbtInt16:  returnValue.setIConst(iConst >> constant.i16Const); break;
+            case EbtUint16: returnValue.setIConst(iConst >> constant.u16Const); break;
             case EbtInt:    returnValue.setIConst(iConst >> constant.iConst);   break;
             case EbtUint:   returnValue.setIConst(iConst >> constant.uConst);   break;
             case EbtInt64:  returnValue.setIConst(iConst >> constant.i64Const); break;
@@ -369,6 +585,10 @@
             break;
         case EbtUint:
             switch (constant.type) {
+            case EbtInt8:   returnValue.setUConst(uConst >> constant.i8Const);  break;
+            case EbtUint8:  returnValue.setUConst(uConst >> constant.u8Const);  break;
+            case EbtInt16:  returnValue.setUConst(uConst >> constant.i16Const); break;
+            case EbtUint16: returnValue.setUConst(uConst >> constant.u16Const); break;
             case EbtInt:    returnValue.setUConst(uConst >> constant.iConst);   break;
             case EbtUint:   returnValue.setUConst(uConst >> constant.uConst);   break;
             case EbtInt64:  returnValue.setUConst(uConst >> constant.i64Const); break;
@@ -378,6 +598,10 @@
             break;
          case EbtInt64:
             switch (constant.type) {
+            case EbtInt8:   returnValue.setI64Const(i64Const >> constant.i8Const);  break;
+            case EbtUint8:  returnValue.setI64Const(i64Const >> constant.u8Const);  break;
+            case EbtInt16:  returnValue.setI64Const(i64Const >> constant.i16Const); break;
+            case EbtUint16: returnValue.setI64Const(i64Const >> constant.u16Const); break;
             case EbtInt:    returnValue.setI64Const(i64Const >> constant.iConst);   break;
             case EbtUint:   returnValue.setI64Const(i64Const >> constant.uConst);   break;
             case EbtInt64:  returnValue.setI64Const(i64Const >> constant.i64Const); break;
@@ -387,6 +611,10 @@
             break;
         case EbtUint64:
             switch (constant.type) {
+            case EbtInt8:   returnValue.setU64Const(u64Const >> constant.i8Const);  break;
+            case EbtUint8:  returnValue.setU64Const(u64Const >> constant.u8Const);  break;
+            case EbtInt16:  returnValue.setU64Const(u64Const >> constant.i16Const); break;
+            case EbtUint16: returnValue.setU64Const(u64Const >> constant.u16Const); break;
             case EbtInt:    returnValue.setU64Const(u64Const >> constant.iConst);   break;
             case EbtUint:   returnValue.setU64Const(u64Const >> constant.uConst);   break;
             case EbtInt64:  returnValue.setU64Const(u64Const >> constant.i64Const); break;
@@ -404,8 +632,64 @@
     {
         TConstUnion returnValue;
         switch (type) {
+        case EbtInt8:
+            switch (constant.type) {
+            case EbtInt8:   returnValue.setI8Const(i8Const << constant.i8Const);  break;
+            case EbtUint8:  returnValue.setI8Const(i8Const << constant.u8Const);  break;
+            case EbtInt16:  returnValue.setI8Const(i8Const << constant.i16Const); break;
+            case EbtUint16: returnValue.setI8Const(i8Const << constant.u16Const); break;
+            case EbtInt:    returnValue.setI8Const(i8Const << constant.iConst);   break;
+            case EbtUint:   returnValue.setI8Const(i8Const << constant.uConst);   break;
+            case EbtInt64:  returnValue.setI8Const(i8Const << constant.i64Const); break;
+            case EbtUint64: returnValue.setI8Const(i8Const << constant.u64Const); break;
+            default:       assert(false && "Default missing");
+            }
+            break;
+        case EbtUint8:
+            switch (constant.type) {
+            case EbtInt8:   returnValue.setU8Const(u8Const << constant.i8Const);  break;
+            case EbtUint8:  returnValue.setU8Const(u8Const << constant.u8Const);  break;
+            case EbtInt16:  returnValue.setU8Const(u8Const << constant.i16Const); break;
+            case EbtUint16: returnValue.setU8Const(u8Const << constant.u16Const); break;
+            case EbtInt:    returnValue.setU8Const(u8Const << constant.iConst);   break;
+            case EbtUint:   returnValue.setU8Const(u8Const << constant.uConst);   break;
+            case EbtInt64:  returnValue.setU8Const(u8Const << constant.i64Const); break;
+            case EbtUint64: returnValue.setU8Const(u8Const << constant.u64Const); break;
+            default:       assert(false && "Default missing");
+            }
+            break;
+        case EbtInt16:
+            switch (constant.type) {
+            case EbtInt8:   returnValue.setI16Const(i16Const << constant.i8Const);  break;
+            case EbtUint8:  returnValue.setI16Const(i16Const << constant.u8Const);  break;
+            case EbtInt16:  returnValue.setI16Const(i16Const << constant.i16Const); break;
+            case EbtUint16: returnValue.setI16Const(i16Const << constant.u16Const); break;
+            case EbtInt:    returnValue.setI16Const(i16Const << constant.iConst);   break;
+            case EbtUint:   returnValue.setI16Const(i16Const << constant.uConst);   break;
+            case EbtInt64:  returnValue.setI16Const(i16Const << constant.i64Const); break;
+            case EbtUint64: returnValue.setI16Const(i16Const << constant.u64Const); break;
+            default:       assert(false && "Default missing");
+            }
+            break;
+        case EbtUint16:
+            switch (constant.type) {
+            case EbtInt8:   returnValue.setU16Const(u16Const << constant.i8Const);  break;
+            case EbtUint8:  returnValue.setU16Const(u16Const << constant.u8Const);  break;
+            case EbtInt16:  returnValue.setU16Const(u16Const << constant.i16Const); break;
+            case EbtUint16: returnValue.setU16Const(u16Const << constant.u16Const); break;
+            case EbtInt:    returnValue.setU16Const(u16Const << constant.iConst);   break;
+            case EbtUint:   returnValue.setU16Const(u16Const << constant.uConst);   break;
+            case EbtInt64:  returnValue.setU16Const(u16Const << constant.i64Const); break;
+            case EbtUint64: returnValue.setU16Const(u16Const << constant.u64Const); break;
+            default:       assert(false && "Default missing");
+            }
+            break;
         case EbtInt:
             switch (constant.type) {
+            case EbtInt8:   returnValue.setIConst(iConst << constant.i8Const);  break;
+            case EbtUint8:  returnValue.setIConst(iConst << constant.u8Const);  break;
+            case EbtInt16:  returnValue.setIConst(iConst << constant.i16Const); break;
+            case EbtUint16: returnValue.setIConst(iConst << constant.u16Const); break;
             case EbtInt:    returnValue.setIConst(iConst << constant.iConst);   break;
             case EbtUint:   returnValue.setIConst(iConst << constant.uConst);   break;
             case EbtInt64:  returnValue.setIConst(iConst << constant.i64Const); break;
@@ -415,6 +699,10 @@
             break;
         case EbtUint:
             switch (constant.type) {
+            case EbtInt8:   returnValue.setUConst(uConst << constant.i8Const);  break;
+            case EbtUint8:  returnValue.setUConst(uConst << constant.u8Const);  break;
+            case EbtInt16:  returnValue.setUConst(uConst << constant.i16Const); break;
+            case EbtUint16: returnValue.setUConst(uConst << constant.u16Const); break;
             case EbtInt:    returnValue.setUConst(uConst << constant.iConst);   break;
             case EbtUint:   returnValue.setUConst(uConst << constant.uConst);   break;
             case EbtInt64:  returnValue.setUConst(uConst << constant.i64Const); break;
@@ -422,8 +710,12 @@
             default:       assert(false && "Default missing");
             }
             break;
-        case EbtInt64:
+         case EbtInt64:
             switch (constant.type) {
+            case EbtInt8:   returnValue.setI64Const(i64Const << constant.i8Const);  break;
+            case EbtUint8:  returnValue.setI64Const(i64Const << constant.u8Const);  break;
+            case EbtInt16:  returnValue.setI64Const(i64Const << constant.i16Const); break;
+            case EbtUint16: returnValue.setI64Const(i64Const << constant.u16Const); break;
             case EbtInt:    returnValue.setI64Const(i64Const << constant.iConst);   break;
             case EbtUint:   returnValue.setI64Const(i64Const << constant.uConst);   break;
             case EbtInt64:  returnValue.setI64Const(i64Const << constant.i64Const); break;
@@ -433,6 +725,10 @@
             break;
         case EbtUint64:
             switch (constant.type) {
+            case EbtInt8:   returnValue.setU64Const(u64Const << constant.i8Const);  break;
+            case EbtUint8:  returnValue.setU64Const(u64Const << constant.u8Const);  break;
+            case EbtInt16:  returnValue.setU64Const(u64Const << constant.i16Const); break;
+            case EbtUint16: returnValue.setU64Const(u64Const << constant.u16Const); break;
             case EbtInt:    returnValue.setU64Const(u64Const << constant.iConst);   break;
             case EbtUint:   returnValue.setU64Const(u64Const << constant.uConst);   break;
             case EbtInt64:  returnValue.setU64Const(u64Const << constant.i64Const); break;
@@ -451,8 +747,12 @@
         TConstUnion returnValue;
         assert(type == constant.type);
         switch (type) {
-        case EbtInt:  returnValue.setIConst(iConst & constant.iConst); break;
-        case EbtUint: returnValue.setUConst(uConst & constant.uConst); break;
+        case EbtInt8:   returnValue.setI8Const(i8Const & constant.i8Const); break;
+        case EbtUint8:  returnValue.setU8Const(u8Const & constant.u8Const); break;
+        case EbtInt16:  returnValue.setI16Const(i16Const & constant.i16Const); break;
+        case EbtUint16: returnValue.setU16Const(u16Const & constant.u16Const); break;
+        case EbtInt:    returnValue.setIConst(iConst & constant.iConst); break;
+        case EbtUint:   returnValue.setUConst(uConst & constant.uConst); break;
         case EbtInt64:  returnValue.setI64Const(i64Const & constant.i64Const); break;
         case EbtUint64: returnValue.setU64Const(u64Const & constant.u64Const); break;
         default:     assert(false && "Default missing");
@@ -466,8 +766,12 @@
         TConstUnion returnValue;
         assert(type == constant.type);
         switch (type) {
-        case EbtInt:  returnValue.setIConst(iConst | constant.iConst); break;
-        case EbtUint: returnValue.setUConst(uConst | constant.uConst); break;
+        case EbtInt8:   returnValue.setI8Const(i8Const | constant.i8Const); break;
+        case EbtUint8:  returnValue.setU8Const(u8Const | constant.u8Const); break;
+        case EbtInt16:  returnValue.setI16Const(i16Const | constant.i16Const); break;
+        case EbtUint16: returnValue.setU16Const(u16Const | constant.u16Const); break;
+        case EbtInt:    returnValue.setIConst(iConst | constant.iConst); break;
+        case EbtUint:   returnValue.setUConst(uConst | constant.uConst); break;
         case EbtInt64:  returnValue.setI64Const(i64Const | constant.i64Const); break;
         case EbtUint64: returnValue.setU64Const(u64Const | constant.u64Const); break;
         default:     assert(false && "Default missing");
@@ -481,8 +785,12 @@
         TConstUnion returnValue;
         assert(type == constant.type);
         switch (type) {
-        case EbtInt:  returnValue.setIConst(iConst ^ constant.iConst); break;
-        case EbtUint: returnValue.setUConst(uConst ^ constant.uConst); break;
+        case EbtInt8:   returnValue.setI8Const(i8Const ^ constant.i8Const); break;
+        case EbtUint8:  returnValue.setU8Const(u8Const ^ constant.u8Const); break;
+        case EbtInt16:  returnValue.setI16Const(i16Const ^ constant.i16Const); break;
+        case EbtUint16: returnValue.setU16Const(u16Const ^ constant.u16Const); break;
+        case EbtInt:    returnValue.setIConst(iConst ^ constant.iConst); break;
+        case EbtUint:   returnValue.setUConst(uConst ^ constant.uConst); break;
         case EbtInt64:  returnValue.setI64Const(i64Const ^ constant.i64Const); break;
         case EbtUint64: returnValue.setU64Const(u64Const ^ constant.u64Const); break;
         default:     assert(false && "Default missing");
@@ -495,8 +803,12 @@
     {
         TConstUnion returnValue;
         switch (type) {
-        case EbtInt:  returnValue.setIConst(~iConst); break;
-        case EbtUint: returnValue.setUConst(~uConst); break;
+        case EbtInt8:   returnValue.setI8Const(~i8Const); break;
+        case EbtUint8:  returnValue.setU8Const(~u8Const); break;
+        case EbtInt16:  returnValue.setI16Const(~i16Const); break;
+        case EbtUint16: returnValue.setU16Const(~u16Const); break;
+        case EbtInt:    returnValue.setIConst(~iConst); break;
+        case EbtUint:   returnValue.setUConst(~uConst); break;
         case EbtInt64:  returnValue.setI64Const(~i64Const); break;
         case EbtUint64: returnValue.setU64Const(~u64Const); break;
         default:     assert(false && "Default missing");
@@ -533,6 +845,10 @@
 
 private:
     union  {
+        signed char        i8Const;     // used for i8vec, scalar int8s
+        unsigned char      u8Const;     // used for u8vec, scalar uint8s
+        signed short       i16Const;    // used for i16vec, scalar int16s
+        unsigned short     u16Const;    // used for u16vec, scalar uint16s
         int                iConst;      // used for ivec, scalar ints
         unsigned int       uConst;      // used for uvec, scalar uints
         long long          i64Const;    // used for i64vec, scalar int64s
@@ -595,9 +911,6 @@
         if (! unionArray || ! rhs.unionArray)
             return false;
 
-        if (! unionArray || ! rhs.unionArray)
-            return false;
-
         return *unionArray == *rhs.unionArray;
     }
     bool operator!=(const TConstUnionArray& rhs) const { return ! operator==(rhs); }
diff --git a/glslang/Include/InitializeGlobals.h b/glslang/Include/InitializeGlobals.h
index 4cf2dca..95d0a40 100644
--- a/glslang/Include/InitializeGlobals.h
+++ b/glslang/Include/InitializeGlobals.h
@@ -37,10 +37,7 @@
 
 namespace glslang {
 
-void InitializeMemoryPools();
-void FreeGlobalPools();
 bool InitializePoolIndex();
-void FreePoolIndex();
 
 } // end namespace glslang
 
diff --git a/glslang/Include/PoolAlloc.h b/glslang/Include/PoolAlloc.h
index 69bacb1..0e237a6 100644
--- a/glslang/Include/PoolAlloc.h
+++ b/glslang/Include/PoolAlloc.h
@@ -250,15 +250,8 @@
 // different times.  But a simple use is to have a global pop
 // with everyone using the same global allocator.
 //
-typedef TPoolAllocator* PoolAllocatorPointer;
 extern TPoolAllocator& GetThreadPoolAllocator();
-
-struct TThreadMemoryPools
-{
-    TPoolAllocator* threadPoolAllocator;
-};
-
-void SetThreadPoolAllocator(TPoolAllocator& poolAllocator);
+void SetThreadPoolAllocator(TPoolAllocator* poolAllocator);
 
 //
 // This STL compatible allocator is intended to be used as the allocator
diff --git a/glslang/Include/ShHandle.h b/glslang/Include/ShHandle.h
index 64ba6d6..df07bd8 100644
--- a/glslang/Include/ShHandle.h
+++ b/glslang/Include/ShHandle.h
@@ -56,11 +56,14 @@
 //
 class TShHandleBase {
 public:
-    TShHandleBase() { }
-    virtual ~TShHandleBase() { }
+    TShHandleBase() { pool = new glslang::TPoolAllocator; }
+    virtual ~TShHandleBase() { delete pool; }
     virtual TCompiler* getAsCompiler() { return 0; }
     virtual TLinker* getAsLinker() { return 0; }
     virtual TUniformMap* getAsUniformMap() { return 0; }
+    virtual glslang::TPoolAllocator* getPool() const { return pool; }
+private:
+    glslang::TPoolAllocator* pool;
 };
 
 //
diff --git a/glslang/Include/Types.h b/glslang/Include/Types.h
index b5b91f5..39d6737 100644
--- a/glslang/Include/Types.h
+++ b/glslang/Include/Types.h
@@ -2,6 +2,7 @@
 // Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
 // Copyright (C) 2012-2016 LunarG, Inc.
 // Copyright (C) 2015-2016 Google, Inc.
+// Copyright (C) 2017 ARM Limited.
 //
 // All rights reserved.
 //
@@ -204,9 +205,18 @@
         }
 
         switch (type) {
-        case EbtFloat:               break;
-        case EbtInt:  s.append("i"); break;
-        case EbtUint: s.append("u"); break;
+        case EbtFloat:                   break;
+#ifdef AMD_EXTENSIONS
+        case EbtFloat16: s.append("f16"); break;
+#endif
+        case EbtInt8:   s.append("i8");  break;
+        case EbtUint16: s.append("u8");  break;
+        case EbtInt16:  s.append("i16"); break;
+        case EbtUint8:  s.append("u16"); break;
+        case EbtInt:    s.append("i");   break;
+        case EbtUint:   s.append("u");   break;
+        case EbtInt64:  s.append("i64"); break;
+        case EbtUint64: s.append("u64"); break;
         default:  break;  // some compilers want this
         }
         if (image) {
@@ -427,6 +437,7 @@
         clearInterstage();
         clearMemory();
         specConstant = false;
+        nonUniform = false;
         clearLayout();
     }
 
@@ -460,7 +471,7 @@
     // Drop just the storage qualification, which perhaps should
     // never be done, as it is fundamentally inconsistent, but need to
     // explore what downstream consumers need.
-    // E.g., in a deference, it is an inconsistency between:
+    // E.g., in a dereference, it is an inconsistency between:
     // A) partially dereferenced resource is still in the storage class it started in
     // B) partially dereferenced resource is a new temporary object
     // If A, then nothing should change, if B, then everything should change, but this is half way.
@@ -468,6 +479,7 @@
     {
         storage      = EvqTemporary;
         specConstant = false;
+        nonUniform   = false;
     }
 
     const char*         semanticName;
@@ -492,6 +504,7 @@
     bool readonly     : 1;
     bool writeonly    : 1;
     bool specConstant : 1;  // having a constant_id is not sufficient: expressions have no id, but are still specConstant
+    bool nonUniform   : 1;
 
     bool isMemory() const
     {
@@ -505,6 +518,12 @@
         return flat || smooth || nopersp;
 #endif
     }
+#ifdef AMD_EXTENSIONS
+    bool isExplicitInterpolation() const
+    {
+        return explicitInterp;
+    }
+#endif
     bool isAuxiliary() const
     {
         return centroid || patch || sample;
@@ -650,15 +669,19 @@
         layoutXfbOffset = layoutXfbOffsetEnd;
     }
 
-    bool hasLayout() const
+    bool hasNonXfbLayout() const
     {
         return hasUniformLayout() ||
                hasAnyLocation() ||
                hasStream() ||
-               hasXfb() ||
                hasFormat() ||
                layoutPushConstant;
     }
+    bool hasLayout() const
+    {
+        return hasNonXfbLayout() ||
+               hasXfb();
+    }
     TLayoutMatrix  layoutMatrix  : 3;
     TLayoutPacking layoutPacking : 4;
     int layoutOffset;
@@ -813,6 +836,10 @@
         // true front-end constant.
         return specConstant;
     }
+    bool isNonUniform() const
+    {
+        return nonUniform;
+    }
     bool isFrontEndConstant() const
     {
         // True if the front-end knows the final constant value.
@@ -1152,6 +1179,7 @@
                                 sampler.clear();
                                 qualifier.clear();
                                 qualifier.storage = q;
+                                assert(!(isMatrix() && vectorSize != 0));  // prevent vectorSize != 0 on matrices
                             }
     // for explicit precision qualifier
     TType(TBasicType t, TStorageQualifier q, TPrecisionQualifier p, int vs = 1, int mc = 0, int mr = 0,
@@ -1164,6 +1192,7 @@
                                 qualifier.storage = q;
                                 qualifier.precision = p;
                                 assert(p >= EpqNone && p <= EpqHigh);
+                                assert(!(isMatrix() && vectorSize != 0));  // prevent vectorSize != 0 on matrices
                             }
     // for turning a TPublicType into a TType, using a shallow copy
     explicit TType(const TPublicType& p) :
@@ -1293,31 +1322,9 @@
 
     void makeVector() { vector1 = true; }
 
-    // Merge type from parent, where a parentType is at the beginning of a declaration,
-    // establishing some characteristics for all subsequent names, while this type
-    // is on the individual names.
-    void mergeType(const TPublicType& parentType)
-    {
-        // arrayness is currently the only child aspect that has to be preserved
-        basicType = parentType.basicType;
-        vectorSize = parentType.vectorSize;
-        matrixCols = parentType.matrixCols;
-        matrixRows = parentType.matrixRows;
-        vector1 = false;                      // TPublicType is only GLSL which so far has no vec1
-        qualifier = parentType.qualifier;
-        sampler = parentType.sampler;
-        if (parentType.arraySizes)
-            newArraySizes(*parentType.arraySizes);
-        if (parentType.userDef) {
-            structure = parentType.userDef->getWritableStruct();
-            setTypeName(parentType.userDef->getTypeName());
-        }
-    }
-
     virtual void hideMember() { basicType = EbtVoid; vectorSize = 1; }
     virtual bool hiddenMember() const { return basicType == EbtVoid; }
 
-    virtual void setTypeName(const TString& n) { typeName = NewPoolTString(n.c_str()); }
     virtual void setFieldName(const TString& n) { fieldName = NewPoolTString(n.c_str()); }
     virtual const TString& getTypeName() const
     {
@@ -1347,33 +1354,31 @@
     virtual bool isArrayOfArrays() const { return arraySizes != nullptr && arraySizes->getNumDims() > 1; }
     virtual int getImplicitArraySize() const { return arraySizes->getImplicitSize(); }
     virtual const TArraySizes* getArraySizes() const { return arraySizes; }
-    virtual       TArraySizes& getArraySizes()       { assert(arraySizes != nullptr); return *arraySizes; }
+    virtual       TArraySizes* getArraySizes()       { return arraySizes; }
 
     virtual bool isScalar() const { return ! isVector() && ! isMatrix() && ! isStruct() && ! isArray(); }
     virtual bool isScalarOrVec1() const { return isScalar() || vector1; }
     virtual bool isVector() const { return vectorSize > 1 || vector1; }
     virtual bool isMatrix() const { return matrixCols ? true : false; }
     virtual bool isArray()  const { return arraySizes != nullptr; }
-    virtual bool isExplicitlySizedArray() const { return isArray() && getOuterArraySize() != UnsizedArraySize; }
-    virtual bool isImplicitlySizedArray() const { return isArray() && getOuterArraySize() == UnsizedArraySize && qualifier.storage != EvqBuffer; }
-    virtual bool isRuntimeSizedArray()    const { return isArray() && getOuterArraySize() == UnsizedArraySize && qualifier.storage == EvqBuffer; }
+    virtual bool isSizedArray() const { return isArray() && arraySizes->isSized(); }
+    virtual bool isUnsizedArray() const { return isArray() && !arraySizes->isSized(); }
+    virtual bool isArrayVariablyIndexed() const { assert(isArray()); return arraySizes->isVariablyIndexed(); }
+    virtual void setArrayVariablyIndexed() { assert(isArray()); arraySizes->setVariablyIndexed(); }
+    virtual void updateImplicitArraySize(int size) { assert(isArray()); arraySizes->updateImplicitSize(size); }
     virtual bool isStruct() const { return structure != nullptr; }
-#ifdef AMD_EXTENSIONS
     virtual bool isFloatingDomain() const { return basicType == EbtFloat || basicType == EbtDouble || basicType == EbtFloat16; }
-#else
-    virtual bool isFloatingDomain() const { return basicType == EbtFloat || basicType == EbtDouble; }
-#endif
     virtual bool isIntegerDomain() const
     {
         switch (basicType) {
+        case EbtInt8:
+        case EbtUint8:
+        case EbtInt16:
+        case EbtUint16:
         case EbtInt:
         case EbtUint:
         case EbtInt64:
         case EbtUint64:
-#ifdef AMD_EXTENSIONS
-        case EbtInt16:
-        case EbtUint16:
-#endif
         case EbtAtomicUint:
             return true;
         default:
@@ -1385,11 +1390,12 @@
     virtual bool isBuiltIn() const { return getQualifier().builtIn != EbvNone; }
 
     // "Image" is a superset of "Subpass"
-    virtual bool isImage() const   { return basicType == EbtSampler && getSampler().isImage(); }
+    virtual bool isImage()   const { return basicType == EbtSampler && getSampler().isImage(); }
     virtual bool isSubpass() const { return basicType == EbtSampler && getSampler().isSubpass(); }
+    virtual bool isTexture() const { return basicType == EbtSampler && getSampler().isTexture(); }
 
     // return true if this type contains any subtype which satisfies the given predicate.
-    template <typename P> 
+    template <typename P>
     bool contains(P predicate) const
     {
         if (predicate(this))
@@ -1418,10 +1424,10 @@
         return contains([this](const TType* t) { return t != this && t->isStruct(); } );
     }
 
-    // Recursively check the structure for any implicitly-sized arrays, needed for triggering a copyUp().
-    virtual bool containsImplicitlySizedArray() const
+    // Recursively check the structure for any unsized arrays, needed for triggering a copyUp().
+    virtual bool containsUnsizedArray() const
     {
-        return contains([](const TType* t) { return t->isImplicitlySizedArray(); } );
+        return contains([](const TType* t) { return t->isUnsizedArray(); } );
     }
 
     virtual bool containsOpaque() const
@@ -1442,17 +1448,15 @@
             case EbtVoid:
             case EbtFloat:
             case EbtDouble:
-#ifdef AMD_EXTENSIONS
             case EbtFloat16:
-#endif
+            case EbtInt8:
+            case EbtUint8:
+            case EbtInt16:
+            case EbtUint16:
             case EbtInt:
             case EbtUint:
             case EbtInt64:
             case EbtUint64:
-#ifdef AMD_EXTENSIONS
-            case EbtInt16:
-            case EbtUint16:
-#endif
             case EbtBool:
                 return true;
             default:
@@ -1487,34 +1491,51 @@
         assert(type.arraySizes != nullptr);
         *arraySizes = *type.arraySizes;
     }
-    void newArraySizes(const TArraySizes& s)
+    void copyArraySizes(const TArraySizes& s)
     {
         // For setting a fresh new set of array sizes, not yet worrying about sharing.
         arraySizes = new TArraySizes;
         *arraySizes = s;
     }
+    void transferArraySizes(TArraySizes* s)
+    {
+        // For setting an already allocated set of sizes that this type can use
+        // (no copy made).
+        arraySizes = s;
+    }
     void clearArraySizes()
     {
-        arraySizes = 0;
+        arraySizes = nullptr;
     }
-    void addArrayOuterSizes(const TArraySizes& s)
+
+    // Add inner array sizes, to any existing sizes, via copy; the
+    // sizes passed in can still be reused for other purposes.
+    void copyArrayInnerSizes(const TArraySizes* s)
     {
-        if (arraySizes == nullptr)
-            newArraySizes(s);
-        else
-            arraySizes->addOuterSizes(s);
+        if (s != nullptr) {
+            if (arraySizes == nullptr)
+                copyArraySizes(*s);
+            else
+                arraySizes->addInnerSizes(*s);
+        }
     }
     void changeOuterArraySize(int s) { arraySizes->changeOuterSize(s); }
-    void setImplicitArraySize(int s) { arraySizes->setImplicitSize(s); }
 
-    // Recursively make the implicit array size the explicit array size, through the type tree.
-    void adoptImplicitArraySizes()
+    // Recursively make the implicit array size the explicit array size.
+    // Expicit arrays are compile-time or link-time sized, never run-time sized.
+    // Sometimes, policy calls for an array to be run-time sized even if it was
+    // never variably indexed: Don't turn a 'skipNonvariablyIndexed' array into
+    // an explicit array.
+    void adoptImplicitArraySizes(bool skipNonvariablyIndexed)
     {
-        if (isImplicitlySizedArray())
+        if (isUnsizedArray() && !(skipNonvariablyIndexed || isArrayVariablyIndexed()))
             changeOuterArraySize(getImplicitArraySize());
-        if (isStruct()) {
-            for (int i = 0; i < (int)structure->size(); ++i)
-                (*structure)[i].type->adoptImplicitArraySizes();
+        if (isStruct() && structure->size() > 0) {
+            int lastMember = (int)structure->size() - 1;
+            for (int i = 0; i < lastMember; ++i)
+                (*structure)[i].type->adoptImplicitArraySizes(false);
+            // implement the "last member of an SSBO" policy
+            (*structure)[lastMember].type->adoptImplicitArraySizes(getQualifier().storage == EvqBuffer);
         }
     }
 
@@ -1529,17 +1550,15 @@
         case EbtVoid:              return "void";
         case EbtFloat:             return "float";
         case EbtDouble:            return "double";
-#ifdef AMD_EXTENSIONS
         case EbtFloat16:           return "float16_t";
-#endif
+        case EbtInt8:              return "int8_t";
+        case EbtUint8:             return "uint8_t";
+        case EbtInt16:             return "int16_t";
+        case EbtUint16:            return "uint16_t";
         case EbtInt:               return "int";
         case EbtUint:              return "uint";
         case EbtInt64:             return "int64_t";
         case EbtUint64:            return "uint64_t";
-#ifdef AMD_EXTENSIONS
-        case EbtInt16:             return "int16_t";
-        case EbtUint16:            return "uint16_t";
-#endif
         case EbtBool:              return "bool";
         case EbtAtomicUint:        return "atomic_uint";
         case EbtSampler:           return "sampler/image";
@@ -1678,16 +1697,26 @@
             appendStr(" writeonly");
         if (qualifier.specConstant)
             appendStr(" specialization-constant");
+        if (qualifier.nonUniform)
+            appendStr(" nonuniform");
         appendStr(" ");
         appendStr(getStorageQualifierString());
         if (isArray()) {
             for(int i = 0; i < (int)arraySizes->getNumDims(); ++i) {
                 int size = arraySizes->getDimSize(i);
-                if (size == 0)
-                    appendStr(" implicitly-sized array of");
+                if (size == UnsizedArraySize && i == 0 && arraySizes->isVariablyIndexed())
+                    appendStr(" runtime-sized array of");
                 else {
-                    appendStr(" ");
-                    appendInt(arraySizes->getDimSize(i));
+                    if (size == UnsizedArraySize) {
+                        appendStr(" unsized");
+                        if (i == 0) {
+                            appendStr(" ");
+                            appendInt(arraySizes->getImplicitSize());
+                        }
+                    } else {
+                        appendStr(" ");
+                        appendInt(arraySizes->getDimSize(i));
+                    }
                     appendStr("-element array of");
                 }
             }
diff --git a/glslang/Include/arrays.h b/glslang/Include/arrays.h
index bc21c6c..af8f560 100644
--- a/glslang/Include/arrays.h
+++ b/glslang/Include/arrays.h
@@ -41,6 +41,8 @@
 #ifndef _ARRAYS_INCLUDED
 #define _ARRAYS_INCLUDED
 
+#include <algorithm>
+
 namespace glslang {
 
 // This is used to mean there is no size yet (unsized), it is waiting to get a size from somewhere else.
@@ -130,10 +132,10 @@
         sizes->push_back(pair);
     }
 
-    void push_front(const TSmallArrayVector& newDims)
+    void push_back(const TSmallArrayVector& newDims)
     {
         alloc();
-        sizes->insert(sizes->begin(), newDims.sizes->begin(), newDims.sizes->end());
+        sizes->insert(sizes->end(), newDims.sizes->begin(), newDims.sizes->end());
     }
 
     void pop_front()
@@ -220,12 +222,13 @@
 struct TArraySizes {
     POOL_ALLOCATOR_NEW_DELETE(GetThreadPoolAllocator())
 
-    TArraySizes() : implicitArraySize(1) { }
+    TArraySizes() : implicitArraySize(1), variablyIndexed(false) { }
 
     // For breaking into two non-shared copies, independently modifiable.
     TArraySizes& operator=(const TArraySizes& from)
     {
         implicitArraySize = from.implicitArraySize;
+        variablyIndexed = from.variablyIndexed;
         sizes = from.sizes;
 
         return *this;
@@ -252,10 +255,11 @@
     void addInnerSize(int s) { addInnerSize((unsigned)s, nullptr); }
     void addInnerSize(int s, TIntermTyped* n) { sizes.push_back((unsigned)s, n); }
     void addInnerSize(TArraySize pair) { sizes.push_back(pair.size, pair.node); }
+    void addInnerSizes(const TArraySizes& s) { sizes.push_back(s.sizes); }
     void changeOuterSize(int s) { sizes.changeFront((unsigned)s); }
-    int getImplicitSize() const { return (int)implicitArraySize; }
-    void setImplicitSize(int s) { implicitArraySize = s; }
-    bool isInnerImplicit() const
+    int getImplicitSize() const { return implicitArraySize; }
+    void updateImplicitSize(int s) { implicitArraySize = std::max(implicitArraySize, s); }
+    bool isInnerUnsized() const
     {
         for (int d = 1; d < sizes.size(); ++d) {
             if (sizes.getDimSize(d) == (unsigned)UnsizedArraySize)
@@ -264,6 +268,15 @@
 
         return false;
     }
+    bool clearInnerUnsized()
+    {
+        for (int d = 1; d < sizes.size(); ++d) {
+            if (sizes.getDimSize(d) == (unsigned)UnsizedArraySize)
+                setDimSize(d, 1);
+        }
+
+        return false;
+    }
     bool isInnerSpecialization() const
     {
         for (int d = 1; d < sizes.size(); ++d) {
@@ -278,8 +291,8 @@
         return sizes.getDimNode(0) != nullptr;
     }
 
-    bool isImplicit() const { return getOuterSize() == UnsizedArraySize || isInnerImplicit(); }
-    void addOuterSizes(const TArraySizes& s) { sizes.push_front(s.sizes); }
+    bool hasUnsized() const { return getOuterSize() == UnsizedArraySize || isInnerUnsized(); }
+    bool isSized() const { return getOuterSize() != UnsizedArraySize; }
     void dereference() { sizes.pop_front(); }
     void copyDereferenced(const TArraySizes& rhs)
     {
@@ -302,6 +315,9 @@
         return true;
     }
 
+    void setVariablyIndexed() { variablyIndexed = true; }
+    bool isVariablyIndexed() const { return variablyIndexed; }
+
     bool operator==(const TArraySizes& rhs) { return sizes == rhs.sizes; }
     bool operator!=(const TArraySizes& rhs) { return sizes != rhs.sizes; }
 
@@ -310,9 +326,12 @@
 
     TArraySizes(const TArraySizes&);
 
-    // for tracking maximum referenced index, before an explicit size is given
-    // applies only to the outer-most dimension
+    // For tracking maximum referenced compile-time constant index.
+    // Applies only to the outer-most dimension. Potentially becomes
+    // the implicit size of the array, if not variably indexed and
+    // otherwise legal.
     int implicitArraySize;
+    bool variablyIndexed;  // true if array is indexed with a non compile-time constant
 };
 
 } // end namespace glslang
diff --git a/glslang/Include/intermediate.h b/glslang/Include/intermediate.h
old mode 100644
new mode 100755
index 963419a..19eb7aa
--- a/glslang/Include/intermediate.h
+++ b/glslang/Include/intermediate.h
@@ -1,6 +1,7 @@
 //
 // Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
 // Copyright (C) 2012-2016 LunarG, Inc.
+// Copyright (C) 2017 ARM Limited.
 //
 // All rights reserved.
 //
@@ -46,7 +47,7 @@
 #ifndef __INTERMEDIATE_H
 #define __INTERMEDIATE_H
 
-#if _MSC_VER >= 1900
+#if defined(_MSC_VER) && _MSC_VER >= 1900
     #pragma warning(disable : 4464) // relative include path contains '..'
     #pragma warning(disable : 5026) // 'glslang::TIntermUnary': move constructor was implicitly defined as deleted
 #endif
@@ -84,100 +85,189 @@
     EOpPreIncrement,
     EOpPreDecrement,
 
+    // (u)int* -> bool
+    EOpConvInt8ToBool,
+    EOpConvUint8ToBool,
+    EOpConvInt16ToBool,
+    EOpConvUint16ToBool,
     EOpConvIntToBool,
     EOpConvUintToBool,
-    EOpConvFloatToBool,
-    EOpConvDoubleToBool,
     EOpConvInt64ToBool,
     EOpConvUint64ToBool,
-    EOpConvBoolToFloat,
-    EOpConvIntToFloat,
-    EOpConvUintToFloat,
-    EOpConvDoubleToFloat,
-    EOpConvInt64ToFloat,
-    EOpConvUint64ToFloat,
-    EOpConvUintToInt,
-    EOpConvFloatToInt,
-    EOpConvBoolToInt,
-    EOpConvDoubleToInt,
-    EOpConvInt64ToInt,
-    EOpConvUint64ToInt,
-    EOpConvIntToUint,
-    EOpConvFloatToUint,
-    EOpConvBoolToUint,
-    EOpConvDoubleToUint,
-    EOpConvInt64ToUint,
-    EOpConvUint64ToUint,
-    EOpConvIntToDouble,
-    EOpConvUintToDouble,
-    EOpConvFloatToDouble,
-    EOpConvBoolToDouble,
-    EOpConvInt64ToDouble,
-    EOpConvUint64ToDouble,
-    EOpConvBoolToInt64,
-    EOpConvIntToInt64,
-    EOpConvUintToInt64,
-    EOpConvFloatToInt64,
-    EOpConvDoubleToInt64,
-    EOpConvUint64ToInt64,
-    EOpConvBoolToUint64,
-    EOpConvIntToUint64,
-    EOpConvUintToUint64,
-    EOpConvFloatToUint64,
-    EOpConvDoubleToUint64,
-    EOpConvInt64ToUint64,
-#ifdef AMD_EXTENSIONS
-    EOpConvBoolToFloat16,
-    EOpConvIntToFloat16,
-    EOpConvUintToFloat16,
-    EOpConvFloatToFloat16,
-    EOpConvDoubleToFloat16,
-    EOpConvInt64ToFloat16,
-    EOpConvUint64ToFloat16,
-    EOpConvFloat16ToBool,
-    EOpConvFloat16ToInt,
-    EOpConvFloat16ToUint,
-    EOpConvFloat16ToFloat,
-    EOpConvFloat16ToDouble,
-    EOpConvFloat16ToInt64,
-    EOpConvFloat16ToUint64,
 
+    // float* -> bool
+    EOpConvFloat16ToBool,
+    EOpConvFloatToBool,
+    EOpConvDoubleToBool,
+
+    // bool -> (u)int*
+    EOpConvBoolToInt8,
+    EOpConvBoolToUint8,
     EOpConvBoolToInt16,
-    EOpConvIntToInt16,
-    EOpConvUintToInt16,
-    EOpConvFloatToInt16,
-    EOpConvDoubleToInt16,
-    EOpConvFloat16ToInt16,
-    EOpConvInt64ToInt16,
-    EOpConvUint64ToInt16,
-    EOpConvUint16ToInt16,
-    EOpConvInt16ToBool,
+    EOpConvBoolToUint16,
+    EOpConvBoolToInt,
+    EOpConvBoolToUint,
+    EOpConvBoolToInt64,
+    EOpConvBoolToUint64,
+
+    // bool -> float*
+    EOpConvBoolToFloat16,
+    EOpConvBoolToFloat,
+    EOpConvBoolToDouble,
+
+    // int8_t -> (u)int*
+    EOpConvInt8ToInt16,
+    EOpConvInt8ToInt,
+    EOpConvInt8ToInt64,
+    EOpConvInt8ToUint8,
+    EOpConvInt8ToUint16,
+    EOpConvInt8ToUint,
+    EOpConvInt8ToUint64,
+
+    // uint8_t -> (u)int*
+    EOpConvUint8ToInt8,
+    EOpConvUint8ToInt16,
+    EOpConvUint8ToInt,
+    EOpConvUint8ToInt64,
+    EOpConvUint8ToUint16,
+    EOpConvUint8ToUint,
+    EOpConvUint8ToUint64,
+
+    // int8_t -> float*
+    EOpConvInt8ToFloat16,
+    EOpConvInt8ToFloat,
+    EOpConvInt8ToDouble,
+
+    // uint8_t -> float*
+    EOpConvUint8ToFloat16,
+    EOpConvUint8ToFloat,
+    EOpConvUint8ToDouble,
+
+    // int16_t -> (u)int*
+    EOpConvInt16ToInt8,
     EOpConvInt16ToInt,
-    EOpConvInt16ToUint,
-    EOpConvInt16ToFloat,
-    EOpConvInt16ToDouble,
-    EOpConvInt16ToFloat16,
     EOpConvInt16ToInt64,
+    EOpConvInt16ToUint8,
+    EOpConvInt16ToUint16,
+    EOpConvInt16ToUint,
     EOpConvInt16ToUint64,
 
-    EOpConvBoolToUint16,
-    EOpConvIntToUint16,
-    EOpConvUintToUint16,
-    EOpConvFloatToUint16,
-    EOpConvDoubleToUint16,
-    EOpConvFloat16ToUint16,
-    EOpConvInt64ToUint16,
-    EOpConvUint64ToUint16,
-    EOpConvInt16ToUint16,
-    EOpConvUint16ToBool,
+    // uint16_t -> (u)int*
+    EOpConvUint16ToInt8,
+    EOpConvUint16ToInt16,
     EOpConvUint16ToInt,
+    EOpConvUint16ToInt64,
+    EOpConvUint16ToUint8,
     EOpConvUint16ToUint,
+    EOpConvUint16ToUint64,
+
+    // int16_t -> float*
+    EOpConvInt16ToFloat16,
+    EOpConvInt16ToFloat,
+    EOpConvInt16ToDouble,
+
+    // uint16_t -> float*
+    EOpConvUint16ToFloat16,
     EOpConvUint16ToFloat,
     EOpConvUint16ToDouble,
-    EOpConvUint16ToFloat16,
-    EOpConvUint16ToInt64,
-    EOpConvUint16ToUint64,
-#endif
+
+    // int32_t -> (u)int*
+    EOpConvIntToInt8,
+    EOpConvIntToInt16,
+    EOpConvIntToInt64,
+    EOpConvIntToUint8,
+    EOpConvIntToUint16,
+    EOpConvIntToUint,
+    EOpConvIntToUint64,
+
+    // uint32_t -> (u)int*
+    EOpConvUintToInt8,
+    EOpConvUintToInt16,
+    EOpConvUintToInt,
+    EOpConvUintToInt64,
+    EOpConvUintToUint8,
+    EOpConvUintToUint16,
+    EOpConvUintToUint64,
+
+    // int32_t -> float*
+    EOpConvIntToFloat16,
+    EOpConvIntToFloat,
+    EOpConvIntToDouble,
+
+    // uint32_t -> float*
+    EOpConvUintToFloat16,
+    EOpConvUintToFloat,
+    EOpConvUintToDouble,
+
+    // int64_t -> (u)int*
+    EOpConvInt64ToInt8,
+    EOpConvInt64ToInt16,
+    EOpConvInt64ToInt,
+    EOpConvInt64ToUint8,
+    EOpConvInt64ToUint16,
+    EOpConvInt64ToUint,
+    EOpConvInt64ToUint64,
+
+    // uint64_t -> (u)int*
+    EOpConvUint64ToInt8,
+    EOpConvUint64ToInt16,
+    EOpConvUint64ToInt,
+    EOpConvUint64ToInt64,
+    EOpConvUint64ToUint8,
+    EOpConvUint64ToUint16,
+    EOpConvUint64ToUint,
+
+    // int64_t -> float*
+    EOpConvInt64ToFloat16,
+    EOpConvInt64ToFloat,
+    EOpConvInt64ToDouble,
+
+    // uint64_t -> float*
+    EOpConvUint64ToFloat16,
+    EOpConvUint64ToFloat,
+    EOpConvUint64ToDouble,
+
+    // float16_t -> (u)int*
+    EOpConvFloat16ToInt8,
+    EOpConvFloat16ToInt16,
+    EOpConvFloat16ToInt,
+    EOpConvFloat16ToInt64,
+    EOpConvFloat16ToUint8,
+    EOpConvFloat16ToUint16,
+    EOpConvFloat16ToUint,
+    EOpConvFloat16ToUint64,
+
+    // float16_t -> float*
+    EOpConvFloat16ToFloat,
+    EOpConvFloat16ToDouble,
+
+    // float -> (u)int*
+    EOpConvFloatToInt8,
+    EOpConvFloatToInt16,
+    EOpConvFloatToInt,
+    EOpConvFloatToInt64,
+    EOpConvFloatToUint8,
+    EOpConvFloatToUint16,
+    EOpConvFloatToUint,
+    EOpConvFloatToUint64,
+
+    // float -> float*
+    EOpConvFloatToFloat16,
+    EOpConvFloatToDouble,
+
+    // float64 _t-> (u)int*
+    EOpConvDoubleToInt8,
+    EOpConvDoubleToInt16,
+    EOpConvDoubleToInt,
+    EOpConvDoubleToInt64,
+    EOpConvDoubleToUint8,
+    EOpConvDoubleToUint16,
+    EOpConvDoubleToUint,
+    EOpConvDoubleToUint64,
+
+    // float64_t -> float*
+    EOpConvDoubleToFloat16,
+    EOpConvDoubleToFloat,
 
     //
     // binary operations
@@ -280,12 +370,10 @@
     EOpDoubleBitsToUint64,
     EOpInt64BitsToDouble,
     EOpUint64BitsToDouble,
-#ifdef AMD_EXTENSIONS
     EOpFloat16BitsToInt16,
     EOpFloat16BitsToUint16,
     EOpInt16BitsToFloat16,
     EOpUint16BitsToFloat16,
-#endif
     EOpPackSnorm2x16,
     EOpUnpackSnorm2x16,
     EOpPackUnorm2x16,
@@ -302,7 +390,6 @@
     EOpUnpackInt2x32,
     EOpPackUint2x32,
     EOpUnpackUint2x32,
-#ifdef AMD_EXTENSIONS
     EOpPackFloat2x16,
     EOpUnpackFloat2x16,
     EOpPackInt2x16,
@@ -313,7 +400,12 @@
     EOpUnpackInt4x16,
     EOpPackUint4x16,
     EOpUnpackUint4x16,
-#endif
+    EOpPack16,
+    EOpPack32,
+    EOpPack64,
+    EOpUnpack32,
+    EOpUnpack16,
+    EOpUnpack8,
 
     EOpLength,
     EOpDistance,
@@ -379,6 +471,90 @@
     EOpAllInvocations,
     EOpAllInvocationsEqual,
 
+    EOpSubgroupGuardStart,
+    EOpSubgroupBarrier,
+    EOpSubgroupMemoryBarrier,
+    EOpSubgroupMemoryBarrierBuffer,
+    EOpSubgroupMemoryBarrierImage,
+    EOpSubgroupMemoryBarrierShared, // compute only
+    EOpSubgroupElect,
+    EOpSubgroupAll,
+    EOpSubgroupAny,
+    EOpSubgroupAllEqual,
+    EOpSubgroupBroadcast,
+    EOpSubgroupBroadcastFirst,
+    EOpSubgroupBallot,
+    EOpSubgroupInverseBallot,
+    EOpSubgroupBallotBitExtract,
+    EOpSubgroupBallotBitCount,
+    EOpSubgroupBallotInclusiveBitCount,
+    EOpSubgroupBallotExclusiveBitCount,
+    EOpSubgroupBallotFindLSB,
+    EOpSubgroupBallotFindMSB,
+    EOpSubgroupShuffle,
+    EOpSubgroupShuffleXor,
+    EOpSubgroupShuffleUp,
+    EOpSubgroupShuffleDown,
+    EOpSubgroupAdd,
+    EOpSubgroupMul,
+    EOpSubgroupMin,
+    EOpSubgroupMax,
+    EOpSubgroupAnd,
+    EOpSubgroupOr,
+    EOpSubgroupXor,
+    EOpSubgroupInclusiveAdd,
+    EOpSubgroupInclusiveMul,
+    EOpSubgroupInclusiveMin,
+    EOpSubgroupInclusiveMax,
+    EOpSubgroupInclusiveAnd,
+    EOpSubgroupInclusiveOr,
+    EOpSubgroupInclusiveXor,
+    EOpSubgroupExclusiveAdd,
+    EOpSubgroupExclusiveMul,
+    EOpSubgroupExclusiveMin,
+    EOpSubgroupExclusiveMax,
+    EOpSubgroupExclusiveAnd,
+    EOpSubgroupExclusiveOr,
+    EOpSubgroupExclusiveXor,
+    EOpSubgroupClusteredAdd,
+    EOpSubgroupClusteredMul,
+    EOpSubgroupClusteredMin,
+    EOpSubgroupClusteredMax,
+    EOpSubgroupClusteredAnd,
+    EOpSubgroupClusteredOr,
+    EOpSubgroupClusteredXor,
+    EOpSubgroupQuadBroadcast,
+    EOpSubgroupQuadSwapHorizontal,
+    EOpSubgroupQuadSwapVertical,
+    EOpSubgroupQuadSwapDiagonal,
+
+#ifdef NV_EXTENSIONS
+    EOpSubgroupPartition,
+    EOpSubgroupPartitionedAdd,
+    EOpSubgroupPartitionedMul,
+    EOpSubgroupPartitionedMin,
+    EOpSubgroupPartitionedMax,
+    EOpSubgroupPartitionedAnd,
+    EOpSubgroupPartitionedOr,
+    EOpSubgroupPartitionedXor,
+    EOpSubgroupPartitionedInclusiveAdd,
+    EOpSubgroupPartitionedInclusiveMul,
+    EOpSubgroupPartitionedInclusiveMin,
+    EOpSubgroupPartitionedInclusiveMax,
+    EOpSubgroupPartitionedInclusiveAnd,
+    EOpSubgroupPartitionedInclusiveOr,
+    EOpSubgroupPartitionedInclusiveXor,
+    EOpSubgroupPartitionedExclusiveAdd,
+    EOpSubgroupPartitionedExclusiveMul,
+    EOpSubgroupPartitionedExclusiveMin,
+    EOpSubgroupPartitionedExclusiveMax,
+    EOpSubgroupPartitionedExclusiveAnd,
+    EOpSubgroupPartitionedExclusiveOr,
+    EOpSubgroupPartitionedExclusiveXor,
+#endif
+
+    EOpSubgroupGuardStop,
+
 #ifdef AMD_EXTENSIONS
     EOpMinInvocations,
     EOpMaxInvocations,
@@ -451,32 +627,36 @@
     EOpConstructGuardStart,
     EOpConstructInt,          // these first scalar forms also identify what implicit conversion is needed
     EOpConstructUint,
-    EOpConstructInt64,
-    EOpConstructUint64,
-#ifdef AMD_EXTENSIONS
+    EOpConstructInt8,
+    EOpConstructUint8,
     EOpConstructInt16,
     EOpConstructUint16,
-#endif
+    EOpConstructInt64,
+    EOpConstructUint64,
     EOpConstructBool,
     EOpConstructFloat,
     EOpConstructDouble,
-#ifdef AMD_EXTENSIONS
-    EOpConstructFloat16,
-#endif
     EOpConstructVec2,
     EOpConstructVec3,
     EOpConstructVec4,
     EOpConstructDVec2,
     EOpConstructDVec3,
     EOpConstructDVec4,
-#ifdef AMD_EXTENSIONS
-    EOpConstructF16Vec2,
-    EOpConstructF16Vec3,
-    EOpConstructF16Vec4,
-#endif
     EOpConstructBVec2,
     EOpConstructBVec3,
     EOpConstructBVec4,
+    EOpConstructI8Vec2,
+    EOpConstructI8Vec3,
+    EOpConstructI8Vec4,
+    EOpConstructU8Vec2,
+    EOpConstructU8Vec3,
+    EOpConstructU8Vec4,
+    EOpConstructI16Vec2,
+    EOpConstructI16Vec3,
+    EOpConstructI16Vec4,
+    EOpConstructU16Vec2,
+    EOpConstructU16Vec3,
+    EOpConstructU16Vec4,
     EOpConstructIVec2,
     EOpConstructIVec3,
     EOpConstructIVec4,
@@ -489,14 +669,6 @@
     EOpConstructU64Vec2,
     EOpConstructU64Vec3,
     EOpConstructU64Vec4,
-#ifdef AMD_EXTENSIONS
-    EOpConstructI16Vec2,
-    EOpConstructI16Vec3,
-    EOpConstructI16Vec4,
-    EOpConstructU16Vec2,
-    EOpConstructU16Vec3,
-    EOpConstructU16Vec4,
-#endif
     EOpConstructMat2x2,
     EOpConstructMat2x3,
     EOpConstructMat2x4,
@@ -542,7 +714,10 @@
     EOpConstructBMat4x2,
     EOpConstructBMat4x3,
     EOpConstructBMat4x4,
-#ifdef AMD_EXTENSIONS
+    EOpConstructFloat16,
+    EOpConstructF16Vec2,
+    EOpConstructF16Vec3,
+    EOpConstructF16Vec4,
     EOpConstructF16Mat2x2,
     EOpConstructF16Mat2x3,
     EOpConstructF16Mat2x4,
@@ -552,9 +727,9 @@
     EOpConstructF16Mat4x2,
     EOpConstructF16Mat4x3,
     EOpConstructF16Mat4x4,
-#endif
     EOpConstructStruct,
     EOpConstructTextureSampler,
+    EOpConstructNonuniform,     // expected to be transformed away, not present in final AST
     EOpConstructGuardEnd,
 
     //
@@ -581,7 +756,11 @@
     // Array operators
     //
 
-    EOpArrayLength,      // "Array" distinguishes from length(v) built-in function, but it applies to vectors and matrices as well.
+    // Can apply to arrays, vectors, or matrices.
+    // Can be decomposed to a constant at compile time, but this does not always happen,
+    // due to link-time effects. So, consumer can expect either a link-time sized or
+    // run-time sized array.
+    EOpArrayLength,
 
     //
     // Image operations
@@ -722,7 +901,8 @@
     EOpInterlockedOr,       // ...
     EOpInterlockedXor,      // ...
     EOpAllMemoryBarrierWithGroupSync,    // memory barriers without non-hlsl AST equivalents
-    EOpGroupMemoryBarrierWithGroupSync,  // ...
+    EOpDeviceMemoryBarrier,              // ...
+    EOpDeviceMemoryBarrierWithGroupSync, // ...
     EOpWorkgroupMemoryBarrier,           // ...
     EOpWorkgroupMemoryBarrierWithGroupSync, // ...
     EOpEvaluateAttributeSnapped,         // InterpolateAtOffset with int position on 16x16 grid
@@ -776,6 +956,12 @@
 
     // matrix
     EOpMatrixSwizzle,                    // select multiple matrix components (non-column)
+
+    // SM6 wave ops
+    EOpWaveGetLaneCount,                 // Will decompose to gl_SubgroupSize.
+    EOpWaveGetLaneIndex,                 // Will decompose to gl_SubgroupInvocationID.
+    EOpWaveActiveCountBits,              // Will decompose to subgroupBallotBitCount(subgroupBallot()).
+    EOpWavePrefixCountBits,              // Will decompose to subgroupBallotInclusiveBitCount(subgroupBallot()).
 };
 
 class TIntermTraverser;
@@ -818,7 +1004,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       glslang::TIntermLoop*          getAsLoopNode()            { return 0; }
 
     virtual const glslang::TIntermTyped*         getAsTyped()         const { return 0; }
     virtual const glslang::TIntermOperator*      getAsOperator()      const { return 0; }
@@ -831,7 +1017,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 const glslang::TIntermLoop*          getAsLoopNode()      const { return 0; }
     virtual ~TIntermNode() { }
 
 protected:
@@ -885,24 +1071,6 @@
 };
 
 //
-// Selection control hints
-//
-enum TSelectionControl {
-    ESelectionControlNone,
-    ESelectionControlFlatten,
-    ESelectionControlDontFlatten,
-};
-
-//
-// Loop control hints
-//
-enum TLoopControl {
-    ELoopControlNone,
-    ELoopControlUnroll,
-    ELoopControlDontUnroll,
-};
-
-//
 // Handle for, do-while, and while loops.
 //
 class TIntermLoop : public TIntermNode {
@@ -912,26 +1080,36 @@
         test(aTest),
         terminal(aTerminal),
         first(testFirst),
-        control(ELoopControlNone)
+        unroll(false),
+        dontUnroll(false),
+        dependency(0)
     { }
 
-	virtual       TIntermLoop* getAsLoopNode() { return this; }
-	virtual const TIntermLoop* getAsLoopNode() const { return this; }
+    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; }
     TIntermTyped* getTerminal() const { return terminal; }
     bool testFirst() const { return first; }
 
-    void setLoopControl(TLoopControl c) { control = c; }
-    TLoopControl getLoopControl() const { return control; }
+    void setUnroll()     { unroll = true; }
+    void setDontUnroll() { dontUnroll = true; }
+    bool getUnroll()     const { return unroll; }
+    bool getDontUnroll() const { return dontUnroll; }
+
+    static const unsigned int dependencyInfinite = 0xFFFFFFFF;
+    void setLoopDependency(int d) { dependency = d; }
+    int getLoopDependency() const { return dependency; }
 
 protected:
     TIntermNode* body;       // code to loop over
     TIntermTyped* test;      // exit condition associated with loop, could be 0 for 'for' loops
     TIntermTyped* terminal;  // exists for for-loops
     bool first;              // true for while and for, not for do-while
-    TLoopControl control;    // loop control hint
+    bool unroll;             // true if unroll requested
+    bool dontUnroll;         // true if request to not unroll
+    unsigned int dependency; // loop dependency hint; 0 means not set or unknown
 };
 
 //
@@ -1303,8 +1481,8 @@
 //
 class TIntermAggregate : public TIntermOperator {
 public:
-    TIntermAggregate() : TIntermOperator(EOpNull), userDefined(false), pragmaTable(0) { }
-    TIntermAggregate(TOperator o) : TIntermOperator(o), pragmaTable(0) { }
+    TIntermAggregate() : TIntermOperator(EOpNull), userDefined(false), pragmaTable(nullptr) { }
+    TIntermAggregate(TOperator o) : TIntermOperator(o), pragmaTable(nullptr) { }
     ~TIntermAggregate() { delete pragmaTable; }
     virtual       TIntermAggregate* getAsAggregate()       { return this; }
     virtual const TIntermAggregate* getAsAggregate() const { return this; }
@@ -1322,7 +1500,7 @@
     void setDebug(bool d) { debug = d; }
     bool getOptimize() const { return optimize; }
     bool getDebug() const { return debug; }
-    void addToPragmaTable(const TPragmaTable& pTable);
+    void setPragmaTable(const TPragmaTable& pTable);
     const TPragmaTable& getPragmaTable() const { return *pragmaTable; }
 protected:
     TIntermAggregate(const TIntermAggregate&); // disallow copy constructor
@@ -1342,22 +1520,35 @@
 class TIntermSelection : public TIntermTyped {
 public:
     TIntermSelection(TIntermTyped* cond, TIntermNode* trueB, TIntermNode* falseB) :
-        TIntermTyped(EbtVoid), condition(cond), trueBlock(trueB), falseBlock(falseB), control(ESelectionControlNone) {}
+        TIntermTyped(EbtVoid), condition(cond), trueBlock(trueB), falseBlock(falseB),
+        shortCircuit(true),
+        flatten(false), dontFlatten(false) {}
     TIntermSelection(TIntermTyped* cond, TIntermNode* trueB, TIntermNode* falseB, const TType& type) :
-        TIntermTyped(type), condition(cond), trueBlock(trueB), falseBlock(falseB), control(ESelectionControlNone) {}
+        TIntermTyped(type), condition(cond), trueBlock(trueB), falseBlock(falseB),
+        shortCircuit(true),
+        flatten(false), dontFlatten(false) {}
     virtual void traverse(TIntermTraverser*);
     virtual TIntermTyped* getCondition() const { return condition; }
     virtual TIntermNode* getTrueBlock() const { return trueBlock; }
     virtual TIntermNode* getFalseBlock() const { return falseBlock; }
     virtual       TIntermSelection* getAsSelectionNode()       { return this; }
     virtual const TIntermSelection* getAsSelectionNode() const { return this; }
-    void setSelectionControl(TSelectionControl c) { control = c; }
-    TSelectionControl getSelectionControl() const { return control; }
+
+    void setNoShortCircuit() { shortCircuit = false; }
+    bool getShortCircuit() const { return shortCircuit; }
+
+    void setFlatten()     { flatten = true; }
+    void setDontFlatten() { dontFlatten = true; }
+    bool getFlatten()     const { return flatten; }
+    bool getDontFlatten() const { return dontFlatten; }
+
 protected:
     TIntermTyped* condition;
     TIntermNode* trueBlock;
     TIntermNode* falseBlock;
-    TSelectionControl control;    // selection control hint
+    bool shortCircuit; // normally all if-then-else and all GLSL ?: short-circuit, but HLSL ?: does not
+    bool flatten;      // true if flatten requested
+    bool dontFlatten;  // true if requested to not flatten
 };
 
 //
@@ -1368,18 +1559,24 @@
 //
 class TIntermSwitch : public TIntermNode {
 public:
-    TIntermSwitch(TIntermTyped* cond, TIntermAggregate* b) : condition(cond), body(b), control(ESelectionControlNone) { }
+    TIntermSwitch(TIntermTyped* cond, TIntermAggregate* b) : condition(cond), body(b),
+        flatten(false), dontFlatten(false) {}
     virtual void traverse(TIntermTraverser*);
     virtual TIntermNode* getCondition() const { return condition; }
     virtual TIntermAggregate* getBody() const { return body; }
     virtual       TIntermSwitch* getAsSwitchNode()       { return this; }
     virtual const TIntermSwitch* getAsSwitchNode() const { return this; }
-    void setSelectionControl(TSelectionControl c) { control = c; }
-    TSelectionControl getSelectionControl() const { return control; }
+
+    void setFlatten()     { flatten = true; }
+    void setDontFlatten() { dontFlatten = true; }
+    bool getFlatten()     const { return flatten; }
+    bool getDontFlatten() const { return dontFlatten; }
+
 protected:
     TIntermTyped* condition;
     TIntermAggregate* body;
-    TSelectionControl control;    // selection control hint
+    bool flatten;     // true if flatten requested
+    bool dontFlatten; // true if requested to not flatten
 };
 
 enum TVisit
diff --git a/glslang/Include/revision.h b/glslang/Include/revision.h
index 218f8b6..3479993 100644
--- a/glslang/Include/revision.h
+++ b/glslang/Include/revision.h
@@ -1,6 +1,3 @@
 // This header is generated by the make-revision script.
-// For the version, it uses the latest git tag followed by the number of commits.
-// For the date, it uses the current date (when then script is run).
 
-#define GLSLANG_REVISION "Overload400-PrecQual.2000"
-#define GLSLANG_DATE "12-Apr-2017"
+#define GLSLANG_PATCH_LEVEL 2705
diff --git a/glslang/MachineIndependent/Constant.cpp b/glslang/MachineIndependent/Constant.cpp
index 625b8e9..142492d 100644
--- a/glslang/MachineIndependent/Constant.cpp
+++ b/glslang/MachineIndependent/Constant.cpp
@@ -1,6 +1,7 @@
 //
 // Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
 // Copyright (C) 2012-2013 LunarG, Inc.
+// Copyright (C) 2017 ARM Limited.
 //
 // All rights reserved.
 //
@@ -38,6 +39,7 @@
 #include <cmath>
 #include <cfloat>
 #include <cstdlib>
+#include <climits>
 
 namespace {
 
@@ -176,11 +178,40 @@
             switch (getType().getBasicType()) {
             case EbtDouble:
             case EbtFloat:
-#ifdef AMD_EXTENSIONS
             case EbtFloat16:
-#endif
                 newConstArray[i].setDConst(leftUnionArray[i].getDConst() / rightUnionArray[i].getDConst());
                 break;
+            case EbtInt8:
+                if (rightUnionArray[i] == 0)
+                    newConstArray[i].setI8Const(0x7F);
+                else if (rightUnionArray[i].getI8Const() == -1 && leftUnionArray[i].getI8Const() == (signed char)0x80)
+                    newConstArray[i].setI8Const((signed char)0x80);
+                else
+                    newConstArray[i].setI8Const(leftUnionArray[i].getI8Const() / rightUnionArray[i].getI8Const());
+                break;
+
+            case EbtUint8:
+                if (rightUnionArray[i] == 0) {
+                    newConstArray[i].setU8Const(0xFF);
+                } else
+                    newConstArray[i].setU8Const(leftUnionArray[i].getU8Const() / rightUnionArray[i].getU8Const());
+                break;
+
+           case EbtInt16:
+                if (rightUnionArray[i] == 0)
+                    newConstArray[i].setI16Const(0x7FFF);
+                else if (rightUnionArray[i].getI16Const() == -1 && leftUnionArray[i].getI16Const() == (signed short)0x8000)
+                    newConstArray[i].setI16Const(short(0x8000));
+                else
+                    newConstArray[i].setI16Const(leftUnionArray[i].getI16Const() / rightUnionArray[i].getI16Const());
+                break;
+
+            case EbtUint16:
+                if (rightUnionArray[i] == 0) {
+                    newConstArray[i].setU16Const(0xFFFF);
+                } else
+                    newConstArray[i].setU16Const(leftUnionArray[i].getU16Const() / rightUnionArray[i].getU16Const());
+                break;
 
             case EbtInt:
                 if (rightUnionArray[i] == 0)
@@ -213,23 +244,6 @@
                 } else
                     newConstArray[i].setU64Const(leftUnionArray[i].getU64Const() / rightUnionArray[i].getU64Const());
                 break;
-#ifdef AMD_EXTENSIONS
-            case EbtInt16:
-                if (rightUnionArray[i] == 0)
-                    newConstArray[i].setIConst(0x7FFF);
-                else if (rightUnionArray[i].getIConst() == -1 && leftUnionArray[i].getIConst() == (int)0x8000)
-                    newConstArray[i].setIConst(0x8000);
-                else
-                    newConstArray[i].setIConst(leftUnionArray[i].getIConst() / rightUnionArray[i].getIConst());
-                break;
-
-            case EbtUint16:
-                if (rightUnionArray[i] == 0) {
-                    newConstArray[i].setUConst(0xFFFFu);
-                } else
-                    newConstArray[i].setUConst(leftUnionArray[i].getUConst() / rightUnionArray[i].getUConst());
-                break;
-#endif
             default:
                 return 0;
             }
@@ -263,8 +277,31 @@
         for (int i = 0; i < newComps; i++) {
             if (rightUnionArray[i] == 0)
                 newConstArray[i] = leftUnionArray[i];
-            else
-                newConstArray[i] = leftUnionArray[i] % rightUnionArray[i];
+            else {
+                switch (getType().getBasicType()) {
+                case EbtInt:
+                    if (rightUnionArray[i].getIConst() == -1 && leftUnionArray[i].getIConst() == INT_MIN) {
+                        newConstArray[i].setIConst(0);
+                        break;
+                    } else goto modulo_default;
+
+                case EbtInt64:
+                    if (rightUnionArray[i].getI64Const() == -1 && leftUnionArray[i].getI64Const() == LLONG_MIN) {
+                        newConstArray[i].setI64Const(0);
+                        break;
+                    } else goto modulo_default;
+#ifdef AMD_EXTENSIONS
+                case EbtInt16:
+                    if (rightUnionArray[i].getIConst() == -1 && leftUnionArray[i].getIConst() == SHRT_MIN) {
+                        newConstArray[i].setIConst(0);
+                        break;
+                    } else goto modulo_default;
+#endif
+                default:
+                modulo_default:
+                    newConstArray[i] = leftUnionArray[i] % rightUnionArray[i];
+                }
+            }
         }
         break;
 
@@ -387,6 +424,12 @@
         resultSize = 2;
         break;
 
+    case EOpPack16:
+    case EOpPack32:
+    case EOpPack64:
+    case EOpUnpack32:
+    case EOpUnpack16:
+    case EOpUnpack8:
     case EOpNormalize:
         componentWise = false;
         resultSize = objectSize;
@@ -445,6 +488,12 @@
     case EOpPackSnorm2x16:
     case EOpPackUnorm2x16:
     case EOpPackHalf2x16:
+    case EOpPack16:
+    case EOpPack32:
+    case EOpPack64:
+    case EOpUnpack32:
+    case EOpUnpack16:
+    case EOpUnpack8:
 
     case EOpUnpackSnorm2x16:
     case EOpUnpackUnorm2x16:
@@ -470,17 +519,13 @@
         case EOpNegative:
             switch (getType().getBasicType()) {
             case EbtDouble:
-#ifdef AMD_EXTENSIONS
             case EbtFloat16:
-#endif
             case EbtFloat: newConstArray[i].setDConst(-unionArray[i].getDConst()); break;
-#ifdef AMD_EXTENSIONS
-            case EbtInt16:
-#endif
+            case EbtInt8:  newConstArray[i].setI8Const(-unionArray[i].getI8Const()); break;
+            case EbtUint8: newConstArray[i].setU8Const(static_cast<unsigned int>(-static_cast<signed int>(unionArray[i].getU8Const())));  break;
+            case EbtInt16: newConstArray[i].setI16Const(-unionArray[i].getI16Const()); break;
+            case EbtUint16:newConstArray[i].setU16Const(static_cast<unsigned int>(-static_cast<signed int>(unionArray[i].getU16Const())));  break;
             case EbtInt:   newConstArray[i].setIConst(-unionArray[i].getIConst()); break;
-#ifdef AMD_EXTENSIONS
-            case EbtUint16:
-#endif
             case EbtUint:  newConstArray[i].setUConst(static_cast<unsigned int>(-static_cast<int>(unionArray[i].getUConst())));  break;
             case EbtInt64: newConstArray[i].setI64Const(-unionArray[i].getI64Const()); break;
             case EbtUint64: newConstArray[i].setU64Const(static_cast<unsigned long long>(-static_cast<long long>(unionArray[i].getU64Const())));  break;
@@ -635,13 +680,10 @@
         case EOpDoubleBitsToUint64:
         case EOpInt64BitsToDouble:
         case EOpUint64BitsToDouble:
-#ifdef AMD_EXTENSIONS
         case EOpFloat16BitsToInt16:
         case EOpFloat16BitsToUint16:
         case EOpInt16BitsToFloat16:
         case EOpUint16BitsToFloat16:
-#endif
-
         default:
             return 0;
         }
@@ -725,20 +767,6 @@
     for (unsigned int arg = 0; arg < children.size(); ++arg)
         childConstUnions.push_back(children[arg]->getAsConstantUnion()->getConstArray());
 
-    // Second, do the actual folding
-
-    bool isFloatingPoint = children[0]->getAsTyped()->getBasicType() == EbtFloat ||
-#ifdef AMD_EXTENSIONS
-                           children[0]->getAsTyped()->getBasicType() == EbtFloat16 ||
-#endif
-                           children[0]->getAsTyped()->getBasicType() == EbtDouble;
-    bool isSigned = children[0]->getAsTyped()->getBasicType() == EbtInt ||
-#ifdef AMD_EXTENSIONS
-                    children[0]->getAsTyped()->getBasicType() == EbtInt16 ||
-#endif
-                    children[0]->getAsTyped()->getBasicType() == EbtInt64;
-    bool isInt64 = children[0]->getAsTyped()->getBasicType() == EbtInt64 ||
-                   children[0]->getAsTyped()->getBasicType() == EbtUint64;
     if (componentwise) {
         for (int comp = 0; comp < objectSize; comp++) {
 
@@ -759,53 +787,114 @@
                 newConstArray[comp].setDConst(pow(childConstUnions[0][arg0comp].getDConst(), childConstUnions[1][arg1comp].getDConst()));
                 break;
             case EOpMin:
-                if (isFloatingPoint)
+                switch(children[0]->getAsTyped()->getBasicType()) {
+                case EbtFloat16:
+                case EbtFloat:
+                case EbtDouble:
                     newConstArray[comp].setDConst(std::min(childConstUnions[0][arg0comp].getDConst(), childConstUnions[1][arg1comp].getDConst()));
-                else if (isSigned) {
-                    if (isInt64)
-                        newConstArray[comp].setI64Const(std::min(childConstUnions[0][arg0comp].getI64Const(), childConstUnions[1][arg1comp].getI64Const()));
-                    else
-                        newConstArray[comp].setIConst(std::min(childConstUnions[0][arg0comp].getIConst(), childConstUnions[1][arg1comp].getIConst()));
-                } else {
-                    if (isInt64)
-                        newConstArray[comp].setU64Const(std::min(childConstUnions[0][arg0comp].getU64Const(), childConstUnions[1][arg1comp].getU64Const()));
-                    else
-                        newConstArray[comp].setUConst(std::min(childConstUnions[0][arg0comp].getUConst(), childConstUnions[1][arg1comp].getUConst()));
+                    break;
+                case EbtInt8:
+                    newConstArray[comp].setI8Const(std::min(childConstUnions[0][arg0comp].getI8Const(), childConstUnions[1][arg1comp].getI8Const()));
+                    break;
+                case EbtUint8:
+                    newConstArray[comp].setU8Const(std::min(childConstUnions[0][arg0comp].getU8Const(), childConstUnions[1][arg1comp].getU8Const()));
+                    break;
+                case EbtInt16:
+                    newConstArray[comp].setI16Const(std::min(childConstUnions[0][arg0comp].getI16Const(), childConstUnions[1][arg1comp].getI16Const()));
+                    break;
+                case EbtUint16:
+                    newConstArray[comp].setU16Const(std::min(childConstUnions[0][arg0comp].getU16Const(), childConstUnions[1][arg1comp].getU16Const()));
+                    break;
+                case EbtInt:
+                    newConstArray[comp].setIConst(std::min(childConstUnions[0][arg0comp].getIConst(), childConstUnions[1][arg1comp].getIConst()));
+                    break;
+                case EbtUint:
+                    newConstArray[comp].setUConst(std::min(childConstUnions[0][arg0comp].getUConst(), childConstUnions[1][arg1comp].getUConst()));
+                    break;
+                case EbtInt64:
+                    newConstArray[comp].setI64Const(std::min(childConstUnions[0][arg0comp].getI64Const(), childConstUnions[1][arg1comp].getI64Const()));
+                    break;
+                case EbtUint64:
+                    newConstArray[comp].setU64Const(std::min(childConstUnions[0][arg0comp].getU64Const(), childConstUnions[1][arg1comp].getU64Const()));
+                    break;
+                default: assert(false && "Default missing");
                 }
                 break;
             case EOpMax:
-                if (isFloatingPoint)
+                switch(children[0]->getAsTyped()->getBasicType()) {
+                case EbtFloat16:
+                case EbtFloat:
+                case EbtDouble:
                     newConstArray[comp].setDConst(std::max(childConstUnions[0][arg0comp].getDConst(), childConstUnions[1][arg1comp].getDConst()));
-                else if (isSigned) {
-                    if (isInt64)
-                        newConstArray[comp].setI64Const(std::max(childConstUnions[0][arg0comp].getI64Const(), childConstUnions[1][arg1comp].getI64Const()));
-                    else
-                        newConstArray[comp].setIConst(std::max(childConstUnions[0][arg0comp].getIConst(), childConstUnions[1][arg1comp].getIConst()));
-                } else {
-                    if (isInt64)
-                        newConstArray[comp].setU64Const(std::max(childConstUnions[0][arg0comp].getU64Const(), childConstUnions[1][arg1comp].getU64Const()));
-                    else
-                        newConstArray[comp].setUConst(std::max(childConstUnions[0][arg0comp].getUConst(), childConstUnions[1][arg1comp].getUConst()));
+                    break;
+                case EbtInt8:
+                    newConstArray[comp].setI8Const(std::max(childConstUnions[0][arg0comp].getI8Const(), childConstUnions[1][arg1comp].getI8Const()));
+                    break;
+                case EbtUint8:
+                    newConstArray[comp].setU8Const(std::max(childConstUnions[0][arg0comp].getU8Const(), childConstUnions[1][arg1comp].getU8Const()));
+                    break;
+                case EbtInt16:
+                    newConstArray[comp].setI16Const(std::max(childConstUnions[0][arg0comp].getI16Const(), childConstUnions[1][arg1comp].getI16Const()));
+                    break;
+                case EbtUint16:
+                    newConstArray[comp].setU16Const(std::max(childConstUnions[0][arg0comp].getU16Const(), childConstUnions[1][arg1comp].getU16Const()));
+                    break;
+                case EbtInt:
+                    newConstArray[comp].setIConst(std::max(childConstUnions[0][arg0comp].getIConst(), childConstUnions[1][arg1comp].getIConst()));
+                    break;
+                case EbtUint:
+                    newConstArray[comp].setUConst(std::max(childConstUnions[0][arg0comp].getUConst(), childConstUnions[1][arg1comp].getUConst()));
+                    break;
+                case EbtInt64:
+                    newConstArray[comp].setI64Const(std::max(childConstUnions[0][arg0comp].getI64Const(), childConstUnions[1][arg1comp].getI64Const()));
+                    break;
+                case EbtUint64:
+                    newConstArray[comp].setU64Const(std::max(childConstUnions[0][arg0comp].getU64Const(), childConstUnions[1][arg1comp].getU64Const()));
+                    break;
+                default: assert(false && "Default missing");
                 }
                 break;
             case EOpClamp:
-                if (isFloatingPoint)
+                switch(children[0]->getAsTyped()->getBasicType()) {
+                case EbtFloat16:
+                case EbtFloat:
+                case EbtDouble:
                     newConstArray[comp].setDConst(std::min(std::max(childConstUnions[0][arg0comp].getDConst(), childConstUnions[1][arg1comp].getDConst()),
                                                                                                                childConstUnions[2][arg2comp].getDConst()));
-                else if (isSigned) {
-                    if (isInt64)
-                        newConstArray[comp].setI64Const(std::min(std::max(childConstUnions[0][arg0comp].getI64Const(), childConstUnions[1][arg1comp].getI64Const()),
-                                                                                                                       childConstUnions[2][arg2comp].getI64Const()));
-                    else
-                        newConstArray[comp].setIConst(std::min(std::max(childConstUnions[0][arg0comp].getIConst(), childConstUnions[1][arg1comp].getIConst()),
+                    break;
+                case EbtInt8:
+                    newConstArray[comp].setI8Const(std::min(std::max(childConstUnions[0][arg0comp].getI8Const(), childConstUnions[1][arg1comp].getI8Const()),
+                                                                                                                   childConstUnions[2][arg2comp].getI8Const()));
+                    break;
+                case EbtUint8:
+                     newConstArray[comp].setU8Const(std::min(std::max(childConstUnions[0][arg0comp].getU8Const(), childConstUnions[1][arg1comp].getU8Const()),
+                                                                                                                   childConstUnions[2][arg2comp].getU8Const()));
+                    break;
+                case EbtInt16:
+                    newConstArray[comp].setI16Const(std::min(std::max(childConstUnions[0][arg0comp].getI16Const(), childConstUnions[1][arg1comp].getI16Const()),
+                                                                                                                   childConstUnions[2][arg2comp].getI16Const()));
+                    break;
+                case EbtUint16:
+                    newConstArray[comp].setU16Const(std::min(std::max(childConstUnions[0][arg0comp].getU16Const(), childConstUnions[1][arg1comp].getU16Const()),
+                                                                                                                   childConstUnions[2][arg2comp].getU16Const()));
+                    break;
+                case EbtInt:
+                    newConstArray[comp].setIConst(std::min(std::max(childConstUnions[0][arg0comp].getIConst(), childConstUnions[1][arg1comp].getIConst()),
                                                                                                                    childConstUnions[2][arg2comp].getIConst()));
-                } else {
-                    if (isInt64)
-                        newConstArray[comp].setU64Const(std::min(std::max(childConstUnions[0][arg0comp].getU64Const(), childConstUnions[1][arg1comp].getU64Const()),
-                                                                                                                       childConstUnions[2][arg2comp].getU64Const()));
-                    else
-                        newConstArray[comp].setUConst(std::min(std::max(childConstUnions[0][arg0comp].getUConst(), childConstUnions[1][arg1comp].getUConst()),
+                    break;
+                case EbtUint:
+                    newConstArray[comp].setUConst(std::min(std::max(childConstUnions[0][arg0comp].getUConst(), childConstUnions[1][arg1comp].getUConst()),
                                                                                                                    childConstUnions[2][arg2comp].getUConst()));
+                    break;
+                case EbtInt64:
+                    newConstArray[comp].setI64Const(std::min(std::max(childConstUnions[0][arg0comp].getI64Const(), childConstUnions[1][arg1comp].getI64Const()),
+                                                                                                                       childConstUnions[2][arg2comp].getI64Const()));
+                    break;
+                case EbtUint64:
+                    newConstArray[comp].setU64Const(std::min(std::max(childConstUnions[0][arg0comp].getU64Const(), childConstUnions[1][arg1comp].getU64Const()),
+                                                                                                                       childConstUnions[2][arg2comp].getU64Const()));
+                    break;
+                default: assert(false && "Default missing");
                 }
                 break;
             case EOpLessThan:
diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp
old mode 100644
new mode 100755
index a837efd..5ae4dbd
--- a/glslang/MachineIndependent/Initialize.cpp
+++ b/glslang/MachineIndependent/Initialize.cpp
@@ -1,7 +1,8 @@
 //
 // Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
 // Copyright (C) 2012-2016 LunarG, Inc.
-// Copyright (C) 2015-2016 Google, Inc.
+// Copyright (C) 2015-2017 Google, Inc.
+// Copyright (C) 2017 ARM Limited.
 //
 // All rights reserved.
 //
@@ -83,6 +84,13 @@
     // Set up textual representations for making all the permutations
     // of texturing/imaging functions.
     prefixes[EbtFloat] =  "";
+#ifdef AMD_EXTENSIONS
+    prefixes[EbtFloat16] = "f16";
+#endif
+    prefixes[EbtInt8]  = "i8";
+    prefixes[EbtUint8] = "u8";
+    prefixes[EbtInt16]  = "i16";
+    prefixes[EbtUint16] = "u16";
     prefixes[EbtInt]   = "i";
     prefixes[EbtUint]  = "u";
     postfixes[2] = "2";
@@ -799,7 +807,6 @@
             "bvec3 notEqual(u64vec3, u64vec3);"
             "bvec4 notEqual(u64vec4, u64vec4);"
 
-#ifdef AMD_EXTENSIONS
             "int   findLSB(int64_t);"
             "ivec2 findLSB(i64vec2);"
             "ivec3 findLSB(i64vec3);"
@@ -819,7 +826,7 @@
             "ivec2 findMSB(u64vec2);"
             "ivec3 findMSB(u64vec3);"
             "ivec4 findMSB(u64vec4);"
-#endif
+
             "\n"
         );
     }
@@ -888,6 +895,36 @@
             "f16vec3   mid3(f16vec3,   f16vec3,   f16vec3);"
             "f16vec4   mid3(f16vec4,   f16vec4,   f16vec4);"
 
+            "int16_t   min3(int16_t,   int16_t,   int16_t);"
+            "i16vec2   min3(i16vec2,   i16vec2,   i16vec2);"
+            "i16vec3   min3(i16vec3,   i16vec3,   i16vec3);"
+            "i16vec4   min3(i16vec4,   i16vec4,   i16vec4);"
+
+            "int16_t   max3(int16_t,   int16_t,   int16_t);"
+            "i16vec2   max3(i16vec2,   i16vec2,   i16vec2);"
+            "i16vec3   max3(i16vec3,   i16vec3,   i16vec3);"
+            "i16vec4   max3(i16vec4,   i16vec4,   i16vec4);"
+
+            "int16_t   mid3(int16_t,   int16_t,   int16_t);"
+            "i16vec2   mid3(i16vec2,   i16vec2,   i16vec2);"
+            "i16vec3   mid3(i16vec3,   i16vec3,   i16vec3);"
+            "i16vec4   mid3(i16vec4,   i16vec4,   i16vec4);"
+
+            "uint16_t  min3(uint16_t,  uint16_t,  uint16_t);"
+            "u16vec2   min3(u16vec2,   u16vec2,   u16vec2);"
+            "u16vec3   min3(u16vec3,   u16vec3,   u16vec3);"
+            "u16vec4   min3(u16vec4,   u16vec4,   u16vec4);"
+
+            "uint16_t  max3(uint16_t,  uint16_t,  uint16_t);"
+            "u16vec2   max3(u16vec2,   u16vec2,   u16vec2);"
+            "u16vec3   max3(u16vec3,   u16vec3,   u16vec3);"
+            "u16vec4   max3(u16vec4,   u16vec4,   u16vec4);"
+
+            "uint16_t  mid3(uint16_t,  uint16_t,  uint16_t);"
+            "u16vec2   mid3(u16vec2,   u16vec2,   u16vec2);"
+            "u16vec3   mid3(u16vec3,   u16vec3,   u16vec3);"
+            "u16vec4   mid3(u16vec4,   u16vec4,   u16vec4);"
+
             "\n"
         );
     }
@@ -1384,7 +1421,7 @@
     //
     // Noise functions.
     //
-    if (profile != EEsProfile) {
+    if (spvVersion.spv == 0 && profile != EEsProfile) {
         commonBuiltins.append(
             "float noise1(float x);"
             "float noise1(vec2  x);"
@@ -1627,6 +1664,1087 @@
             "\n");
     }
 
+    // GL_KHR_shader_subgroup
+    if (spvVersion.vulkan > 0) {
+        commonBuiltins.append(
+            "void subgroupBarrier();"
+            "void subgroupMemoryBarrier();"
+            "void subgroupMemoryBarrierBuffer();"
+            "void subgroupMemoryBarrierImage();"
+            "bool subgroupElect();"
+
+            "bool   subgroupAll(bool);\n"
+            "bool   subgroupAny(bool);\n"
+
+            "bool   subgroupAllEqual(float);\n"
+            "bool   subgroupAllEqual(vec2);\n"
+            "bool   subgroupAllEqual(vec3);\n"
+            "bool   subgroupAllEqual(vec4);\n"
+            "bool   subgroupAllEqual(int);\n"
+            "bool   subgroupAllEqual(ivec2);\n"
+            "bool   subgroupAllEqual(ivec3);\n"
+            "bool   subgroupAllEqual(ivec4);\n"
+            "bool   subgroupAllEqual(uint);\n"
+            "bool   subgroupAllEqual(uvec2);\n"
+            "bool   subgroupAllEqual(uvec3);\n"
+            "bool   subgroupAllEqual(uvec4);\n"
+            "bool   subgroupAllEqual(bool);\n"
+            "bool   subgroupAllEqual(bvec2);\n"
+            "bool   subgroupAllEqual(bvec3);\n"
+            "bool   subgroupAllEqual(bvec4);\n"
+
+            "float  subgroupBroadcast(float, uint);\n"
+            "vec2   subgroupBroadcast(vec2, uint);\n"
+            "vec3   subgroupBroadcast(vec3, uint);\n"
+            "vec4   subgroupBroadcast(vec4, uint);\n"
+            "int    subgroupBroadcast(int, uint);\n"
+            "ivec2  subgroupBroadcast(ivec2, uint);\n"
+            "ivec3  subgroupBroadcast(ivec3, uint);\n"
+            "ivec4  subgroupBroadcast(ivec4, uint);\n"
+            "uint   subgroupBroadcast(uint, uint);\n"
+            "uvec2  subgroupBroadcast(uvec2, uint);\n"
+            "uvec3  subgroupBroadcast(uvec3, uint);\n"
+            "uvec4  subgroupBroadcast(uvec4, uint);\n"
+            "bool   subgroupBroadcast(bool, uint);\n"
+            "bvec2  subgroupBroadcast(bvec2, uint);\n"
+            "bvec3  subgroupBroadcast(bvec3, uint);\n"
+            "bvec4  subgroupBroadcast(bvec4, uint);\n"
+
+            "float  subgroupBroadcastFirst(float);\n"
+            "vec2   subgroupBroadcastFirst(vec2);\n"
+            "vec3   subgroupBroadcastFirst(vec3);\n"
+            "vec4   subgroupBroadcastFirst(vec4);\n"
+            "int    subgroupBroadcastFirst(int);\n"
+            "ivec2  subgroupBroadcastFirst(ivec2);\n"
+            "ivec3  subgroupBroadcastFirst(ivec3);\n"
+            "ivec4  subgroupBroadcastFirst(ivec4);\n"
+            "uint   subgroupBroadcastFirst(uint);\n"
+            "uvec2  subgroupBroadcastFirst(uvec2);\n"
+            "uvec3  subgroupBroadcastFirst(uvec3);\n"
+            "uvec4  subgroupBroadcastFirst(uvec4);\n"
+            "bool   subgroupBroadcastFirst(bool);\n"
+            "bvec2  subgroupBroadcastFirst(bvec2);\n"
+            "bvec3  subgroupBroadcastFirst(bvec3);\n"
+            "bvec4  subgroupBroadcastFirst(bvec4);\n"
+
+            "uvec4  subgroupBallot(bool);\n"
+            "bool   subgroupInverseBallot(uvec4);\n"
+            "bool   subgroupBallotBitExtract(uvec4, uint);\n"
+            "uint   subgroupBallotBitCount(uvec4);\n"
+            "uint   subgroupBallotInclusiveBitCount(uvec4);\n"
+            "uint   subgroupBallotExclusiveBitCount(uvec4);\n"
+            "uint   subgroupBallotFindLSB(uvec4);\n"
+            "uint   subgroupBallotFindMSB(uvec4);\n"
+
+            "float  subgroupShuffle(float, uint);\n"
+            "vec2   subgroupShuffle(vec2, uint);\n"
+            "vec3   subgroupShuffle(vec3, uint);\n"
+            "vec4   subgroupShuffle(vec4, uint);\n"
+            "int    subgroupShuffle(int, uint);\n"
+            "ivec2  subgroupShuffle(ivec2, uint);\n"
+            "ivec3  subgroupShuffle(ivec3, uint);\n"
+            "ivec4  subgroupShuffle(ivec4, uint);\n"
+            "uint   subgroupShuffle(uint, uint);\n"
+            "uvec2  subgroupShuffle(uvec2, uint);\n"
+            "uvec3  subgroupShuffle(uvec3, uint);\n"
+            "uvec4  subgroupShuffle(uvec4, uint);\n"
+            "bool   subgroupShuffle(bool, uint);\n"
+            "bvec2  subgroupShuffle(bvec2, uint);\n"
+            "bvec3  subgroupShuffle(bvec3, uint);\n"
+            "bvec4  subgroupShuffle(bvec4, uint);\n"
+
+            "float  subgroupShuffleXor(float, uint);\n"
+            "vec2   subgroupShuffleXor(vec2, uint);\n"
+            "vec3   subgroupShuffleXor(vec3, uint);\n"
+            "vec4   subgroupShuffleXor(vec4, uint);\n"
+            "int    subgroupShuffleXor(int, uint);\n"
+            "ivec2  subgroupShuffleXor(ivec2, uint);\n"
+            "ivec3  subgroupShuffleXor(ivec3, uint);\n"
+            "ivec4  subgroupShuffleXor(ivec4, uint);\n"
+            "uint   subgroupShuffleXor(uint, uint);\n"
+            "uvec2  subgroupShuffleXor(uvec2, uint);\n"
+            "uvec3  subgroupShuffleXor(uvec3, uint);\n"
+            "uvec4  subgroupShuffleXor(uvec4, uint);\n"
+            "bool   subgroupShuffleXor(bool, uint);\n"
+            "bvec2  subgroupShuffleXor(bvec2, uint);\n"
+            "bvec3  subgroupShuffleXor(bvec3, uint);\n"
+            "bvec4  subgroupShuffleXor(bvec4, uint);\n"
+
+            "float  subgroupShuffleUp(float, uint delta);\n"
+            "vec2   subgroupShuffleUp(vec2, uint delta);\n"
+            "vec3   subgroupShuffleUp(vec3, uint delta);\n"
+            "vec4   subgroupShuffleUp(vec4, uint delta);\n"
+            "int    subgroupShuffleUp(int, uint delta);\n"
+            "ivec2  subgroupShuffleUp(ivec2, uint delta);\n"
+            "ivec3  subgroupShuffleUp(ivec3, uint delta);\n"
+            "ivec4  subgroupShuffleUp(ivec4, uint delta);\n"
+            "uint   subgroupShuffleUp(uint, uint delta);\n"
+            "uvec2  subgroupShuffleUp(uvec2, uint delta);\n"
+            "uvec3  subgroupShuffleUp(uvec3, uint delta);\n"
+            "uvec4  subgroupShuffleUp(uvec4, uint delta);\n"
+            "bool   subgroupShuffleUp(bool, uint delta);\n"
+            "bvec2  subgroupShuffleUp(bvec2, uint delta);\n"
+            "bvec3  subgroupShuffleUp(bvec3, uint delta);\n"
+            "bvec4  subgroupShuffleUp(bvec4, uint delta);\n"
+
+            "float  subgroupShuffleDown(float, uint delta);\n"
+            "vec2   subgroupShuffleDown(vec2, uint delta);\n"
+            "vec3   subgroupShuffleDown(vec3, uint delta);\n"
+            "vec4   subgroupShuffleDown(vec4, uint delta);\n"
+            "int    subgroupShuffleDown(int, uint delta);\n"
+            "ivec2  subgroupShuffleDown(ivec2, uint delta);\n"
+            "ivec3  subgroupShuffleDown(ivec3, uint delta);\n"
+            "ivec4  subgroupShuffleDown(ivec4, uint delta);\n"
+            "uint   subgroupShuffleDown(uint, uint delta);\n"
+            "uvec2  subgroupShuffleDown(uvec2, uint delta);\n"
+            "uvec3  subgroupShuffleDown(uvec3, uint delta);\n"
+            "uvec4  subgroupShuffleDown(uvec4, uint delta);\n"
+            "bool   subgroupShuffleDown(bool, uint delta);\n"
+            "bvec2  subgroupShuffleDown(bvec2, uint delta);\n"
+            "bvec3  subgroupShuffleDown(bvec3, uint delta);\n"
+            "bvec4  subgroupShuffleDown(bvec4, uint delta);\n"
+
+            "float  subgroupAdd(float);\n"
+            "vec2   subgroupAdd(vec2);\n"
+            "vec3   subgroupAdd(vec3);\n"
+            "vec4   subgroupAdd(vec4);\n"
+            "int    subgroupAdd(int);\n"
+            "ivec2  subgroupAdd(ivec2);\n"
+            "ivec3  subgroupAdd(ivec3);\n"
+            "ivec4  subgroupAdd(ivec4);\n"
+            "uint   subgroupAdd(uint);\n"
+            "uvec2  subgroupAdd(uvec2);\n"
+            "uvec3  subgroupAdd(uvec3);\n"
+            "uvec4  subgroupAdd(uvec4);\n"
+
+            "float  subgroupMul(float);\n"
+            "vec2   subgroupMul(vec2);\n"
+            "vec3   subgroupMul(vec3);\n"
+            "vec4   subgroupMul(vec4);\n"
+            "int    subgroupMul(int);\n"
+            "ivec2  subgroupMul(ivec2);\n"
+            "ivec3  subgroupMul(ivec3);\n"
+            "ivec4  subgroupMul(ivec4);\n"
+            "uint   subgroupMul(uint);\n"
+            "uvec2  subgroupMul(uvec2);\n"
+            "uvec3  subgroupMul(uvec3);\n"
+            "uvec4  subgroupMul(uvec4);\n"
+
+            "float  subgroupMin(float);\n"
+            "vec2   subgroupMin(vec2);\n"
+            "vec3   subgroupMin(vec3);\n"
+            "vec4   subgroupMin(vec4);\n"
+            "int    subgroupMin(int);\n"
+            "ivec2  subgroupMin(ivec2);\n"
+            "ivec3  subgroupMin(ivec3);\n"
+            "ivec4  subgroupMin(ivec4);\n"
+            "uint   subgroupMin(uint);\n"
+            "uvec2  subgroupMin(uvec2);\n"
+            "uvec3  subgroupMin(uvec3);\n"
+            "uvec4  subgroupMin(uvec4);\n"
+
+            "float  subgroupMax(float);\n"
+            "vec2   subgroupMax(vec2);\n"
+            "vec3   subgroupMax(vec3);\n"
+            "vec4   subgroupMax(vec4);\n"
+            "int    subgroupMax(int);\n"
+            "ivec2  subgroupMax(ivec2);\n"
+            "ivec3  subgroupMax(ivec3);\n"
+            "ivec4  subgroupMax(ivec4);\n"
+            "uint   subgroupMax(uint);\n"
+            "uvec2  subgroupMax(uvec2);\n"
+            "uvec3  subgroupMax(uvec3);\n"
+            "uvec4  subgroupMax(uvec4);\n"
+
+            "int    subgroupAnd(int);\n"
+            "ivec2  subgroupAnd(ivec2);\n"
+            "ivec3  subgroupAnd(ivec3);\n"
+            "ivec4  subgroupAnd(ivec4);\n"
+            "uint   subgroupAnd(uint);\n"
+            "uvec2  subgroupAnd(uvec2);\n"
+            "uvec3  subgroupAnd(uvec3);\n"
+            "uvec4  subgroupAnd(uvec4);\n"
+            "bool   subgroupAnd(bool);\n"
+            "bvec2  subgroupAnd(bvec2);\n"
+            "bvec3  subgroupAnd(bvec3);\n"
+            "bvec4  subgroupAnd(bvec4);\n"
+
+            "int    subgroupOr(int);\n"
+            "ivec2  subgroupOr(ivec2);\n"
+            "ivec3  subgroupOr(ivec3);\n"
+            "ivec4  subgroupOr(ivec4);\n"
+            "uint   subgroupOr(uint);\n"
+            "uvec2  subgroupOr(uvec2);\n"
+            "uvec3  subgroupOr(uvec3);\n"
+            "uvec4  subgroupOr(uvec4);\n"
+            "bool   subgroupOr(bool);\n"
+            "bvec2  subgroupOr(bvec2);\n"
+            "bvec3  subgroupOr(bvec3);\n"
+            "bvec4  subgroupOr(bvec4);\n"
+
+            "int    subgroupXor(int);\n"
+            "ivec2  subgroupXor(ivec2);\n"
+            "ivec3  subgroupXor(ivec3);\n"
+            "ivec4  subgroupXor(ivec4);\n"
+            "uint   subgroupXor(uint);\n"
+            "uvec2  subgroupXor(uvec2);\n"
+            "uvec3  subgroupXor(uvec3);\n"
+            "uvec4  subgroupXor(uvec4);\n"
+            "bool   subgroupXor(bool);\n"
+            "bvec2  subgroupXor(bvec2);\n"
+            "bvec3  subgroupXor(bvec3);\n"
+            "bvec4  subgroupXor(bvec4);\n"
+
+            "float  subgroupInclusiveAdd(float);\n"
+            "vec2   subgroupInclusiveAdd(vec2);\n"
+            "vec3   subgroupInclusiveAdd(vec3);\n"
+            "vec4   subgroupInclusiveAdd(vec4);\n"
+            "int    subgroupInclusiveAdd(int);\n"
+            "ivec2  subgroupInclusiveAdd(ivec2);\n"
+            "ivec3  subgroupInclusiveAdd(ivec3);\n"
+            "ivec4  subgroupInclusiveAdd(ivec4);\n"
+            "uint   subgroupInclusiveAdd(uint);\n"
+            "uvec2  subgroupInclusiveAdd(uvec2);\n"
+            "uvec3  subgroupInclusiveAdd(uvec3);\n"
+            "uvec4  subgroupInclusiveAdd(uvec4);\n"
+
+            "float  subgroupInclusiveMul(float);\n"
+            "vec2   subgroupInclusiveMul(vec2);\n"
+            "vec3   subgroupInclusiveMul(vec3);\n"
+            "vec4   subgroupInclusiveMul(vec4);\n"
+            "int    subgroupInclusiveMul(int);\n"
+            "ivec2  subgroupInclusiveMul(ivec2);\n"
+            "ivec3  subgroupInclusiveMul(ivec3);\n"
+            "ivec4  subgroupInclusiveMul(ivec4);\n"
+            "uint   subgroupInclusiveMul(uint);\n"
+            "uvec2  subgroupInclusiveMul(uvec2);\n"
+            "uvec3  subgroupInclusiveMul(uvec3);\n"
+            "uvec4  subgroupInclusiveMul(uvec4);\n"
+
+            "float  subgroupInclusiveMin(float);\n"
+            "vec2   subgroupInclusiveMin(vec2);\n"
+            "vec3   subgroupInclusiveMin(vec3);\n"
+            "vec4   subgroupInclusiveMin(vec4);\n"
+            "int    subgroupInclusiveMin(int);\n"
+            "ivec2  subgroupInclusiveMin(ivec2);\n"
+            "ivec3  subgroupInclusiveMin(ivec3);\n"
+            "ivec4  subgroupInclusiveMin(ivec4);\n"
+            "uint   subgroupInclusiveMin(uint);\n"
+            "uvec2  subgroupInclusiveMin(uvec2);\n"
+            "uvec3  subgroupInclusiveMin(uvec3);\n"
+            "uvec4  subgroupInclusiveMin(uvec4);\n"
+
+            "float  subgroupInclusiveMax(float);\n"
+            "vec2   subgroupInclusiveMax(vec2);\n"
+            "vec3   subgroupInclusiveMax(vec3);\n"
+            "vec4   subgroupInclusiveMax(vec4);\n"
+            "int    subgroupInclusiveMax(int);\n"
+            "ivec2  subgroupInclusiveMax(ivec2);\n"
+            "ivec3  subgroupInclusiveMax(ivec3);\n"
+            "ivec4  subgroupInclusiveMax(ivec4);\n"
+            "uint   subgroupInclusiveMax(uint);\n"
+            "uvec2  subgroupInclusiveMax(uvec2);\n"
+            "uvec3  subgroupInclusiveMax(uvec3);\n"
+            "uvec4  subgroupInclusiveMax(uvec4);\n"
+
+            "int    subgroupInclusiveAnd(int);\n"
+            "ivec2  subgroupInclusiveAnd(ivec2);\n"
+            "ivec3  subgroupInclusiveAnd(ivec3);\n"
+            "ivec4  subgroupInclusiveAnd(ivec4);\n"
+            "uint   subgroupInclusiveAnd(uint);\n"
+            "uvec2  subgroupInclusiveAnd(uvec2);\n"
+            "uvec3  subgroupInclusiveAnd(uvec3);\n"
+            "uvec4  subgroupInclusiveAnd(uvec4);\n"
+            "bool   subgroupInclusiveAnd(bool);\n"
+            "bvec2  subgroupInclusiveAnd(bvec2);\n"
+            "bvec3  subgroupInclusiveAnd(bvec3);\n"
+            "bvec4  subgroupInclusiveAnd(bvec4);\n"
+
+            "int    subgroupInclusiveOr(int);\n"
+            "ivec2  subgroupInclusiveOr(ivec2);\n"
+            "ivec3  subgroupInclusiveOr(ivec3);\n"
+            "ivec4  subgroupInclusiveOr(ivec4);\n"
+            "uint   subgroupInclusiveOr(uint);\n"
+            "uvec2  subgroupInclusiveOr(uvec2);\n"
+            "uvec3  subgroupInclusiveOr(uvec3);\n"
+            "uvec4  subgroupInclusiveOr(uvec4);\n"
+            "bool   subgroupInclusiveOr(bool);\n"
+            "bvec2  subgroupInclusiveOr(bvec2);\n"
+            "bvec3  subgroupInclusiveOr(bvec3);\n"
+            "bvec4  subgroupInclusiveOr(bvec4);\n"
+
+            "int    subgroupInclusiveXor(int);\n"
+            "ivec2  subgroupInclusiveXor(ivec2);\n"
+            "ivec3  subgroupInclusiveXor(ivec3);\n"
+            "ivec4  subgroupInclusiveXor(ivec4);\n"
+            "uint   subgroupInclusiveXor(uint);\n"
+            "uvec2  subgroupInclusiveXor(uvec2);\n"
+            "uvec3  subgroupInclusiveXor(uvec3);\n"
+            "uvec4  subgroupInclusiveXor(uvec4);\n"
+            "bool   subgroupInclusiveXor(bool);\n"
+            "bvec2  subgroupInclusiveXor(bvec2);\n"
+            "bvec3  subgroupInclusiveXor(bvec3);\n"
+            "bvec4  subgroupInclusiveXor(bvec4);\n"
+
+            "float  subgroupExclusiveAdd(float);\n"
+            "vec2   subgroupExclusiveAdd(vec2);\n"
+            "vec3   subgroupExclusiveAdd(vec3);\n"
+            "vec4   subgroupExclusiveAdd(vec4);\n"
+            "int    subgroupExclusiveAdd(int);\n"
+            "ivec2  subgroupExclusiveAdd(ivec2);\n"
+            "ivec3  subgroupExclusiveAdd(ivec3);\n"
+            "ivec4  subgroupExclusiveAdd(ivec4);\n"
+            "uint   subgroupExclusiveAdd(uint);\n"
+            "uvec2  subgroupExclusiveAdd(uvec2);\n"
+            "uvec3  subgroupExclusiveAdd(uvec3);\n"
+            "uvec4  subgroupExclusiveAdd(uvec4);\n"
+
+            "float  subgroupExclusiveMul(float);\n"
+            "vec2   subgroupExclusiveMul(vec2);\n"
+            "vec3   subgroupExclusiveMul(vec3);\n"
+            "vec4   subgroupExclusiveMul(vec4);\n"
+            "int    subgroupExclusiveMul(int);\n"
+            "ivec2  subgroupExclusiveMul(ivec2);\n"
+            "ivec3  subgroupExclusiveMul(ivec3);\n"
+            "ivec4  subgroupExclusiveMul(ivec4);\n"
+            "uint   subgroupExclusiveMul(uint);\n"
+            "uvec2  subgroupExclusiveMul(uvec2);\n"
+            "uvec3  subgroupExclusiveMul(uvec3);\n"
+            "uvec4  subgroupExclusiveMul(uvec4);\n"
+
+            "float  subgroupExclusiveMin(float);\n"
+            "vec2   subgroupExclusiveMin(vec2);\n"
+            "vec3   subgroupExclusiveMin(vec3);\n"
+            "vec4   subgroupExclusiveMin(vec4);\n"
+            "int    subgroupExclusiveMin(int);\n"
+            "ivec2  subgroupExclusiveMin(ivec2);\n"
+            "ivec3  subgroupExclusiveMin(ivec3);\n"
+            "ivec4  subgroupExclusiveMin(ivec4);\n"
+            "uint   subgroupExclusiveMin(uint);\n"
+            "uvec2  subgroupExclusiveMin(uvec2);\n"
+            "uvec3  subgroupExclusiveMin(uvec3);\n"
+            "uvec4  subgroupExclusiveMin(uvec4);\n"
+
+            "float  subgroupExclusiveMax(float);\n"
+            "vec2   subgroupExclusiveMax(vec2);\n"
+            "vec3   subgroupExclusiveMax(vec3);\n"
+            "vec4   subgroupExclusiveMax(vec4);\n"
+            "int    subgroupExclusiveMax(int);\n"
+            "ivec2  subgroupExclusiveMax(ivec2);\n"
+            "ivec3  subgroupExclusiveMax(ivec3);\n"
+            "ivec4  subgroupExclusiveMax(ivec4);\n"
+            "uint   subgroupExclusiveMax(uint);\n"
+            "uvec2  subgroupExclusiveMax(uvec2);\n"
+            "uvec3  subgroupExclusiveMax(uvec3);\n"
+            "uvec4  subgroupExclusiveMax(uvec4);\n"
+
+            "int    subgroupExclusiveAnd(int);\n"
+            "ivec2  subgroupExclusiveAnd(ivec2);\n"
+            "ivec3  subgroupExclusiveAnd(ivec3);\n"
+            "ivec4  subgroupExclusiveAnd(ivec4);\n"
+            "uint   subgroupExclusiveAnd(uint);\n"
+            "uvec2  subgroupExclusiveAnd(uvec2);\n"
+            "uvec3  subgroupExclusiveAnd(uvec3);\n"
+            "uvec4  subgroupExclusiveAnd(uvec4);\n"
+            "bool   subgroupExclusiveAnd(bool);\n"
+            "bvec2  subgroupExclusiveAnd(bvec2);\n"
+            "bvec3  subgroupExclusiveAnd(bvec3);\n"
+            "bvec4  subgroupExclusiveAnd(bvec4);\n"
+
+            "int    subgroupExclusiveOr(int);\n"
+            "ivec2  subgroupExclusiveOr(ivec2);\n"
+            "ivec3  subgroupExclusiveOr(ivec3);\n"
+            "ivec4  subgroupExclusiveOr(ivec4);\n"
+            "uint   subgroupExclusiveOr(uint);\n"
+            "uvec2  subgroupExclusiveOr(uvec2);\n"
+            "uvec3  subgroupExclusiveOr(uvec3);\n"
+            "uvec4  subgroupExclusiveOr(uvec4);\n"
+            "bool   subgroupExclusiveOr(bool);\n"
+            "bvec2  subgroupExclusiveOr(bvec2);\n"
+            "bvec3  subgroupExclusiveOr(bvec3);\n"
+            "bvec4  subgroupExclusiveOr(bvec4);\n"
+
+            "int    subgroupExclusiveXor(int);\n"
+            "ivec2  subgroupExclusiveXor(ivec2);\n"
+            "ivec3  subgroupExclusiveXor(ivec3);\n"
+            "ivec4  subgroupExclusiveXor(ivec4);\n"
+            "uint   subgroupExclusiveXor(uint);\n"
+            "uvec2  subgroupExclusiveXor(uvec2);\n"
+            "uvec3  subgroupExclusiveXor(uvec3);\n"
+            "uvec4  subgroupExclusiveXor(uvec4);\n"
+            "bool   subgroupExclusiveXor(bool);\n"
+            "bvec2  subgroupExclusiveXor(bvec2);\n"
+            "bvec3  subgroupExclusiveXor(bvec3);\n"
+            "bvec4  subgroupExclusiveXor(bvec4);\n"
+
+            "float  subgroupClusteredAdd(float, uint);\n"
+            "vec2   subgroupClusteredAdd(vec2, uint);\n"
+            "vec3   subgroupClusteredAdd(vec3, uint);\n"
+            "vec4   subgroupClusteredAdd(vec4, uint);\n"
+            "int    subgroupClusteredAdd(int, uint);\n"
+            "ivec2  subgroupClusteredAdd(ivec2, uint);\n"
+            "ivec3  subgroupClusteredAdd(ivec3, uint);\n"
+            "ivec4  subgroupClusteredAdd(ivec4, uint);\n"
+            "uint   subgroupClusteredAdd(uint, uint);\n"
+            "uvec2  subgroupClusteredAdd(uvec2, uint);\n"
+            "uvec3  subgroupClusteredAdd(uvec3, uint);\n"
+            "uvec4  subgroupClusteredAdd(uvec4, uint);\n"
+
+            "float  subgroupClusteredMul(float, uint);\n"
+            "vec2   subgroupClusteredMul(vec2, uint);\n"
+            "vec3   subgroupClusteredMul(vec3, uint);\n"
+            "vec4   subgroupClusteredMul(vec4, uint);\n"
+            "int    subgroupClusteredMul(int, uint);\n"
+            "ivec2  subgroupClusteredMul(ivec2, uint);\n"
+            "ivec3  subgroupClusteredMul(ivec3, uint);\n"
+            "ivec4  subgroupClusteredMul(ivec4, uint);\n"
+            "uint   subgroupClusteredMul(uint, uint);\n"
+            "uvec2  subgroupClusteredMul(uvec2, uint);\n"
+            "uvec3  subgroupClusteredMul(uvec3, uint);\n"
+            "uvec4  subgroupClusteredMul(uvec4, uint);\n"
+
+            "float  subgroupClusteredMin(float, uint);\n"
+            "vec2   subgroupClusteredMin(vec2, uint);\n"
+            "vec3   subgroupClusteredMin(vec3, uint);\n"
+            "vec4   subgroupClusteredMin(vec4, uint);\n"
+            "int    subgroupClusteredMin(int, uint);\n"
+            "ivec2  subgroupClusteredMin(ivec2, uint);\n"
+            "ivec3  subgroupClusteredMin(ivec3, uint);\n"
+            "ivec4  subgroupClusteredMin(ivec4, uint);\n"
+            "uint   subgroupClusteredMin(uint, uint);\n"
+            "uvec2  subgroupClusteredMin(uvec2, uint);\n"
+            "uvec3  subgroupClusteredMin(uvec3, uint);\n"
+            "uvec4  subgroupClusteredMin(uvec4, uint);\n"
+
+            "float  subgroupClusteredMax(float, uint);\n"
+            "vec2   subgroupClusteredMax(vec2, uint);\n"
+            "vec3   subgroupClusteredMax(vec3, uint);\n"
+            "vec4   subgroupClusteredMax(vec4, uint);\n"
+            "int    subgroupClusteredMax(int, uint);\n"
+            "ivec2  subgroupClusteredMax(ivec2, uint);\n"
+            "ivec3  subgroupClusteredMax(ivec3, uint);\n"
+            "ivec4  subgroupClusteredMax(ivec4, uint);\n"
+            "uint   subgroupClusteredMax(uint, uint);\n"
+            "uvec2  subgroupClusteredMax(uvec2, uint);\n"
+            "uvec3  subgroupClusteredMax(uvec3, uint);\n"
+            "uvec4  subgroupClusteredMax(uvec4, uint);\n"
+
+            "int    subgroupClusteredAnd(int, uint);\n"
+            "ivec2  subgroupClusteredAnd(ivec2, uint);\n"
+            "ivec3  subgroupClusteredAnd(ivec3, uint);\n"
+            "ivec4  subgroupClusteredAnd(ivec4, uint);\n"
+            "uint   subgroupClusteredAnd(uint, uint);\n"
+            "uvec2  subgroupClusteredAnd(uvec2, uint);\n"
+            "uvec3  subgroupClusteredAnd(uvec3, uint);\n"
+            "uvec4  subgroupClusteredAnd(uvec4, uint);\n"
+            "bool   subgroupClusteredAnd(bool, uint);\n"
+            "bvec2  subgroupClusteredAnd(bvec2, uint);\n"
+            "bvec3  subgroupClusteredAnd(bvec3, uint);\n"
+            "bvec4  subgroupClusteredAnd(bvec4, uint);\n"
+
+            "int    subgroupClusteredOr(int, uint);\n"
+            "ivec2  subgroupClusteredOr(ivec2, uint);\n"
+            "ivec3  subgroupClusteredOr(ivec3, uint);\n"
+            "ivec4  subgroupClusteredOr(ivec4, uint);\n"
+            "uint   subgroupClusteredOr(uint, uint);\n"
+            "uvec2  subgroupClusteredOr(uvec2, uint);\n"
+            "uvec3  subgroupClusteredOr(uvec3, uint);\n"
+            "uvec4  subgroupClusteredOr(uvec4, uint);\n"
+            "bool   subgroupClusteredOr(bool, uint);\n"
+            "bvec2  subgroupClusteredOr(bvec2, uint);\n"
+            "bvec3  subgroupClusteredOr(bvec3, uint);\n"
+            "bvec4  subgroupClusteredOr(bvec4, uint);\n"
+
+            "int    subgroupClusteredXor(int, uint);\n"
+            "ivec2  subgroupClusteredXor(ivec2, uint);\n"
+            "ivec3  subgroupClusteredXor(ivec3, uint);\n"
+            "ivec4  subgroupClusteredXor(ivec4, uint);\n"
+            "uint   subgroupClusteredXor(uint, uint);\n"
+            "uvec2  subgroupClusteredXor(uvec2, uint);\n"
+            "uvec3  subgroupClusteredXor(uvec3, uint);\n"
+            "uvec4  subgroupClusteredXor(uvec4, uint);\n"
+            "bool   subgroupClusteredXor(bool, uint);\n"
+            "bvec2  subgroupClusteredXor(bvec2, uint);\n"
+            "bvec3  subgroupClusteredXor(bvec3, uint);\n"
+            "bvec4  subgroupClusteredXor(bvec4, uint);\n"
+
+            "float  subgroupQuadBroadcast(float, uint);\n"
+            "vec2   subgroupQuadBroadcast(vec2, uint);\n"
+            "vec3   subgroupQuadBroadcast(vec3, uint);\n"
+            "vec4   subgroupQuadBroadcast(vec4, uint);\n"
+            "int    subgroupQuadBroadcast(int, uint);\n"
+            "ivec2  subgroupQuadBroadcast(ivec2, uint);\n"
+            "ivec3  subgroupQuadBroadcast(ivec3, uint);\n"
+            "ivec4  subgroupQuadBroadcast(ivec4, uint);\n"
+            "uint   subgroupQuadBroadcast(uint, uint);\n"
+            "uvec2  subgroupQuadBroadcast(uvec2, uint);\n"
+            "uvec3  subgroupQuadBroadcast(uvec3, uint);\n"
+            "uvec4  subgroupQuadBroadcast(uvec4, uint);\n"
+            "bool   subgroupQuadBroadcast(bool, uint);\n"
+            "bvec2  subgroupQuadBroadcast(bvec2, uint);\n"
+            "bvec3  subgroupQuadBroadcast(bvec3, uint);\n"
+            "bvec4  subgroupQuadBroadcast(bvec4, uint);\n"
+
+            "float  subgroupQuadSwapHorizontal(float);\n"
+            "vec2   subgroupQuadSwapHorizontal(vec2);\n"
+            "vec3   subgroupQuadSwapHorizontal(vec3);\n"
+            "vec4   subgroupQuadSwapHorizontal(vec4);\n"
+            "int    subgroupQuadSwapHorizontal(int);\n"
+            "ivec2  subgroupQuadSwapHorizontal(ivec2);\n"
+            "ivec3  subgroupQuadSwapHorizontal(ivec3);\n"
+            "ivec4  subgroupQuadSwapHorizontal(ivec4);\n"
+            "uint   subgroupQuadSwapHorizontal(uint);\n"
+            "uvec2  subgroupQuadSwapHorizontal(uvec2);\n"
+            "uvec3  subgroupQuadSwapHorizontal(uvec3);\n"
+            "uvec4  subgroupQuadSwapHorizontal(uvec4);\n"
+            "bool   subgroupQuadSwapHorizontal(bool);\n"
+            "bvec2  subgroupQuadSwapHorizontal(bvec2);\n"
+            "bvec3  subgroupQuadSwapHorizontal(bvec3);\n"
+            "bvec4  subgroupQuadSwapHorizontal(bvec4);\n"
+
+            "float  subgroupQuadSwapVertical(float);\n"
+            "vec2   subgroupQuadSwapVertical(vec2);\n"
+            "vec3   subgroupQuadSwapVertical(vec3);\n"
+            "vec4   subgroupQuadSwapVertical(vec4);\n"
+            "int    subgroupQuadSwapVertical(int);\n"
+            "ivec2  subgroupQuadSwapVertical(ivec2);\n"
+            "ivec3  subgroupQuadSwapVertical(ivec3);\n"
+            "ivec4  subgroupQuadSwapVertical(ivec4);\n"
+            "uint   subgroupQuadSwapVertical(uint);\n"
+            "uvec2  subgroupQuadSwapVertical(uvec2);\n"
+            "uvec3  subgroupQuadSwapVertical(uvec3);\n"
+            "uvec4  subgroupQuadSwapVertical(uvec4);\n"
+            "bool   subgroupQuadSwapVertical(bool);\n"
+            "bvec2  subgroupQuadSwapVertical(bvec2);\n"
+            "bvec3  subgroupQuadSwapVertical(bvec3);\n"
+            "bvec4  subgroupQuadSwapVertical(bvec4);\n"
+
+            "float  subgroupQuadSwapDiagonal(float);\n"
+            "vec2   subgroupQuadSwapDiagonal(vec2);\n"
+            "vec3   subgroupQuadSwapDiagonal(vec3);\n"
+            "vec4   subgroupQuadSwapDiagonal(vec4);\n"
+            "int    subgroupQuadSwapDiagonal(int);\n"
+            "ivec2  subgroupQuadSwapDiagonal(ivec2);\n"
+            "ivec3  subgroupQuadSwapDiagonal(ivec3);\n"
+            "ivec4  subgroupQuadSwapDiagonal(ivec4);\n"
+            "uint   subgroupQuadSwapDiagonal(uint);\n"
+            "uvec2  subgroupQuadSwapDiagonal(uvec2);\n"
+            "uvec3  subgroupQuadSwapDiagonal(uvec3);\n"
+            "uvec4  subgroupQuadSwapDiagonal(uvec4);\n"
+            "bool   subgroupQuadSwapDiagonal(bool);\n"
+            "bvec2  subgroupQuadSwapDiagonal(bvec2);\n"
+            "bvec3  subgroupQuadSwapDiagonal(bvec3);\n"
+            "bvec4  subgroupQuadSwapDiagonal(bvec4);\n"
+
+#ifdef NV_EXTENSIONS
+            "uvec4  subgroupPartitionNV(float);\n"
+            "uvec4  subgroupPartitionNV(vec2);\n"
+            "uvec4  subgroupPartitionNV(vec3);\n"
+            "uvec4  subgroupPartitionNV(vec4);\n"
+            "uvec4  subgroupPartitionNV(int);\n"
+            "uvec4  subgroupPartitionNV(ivec2);\n"
+            "uvec4  subgroupPartitionNV(ivec3);\n"
+            "uvec4  subgroupPartitionNV(ivec4);\n"
+            "uvec4  subgroupPartitionNV(uint);\n"
+            "uvec4  subgroupPartitionNV(uvec2);\n"
+            "uvec4  subgroupPartitionNV(uvec3);\n"
+            "uvec4  subgroupPartitionNV(uvec4);\n"
+            "uvec4  subgroupPartitionNV(bool);\n"
+            "uvec4  subgroupPartitionNV(bvec2);\n"
+            "uvec4  subgroupPartitionNV(bvec3);\n"
+            "uvec4  subgroupPartitionNV(bvec4);\n"
+
+            "float  subgroupPartitionedAddNV(float, uvec4 ballot);\n"
+            "vec2   subgroupPartitionedAddNV(vec2, uvec4 ballot);\n"
+            "vec3   subgroupPartitionedAddNV(vec3, uvec4 ballot);\n"
+            "vec4   subgroupPartitionedAddNV(vec4, uvec4 ballot);\n"
+            "int    subgroupPartitionedAddNV(int, uvec4 ballot);\n"
+            "ivec2  subgroupPartitionedAddNV(ivec2, uvec4 ballot);\n"
+            "ivec3  subgroupPartitionedAddNV(ivec3, uvec4 ballot);\n"
+            "ivec4  subgroupPartitionedAddNV(ivec4, uvec4 ballot);\n"
+            "uint   subgroupPartitionedAddNV(uint, uvec4 ballot);\n"
+            "uvec2  subgroupPartitionedAddNV(uvec2, uvec4 ballot);\n"
+            "uvec3  subgroupPartitionedAddNV(uvec3, uvec4 ballot);\n"
+            "uvec4  subgroupPartitionedAddNV(uvec4, uvec4 ballot);\n"
+
+            "float  subgroupPartitionedMulNV(float, uvec4 ballot);\n"
+            "vec2   subgroupPartitionedMulNV(vec2, uvec4 ballot);\n"
+            "vec3   subgroupPartitionedMulNV(vec3, uvec4 ballot);\n"
+            "vec4   subgroupPartitionedMulNV(vec4, uvec4 ballot);\n"
+            "int    subgroupPartitionedMulNV(int, uvec4 ballot);\n"
+            "ivec2  subgroupPartitionedMulNV(ivec2, uvec4 ballot);\n"
+            "ivec3  subgroupPartitionedMulNV(ivec3, uvec4 ballot);\n"
+            "ivec4  subgroupPartitionedMulNV(ivec4, uvec4 ballot);\n"
+            "uint   subgroupPartitionedMulNV(uint, uvec4 ballot);\n"
+            "uvec2  subgroupPartitionedMulNV(uvec2, uvec4 ballot);\n"
+            "uvec3  subgroupPartitionedMulNV(uvec3, uvec4 ballot);\n"
+            "uvec4  subgroupPartitionedMulNV(uvec4, uvec4 ballot);\n"
+
+            "float  subgroupPartitionedMinNV(float, uvec4 ballot);\n"
+            "vec2   subgroupPartitionedMinNV(vec2, uvec4 ballot);\n"
+            "vec3   subgroupPartitionedMinNV(vec3, uvec4 ballot);\n"
+            "vec4   subgroupPartitionedMinNV(vec4, uvec4 ballot);\n"
+            "int    subgroupPartitionedMinNV(int, uvec4 ballot);\n"
+            "ivec2  subgroupPartitionedMinNV(ivec2, uvec4 ballot);\n"
+            "ivec3  subgroupPartitionedMinNV(ivec3, uvec4 ballot);\n"
+            "ivec4  subgroupPartitionedMinNV(ivec4, uvec4 ballot);\n"
+            "uint   subgroupPartitionedMinNV(uint, uvec4 ballot);\n"
+            "uvec2  subgroupPartitionedMinNV(uvec2, uvec4 ballot);\n"
+            "uvec3  subgroupPartitionedMinNV(uvec3, uvec4 ballot);\n"
+            "uvec4  subgroupPartitionedMinNV(uvec4, uvec4 ballot);\n"
+
+            "float  subgroupPartitionedMaxNV(float, uvec4 ballot);\n"
+            "vec2   subgroupPartitionedMaxNV(vec2, uvec4 ballot);\n"
+            "vec3   subgroupPartitionedMaxNV(vec3, uvec4 ballot);\n"
+            "vec4   subgroupPartitionedMaxNV(vec4, uvec4 ballot);\n"
+            "int    subgroupPartitionedMaxNV(int, uvec4 ballot);\n"
+            "ivec2  subgroupPartitionedMaxNV(ivec2, uvec4 ballot);\n"
+            "ivec3  subgroupPartitionedMaxNV(ivec3, uvec4 ballot);\n"
+            "ivec4  subgroupPartitionedMaxNV(ivec4, uvec4 ballot);\n"
+            "uint   subgroupPartitionedMaxNV(uint, uvec4 ballot);\n"
+            "uvec2  subgroupPartitionedMaxNV(uvec2, uvec4 ballot);\n"
+            "uvec3  subgroupPartitionedMaxNV(uvec3, uvec4 ballot);\n"
+            "uvec4  subgroupPartitionedMaxNV(uvec4, uvec4 ballot);\n"
+
+            "int    subgroupPartitionedAndNV(int, uvec4 ballot);\n"
+            "ivec2  subgroupPartitionedAndNV(ivec2, uvec4 ballot);\n"
+            "ivec3  subgroupPartitionedAndNV(ivec3, uvec4 ballot);\n"
+            "ivec4  subgroupPartitionedAndNV(ivec4, uvec4 ballot);\n"
+            "uint   subgroupPartitionedAndNV(uint, uvec4 ballot);\n"
+            "uvec2  subgroupPartitionedAndNV(uvec2, uvec4 ballot);\n"
+            "uvec3  subgroupPartitionedAndNV(uvec3, uvec4 ballot);\n"
+            "uvec4  subgroupPartitionedAndNV(uvec4, uvec4 ballot);\n"
+            "bool   subgroupPartitionedAndNV(bool, uvec4 ballot);\n"
+            "bvec2  subgroupPartitionedAndNV(bvec2, uvec4 ballot);\n"
+            "bvec3  subgroupPartitionedAndNV(bvec3, uvec4 ballot);\n"
+            "bvec4  subgroupPartitionedAndNV(bvec4, uvec4 ballot);\n"
+
+            "int    subgroupPartitionedOrNV(int, uvec4 ballot);\n"
+            "ivec2  subgroupPartitionedOrNV(ivec2, uvec4 ballot);\n"
+            "ivec3  subgroupPartitionedOrNV(ivec3, uvec4 ballot);\n"
+            "ivec4  subgroupPartitionedOrNV(ivec4, uvec4 ballot);\n"
+            "uint   subgroupPartitionedOrNV(uint, uvec4 ballot);\n"
+            "uvec2  subgroupPartitionedOrNV(uvec2, uvec4 ballot);\n"
+            "uvec3  subgroupPartitionedOrNV(uvec3, uvec4 ballot);\n"
+            "uvec4  subgroupPartitionedOrNV(uvec4, uvec4 ballot);\n"
+            "bool   subgroupPartitionedOrNV(bool, uvec4 ballot);\n"
+            "bvec2  subgroupPartitionedOrNV(bvec2, uvec4 ballot);\n"
+            "bvec3  subgroupPartitionedOrNV(bvec3, uvec4 ballot);\n"
+            "bvec4  subgroupPartitionedOrNV(bvec4, uvec4 ballot);\n"
+
+            "int    subgroupPartitionedXorNV(int, uvec4 ballot);\n"
+            "ivec2  subgroupPartitionedXorNV(ivec2, uvec4 ballot);\n"
+            "ivec3  subgroupPartitionedXorNV(ivec3, uvec4 ballot);\n"
+            "ivec4  subgroupPartitionedXorNV(ivec4, uvec4 ballot);\n"
+            "uint   subgroupPartitionedXorNV(uint, uvec4 ballot);\n"
+            "uvec2  subgroupPartitionedXorNV(uvec2, uvec4 ballot);\n"
+            "uvec3  subgroupPartitionedXorNV(uvec3, uvec4 ballot);\n"
+            "uvec4  subgroupPartitionedXorNV(uvec4, uvec4 ballot);\n"
+            "bool   subgroupPartitionedXorNV(bool, uvec4 ballot);\n"
+            "bvec2  subgroupPartitionedXorNV(bvec2, uvec4 ballot);\n"
+            "bvec3  subgroupPartitionedXorNV(bvec3, uvec4 ballot);\n"
+            "bvec4  subgroupPartitionedXorNV(bvec4, uvec4 ballot);\n"
+
+            "float  subgroupPartitionedInclusiveAddNV(float, uvec4 ballot);\n"
+            "vec2   subgroupPartitionedInclusiveAddNV(vec2, uvec4 ballot);\n"
+            "vec3   subgroupPartitionedInclusiveAddNV(vec3, uvec4 ballot);\n"
+            "vec4   subgroupPartitionedInclusiveAddNV(vec4, uvec4 ballot);\n"
+            "int    subgroupPartitionedInclusiveAddNV(int, uvec4 ballot);\n"
+            "ivec2  subgroupPartitionedInclusiveAddNV(ivec2, uvec4 ballot);\n"
+            "ivec3  subgroupPartitionedInclusiveAddNV(ivec3, uvec4 ballot);\n"
+            "ivec4  subgroupPartitionedInclusiveAddNV(ivec4, uvec4 ballot);\n"
+            "uint   subgroupPartitionedInclusiveAddNV(uint, uvec4 ballot);\n"
+            "uvec2  subgroupPartitionedInclusiveAddNV(uvec2, uvec4 ballot);\n"
+            "uvec3  subgroupPartitionedInclusiveAddNV(uvec3, uvec4 ballot);\n"
+            "uvec4  subgroupPartitionedInclusiveAddNV(uvec4, uvec4 ballot);\n"
+
+            "float  subgroupPartitionedInclusiveMulNV(float, uvec4 ballot);\n"
+            "vec2   subgroupPartitionedInclusiveMulNV(vec2, uvec4 ballot);\n"
+            "vec3   subgroupPartitionedInclusiveMulNV(vec3, uvec4 ballot);\n"
+            "vec4   subgroupPartitionedInclusiveMulNV(vec4, uvec4 ballot);\n"
+            "int    subgroupPartitionedInclusiveMulNV(int, uvec4 ballot);\n"
+            "ivec2  subgroupPartitionedInclusiveMulNV(ivec2, uvec4 ballot);\n"
+            "ivec3  subgroupPartitionedInclusiveMulNV(ivec3, uvec4 ballot);\n"
+            "ivec4  subgroupPartitionedInclusiveMulNV(ivec4, uvec4 ballot);\n"
+            "uint   subgroupPartitionedInclusiveMulNV(uint, uvec4 ballot);\n"
+            "uvec2  subgroupPartitionedInclusiveMulNV(uvec2, uvec4 ballot);\n"
+            "uvec3  subgroupPartitionedInclusiveMulNV(uvec3, uvec4 ballot);\n"
+            "uvec4  subgroupPartitionedInclusiveMulNV(uvec4, uvec4 ballot);\n"
+
+            "float  subgroupPartitionedInclusiveMinNV(float, uvec4 ballot);\n"
+            "vec2   subgroupPartitionedInclusiveMinNV(vec2, uvec4 ballot);\n"
+            "vec3   subgroupPartitionedInclusiveMinNV(vec3, uvec4 ballot);\n"
+            "vec4   subgroupPartitionedInclusiveMinNV(vec4, uvec4 ballot);\n"
+            "int    subgroupPartitionedInclusiveMinNV(int, uvec4 ballot);\n"
+            "ivec2  subgroupPartitionedInclusiveMinNV(ivec2, uvec4 ballot);\n"
+            "ivec3  subgroupPartitionedInclusiveMinNV(ivec3, uvec4 ballot);\n"
+            "ivec4  subgroupPartitionedInclusiveMinNV(ivec4, uvec4 ballot);\n"
+            "uint   subgroupPartitionedInclusiveMinNV(uint, uvec4 ballot);\n"
+            "uvec2  subgroupPartitionedInclusiveMinNV(uvec2, uvec4 ballot);\n"
+            "uvec3  subgroupPartitionedInclusiveMinNV(uvec3, uvec4 ballot);\n"
+            "uvec4  subgroupPartitionedInclusiveMinNV(uvec4, uvec4 ballot);\n"
+
+            "float  subgroupPartitionedInclusiveMaxNV(float, uvec4 ballot);\n"
+            "vec2   subgroupPartitionedInclusiveMaxNV(vec2, uvec4 ballot);\n"
+            "vec3   subgroupPartitionedInclusiveMaxNV(vec3, uvec4 ballot);\n"
+            "vec4   subgroupPartitionedInclusiveMaxNV(vec4, uvec4 ballot);\n"
+            "int    subgroupPartitionedInclusiveMaxNV(int, uvec4 ballot);\n"
+            "ivec2  subgroupPartitionedInclusiveMaxNV(ivec2, uvec4 ballot);\n"
+            "ivec3  subgroupPartitionedInclusiveMaxNV(ivec3, uvec4 ballot);\n"
+            "ivec4  subgroupPartitionedInclusiveMaxNV(ivec4, uvec4 ballot);\n"
+            "uint   subgroupPartitionedInclusiveMaxNV(uint, uvec4 ballot);\n"
+            "uvec2  subgroupPartitionedInclusiveMaxNV(uvec2, uvec4 ballot);\n"
+            "uvec3  subgroupPartitionedInclusiveMaxNV(uvec3, uvec4 ballot);\n"
+            "uvec4  subgroupPartitionedInclusiveMaxNV(uvec4, uvec4 ballot);\n"
+
+            "int    subgroupPartitionedInclusiveAndNV(int, uvec4 ballot);\n"
+            "ivec2  subgroupPartitionedInclusiveAndNV(ivec2, uvec4 ballot);\n"
+            "ivec3  subgroupPartitionedInclusiveAndNV(ivec3, uvec4 ballot);\n"
+            "ivec4  subgroupPartitionedInclusiveAndNV(ivec4, uvec4 ballot);\n"
+            "uint   subgroupPartitionedInclusiveAndNV(uint, uvec4 ballot);\n"
+            "uvec2  subgroupPartitionedInclusiveAndNV(uvec2, uvec4 ballot);\n"
+            "uvec3  subgroupPartitionedInclusiveAndNV(uvec3, uvec4 ballot);\n"
+            "uvec4  subgroupPartitionedInclusiveAndNV(uvec4, uvec4 ballot);\n"
+            "bool   subgroupPartitionedInclusiveAndNV(bool, uvec4 ballot);\n"
+            "bvec2  subgroupPartitionedInclusiveAndNV(bvec2, uvec4 ballot);\n"
+            "bvec3  subgroupPartitionedInclusiveAndNV(bvec3, uvec4 ballot);\n"
+            "bvec4  subgroupPartitionedInclusiveAndNV(bvec4, uvec4 ballot);\n"
+
+            "int    subgroupPartitionedInclusiveOrNV(int, uvec4 ballot);\n"
+            "ivec2  subgroupPartitionedInclusiveOrNV(ivec2, uvec4 ballot);\n"
+            "ivec3  subgroupPartitionedInclusiveOrNV(ivec3, uvec4 ballot);\n"
+            "ivec4  subgroupPartitionedInclusiveOrNV(ivec4, uvec4 ballot);\n"
+            "uint   subgroupPartitionedInclusiveOrNV(uint, uvec4 ballot);\n"
+            "uvec2  subgroupPartitionedInclusiveOrNV(uvec2, uvec4 ballot);\n"
+            "uvec3  subgroupPartitionedInclusiveOrNV(uvec3, uvec4 ballot);\n"
+            "uvec4  subgroupPartitionedInclusiveOrNV(uvec4, uvec4 ballot);\n"
+            "bool   subgroupPartitionedInclusiveOrNV(bool, uvec4 ballot);\n"
+            "bvec2  subgroupPartitionedInclusiveOrNV(bvec2, uvec4 ballot);\n"
+            "bvec3  subgroupPartitionedInclusiveOrNV(bvec3, uvec4 ballot);\n"
+            "bvec4  subgroupPartitionedInclusiveOrNV(bvec4, uvec4 ballot);\n"
+
+            "int    subgroupPartitionedInclusiveXorNV(int, uvec4 ballot);\n"
+            "ivec2  subgroupPartitionedInclusiveXorNV(ivec2, uvec4 ballot);\n"
+            "ivec3  subgroupPartitionedInclusiveXorNV(ivec3, uvec4 ballot);\n"
+            "ivec4  subgroupPartitionedInclusiveXorNV(ivec4, uvec4 ballot);\n"
+            "uint   subgroupPartitionedInclusiveXorNV(uint, uvec4 ballot);\n"
+            "uvec2  subgroupPartitionedInclusiveXorNV(uvec2, uvec4 ballot);\n"
+            "uvec3  subgroupPartitionedInclusiveXorNV(uvec3, uvec4 ballot);\n"
+            "uvec4  subgroupPartitionedInclusiveXorNV(uvec4, uvec4 ballot);\n"
+            "bool   subgroupPartitionedInclusiveXorNV(bool, uvec4 ballot);\n"
+            "bvec2  subgroupPartitionedInclusiveXorNV(bvec2, uvec4 ballot);\n"
+            "bvec3  subgroupPartitionedInclusiveXorNV(bvec3, uvec4 ballot);\n"
+            "bvec4  subgroupPartitionedInclusiveXorNV(bvec4, uvec4 ballot);\n"
+
+            "float  subgroupPartitionedExclusiveAddNV(float, uvec4 ballot);\n"
+            "vec2   subgroupPartitionedExclusiveAddNV(vec2, uvec4 ballot);\n"
+            "vec3   subgroupPartitionedExclusiveAddNV(vec3, uvec4 ballot);\n"
+            "vec4   subgroupPartitionedExclusiveAddNV(vec4, uvec4 ballot);\n"
+            "int    subgroupPartitionedExclusiveAddNV(int, uvec4 ballot);\n"
+            "ivec2  subgroupPartitionedExclusiveAddNV(ivec2, uvec4 ballot);\n"
+            "ivec3  subgroupPartitionedExclusiveAddNV(ivec3, uvec4 ballot);\n"
+            "ivec4  subgroupPartitionedExclusiveAddNV(ivec4, uvec4 ballot);\n"
+            "uint   subgroupPartitionedExclusiveAddNV(uint, uvec4 ballot);\n"
+            "uvec2  subgroupPartitionedExclusiveAddNV(uvec2, uvec4 ballot);\n"
+            "uvec3  subgroupPartitionedExclusiveAddNV(uvec3, uvec4 ballot);\n"
+            "uvec4  subgroupPartitionedExclusiveAddNV(uvec4, uvec4 ballot);\n"
+
+            "float  subgroupPartitionedExclusiveMulNV(float, uvec4 ballot);\n"
+            "vec2   subgroupPartitionedExclusiveMulNV(vec2, uvec4 ballot);\n"
+            "vec3   subgroupPartitionedExclusiveMulNV(vec3, uvec4 ballot);\n"
+            "vec4   subgroupPartitionedExclusiveMulNV(vec4, uvec4 ballot);\n"
+            "int    subgroupPartitionedExclusiveMulNV(int, uvec4 ballot);\n"
+            "ivec2  subgroupPartitionedExclusiveMulNV(ivec2, uvec4 ballot);\n"
+            "ivec3  subgroupPartitionedExclusiveMulNV(ivec3, uvec4 ballot);\n"
+            "ivec4  subgroupPartitionedExclusiveMulNV(ivec4, uvec4 ballot);\n"
+            "uint   subgroupPartitionedExclusiveMulNV(uint, uvec4 ballot);\n"
+            "uvec2  subgroupPartitionedExclusiveMulNV(uvec2, uvec4 ballot);\n"
+            "uvec3  subgroupPartitionedExclusiveMulNV(uvec3, uvec4 ballot);\n"
+            "uvec4  subgroupPartitionedExclusiveMulNV(uvec4, uvec4 ballot);\n"
+
+            "float  subgroupPartitionedExclusiveMinNV(float, uvec4 ballot);\n"
+            "vec2   subgroupPartitionedExclusiveMinNV(vec2, uvec4 ballot);\n"
+            "vec3   subgroupPartitionedExclusiveMinNV(vec3, uvec4 ballot);\n"
+            "vec4   subgroupPartitionedExclusiveMinNV(vec4, uvec4 ballot);\n"
+            "int    subgroupPartitionedExclusiveMinNV(int, uvec4 ballot);\n"
+            "ivec2  subgroupPartitionedExclusiveMinNV(ivec2, uvec4 ballot);\n"
+            "ivec3  subgroupPartitionedExclusiveMinNV(ivec3, uvec4 ballot);\n"
+            "ivec4  subgroupPartitionedExclusiveMinNV(ivec4, uvec4 ballot);\n"
+            "uint   subgroupPartitionedExclusiveMinNV(uint, uvec4 ballot);\n"
+            "uvec2  subgroupPartitionedExclusiveMinNV(uvec2, uvec4 ballot);\n"
+            "uvec3  subgroupPartitionedExclusiveMinNV(uvec3, uvec4 ballot);\n"
+            "uvec4  subgroupPartitionedExclusiveMinNV(uvec4, uvec4 ballot);\n"
+
+            "float  subgroupPartitionedExclusiveMaxNV(float, uvec4 ballot);\n"
+            "vec2   subgroupPartitionedExclusiveMaxNV(vec2, uvec4 ballot);\n"
+            "vec3   subgroupPartitionedExclusiveMaxNV(vec3, uvec4 ballot);\n"
+            "vec4   subgroupPartitionedExclusiveMaxNV(vec4, uvec4 ballot);\n"
+            "int    subgroupPartitionedExclusiveMaxNV(int, uvec4 ballot);\n"
+            "ivec2  subgroupPartitionedExclusiveMaxNV(ivec2, uvec4 ballot);\n"
+            "ivec3  subgroupPartitionedExclusiveMaxNV(ivec3, uvec4 ballot);\n"
+            "ivec4  subgroupPartitionedExclusiveMaxNV(ivec4, uvec4 ballot);\n"
+            "uint   subgroupPartitionedExclusiveMaxNV(uint, uvec4 ballot);\n"
+            "uvec2  subgroupPartitionedExclusiveMaxNV(uvec2, uvec4 ballot);\n"
+            "uvec3  subgroupPartitionedExclusiveMaxNV(uvec3, uvec4 ballot);\n"
+            "uvec4  subgroupPartitionedExclusiveMaxNV(uvec4, uvec4 ballot);\n"
+
+            "int    subgroupPartitionedExclusiveAndNV(int, uvec4 ballot);\n"
+            "ivec2  subgroupPartitionedExclusiveAndNV(ivec2, uvec4 ballot);\n"
+            "ivec3  subgroupPartitionedExclusiveAndNV(ivec3, uvec4 ballot);\n"
+            "ivec4  subgroupPartitionedExclusiveAndNV(ivec4, uvec4 ballot);\n"
+            "uint   subgroupPartitionedExclusiveAndNV(uint, uvec4 ballot);\n"
+            "uvec2  subgroupPartitionedExclusiveAndNV(uvec2, uvec4 ballot);\n"
+            "uvec3  subgroupPartitionedExclusiveAndNV(uvec3, uvec4 ballot);\n"
+            "uvec4  subgroupPartitionedExclusiveAndNV(uvec4, uvec4 ballot);\n"
+            "bool   subgroupPartitionedExclusiveAndNV(bool, uvec4 ballot);\n"
+            "bvec2  subgroupPartitionedExclusiveAndNV(bvec2, uvec4 ballot);\n"
+            "bvec3  subgroupPartitionedExclusiveAndNV(bvec3, uvec4 ballot);\n"
+            "bvec4  subgroupPartitionedExclusiveAndNV(bvec4, uvec4 ballot);\n"
+
+            "int    subgroupPartitionedExclusiveOrNV(int, uvec4 ballot);\n"
+            "ivec2  subgroupPartitionedExclusiveOrNV(ivec2, uvec4 ballot);\n"
+            "ivec3  subgroupPartitionedExclusiveOrNV(ivec3, uvec4 ballot);\n"
+            "ivec4  subgroupPartitionedExclusiveOrNV(ivec4, uvec4 ballot);\n"
+            "uint   subgroupPartitionedExclusiveOrNV(uint, uvec4 ballot);\n"
+            "uvec2  subgroupPartitionedExclusiveOrNV(uvec2, uvec4 ballot);\n"
+            "uvec3  subgroupPartitionedExclusiveOrNV(uvec3, uvec4 ballot);\n"
+            "uvec4  subgroupPartitionedExclusiveOrNV(uvec4, uvec4 ballot);\n"
+            "bool   subgroupPartitionedExclusiveOrNV(bool, uvec4 ballot);\n"
+            "bvec2  subgroupPartitionedExclusiveOrNV(bvec2, uvec4 ballot);\n"
+            "bvec3  subgroupPartitionedExclusiveOrNV(bvec3, uvec4 ballot);\n"
+            "bvec4  subgroupPartitionedExclusiveOrNV(bvec4, uvec4 ballot);\n"
+
+            "int    subgroupPartitionedExclusiveXorNV(int, uvec4 ballot);\n"
+            "ivec2  subgroupPartitionedExclusiveXorNV(ivec2, uvec4 ballot);\n"
+            "ivec3  subgroupPartitionedExclusiveXorNV(ivec3, uvec4 ballot);\n"
+            "ivec4  subgroupPartitionedExclusiveXorNV(ivec4, uvec4 ballot);\n"
+            "uint   subgroupPartitionedExclusiveXorNV(uint, uvec4 ballot);\n"
+            "uvec2  subgroupPartitionedExclusiveXorNV(uvec2, uvec4 ballot);\n"
+            "uvec3  subgroupPartitionedExclusiveXorNV(uvec3, uvec4 ballot);\n"
+            "uvec4  subgroupPartitionedExclusiveXorNV(uvec4, uvec4 ballot);\n"
+            "bool   subgroupPartitionedExclusiveXorNV(bool, uvec4 ballot);\n"
+            "bvec2  subgroupPartitionedExclusiveXorNV(bvec2, uvec4 ballot);\n"
+            "bvec3  subgroupPartitionedExclusiveXorNV(bvec3, uvec4 ballot);\n"
+            "bvec4  subgroupPartitionedExclusiveXorNV(bvec4, uvec4 ballot);\n"
+#endif
+
+            "\n");
+
+        if (profile != EEsProfile && version >= 400) {
+            commonBuiltins.append(
+                "bool   subgroupAllEqual(double);\n"
+                "bool   subgroupAllEqual(dvec2);\n"
+                "bool   subgroupAllEqual(dvec3);\n"
+                "bool   subgroupAllEqual(dvec4);\n"
+
+                "double subgroupBroadcast(double, uint);\n"
+                "dvec2  subgroupBroadcast(dvec2, uint);\n"
+                "dvec3  subgroupBroadcast(dvec3, uint);\n"
+                "dvec4  subgroupBroadcast(dvec4, uint);\n"
+
+                "double subgroupBroadcastFirst(double);\n"
+                "dvec2  subgroupBroadcastFirst(dvec2);\n"
+                "dvec3  subgroupBroadcastFirst(dvec3);\n"
+                "dvec4  subgroupBroadcastFirst(dvec4);\n"
+
+                "double subgroupShuffle(double, uint);\n"
+                "dvec2  subgroupShuffle(dvec2, uint);\n"
+                "dvec3  subgroupShuffle(dvec3, uint);\n"
+                "dvec4  subgroupShuffle(dvec4, uint);\n"
+
+                "double subgroupShuffleXor(double, uint);\n"
+                "dvec2  subgroupShuffleXor(dvec2, uint);\n"
+                "dvec3  subgroupShuffleXor(dvec3, uint);\n"
+                "dvec4  subgroupShuffleXor(dvec4, uint);\n"
+
+                "double subgroupShuffleUp(double, uint delta);\n"
+                "dvec2  subgroupShuffleUp(dvec2, uint delta);\n"
+                "dvec3  subgroupShuffleUp(dvec3, uint delta);\n"
+                "dvec4  subgroupShuffleUp(dvec4, uint delta);\n"
+
+                "double subgroupShuffleDown(double, uint delta);\n"
+                "dvec2  subgroupShuffleDown(dvec2, uint delta);\n"
+                "dvec3  subgroupShuffleDown(dvec3, uint delta);\n"
+                "dvec4  subgroupShuffleDown(dvec4, uint delta);\n"
+
+                "double subgroupAdd(double);\n"
+                "dvec2  subgroupAdd(dvec2);\n"
+                "dvec3  subgroupAdd(dvec3);\n"
+                "dvec4  subgroupAdd(dvec4);\n"
+
+                "double subgroupMul(double);\n"
+                "dvec2  subgroupMul(dvec2);\n"
+                "dvec3  subgroupMul(dvec3);\n"
+                "dvec4  subgroupMul(dvec4);\n"
+
+                "double subgroupMin(double);\n"
+                "dvec2  subgroupMin(dvec2);\n"
+                "dvec3  subgroupMin(dvec3);\n"
+                "dvec4  subgroupMin(dvec4);\n"
+
+                "double subgroupMax(double);\n"
+                "dvec2  subgroupMax(dvec2);\n"
+                "dvec3  subgroupMax(dvec3);\n"
+                "dvec4  subgroupMax(dvec4);\n"
+
+                "double subgroupInclusiveAdd(double);\n"
+                "dvec2  subgroupInclusiveAdd(dvec2);\n"
+                "dvec3  subgroupInclusiveAdd(dvec3);\n"
+                "dvec4  subgroupInclusiveAdd(dvec4);\n"
+
+                "double subgroupInclusiveMul(double);\n"
+                "dvec2  subgroupInclusiveMul(dvec2);\n"
+                "dvec3  subgroupInclusiveMul(dvec3);\n"
+                "dvec4  subgroupInclusiveMul(dvec4);\n"
+
+                "double subgroupInclusiveMin(double);\n"
+                "dvec2  subgroupInclusiveMin(dvec2);\n"
+                "dvec3  subgroupInclusiveMin(dvec3);\n"
+                "dvec4  subgroupInclusiveMin(dvec4);\n"
+
+                "double subgroupInclusiveMax(double);\n"
+                "dvec2  subgroupInclusiveMax(dvec2);\n"
+                "dvec3  subgroupInclusiveMax(dvec3);\n"
+                "dvec4  subgroupInclusiveMax(dvec4);\n"
+
+                "double subgroupExclusiveAdd(double);\n"
+                "dvec2  subgroupExclusiveAdd(dvec2);\n"
+                "dvec3  subgroupExclusiveAdd(dvec3);\n"
+                "dvec4  subgroupExclusiveAdd(dvec4);\n"
+
+                "double subgroupExclusiveMul(double);\n"
+                "dvec2  subgroupExclusiveMul(dvec2);\n"
+                "dvec3  subgroupExclusiveMul(dvec3);\n"
+                "dvec4  subgroupExclusiveMul(dvec4);\n"
+
+                "double subgroupExclusiveMin(double);\n"
+                "dvec2  subgroupExclusiveMin(dvec2);\n"
+                "dvec3  subgroupExclusiveMin(dvec3);\n"
+                "dvec4  subgroupExclusiveMin(dvec4);\n"
+
+                "double subgroupExclusiveMax(double);\n"
+                "dvec2  subgroupExclusiveMax(dvec2);\n"
+                "dvec3  subgroupExclusiveMax(dvec3);\n"
+                "dvec4  subgroupExclusiveMax(dvec4);\n"
+
+                "double subgroupClusteredAdd(double, uint);\n"
+                "dvec2  subgroupClusteredAdd(dvec2, uint);\n"
+                "dvec3  subgroupClusteredAdd(dvec3, uint);\n"
+                "dvec4  subgroupClusteredAdd(dvec4, uint);\n"
+
+                "double subgroupClusteredMul(double, uint);\n"
+                "dvec2  subgroupClusteredMul(dvec2, uint);\n"
+                "dvec3  subgroupClusteredMul(dvec3, uint);\n"
+                "dvec4  subgroupClusteredMul(dvec4, uint);\n"
+
+                "double subgroupClusteredMin(double, uint);\n"
+                "dvec2  subgroupClusteredMin(dvec2, uint);\n"
+                "dvec3  subgroupClusteredMin(dvec3, uint);\n"
+                "dvec4  subgroupClusteredMin(dvec4, uint);\n"
+
+                "double subgroupClusteredMax(double, uint);\n"
+                "dvec2  subgroupClusteredMax(dvec2, uint);\n"
+                "dvec3  subgroupClusteredMax(dvec3, uint);\n"
+                "dvec4  subgroupClusteredMax(dvec4, uint);\n"
+
+                "double subgroupQuadBroadcast(double, uint);\n"
+                "dvec2  subgroupQuadBroadcast(dvec2, uint);\n"
+                "dvec3  subgroupQuadBroadcast(dvec3, uint);\n"
+                "dvec4  subgroupQuadBroadcast(dvec4, uint);\n"
+
+                "double subgroupQuadSwapHorizontal(double);\n"
+                "dvec2  subgroupQuadSwapHorizontal(dvec2);\n"
+                "dvec3  subgroupQuadSwapHorizontal(dvec3);\n"
+                "dvec4  subgroupQuadSwapHorizontal(dvec4);\n"
+
+                "double subgroupQuadSwapVertical(double);\n"
+                "dvec2  subgroupQuadSwapVertical(dvec2);\n"
+                "dvec3  subgroupQuadSwapVertical(dvec3);\n"
+                "dvec4  subgroupQuadSwapVertical(dvec4);\n"
+
+                "double subgroupQuadSwapDiagonal(double);\n"
+                "dvec2  subgroupQuadSwapDiagonal(dvec2);\n"
+                "dvec3  subgroupQuadSwapDiagonal(dvec3);\n"
+                "dvec4  subgroupQuadSwapDiagonal(dvec4);\n"
+
+
+#ifdef NV_EXTENSIONS
+                "uvec4  subgroupPartitionNV(double);\n"
+                "uvec4  subgroupPartitionNV(dvec2);\n"
+                "uvec4  subgroupPartitionNV(dvec3);\n"
+                "uvec4  subgroupPartitionNV(dvec4);\n"
+
+                "double subgroupPartitionedAddNV(double, uvec4 ballot);\n"
+                "dvec2  subgroupPartitionedAddNV(dvec2, uvec4 ballot);\n"
+                "dvec3  subgroupPartitionedAddNV(dvec3, uvec4 ballot);\n"
+                "dvec4  subgroupPartitionedAddNV(dvec4, uvec4 ballot);\n"
+
+                "double subgroupPartitionedMulNV(double, uvec4 ballot);\n"
+                "dvec2  subgroupPartitionedMulNV(dvec2, uvec4 ballot);\n"
+                "dvec3  subgroupPartitionedMulNV(dvec3, uvec4 ballot);\n"
+                "dvec4  subgroupPartitionedMulNV(dvec4, uvec4 ballot);\n"
+
+                "double subgroupPartitionedMinNV(double, uvec4 ballot);\n"
+                "dvec2  subgroupPartitionedMinNV(dvec2, uvec4 ballot);\n"
+                "dvec3  subgroupPartitionedMinNV(dvec3, uvec4 ballot);\n"
+                "dvec4  subgroupPartitionedMinNV(dvec4, uvec4 ballot);\n"
+
+                "double subgroupPartitionedMaxNV(double, uvec4 ballot);\n"
+                "dvec2  subgroupPartitionedMaxNV(dvec2, uvec4 ballot);\n"
+                "dvec3  subgroupPartitionedMaxNV(dvec3, uvec4 ballot);\n"
+                "dvec4  subgroupPartitionedMaxNV(dvec4, uvec4 ballot);\n"
+
+                "double subgroupPartitionedInclusiveAddNV(double, uvec4 ballot);\n"
+                "dvec2  subgroupPartitionedInclusiveAddNV(dvec2, uvec4 ballot);\n"
+                "dvec3  subgroupPartitionedInclusiveAddNV(dvec3, uvec4 ballot);\n"
+                "dvec4  subgroupPartitionedInclusiveAddNV(dvec4, uvec4 ballot);\n"
+
+                "double subgroupPartitionedInclusiveMulNV(double, uvec4 ballot);\n"
+                "dvec2  subgroupPartitionedInclusiveMulNV(dvec2, uvec4 ballot);\n"
+                "dvec3  subgroupPartitionedInclusiveMulNV(dvec3, uvec4 ballot);\n"
+                "dvec4  subgroupPartitionedInclusiveMulNV(dvec4, uvec4 ballot);\n"
+
+                "double subgroupPartitionedInclusiveMinNV(double, uvec4 ballot);\n"
+                "dvec2  subgroupPartitionedInclusiveMinNV(dvec2, uvec4 ballot);\n"
+                "dvec3  subgroupPartitionedInclusiveMinNV(dvec3, uvec4 ballot);\n"
+                "dvec4  subgroupPartitionedInclusiveMinNV(dvec4, uvec4 ballot);\n"
+
+                "double subgroupPartitionedInclusiveMaxNV(double, uvec4 ballot);\n"
+                "dvec2  subgroupPartitionedInclusiveMaxNV(dvec2, uvec4 ballot);\n"
+                "dvec3  subgroupPartitionedInclusiveMaxNV(dvec3, uvec4 ballot);\n"
+                "dvec4  subgroupPartitionedInclusiveMaxNV(dvec4, uvec4 ballot);\n"
+
+                "double subgroupPartitionedExclusiveAddNV(double, uvec4 ballot);\n"
+                "dvec2  subgroupPartitionedExclusiveAddNV(dvec2, uvec4 ballot);\n"
+                "dvec3  subgroupPartitionedExclusiveAddNV(dvec3, uvec4 ballot);\n"
+                "dvec4  subgroupPartitionedExclusiveAddNV(dvec4, uvec4 ballot);\n"
+
+                "double subgroupPartitionedExclusiveMulNV(double, uvec4 ballot);\n"
+                "dvec2  subgroupPartitionedExclusiveMulNV(dvec2, uvec4 ballot);\n"
+                "dvec3  subgroupPartitionedExclusiveMulNV(dvec3, uvec4 ballot);\n"
+                "dvec4  subgroupPartitionedExclusiveMulNV(dvec4, uvec4 ballot);\n"
+
+                "double subgroupPartitionedExclusiveMinNV(double, uvec4 ballot);\n"
+                "dvec2  subgroupPartitionedExclusiveMinNV(dvec2, uvec4 ballot);\n"
+                "dvec3  subgroupPartitionedExclusiveMinNV(dvec3, uvec4 ballot);\n"
+                "dvec4  subgroupPartitionedExclusiveMinNV(dvec4, uvec4 ballot);\n"
+
+                "double subgroupPartitionedExclusiveMaxNV(double, uvec4 ballot);\n"
+                "dvec2  subgroupPartitionedExclusiveMaxNV(dvec2, uvec4 ballot);\n"
+                "dvec3  subgroupPartitionedExclusiveMaxNV(dvec3, uvec4 ballot);\n"
+                "dvec4  subgroupPartitionedExclusiveMaxNV(dvec4, uvec4 ballot);\n"
+#endif
+
+                "\n");
+            }
+
+        stageBuiltins[EShLangCompute].append(
+            "void subgroupMemoryBarrierShared();"
+
+            "\n"
+            );
+    }
+
     if (profile != EEsProfile && version >= 460) {
         commonBuiltins.append(
             "bool anyInvocation(bool);"
@@ -1675,6 +2793,16 @@
             "f16vec3   minInvocationsAMD(f16vec3);"
             "f16vec4   minInvocationsAMD(f16vec4);"
 
+            "int16_t minInvocationsAMD(int16_t);"
+            "i16vec2 minInvocationsAMD(i16vec2);"
+            "i16vec3 minInvocationsAMD(i16vec3);"
+            "i16vec4 minInvocationsAMD(i16vec4);"
+
+            "uint16_t minInvocationsAMD(uint16_t);"
+            "u16vec2  minInvocationsAMD(u16vec2);"
+            "u16vec3  minInvocationsAMD(u16vec3);"
+            "u16vec4  minInvocationsAMD(u16vec4);"
+
             "float minInvocationsInclusiveScanAMD(float);"
             "vec2  minInvocationsInclusiveScanAMD(vec2);"
             "vec3  minInvocationsInclusiveScanAMD(vec3);"
@@ -1710,6 +2838,16 @@
             "f16vec3   minInvocationsInclusiveScanAMD(f16vec3);"
             "f16vec4   minInvocationsInclusiveScanAMD(f16vec4);"
 
+            "int16_t minInvocationsInclusiveScanAMD(int16_t);"
+            "i16vec2 minInvocationsInclusiveScanAMD(i16vec2);"
+            "i16vec3 minInvocationsInclusiveScanAMD(i16vec3);"
+            "i16vec4 minInvocationsInclusiveScanAMD(i16vec4);"
+
+            "uint16_t minInvocationsInclusiveScanAMD(uint16_t);"
+            "u16vec2  minInvocationsInclusiveScanAMD(u16vec2);"
+            "u16vec3  minInvocationsInclusiveScanAMD(u16vec3);"
+            "u16vec4  minInvocationsInclusiveScanAMD(u16vec4);"
+
             "float minInvocationsExclusiveScanAMD(float);"
             "vec2  minInvocationsExclusiveScanAMD(vec2);"
             "vec3  minInvocationsExclusiveScanAMD(vec3);"
@@ -1745,6 +2883,16 @@
             "f16vec3   minInvocationsExclusiveScanAMD(f16vec3);"
             "f16vec4   minInvocationsExclusiveScanAMD(f16vec4);"
 
+            "int16_t minInvocationsExclusiveScanAMD(int16_t);"
+            "i16vec2 minInvocationsExclusiveScanAMD(i16vec2);"
+            "i16vec3 minInvocationsExclusiveScanAMD(i16vec3);"
+            "i16vec4 minInvocationsExclusiveScanAMD(i16vec4);"
+
+            "uint16_t minInvocationsExclusiveScanAMD(uint16_t);"
+            "u16vec2  minInvocationsExclusiveScanAMD(u16vec2);"
+            "u16vec3  minInvocationsExclusiveScanAMD(u16vec3);"
+            "u16vec4  minInvocationsExclusiveScanAMD(u16vec4);"
+
             "float maxInvocationsAMD(float);"
             "vec2  maxInvocationsAMD(vec2);"
             "vec3  maxInvocationsAMD(vec3);"
@@ -1780,6 +2928,16 @@
             "f16vec3   maxInvocationsAMD(f16vec3);"
             "f16vec4   maxInvocationsAMD(f16vec4);"
 
+            "int16_t maxInvocationsAMD(int16_t);"
+            "i16vec2 maxInvocationsAMD(i16vec2);"
+            "i16vec3 maxInvocationsAMD(i16vec3);"
+            "i16vec4 maxInvocationsAMD(i16vec4);"
+
+            "uint16_t maxInvocationsAMD(uint16_t);"
+            "u16vec2  maxInvocationsAMD(u16vec2);"
+            "u16vec3  maxInvocationsAMD(u16vec3);"
+            "u16vec4  maxInvocationsAMD(u16vec4);"
+
             "float maxInvocationsInclusiveScanAMD(float);"
             "vec2  maxInvocationsInclusiveScanAMD(vec2);"
             "vec3  maxInvocationsInclusiveScanAMD(vec3);"
@@ -1815,6 +2973,16 @@
             "f16vec3   maxInvocationsInclusiveScanAMD(f16vec3);"
             "f16vec4   maxInvocationsInclusiveScanAMD(f16vec4);"
 
+            "int16_t maxInvocationsInclusiveScanAMD(int16_t);"
+            "i16vec2 maxInvocationsInclusiveScanAMD(i16vec2);"
+            "i16vec3 maxInvocationsInclusiveScanAMD(i16vec3);"
+            "i16vec4 maxInvocationsInclusiveScanAMD(i16vec4);"
+
+            "uint16_t maxInvocationsInclusiveScanAMD(uint16_t);"
+            "u16vec2  maxInvocationsInclusiveScanAMD(u16vec2);"
+            "u16vec3  maxInvocationsInclusiveScanAMD(u16vec3);"
+            "u16vec4  maxInvocationsInclusiveScanAMD(u16vec4);"
+
             "float maxInvocationsExclusiveScanAMD(float);"
             "vec2  maxInvocationsExclusiveScanAMD(vec2);"
             "vec3  maxInvocationsExclusiveScanAMD(vec3);"
@@ -1850,6 +3018,16 @@
             "f16vec3   maxInvocationsExclusiveScanAMD(f16vec3);"
             "f16vec4   maxInvocationsExclusiveScanAMD(f16vec4);"
 
+            "int16_t maxInvocationsExclusiveScanAMD(int16_t);"
+            "i16vec2 maxInvocationsExclusiveScanAMD(i16vec2);"
+            "i16vec3 maxInvocationsExclusiveScanAMD(i16vec3);"
+            "i16vec4 maxInvocationsExclusiveScanAMD(i16vec4);"
+
+            "uint16_t maxInvocationsExclusiveScanAMD(uint16_t);"
+            "u16vec2  maxInvocationsExclusiveScanAMD(u16vec2);"
+            "u16vec3  maxInvocationsExclusiveScanAMD(u16vec3);"
+            "u16vec4  maxInvocationsExclusiveScanAMD(u16vec4);"
+
             "float addInvocationsAMD(float);"
             "vec2  addInvocationsAMD(vec2);"
             "vec3  addInvocationsAMD(vec3);"
@@ -1885,6 +3063,16 @@
             "f16vec3   addInvocationsAMD(f16vec3);"
             "f16vec4   addInvocationsAMD(f16vec4);"
 
+            "int16_t addInvocationsAMD(int16_t);"
+            "i16vec2 addInvocationsAMD(i16vec2);"
+            "i16vec3 addInvocationsAMD(i16vec3);"
+            "i16vec4 addInvocationsAMD(i16vec4);"
+
+            "uint16_t addInvocationsAMD(uint16_t);"
+            "u16vec2  addInvocationsAMD(u16vec2);"
+            "u16vec3  addInvocationsAMD(u16vec3);"
+            "u16vec4  addInvocationsAMD(u16vec4);"
+
             "float addInvocationsInclusiveScanAMD(float);"
             "vec2  addInvocationsInclusiveScanAMD(vec2);"
             "vec3  addInvocationsInclusiveScanAMD(vec3);"
@@ -1920,6 +3108,16 @@
             "f16vec3   addInvocationsInclusiveScanAMD(f16vec3);"
             "f16vec4   addInvocationsInclusiveScanAMD(f16vec4);"
 
+            "int16_t addInvocationsInclusiveScanAMD(int16_t);"
+            "i16vec2 addInvocationsInclusiveScanAMD(i16vec2);"
+            "i16vec3 addInvocationsInclusiveScanAMD(i16vec3);"
+            "i16vec4 addInvocationsInclusiveScanAMD(i16vec4);"
+
+            "uint16_t addInvocationsInclusiveScanAMD(uint16_t);"
+            "u16vec2  addInvocationsInclusiveScanAMD(u16vec2);"
+            "u16vec3  addInvocationsInclusiveScanAMD(u16vec3);"
+            "u16vec4  addInvocationsInclusiveScanAMD(u16vec4);"
+
             "float addInvocationsExclusiveScanAMD(float);"
             "vec2  addInvocationsExclusiveScanAMD(vec2);"
             "vec3  addInvocationsExclusiveScanAMD(vec3);"
@@ -1955,6 +3153,16 @@
             "f16vec3   addInvocationsExclusiveScanAMD(f16vec3);"
             "f16vec4   addInvocationsExclusiveScanAMD(f16vec4);"
 
+            "int16_t addInvocationsExclusiveScanAMD(int16_t);"
+            "i16vec2 addInvocationsExclusiveScanAMD(i16vec2);"
+            "i16vec3 addInvocationsExclusiveScanAMD(i16vec3);"
+            "i16vec4 addInvocationsExclusiveScanAMD(i16vec4);"
+
+            "uint16_t addInvocationsExclusiveScanAMD(uint16_t);"
+            "u16vec2  addInvocationsExclusiveScanAMD(u16vec2);"
+            "u16vec3  addInvocationsExclusiveScanAMD(u16vec3);"
+            "u16vec4  addInvocationsExclusiveScanAMD(u16vec4);"
+
             "float minInvocationsNonUniformAMD(float);"
             "vec2  minInvocationsNonUniformAMD(vec2);"
             "vec3  minInvocationsNonUniformAMD(vec3);"
@@ -1990,6 +3198,16 @@
             "f16vec3   minInvocationsNonUniformAMD(f16vec3);"
             "f16vec4   minInvocationsNonUniformAMD(f16vec4);"
 
+            "int16_t minInvocationsNonUniformAMD(int16_t);"
+            "i16vec2 minInvocationsNonUniformAMD(i16vec2);"
+            "i16vec3 minInvocationsNonUniformAMD(i16vec3);"
+            "i16vec4 minInvocationsNonUniformAMD(i16vec4);"
+
+            "uint16_t minInvocationsNonUniformAMD(uint16_t);"
+            "u16vec2  minInvocationsNonUniformAMD(u16vec2);"
+            "u16vec3  minInvocationsNonUniformAMD(u16vec3);"
+            "u16vec4  minInvocationsNonUniformAMD(u16vec4);"
+
             "float minInvocationsInclusiveScanNonUniformAMD(float);"
             "vec2  minInvocationsInclusiveScanNonUniformAMD(vec2);"
             "vec3  minInvocationsInclusiveScanNonUniformAMD(vec3);"
@@ -2025,6 +3243,16 @@
             "f16vec3   minInvocationsInclusiveScanNonUniformAMD(f16vec3);"
             "f16vec4   minInvocationsInclusiveScanNonUniformAMD(f16vec4);"
 
+            "int16_t minInvocationsInclusiveScanNonUniformAMD(int16_t);"
+            "i16vec2 minInvocationsInclusiveScanNonUniformAMD(i16vec2);"
+            "i16vec3 minInvocationsInclusiveScanNonUniformAMD(i16vec3);"
+            "i16vec4 minInvocationsInclusiveScanNonUniformAMD(i16vec4);"
+
+            "uint16_t minInvocationsInclusiveScanNonUniformAMD(uint16_t);"
+            "u16vec2  minInvocationsInclusiveScanNonUniformAMD(u16vec2);"
+            "u16vec3  minInvocationsInclusiveScanNonUniformAMD(u16vec3);"
+            "u16vec4  minInvocationsInclusiveScanNonUniformAMD(u16vec4);"
+
             "float minInvocationsExclusiveScanNonUniformAMD(float);"
             "vec2  minInvocationsExclusiveScanNonUniformAMD(vec2);"
             "vec3  minInvocationsExclusiveScanNonUniformAMD(vec3);"
@@ -2060,6 +3288,16 @@
             "f16vec3   minInvocationsExclusiveScanNonUniformAMD(f16vec3);"
             "f16vec4   minInvocationsExclusiveScanNonUniformAMD(f16vec4);"
 
+            "int16_t minInvocationsExclusiveScanNonUniformAMD(int16_t);"
+            "i16vec2 minInvocationsExclusiveScanNonUniformAMD(i16vec2);"
+            "i16vec3 minInvocationsExclusiveScanNonUniformAMD(i16vec3);"
+            "i16vec4 minInvocationsExclusiveScanNonUniformAMD(i16vec4);"
+
+            "uint16_t minInvocationsExclusiveScanNonUniformAMD(uint16_t);"
+            "u16vec2  minInvocationsExclusiveScanNonUniformAMD(u16vec2);"
+            "u16vec3  minInvocationsExclusiveScanNonUniformAMD(u16vec3);"
+            "u16vec4  minInvocationsExclusiveScanNonUniformAMD(u16vec4);"
+
             "float maxInvocationsNonUniformAMD(float);"
             "vec2  maxInvocationsNonUniformAMD(vec2);"
             "vec3  maxInvocationsNonUniformAMD(vec3);"
@@ -2095,6 +3333,16 @@
             "f16vec3   maxInvocationsNonUniformAMD(f16vec3);"
             "f16vec4   maxInvocationsNonUniformAMD(f16vec4);"
 
+            "int16_t maxInvocationsNonUniformAMD(int16_t);"
+            "i16vec2 maxInvocationsNonUniformAMD(i16vec2);"
+            "i16vec3 maxInvocationsNonUniformAMD(i16vec3);"
+            "i16vec4 maxInvocationsNonUniformAMD(i16vec4);"
+
+            "uint16_t maxInvocationsNonUniformAMD(uint16_t);"
+            "u16vec2  maxInvocationsNonUniformAMD(u16vec2);"
+            "u16vec3  maxInvocationsNonUniformAMD(u16vec3);"
+            "u16vec4  maxInvocationsNonUniformAMD(u16vec4);"
+
             "float maxInvocationsInclusiveScanNonUniformAMD(float);"
             "vec2  maxInvocationsInclusiveScanNonUniformAMD(vec2);"
             "vec3  maxInvocationsInclusiveScanNonUniformAMD(vec3);"
@@ -2130,6 +3378,16 @@
             "f16vec3   maxInvocationsInclusiveScanNonUniformAMD(f16vec3);"
             "f16vec4   maxInvocationsInclusiveScanNonUniformAMD(f16vec4);"
 
+            "int16_t maxInvocationsInclusiveScanNonUniformAMD(int16_t);"
+            "i16vec2 maxInvocationsInclusiveScanNonUniformAMD(i16vec2);"
+            "i16vec3 maxInvocationsInclusiveScanNonUniformAMD(i16vec3);"
+            "i16vec4 maxInvocationsInclusiveScanNonUniformAMD(i16vec4);"
+
+            "uint16_t maxInvocationsInclusiveScanNonUniformAMD(uint16_t);"
+            "u16vec2  maxInvocationsInclusiveScanNonUniformAMD(u16vec2);"
+            "u16vec3  maxInvocationsInclusiveScanNonUniformAMD(u16vec3);"
+            "u16vec4  maxInvocationsInclusiveScanNonUniformAMD(u16vec4);"
+
             "float maxInvocationsExclusiveScanNonUniformAMD(float);"
             "vec2  maxInvocationsExclusiveScanNonUniformAMD(vec2);"
             "vec3  maxInvocationsExclusiveScanNonUniformAMD(vec3);"
@@ -2165,6 +3423,16 @@
             "f16vec3   maxInvocationsExclusiveScanNonUniformAMD(f16vec3);"
             "f16vec4   maxInvocationsExclusiveScanNonUniformAMD(f16vec4);"
 
+            "int16_t maxInvocationsExclusiveScanNonUniformAMD(int16_t);"
+            "i16vec2 maxInvocationsExclusiveScanNonUniformAMD(i16vec2);"
+            "i16vec3 maxInvocationsExclusiveScanNonUniformAMD(i16vec3);"
+            "i16vec4 maxInvocationsExclusiveScanNonUniformAMD(i16vec4);"
+
+            "uint16_t maxInvocationsExclusiveScanNonUniformAMD(uint16_t);"
+            "u16vec2  maxInvocationsExclusiveScanNonUniformAMD(u16vec2);"
+            "u16vec3  maxInvocationsExclusiveScanNonUniformAMD(u16vec3);"
+            "u16vec4  maxInvocationsExclusiveScanNonUniformAMD(u16vec4);"
+
             "float addInvocationsNonUniformAMD(float);"
             "vec2  addInvocationsNonUniformAMD(vec2);"
             "vec3  addInvocationsNonUniformAMD(vec3);"
@@ -2200,6 +3468,16 @@
             "f16vec3   addInvocationsNonUniformAMD(f16vec3);"
             "f16vec4   addInvocationsNonUniformAMD(f16vec4);"
 
+            "int16_t addInvocationsNonUniformAMD(int16_t);"
+            "i16vec2 addInvocationsNonUniformAMD(i16vec2);"
+            "i16vec3 addInvocationsNonUniformAMD(i16vec3);"
+            "i16vec4 addInvocationsNonUniformAMD(i16vec4);"
+
+            "uint16_t addInvocationsNonUniformAMD(uint16_t);"
+            "u16vec2  addInvocationsNonUniformAMD(u16vec2);"
+            "u16vec3  addInvocationsNonUniformAMD(u16vec3);"
+            "u16vec4  addInvocationsNonUniformAMD(u16vec4);"
+
             "float addInvocationsInclusiveScanNonUniformAMD(float);"
             "vec2  addInvocationsInclusiveScanNonUniformAMD(vec2);"
             "vec3  addInvocationsInclusiveScanNonUniformAMD(vec3);"
@@ -2235,6 +3513,16 @@
             "f16vec3   addInvocationsInclusiveScanNonUniformAMD(f16vec3);"
             "f16vec4   addInvocationsInclusiveScanNonUniformAMD(f16vec4);"
 
+            "int16_t addInvocationsInclusiveScanNonUniformAMD(int16_t);"
+            "i16vec2 addInvocationsInclusiveScanNonUniformAMD(i16vec2);"
+            "i16vec3 addInvocationsInclusiveScanNonUniformAMD(i16vec3);"
+            "i16vec4 addInvocationsInclusiveScanNonUniformAMD(i16vec4);"
+
+            "uint16_t addInvocationsInclusiveScanNonUniformAMD(uint16_t);"
+            "u16vec2  addInvocationsInclusiveScanNonUniformAMD(u16vec2);"
+            "u16vec3  addInvocationsInclusiveScanNonUniformAMD(u16vec3);"
+            "u16vec4  addInvocationsInclusiveScanNonUniformAMD(u16vec4);"
+
             "float addInvocationsExclusiveScanNonUniformAMD(float);"
             "vec2  addInvocationsExclusiveScanNonUniformAMD(vec2);"
             "vec3  addInvocationsExclusiveScanNonUniformAMD(vec3);"
@@ -2270,6 +3558,16 @@
             "f16vec3   addInvocationsExclusiveScanNonUniformAMD(f16vec3);"
             "f16vec4   addInvocationsExclusiveScanNonUniformAMD(f16vec4);"
 
+            "int16_t addInvocationsExclusiveScanNonUniformAMD(int16_t);"
+            "i16vec2 addInvocationsExclusiveScanNonUniformAMD(i16vec2);"
+            "i16vec3 addInvocationsExclusiveScanNonUniformAMD(i16vec3);"
+            "i16vec4 addInvocationsExclusiveScanNonUniformAMD(i16vec4);"
+
+            "uint16_t addInvocationsExclusiveScanNonUniformAMD(uint16_t);"
+            "u16vec2  addInvocationsExclusiveScanNonUniformAMD(u16vec2);"
+            "u16vec3  addInvocationsExclusiveScanNonUniformAMD(u16vec3);"
+            "u16vec4  addInvocationsExclusiveScanNonUniformAMD(u16vec4);"
+
             "float swizzleInvocationsAMD(float, uvec4);"
             "vec2  swizzleInvocationsAMD(vec2,  uvec4);"
             "vec3  swizzleInvocationsAMD(vec3,  uvec4);"
@@ -2330,7 +3628,31 @@
             "\n");
     }
 
-    // GL_AMD_gpu_shader_half_float
+    // 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  // AMD_EXTENSIONS
+
+    // GL_AMD_gpu_shader_half_float/Explicit types
     if (profile != EEsProfile && version >= 450) {
         commonBuiltins.append(
             "float16_t radians(float16_t);"
@@ -2678,9 +4000,168 @@
             "\n");
     }
 
-    // GL_AMD_gpu_shader_int16
+    // Explicit types
     if (profile != EEsProfile && version >= 450) {
         commonBuiltins.append(
+            "int8_t abs(int8_t);"
+            "i8vec2 abs(i8vec2);"
+            "i8vec3 abs(i8vec3);"
+            "i8vec4 abs(i8vec4);"
+
+            "int8_t sign(int8_t);"
+            "i8vec2 sign(i8vec2);"
+            "i8vec3 sign(i8vec3);"
+            "i8vec4 sign(i8vec4);"
+
+            "int8_t min(int8_t x, int8_t y);"
+            "i8vec2 min(i8vec2 x, int8_t y);"
+            "i8vec3 min(i8vec3 x, int8_t y);"
+            "i8vec4 min(i8vec4 x, int8_t y);"
+            "i8vec2 min(i8vec2 x, i8vec2 y);"
+            "i8vec3 min(i8vec3 x, i8vec3 y);"
+            "i8vec4 min(i8vec4 x, i8vec4 y);"
+
+            "uint8_t min(uint8_t x, uint8_t y);"
+            "u8vec2 min(u8vec2 x, uint8_t y);"
+            "u8vec3 min(u8vec3 x, uint8_t y);"
+            "u8vec4 min(u8vec4 x, uint8_t y);"
+            "u8vec2 min(u8vec2 x, u8vec2 y);"
+            "u8vec3 min(u8vec3 x, u8vec3 y);"
+            "u8vec4 min(u8vec4 x, u8vec4 y);"
+
+            "int8_t max(int8_t x, int8_t y);"
+            "i8vec2 max(i8vec2 x, int8_t y);"
+            "i8vec3 max(i8vec3 x, int8_t y);"
+            "i8vec4 max(i8vec4 x, int8_t y);"
+            "i8vec2 max(i8vec2 x, i8vec2 y);"
+            "i8vec3 max(i8vec3 x, i8vec3 y);"
+            "i8vec4 max(i8vec4 x, i8vec4 y);"
+
+            "uint8_t max(uint8_t x, uint8_t y);"
+            "u8vec2 max(u8vec2 x, uint8_t y);"
+            "u8vec3 max(u8vec3 x, uint8_t y);"
+            "u8vec4 max(u8vec4 x, uint8_t y);"
+            "u8vec2 max(u8vec2 x, u8vec2 y);"
+            "u8vec3 max(u8vec3 x, u8vec3 y);"
+            "u8vec4 max(u8vec4 x, u8vec4 y);"
+
+            "int8_t    clamp(int8_t x, int8_t minVal, int8_t maxVal);"
+            "i8vec2  clamp(i8vec2  x, int8_t minVal, int8_t maxVal);"
+            "i8vec3  clamp(i8vec3  x, int8_t minVal, int8_t maxVal);"
+            "i8vec4  clamp(i8vec4  x, int8_t minVal, int8_t maxVal);"
+            "i8vec2  clamp(i8vec2  x, i8vec2  minVal, i8vec2  maxVal);"
+            "i8vec3  clamp(i8vec3  x, i8vec3  minVal, i8vec3  maxVal);"
+            "i8vec4  clamp(i8vec4  x, i8vec4  minVal, i8vec4  maxVal);"
+
+            "uint8_t   clamp(uint8_t x, uint8_t minVal, uint8_t maxVal);"
+            "u8vec2  clamp(u8vec2  x, uint8_t minVal, uint8_t maxVal);"
+            "u8vec3  clamp(u8vec3  x, uint8_t minVal, uint8_t maxVal);"
+            "u8vec4  clamp(u8vec4  x, uint8_t minVal, uint8_t maxVal);"
+            "u8vec2  clamp(u8vec2  x, u8vec2  minVal, u8vec2  maxVal);"
+            "u8vec3  clamp(u8vec3  x, u8vec3  minVal, u8vec3  maxVal);"
+            "u8vec4  clamp(u8vec4  x, u8vec4  minVal, u8vec4  maxVal);"
+
+            "int8_t  mix(int8_t,  int8_t,  bool);"
+            "i8vec2  mix(i8vec2,  i8vec2,  bvec2);"
+            "i8vec3  mix(i8vec3,  i8vec3,  bvec3);"
+            "i8vec4  mix(i8vec4,  i8vec4,  bvec4);"
+            "uint8_t mix(uint8_t, uint8_t, bool);"
+            "u8vec2  mix(u8vec2,  u8vec2,  bvec2);"
+            "u8vec3  mix(u8vec3,  u8vec3,  bvec3);"
+            "u8vec4  mix(u8vec4,  u8vec4,  bvec4);"
+
+            "bvec2 lessThan(i8vec2, i8vec2);"
+            "bvec3 lessThan(i8vec3, i8vec3);"
+            "bvec4 lessThan(i8vec4, i8vec4);"
+            "bvec2 lessThan(u8vec2, u8vec2);"
+            "bvec3 lessThan(u8vec3, u8vec3);"
+            "bvec4 lessThan(u8vec4, u8vec4);"
+
+            "bvec2 lessThanEqual(i8vec2, i8vec2);"
+            "bvec3 lessThanEqual(i8vec3, i8vec3);"
+            "bvec4 lessThanEqual(i8vec4, i8vec4);"
+            "bvec2 lessThanEqual(u8vec2, u8vec2);"
+            "bvec3 lessThanEqual(u8vec3, u8vec3);"
+            "bvec4 lessThanEqual(u8vec4, u8vec4);"
+
+            "bvec2 greaterThan(i8vec2, i8vec2);"
+            "bvec3 greaterThan(i8vec3, i8vec3);"
+            "bvec4 greaterThan(i8vec4, i8vec4);"
+            "bvec2 greaterThan(u8vec2, u8vec2);"
+            "bvec3 greaterThan(u8vec3, u8vec3);"
+            "bvec4 greaterThan(u8vec4, u8vec4);"
+
+            "bvec2 greaterThanEqual(i8vec2, i8vec2);"
+            "bvec3 greaterThanEqual(i8vec3, i8vec3);"
+            "bvec4 greaterThanEqual(i8vec4, i8vec4);"
+            "bvec2 greaterThanEqual(u8vec2, u8vec2);"
+            "bvec3 greaterThanEqual(u8vec3, u8vec3);"
+            "bvec4 greaterThanEqual(u8vec4, u8vec4);"
+
+            "bvec2 equal(i8vec2, i8vec2);"
+            "bvec3 equal(i8vec3, i8vec3);"
+            "bvec4 equal(i8vec4, i8vec4);"
+            "bvec2 equal(u8vec2, u8vec2);"
+            "bvec3 equal(u8vec3, u8vec3);"
+            "bvec4 equal(u8vec4, u8vec4);"
+
+            "bvec2 notEqual(i8vec2, i8vec2);"
+            "bvec3 notEqual(i8vec3, i8vec3);"
+            "bvec4 notEqual(i8vec4, i8vec4);"
+            "bvec2 notEqual(u8vec2, u8vec2);"
+            "bvec3 notEqual(u8vec3, u8vec3);"
+            "bvec4 notEqual(u8vec4, u8vec4);"
+
+            "  int8_t bitfieldExtract(  int8_t, int8_t, int8_t);"
+            "i8vec2 bitfieldExtract(i8vec2, int8_t, int8_t);"
+            "i8vec3 bitfieldExtract(i8vec3, int8_t, int8_t);"
+            "i8vec4 bitfieldExtract(i8vec4, int8_t, int8_t);"
+
+            " uint8_t bitfieldExtract( uint8_t, int8_t, int8_t);"
+            "u8vec2 bitfieldExtract(u8vec2, int8_t, int8_t);"
+            "u8vec3 bitfieldExtract(u8vec3, int8_t, int8_t);"
+            "u8vec4 bitfieldExtract(u8vec4, int8_t, int8_t);"
+
+            "  int8_t bitfieldInsert(  int8_t base,   int8_t, int8_t, int8_t);"
+            "i8vec2 bitfieldInsert(i8vec2 base, i8vec2, int8_t, int8_t);"
+            "i8vec3 bitfieldInsert(i8vec3 base, i8vec3, int8_t, int8_t);"
+            "i8vec4 bitfieldInsert(i8vec4 base, i8vec4, int8_t, int8_t);"
+
+            " uint8_t bitfieldInsert( uint8_t base,  uint8_t, int8_t, int8_t);"
+            "u8vec2 bitfieldInsert(u8vec2 base, u8vec2, int8_t, int8_t);"
+            "u8vec3 bitfieldInsert(u8vec3 base, u8vec3, int8_t, int8_t);"
+            "u8vec4 bitfieldInsert(u8vec4 base, u8vec4, int8_t, int8_t);"
+
+            "  int8_t bitCount(  int8_t);"
+            "i8vec2 bitCount(i8vec2);"
+            "i8vec3 bitCount(i8vec3);"
+            "i8vec4 bitCount(i8vec4);"
+
+            "  int8_t bitCount( uint8_t);"
+            "i8vec2 bitCount(u8vec2);"
+            "i8vec3 bitCount(u8vec3);"
+            "i8vec4 bitCount(u8vec4);"
+
+            "  int8_t findLSB(  int8_t);"
+            "i8vec2 findLSB(i8vec2);"
+            "i8vec3 findLSB(i8vec3);"
+            "i8vec4 findLSB(i8vec4);"
+
+            "  int8_t findLSB( uint8_t);"
+            "i8vec2 findLSB(u8vec2);"
+            "i8vec3 findLSB(u8vec3);"
+            "i8vec4 findLSB(u8vec4);"
+
+            "  int8_t findMSB(  int8_t);"
+            "i8vec2 findMSB(i8vec2);"
+            "i8vec3 findMSB(i8vec3);"
+            "i8vec4 findMSB(i8vec4);"
+
+            "  int8_t findMSB( uint8_t);"
+            "i8vec2 findMSB(u8vec2);"
+            "i8vec3 findMSB(u8vec3);"
+            "i8vec4 findMSB(u8vec4);"
+
             "int16_t abs(int16_t);"
             "i16vec2 abs(i16vec2);"
             "i16vec3 abs(i16vec3);"
@@ -2691,50 +4172,53 @@
             "i16vec3 sign(i16vec3);"
             "i16vec4 sign(i16vec4);"
 
-            "int16_t  min(int16_t,  int16_t);"
-            "i16vec2  min(i16vec2,  int16_t);"
-            "i16vec3  min(i16vec3,  int16_t);"
-            "i16vec4  min(i16vec4,  int16_t);"
-            "i16vec2  min(i16vec2,  i16vec2);"
-            "i16vec3  min(i16vec3,  i16vec3);"
-            "i16vec4  min(i16vec4,  i16vec4);"
-            "uint16_t min(uint16_t, uint16_t);"
-            "u16vec2  min(u16vec2,  uint16_t);"
-            "u16vec3  min(u16vec3,  uint16_t);"
-            "u16vec4  min(u16vec4,  uint16_t);"
-            "u16vec2  min(u16vec2,  u16vec2);"
-            "u16vec3  min(u16vec3,  u16vec3);"
-            "u16vec4  min(u16vec4,  u16vec4);"
+            "int16_t min(int16_t x, int16_t y);"
+            "i16vec2 min(i16vec2 x, int16_t y);"
+            "i16vec3 min(i16vec3 x, int16_t y);"
+            "i16vec4 min(i16vec4 x, int16_t y);"
+            "i16vec2 min(i16vec2 x, i16vec2 y);"
+            "i16vec3 min(i16vec3 x, i16vec3 y);"
+            "i16vec4 min(i16vec4 x, i16vec4 y);"
 
-            "int16_t  max(int16_t,  int16_t);"
-            "i16vec2  max(i16vec2,  int16_t);"
-            "i16vec3  max(i16vec3,  int16_t);"
-            "i16vec4  max(i16vec4,  int16_t);"
-            "i16vec2  max(i16vec2,  i16vec2);"
-            "i16vec3  max(i16vec3,  i16vec3);"
-            "i16vec4  max(i16vec4,  i16vec4);"
-            "uint16_t max(uint16_t, uint16_t);"
-            "u16vec2  max(u16vec2,  uint16_t);"
-            "u16vec3  max(u16vec3,  uint16_t);"
-            "u16vec4  max(u16vec4,  uint16_t);"
-            "u16vec2  max(u16vec2,  u16vec2);"
-            "u16vec3  max(u16vec3,  u16vec3);"
-            "u16vec4  max(u16vec4,  u16vec4);"
+            "uint16_t min(uint16_t x, uint16_t y);"
+            "u16vec2 min(u16vec2 x, uint16_t y);"
+            "u16vec3 min(u16vec3 x, uint16_t y);"
+            "u16vec4 min(u16vec4 x, uint16_t y);"
+            "u16vec2 min(u16vec2 x, u16vec2 y);"
+            "u16vec3 min(u16vec3 x, u16vec3 y);"
+            "u16vec4 min(u16vec4 x, u16vec4 y);"
 
-            "int16_t  clamp(int16_t,  int16_t,  int16_t);"
-            "i16vec2  clamp(i16vec2,  int16_t,  int16_t);"
-            "i16vec3  clamp(i16vec3,  int16_t,  int16_t);"
-            "i16vec4  clamp(i16vec4,  int16_t,  int16_t);"
-            "i16vec2  clamp(i16vec2,  i16vec2,  i16vec2);"
-            "i16vec3  clamp(i16vec3,  i16vec3,  i16vec3);"
-            "i16vec4  clamp(i16vec4,  i16vec4,  i16vec4);"
-            "uint16_t clamp(uint16_t, uint16_t, uint16_t);"
-            "u16vec2  clamp(u16vec2,  uint16_t, uint16_t);"
-            "u16vec3  clamp(u16vec3,  uint16_t, uint16_t);"
-            "u16vec4  clamp(u16vec4,  uint16_t, uint16_t);"
-            "u16vec2  clamp(u16vec2,  u16vec2,  u16vec2);"
-            "u16vec3  clamp(u16vec3,  u16vec3,  u16vec3);"
-            "u16vec4  clamp(u16vec4,  u16vec4,  u16vec4);"
+            "int16_t max(int16_t x, int16_t y);"
+            "i16vec2 max(i16vec2 x, int16_t y);"
+            "i16vec3 max(i16vec3 x, int16_t y);"
+            "i16vec4 max(i16vec4 x, int16_t y);"
+            "i16vec2 max(i16vec2 x, i16vec2 y);"
+            "i16vec3 max(i16vec3 x, i16vec3 y);"
+            "i16vec4 max(i16vec4 x, i16vec4 y);"
+
+            "uint16_t max(uint16_t x, uint16_t y);"
+            "u16vec2 max(u16vec2 x, uint16_t y);"
+            "u16vec3 max(u16vec3 x, uint16_t y);"
+            "u16vec4 max(u16vec4 x, uint16_t y);"
+            "u16vec2 max(u16vec2 x, u16vec2 y);"
+            "u16vec3 max(u16vec3 x, u16vec3 y);"
+            "u16vec4 max(u16vec4 x, u16vec4 y);"
+
+            "int16_t    clamp(int16_t x, int16_t minVal, int16_t maxVal);"
+            "i16vec2  clamp(i16vec2  x, int16_t minVal, int16_t maxVal);"
+            "i16vec3  clamp(i16vec3  x, int16_t minVal, int16_t maxVal);"
+            "i16vec4  clamp(i16vec4  x, int16_t minVal, int16_t maxVal);"
+            "i16vec2  clamp(i16vec2  x, i16vec2  minVal, i16vec2  maxVal);"
+            "i16vec3  clamp(i16vec3  x, i16vec3  minVal, i16vec3  maxVal);"
+            "i16vec4  clamp(i16vec4  x, i16vec4  minVal, i16vec4  maxVal);"
+
+            "uint16_t   clamp(uint16_t x, uint16_t minVal, uint16_t maxVal);"
+            "u16vec2  clamp(u16vec2  x, uint16_t minVal, uint16_t maxVal);"
+            "u16vec3  clamp(u16vec3  x, uint16_t minVal, uint16_t maxVal);"
+            "u16vec4  clamp(u16vec4  x, uint16_t minVal, uint16_t maxVal);"
+            "u16vec2  clamp(u16vec2  x, u16vec2  minVal, u16vec2  maxVal);"
+            "u16vec3  clamp(u16vec3  x, u16vec3  minVal, u16vec3  maxVal);"
+            "u16vec4  clamp(u16vec4  x, u16vec4  minVal, u16vec4  maxVal);"
 
             "int16_t  mix(int16_t,  int16_t,  bool);"
             "i16vec2  mix(i16vec2,  i16vec2,  bvec2);"
@@ -2755,6 +4239,16 @@
             "f16vec3   ldexp(f16vec3,   i16vec3);"
             "f16vec4   ldexp(f16vec4,   i16vec4);"
 
+            "int16_t halfBitsToInt16(float16_t);"
+            "i16vec2 halfBitsToInt16(f16vec2);"
+            "i16vec3 halhBitsToInt16(f16vec3);"
+            "i16vec4 halfBitsToInt16(f16vec4);"
+
+            "uint16_t halfBitsToUint16(float16_t);"
+            "u16vec2  halfBitsToUint16(f16vec2);"
+            "u16vec3  halfBitsToUint16(f16vec3);"
+            "u16vec4  halfBitsToUint16(f16vec4);"
+
             "int16_t float16BitsToInt16(float16_t);"
             "i16vec2 float16BitsToInt16(f16vec2);"
             "i16vec3 float16BitsToInt16(f16vec3);"
@@ -2775,6 +4269,16 @@
             "f16vec3   uint16BitsToFloat16(u16vec3);"
             "f16vec4   uint16BitsToFloat16(u16vec4);"
 
+            "float16_t int16BitsToHalf(int16_t);"
+            "f16vec2   int16BitsToHalf(i16vec2);"
+            "f16vec3   int16BitsToHalf(i16vec3);"
+            "f16vec4   int16BitsToHalf(i16vec4);"
+
+            "float16_t uint16BitsToHalf(uint16_t);"
+            "f16vec2   uint16BitsToHalf(u16vec2);"
+            "f16vec3   uint16BitsToHalf(u16vec3);"
+            "f16vec4   uint16BitsToHalf(u16vec4);"
+
             "int      packInt2x16(i16vec2);"
             "uint     packUint2x16(u16vec2);"
             "int64_t  packInt4x16(i16vec4);"
@@ -2826,33 +4330,245 @@
             "bvec3 notEqual(u16vec3, u16vec3);"
             "bvec4 notEqual(u16vec4, u16vec4);"
 
+            "  int16_t bitfieldExtract(  int16_t, int16_t, int16_t);"
+            "i16vec2 bitfieldExtract(i16vec2, int16_t, int16_t);"
+            "i16vec3 bitfieldExtract(i16vec3, int16_t, int16_t);"
+            "i16vec4 bitfieldExtract(i16vec4, int16_t, int16_t);"
+
+            " uint16_t bitfieldExtract( uint16_t, int16_t, int16_t);"
+            "u16vec2 bitfieldExtract(u16vec2, int16_t, int16_t);"
+            "u16vec3 bitfieldExtract(u16vec3, int16_t, int16_t);"
+            "u16vec4 bitfieldExtract(u16vec4, int16_t, int16_t);"
+
+            "  int16_t bitfieldInsert(  int16_t base,   int16_t, int16_t, int16_t);"
+            "i16vec2 bitfieldInsert(i16vec2 base, i16vec2, int16_t, int16_t);"
+            "i16vec3 bitfieldInsert(i16vec3 base, i16vec3, int16_t, int16_t);"
+            "i16vec4 bitfieldInsert(i16vec4 base, i16vec4, int16_t, int16_t);"
+
+            " uint16_t bitfieldInsert( uint16_t base,  uint16_t, int16_t, int16_t);"
+            "u16vec2 bitfieldInsert(u16vec2 base, u16vec2, int16_t, int16_t);"
+            "u16vec3 bitfieldInsert(u16vec3 base, u16vec3, int16_t, int16_t);"
+            "u16vec4 bitfieldInsert(u16vec4 base, u16vec4, int16_t, int16_t);"
+
+            "  int16_t bitCount(  int16_t);"
+            "i16vec2 bitCount(i16vec2);"
+            "i16vec3 bitCount(i16vec3);"
+            "i16vec4 bitCount(i16vec4);"
+
+            "  int16_t bitCount( uint16_t);"
+            "i16vec2 bitCount(u16vec2);"
+            "i16vec3 bitCount(u16vec3);"
+            "i16vec4 bitCount(u16vec4);"
+
+            "  int16_t findLSB(  int16_t);"
+            "i16vec2 findLSB(i16vec2);"
+            "i16vec3 findLSB(i16vec3);"
+            "i16vec4 findLSB(i16vec4);"
+
+            "  int16_t findLSB( uint16_t);"
+            "i16vec2 findLSB(u16vec2);"
+            "i16vec3 findLSB(u16vec3);"
+            "i16vec4 findLSB(u16vec4);"
+
+            "  int16_t findMSB(  int16_t);"
+            "i16vec2 findMSB(i16vec2);"
+            "i16vec3 findMSB(i16vec3);"
+            "i16vec4 findMSB(i16vec4);"
+
+            "  int16_t findMSB( uint16_t);"
+            "i16vec2 findMSB(u16vec2);"
+            "i16vec3 findMSB(u16vec3);"
+            "i16vec4 findMSB(u16vec4);"
+
+            "int16_t  pack16(i8vec2);"
+            "uint16_t pack16(u8vec2);"
+            "int32_t  pack32(i8vec4);"
+            "uint32_t pack32(u8vec4);"
+            "int32_t  pack32(i16vec2);"
+            "uint32_t pack32(u16vec2);"
+            "int64_t  pack64(i16vec4);"
+            "uint64_t pack64(u16vec4);"
+            "int64_t  pack64(i32vec2);"
+            "uint64_t pack64(u32vec2);"
+
+            "i8vec2   unpack8(int16_t);"
+            "u8vec2   unpack8(uint16_t);"
+            "i8vec4   unpack8(int32_t);"
+            "u8vec4   unpack8(uint32_t);"
+            "i16vec2  unpack16(int32_t);"
+            "u16vec2  unpack16(uint32_t);"
+            "i16vec4  unpack16(int64_t);"
+            "u16vec4  unpack16(uint64_t);"
+            "i32vec2  unpack32(int64_t);"
+            "u32vec2  unpack32(uint64_t);"
+
+            "float64_t radians(float64_t);"
+            "f64vec2   radians(f64vec2);"
+            "f64vec3   radians(f64vec3);"
+            "f64vec4   radians(f64vec4);"
+
+            "float64_t degrees(float64_t);"
+            "f64vec2   degrees(f64vec2);"
+            "f64vec3   degrees(f64vec3);"
+            "f64vec4   degrees(f64vec4);"
+
+            "float64_t sin(float64_t);"
+            "f64vec2   sin(f64vec2);"
+            "f64vec3   sin(f64vec3);"
+            "f64vec4   sin(f64vec4);"
+
+            "float64_t cos(float64_t);"
+            "f64vec2   cos(f64vec2);"
+            "f64vec3   cos(f64vec3);"
+            "f64vec4   cos(f64vec4);"
+
+            "float64_t tan(float64_t);"
+            "f64vec2   tan(f64vec2);"
+            "f64vec3   tan(f64vec3);"
+            "f64vec4   tan(f64vec4);"
+
+            "float64_t asin(float64_t);"
+            "f64vec2   asin(f64vec2);"
+            "f64vec3   asin(f64vec3);"
+            "f64vec4   asin(f64vec4);"
+
+            "float64_t acos(float64_t);"
+            "f64vec2   acos(f64vec2);"
+            "f64vec3   acos(f64vec3);"
+            "f64vec4   acos(f64vec4);"
+
+            "float64_t atan(float64_t, float64_t);"
+            "f64vec2   atan(f64vec2,   f64vec2);"
+            "f64vec3   atan(f64vec3,   f64vec3);"
+            "f64vec4   atan(f64vec4,   f64vec4);"
+
+            "float64_t atan(float64_t);"
+            "f64vec2   atan(f64vec2);"
+            "f64vec3   atan(f64vec3);"
+            "f64vec4   atan(f64vec4);"
+
+            "float64_t sinh(float64_t);"
+            "f64vec2   sinh(f64vec2);"
+            "f64vec3   sinh(f64vec3);"
+            "f64vec4   sinh(f64vec4);"
+
+            "float64_t cosh(float64_t);"
+            "f64vec2   cosh(f64vec2);"
+            "f64vec3   cosh(f64vec3);"
+            "f64vec4   cosh(f64vec4);"
+
+            "float64_t tanh(float64_t);"
+            "f64vec2   tanh(f64vec2);"
+            "f64vec3   tanh(f64vec3);"
+            "f64vec4   tanh(f64vec4);"
+
+            "float64_t asinh(float64_t);"
+            "f64vec2   asinh(f64vec2);"
+            "f64vec3   asinh(f64vec3);"
+            "f64vec4   asinh(f64vec4);"
+
+            "float64_t acosh(float64_t);"
+            "f64vec2   acosh(f64vec2);"
+            "f64vec3   acosh(f64vec3);"
+            "f64vec4   acosh(f64vec4);"
+
+            "float64_t atanh(float64_t);"
+            "f64vec2   atanh(f64vec2);"
+            "f64vec3   atanh(f64vec3);"
+            "f64vec4   atanh(f64vec4);"
+
+            "float64_t pow(float64_t, float64_t);"
+            "f64vec2   pow(f64vec2,   f64vec2);"
+            "f64vec3   pow(f64vec3,   f64vec3);"
+            "f64vec4   pow(f64vec4,   f64vec4);"
+
+            "float64_t exp(float64_t);"
+            "f64vec2   exp(f64vec2);"
+            "f64vec3   exp(f64vec3);"
+            "f64vec4   exp(f64vec4);"
+
+            "float64_t log(float64_t);"
+            "f64vec2   log(f64vec2);"
+            "f64vec3   log(f64vec3);"
+            "f64vec4   log(f64vec4);"
+
+            "float64_t exp2(float64_t);"
+            "f64vec2   exp2(f64vec2);"
+            "f64vec3   exp2(f64vec3);"
+            "f64vec4   exp2(f64vec4);"
+
+            "float64_t log2(float64_t);"
+            "f64vec2   log2(f64vec2);"
+            "f64vec3   log2(f64vec3);"
+            "f64vec4   log2(f64vec4);"
             "\n");
+        }
+        if (profile != EEsProfile && version >= 450) {
+            stageBuiltins[EShLangFragment].append(
+                "float64_t dFdx(float64_t);"
+                "f64vec2   dFdx(f64vec2);"
+                "f64vec3   dFdx(f64vec3);"
+                "f64vec4   dFdx(f64vec4);"
+
+                "float64_t dFdy(float64_t);"
+                "f64vec2   dFdy(f64vec2);"
+                "f64vec3   dFdy(f64vec3);"
+                "f64vec4   dFdy(f64vec4);"
+
+                "float64_t dFdxFine(float64_t);"
+                "f64vec2   dFdxFine(f64vec2);"
+                "f64vec3   dFdxFine(f64vec3);"
+                "f64vec4   dFdxFine(f64vec4);"
+
+                "float64_t dFdyFine(float64_t);"
+                "f64vec2   dFdyFine(f64vec2);"
+                "f64vec3   dFdyFine(f64vec3);"
+                "f64vec4   dFdyFine(f64vec4);"
+
+                "float64_t dFdxCoarse(float64_t);"
+                "f64vec2   dFdxCoarse(f64vec2);"
+                "f64vec3   dFdxCoarse(f64vec3);"
+                "f64vec4   dFdxCoarse(f64vec4);"
+
+                "float64_t dFdyCoarse(float64_t);"
+                "f64vec2   dFdyCoarse(f64vec2);"
+                "f64vec3   dFdyCoarse(f64vec3);"
+                "f64vec4   dFdyCoarse(f64vec4);"
+
+                "float64_t fwidth(float64_t);"
+                "f64vec2   fwidth(f64vec2);"
+                "f64vec3   fwidth(f64vec3);"
+                "f64vec4   fwidth(f64vec4);"
+
+                "float64_t fwidthFine(float64_t);"
+                "f64vec2   fwidthFine(f64vec2);"
+                "f64vec3   fwidthFine(f64vec3);"
+                "f64vec4   fwidthFine(f64vec4);"
+
+                "float64_t fwidthCoarse(float64_t);"
+                "f64vec2   fwidthCoarse(f64vec2);"
+                "f64vec3   fwidthCoarse(f64vec3);"
+                "f64vec4   fwidthCoarse(f64vec4);"
+
+                "float64_t interpolateAtCentroid(float64_t);"
+                "f64vec2   interpolateAtCentroid(f64vec2);"
+                "f64vec3   interpolateAtCentroid(f64vec3);"
+                "f64vec4   interpolateAtCentroid(f64vec4);"
+
+                "float64_t interpolateAtSample(float64_t, int);"
+                "f64vec2   interpolateAtSample(f64vec2,   int);"
+                "f64vec3   interpolateAtSample(f64vec3,   int);"
+                "f64vec4   interpolateAtSample(f64vec4,   int);"
+
+                "float64_t interpolateAtOffset(float64_t, f64vec2);"
+                "f64vec2   interpolateAtOffset(f64vec2,   f64vec2);"
+                "f64vec3   interpolateAtOffset(f64vec3,   f64vec2);"
+                "f64vec4   interpolateAtOffset(f64vec4,   f64vec2);"
+
+                "\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
-
     //============================================================================
     //
     // Prototypes for built-in functions seen by vertex shaders only.
@@ -3192,7 +4908,7 @@
     }
 
     // GL_AMD_shader_fragment_mask
-    if (profile != EEsProfile && version >= 450 && spvVersion.vulkan >= 100) {
+    if (profile != EEsProfile && version >= 450 && spvVersion.vulkan > 0) {
         stageBuiltins[EShLangFragment].append(
             "uint fragmentMaskFetchAMD(subpassInputMS);"
             "uint fragmentMaskFetchAMD(isubpassInputMS);"
@@ -3491,7 +5207,7 @@
             stageBuiltins[EShLangVertex].append(
                 "int gl_InstanceID;"          // needs qualifier fixed later
                 );
-        if (spvVersion.vulkan >= 100 && version >= 140)
+        if (spvVersion.vulkan > 0 && version >= 140)
             stageBuiltins[EShLangVertex].append(
                 "in int gl_VertexIndex;"
                 "in int gl_InstanceIndex;"
@@ -3541,7 +5257,7 @@
                     "in highp int gl_VertexID;"      // needs qualifier fixed later
                     "in highp int gl_InstanceID;"    // needs qualifier fixed later
                     );
-            if (spvVersion.vulkan >= 100)
+            if (spvVersion.vulkan > 0)
                 stageBuiltins[EShLangVertex].append(
                     "in highp int gl_VertexIndex;"
                     "in highp int gl_InstanceIndex;"
@@ -3963,6 +5679,13 @@
                 "in vec3 gl_BaryCoordPullModelAMD;"
                 );
 #endif
+
+#ifdef NV_EXTENSIONS
+        if (version >= 430)
+            stageBuiltins[EShLangFragment].append(
+                "in bool gl_FragFullyCoveredNV;"
+                );
+#endif
     } else {
         // ES profile
 
@@ -4011,17 +5734,30 @@
 
     // GL_ARB_shader_ballot
     if (profile != EEsProfile && version >= 450) {
-        commonBuiltins.append(
+        const char* ballotDecls = 
             "uniform uint gl_SubGroupSizeARB;"
-
             "in uint     gl_SubGroupInvocationARB;"
             "in uint64_t gl_SubGroupEqMaskARB;"
             "in uint64_t gl_SubGroupGeMaskARB;"
             "in uint64_t gl_SubGroupGtMaskARB;"
             "in uint64_t gl_SubGroupLeMaskARB;"
             "in uint64_t gl_SubGroupLtMaskARB;"
-
-            "\n");
+            "\n";
+        const char* fragmentBallotDecls = 
+            "uniform uint gl_SubGroupSizeARB;"
+            "flat in uint     gl_SubGroupInvocationARB;"
+            "flat in uint64_t gl_SubGroupEqMaskARB;"
+            "flat in uint64_t gl_SubGroupGeMaskARB;"
+            "flat in uint64_t gl_SubGroupGtMaskARB;"
+            "flat in uint64_t gl_SubGroupLeMaskARB;"
+            "flat in uint64_t gl_SubGroupLtMaskARB;"
+            "\n";
+        stageBuiltins[EShLangVertex]        .append(ballotDecls);
+        stageBuiltins[EShLangTessControl]   .append(ballotDecls);
+        stageBuiltins[EShLangTessEvaluation].append(ballotDecls);
+        stageBuiltins[EShLangGeometry]      .append(ballotDecls);
+        stageBuiltins[EShLangCompute]       .append(ballotDecls);
+        stageBuiltins[EShLangFragment]      .append(fragmentBallotDecls);
     }
 
     if ((profile != EEsProfile && version >= 140) ||
@@ -4032,6 +5768,39 @@
             "\n");
     }
 
+    // GL_KHR_shader_subgroup
+    if (spvVersion.vulkan > 0) {
+        const char* ballotDecls = 
+            "in mediump uint  gl_SubgroupSize;"
+            "in mediump uint  gl_SubgroupInvocationID;"
+            "in highp   uvec4 gl_SubgroupEqMask;"
+            "in highp   uvec4 gl_SubgroupGeMask;"
+            "in highp   uvec4 gl_SubgroupGtMask;"
+            "in highp   uvec4 gl_SubgroupLeMask;"
+            "in highp   uvec4 gl_SubgroupLtMask;"
+            "\n";
+        const char* fragmentBallotDecls = 
+            "flat in mediump uint  gl_SubgroupSize;"
+            "flat in mediump uint  gl_SubgroupInvocationID;"
+            "flat in highp   uvec4 gl_SubgroupEqMask;"
+            "flat in highp   uvec4 gl_SubgroupGeMask;"
+            "flat in highp   uvec4 gl_SubgroupGtMask;"
+            "flat in highp   uvec4 gl_SubgroupLeMask;"
+            "flat in highp   uvec4 gl_SubgroupLtMask;"
+            "\n";
+        stageBuiltins[EShLangVertex]        .append(ballotDecls);
+        stageBuiltins[EShLangTessControl]   .append(ballotDecls);
+        stageBuiltins[EShLangTessEvaluation].append(ballotDecls);
+        stageBuiltins[EShLangGeometry]      .append(ballotDecls);
+        stageBuiltins[EShLangCompute]       .append(ballotDecls);
+        stageBuiltins[EShLangFragment]      .append(fragmentBallotDecls);
+
+        stageBuiltins[EShLangCompute].append(
+            "highp   in uint  gl_NumSubgroups;"
+            "highp   in uint  gl_SubgroupID;"
+            "\n");
+    }
+
     if (version >= 300 /* both ES and non-ES */) {
         stageBuiltins[EShLangFragment].append(
             "flat in highp uint gl_ViewID_OVR;"     // GL_OVR_multiview, GL_OVR_multiview2
@@ -4052,8 +5821,11 @@
     // In this function proper, enumerate the types, then calls the next set of functions
     // to enumerate all the uses for that type.
     //
-
+#ifdef AMD_EXTENSIONS
+    TBasicType bTypes[4] = { EbtFloat, EbtFloat16, EbtInt, EbtUint };
+#else
     TBasicType bTypes[3] = { EbtFloat, EbtInt, EbtUint };
+#endif
     bool skipBuffer = (profile == EEsProfile && version < 310) || (profile != EEsProfile && version < 140);
     bool skipCubeArrayed = (profile == EEsProfile && version < 310) || (profile != EEsProfile && version < 130);
 
@@ -4093,12 +5865,20 @@
                             continue;
                         if (ms && arrayed && profile == EEsProfile && version < 310)
                             continue;
+#ifdef AMD_EXTENSIONS
+                        for (int bType = 0; bType < 4; ++bType) { // float, float16, int, uint results
 
+                            if (shadow && bType > 1)
+                                continue;
+
+                            if (bTypes[bType] == EbtFloat16 && (profile == EEsProfile ||version < 450))
+                                continue;
+#else
                         for (int bType = 0; bType < 3; ++bType) { // float, int, uint results
 
                             if (shadow && bType > 0)
                                 continue;
-
+#endif
                             if (dim == EsdRect && version < 140 && bType > 0)
                                 continue;
 
@@ -4216,15 +5996,37 @@
     //
 
     if (profile != EEsProfile && version >= 400 && ! sampler.image && sampler.dim != EsdRect && ! sampler.ms && sampler.dim != EsdBuffer) {
-        stageBuiltins[EShLangFragment].append("vec2 textureQueryLod(");
-        stageBuiltins[EShLangFragment].append(typeName);
-        if (dimMap[sampler.dim] == 1)
-            stageBuiltins[EShLangFragment].append(", float");
-        else {
-            stageBuiltins[EShLangFragment].append(", vec");
-            stageBuiltins[EShLangFragment].append(postfixes[dimMap[sampler.dim]]);
+#ifdef AMD_EXTENSIONS
+        for (int f16TexAddr = 0; f16TexAddr < 2; ++f16TexAddr) {
+            if (f16TexAddr && sampler.type != EbtFloat16)
+                continue;
+#endif
+            stageBuiltins[EShLangFragment].append("vec2 textureQueryLod(");
+            stageBuiltins[EShLangFragment].append(typeName);
+            if (dimMap[sampler.dim] == 1)
+#ifdef AMD_EXTENSIONS
+                if (f16TexAddr)
+                    stageBuiltins[EShLangFragment].append(", float16_t");
+                else
+                    stageBuiltins[EShLangFragment].append(", float");
+#else
+                stageBuiltins[EShLangFragment].append(", float");
+#endif
+            else {
+#ifdef AMD_EXTENSIONS
+                if (f16TexAddr)
+                    stageBuiltins[EShLangFragment].append(", f16vec");
+                else
+                    stageBuiltins[EShLangFragment].append(", vec");
+#else
+                stageBuiltins[EShLangFragment].append(", vec");
+#endif
+                stageBuiltins[EShLangFragment].append(postfixes[dimMap[sampler.dim]]);
+            }
+            stageBuiltins[EShLangFragment].append(");\n");
+#ifdef AMD_EXTENSIONS
         }
-        stageBuiltins[EShLangFragment].append(");\n");
+#endif
     }
 
     //
@@ -4414,7 +6216,7 @@
 
                 if (bias && (lod || sampler.ms))
                     continue;
-                if (bias && sampler.dim == Esd2D && sampler.shadow && sampler.arrayed)
+                if (bias && (sampler.dim == Esd2D || sampler.dim == EsdCube) && sampler.shadow && sampler.arrayed)
                     continue;
                 if (bias && (sampler.dim == EsdRect || sampler.dim == EsdBuffer))
                     continue;
@@ -4463,149 +6265,237 @@
                                     continue;
                                 if (extraProj && (sampler.dim == Esd3D || sampler.shadow))
                                     continue;
+#ifdef AMD_EXTENSIONS
+                                for (int f16TexAddr = 0; f16TexAddr <= 1; ++f16TexAddr) { // loop over 16-bit floating-point texel addressing
 
-                                for (int lodClamp = 0; lodClamp <= 1 ;++lodClamp) { // loop over "bool" lod clamp
-
-                                    if (lodClamp && (profile == EEsProfile || version < 450))
+                                    if (f16TexAddr && sampler.type != EbtFloat16)
                                         continue;
-                                    if (lodClamp && (proj || lod || fetch))
-                                        continue;
-
-                                    for (int sparse = 0; sparse <= 1; ++sparse) { // loop over "bool" sparse or not
-
-                                        if (sparse && (profile == EEsProfile || version < 450))
-                                            continue;
-                                        // Sparse sampling is not for 1D/1D array texture, buffer texture, and projective texture
-                                        if (sparse && (sampler.dim == Esd1D || sampler.dim == EsdBuffer || proj))
-                                            continue;
-
-                                        TString s;
-
-                                        // return type
-                                        if (sparse)
-                                            s.append("int ");
-                                        else {
-                                            if (sampler.shadow)
-                                                s.append("float ");
-                                            else {
-                                                s.append(prefixes[sampler.type]);
-                                                s.append("vec4 ");
-                                            }
-                                        }
-
-                                        // name
-                                        if (sparse) {
-                                            if (fetch)
-                                                s.append("sparseTexel");
-                                            else
-                                                s.append("sparseTexture");
-                                        } else {
-                                            if (fetch)
-                                                s.append("texel");
-                                            else
-                                                s.append("texture");
-                                        }
-                                        if (proj)
-                                            s.append("Proj");
-                                        if (lod)
-                                            s.append("Lod");
-                                        if (grad)
-                                            s.append("Grad");
-                                        if (fetch)
-                                            s.append("Fetch");
-                                        if (offset)
-                                            s.append("Offset");
-                                        if (lodClamp)
-                                            s.append("Clamp");
-                                        if (lodClamp || sparse)
-                                            s.append("ARB");
-                                        s.append("(");
-
-                                        // sampler type
-                                        s.append(typeName);
-
-                                        // P coordinate
-                                        if (extraProj)
-                                            s.append(",vec4");
-                                        else {
-                                            s.append(",");
-                                            TBasicType t = fetch ? EbtInt : EbtFloat;
-                                            if (totalDims == 1)
-                                                s.append(TType::getBasicString(t));
-                                            else {
-                                                s.append(prefixes[t]);
-                                                s.append("vec");
-                                                s.append(postfixes[totalDims]);
-                                            }
-                                        }
-
-                                        if (bias && compare)
-                                            continue;
-
-                                        // non-optional lod argument (lod that's not driven by lod loop) or sample
-                                        if ((fetch && sampler.dim != EsdBuffer && sampler.dim != EsdRect && !sampler.ms) ||
-                                            (sampler.ms && fetch))
-                                            s.append(",int");
-
-                                        // non-optional lod
-                                        if (lod)
-                                            s.append(",float");
-
-                                        // gradient arguments
-                                        if (grad) {
-                                            if (dimMap[sampler.dim] == 1)
-                                                s.append(",float,float");
-                                            else {
-                                                s.append(",vec");
-                                                s.append(postfixes[dimMap[sampler.dim]]);
-                                                s.append(",vec");
-                                                s.append(postfixes[dimMap[sampler.dim]]);
-                                            }
-                                        }
-
-                                        // offset
-                                        if (offset) {
-                                            if (dimMap[sampler.dim] == 1)
-                                                s.append(",int");
-                                            else {
-                                                s.append(",ivec");
-                                                s.append(postfixes[dimMap[sampler.dim]]);
-                                            }
-                                        }
-
-                                        // non-optional compare
-                                        if (compare)
-                                            s.append(",float");
-
-                                        // lod clamp
-                                        if (lodClamp)
-                                            s.append(",float");
-
-                                        // texel out (for sparse texture)
-                                        if (sparse) {
-                                            s.append(",out ");
-                                            if (sampler.shadow)
-                                                s.append("float ");
-                                            else {
-                                                s.append(prefixes[sampler.type]);
-                                                s.append("vec4 ");
-                                            }
-                                        }
-
-                                        // optional bias
-                                        if (bias)
-                                            s.append(",float");
-
-                                        s.append(");\n");
-
-                                        // Add to the per-language set of built-ins
-
-                                        if (bias || lodClamp)
-                                            stageBuiltins[EShLangFragment].append(s);
-                                        else
-                                            commonBuiltins.append(s);
+                                    if (f16TexAddr && sampler.shadow && ! compare) {
+                                        compare = true; // compare argument is always present
+                                        totalDims--;
                                     }
+#endif
+                                    for (int lodClamp = 0; lodClamp <= 1 ;++lodClamp) { // loop over "bool" lod clamp
+
+                                        if (lodClamp && (profile == EEsProfile || version < 450))
+                                            continue;
+                                        if (lodClamp && (proj || lod || fetch))
+                                            continue;
+
+                                        for (int sparse = 0; sparse <= 1; ++sparse) { // loop over "bool" sparse or not
+
+                                            if (sparse && (profile == EEsProfile || version < 450))
+                                                continue;
+                                            // Sparse sampling is not for 1D/1D array texture, buffer texture, and projective texture
+                                            if (sparse && (sampler.dim == Esd1D || sampler.dim == EsdBuffer || proj))
+                                                continue;
+
+                                            TString s;
+
+                                            // return type
+                                            if (sparse)
+                                                s.append("int ");
+                                            else {
+                                                if (sampler.shadow)
+#ifdef AMD_EXTENSIONS
+                                                    if (sampler.type == EbtFloat16)
+                                                        s.append("float16_t ");
+                                                    else
+                                                        s.append("float ");
+#else
+                                                    s.append("float ");
+#endif
+                                                else {
+                                                    s.append(prefixes[sampler.type]);
+                                                    s.append("vec4 ");
+                                                }
+                                            }
+
+                                            // name
+                                            if (sparse) {
+                                                if (fetch)
+                                                    s.append("sparseTexel");
+                                                else
+                                                    s.append("sparseTexture");
+                                            }
+                                            else {
+                                                if (fetch)
+                                                    s.append("texel");
+                                                else
+                                                    s.append("texture");
+                                            }
+                                            if (proj)
+                                                s.append("Proj");
+                                            if (lod)
+                                                s.append("Lod");
+                                            if (grad)
+                                                s.append("Grad");
+                                            if (fetch)
+                                                s.append("Fetch");
+                                            if (offset)
+                                                s.append("Offset");
+                                            if (lodClamp)
+                                                s.append("Clamp");
+                                            if (lodClamp || sparse)
+                                                s.append("ARB");
+                                            s.append("(");
+
+                                            // sampler type
+                                            s.append(typeName);
+#ifdef AMD_EXTENSIONS
+                                            // P coordinate
+                                            if (extraProj) {
+                                                if (f16TexAddr)
+                                                    s.append(",f16vec4");
+                                                else
+                                                    s.append(",vec4");
+                                            } else {
+                                                s.append(",");
+                                                TBasicType t = fetch ? EbtInt : (f16TexAddr ? EbtFloat16 : EbtFloat);
+                                                if (totalDims == 1)
+                                                    s.append(TType::getBasicString(t));
+                                                else {
+                                                    s.append(prefixes[t]);
+                                                    s.append("vec");
+                                                    s.append(postfixes[totalDims]);
+                                                }
+                                            }
+#else
+                                            // P coordinate
+                                            if (extraProj)
+                                                s.append(",vec4");
+                                            else {
+                                                s.append(",");
+                                                TBasicType t = fetch ? EbtInt : EbtFloat;
+                                                if (totalDims == 1)
+                                                    s.append(TType::getBasicString(t));
+                                                else {
+                                                    s.append(prefixes[t]);
+                                                    s.append("vec");
+                                                    s.append(postfixes[totalDims]);
+                                                }
+                                            }
+#endif
+                                            // non-optional compare
+                                            if (compare)
+                                                s.append(",float");
+
+                                            // non-optional lod argument (lod that's not driven by lod loop) or sample
+                                            if ((fetch && sampler.dim != EsdBuffer && sampler.dim != EsdRect && !sampler.ms) ||
+                                                (sampler.ms && fetch))
+                                                s.append(",int");
+#ifdef AMD_EXTENSIONS
+                                            // non-optional lod
+                                            if (lod) {
+                                                if (f16TexAddr)
+                                                    s.append(",float16_t");
+                                                else
+                                                    s.append(",float");
+                                            }
+
+                                            // gradient arguments
+                                            if (grad) {
+                                                if (dimMap[sampler.dim] == 1) {
+                                                    if (f16TexAddr)
+                                                        s.append(",float16_t,float16_t");
+                                                    else
+                                                        s.append(",float,float");
+                                                } else {
+                                                    if (f16TexAddr)
+                                                        s.append(",f16vec");
+                                                    else
+                                                        s.append(",vec");
+                                                    s.append(postfixes[dimMap[sampler.dim]]);
+                                                    if (f16TexAddr)
+                                                        s.append(",f16vec");
+                                                    else
+                                                        s.append(",vec");
+                                                    s.append(postfixes[dimMap[sampler.dim]]);
+                                                }
+                                            }
+#else
+                                            // non-optional lod
+                                            if (lod)
+                                                s.append(",float");
+
+                                            // gradient arguments
+                                            if (grad) {
+                                                if (dimMap[sampler.dim] == 1)
+                                                    s.append(",float,float");
+                                                else {
+                                                    s.append(",vec");
+                                                    s.append(postfixes[dimMap[sampler.dim]]);
+                                                    s.append(",vec");
+                                                    s.append(postfixes[dimMap[sampler.dim]]);
+                                                }
+                                            }
+#endif
+                                            // offset
+                                            if (offset) {
+                                                if (dimMap[sampler.dim] == 1)
+                                                    s.append(",int");
+                                                else {
+                                                    s.append(",ivec");
+                                                    s.append(postfixes[dimMap[sampler.dim]]);
+                                                }
+                                            }
+
+#ifdef AMD_EXTENSIONS
+                                            // lod clamp
+                                            if (lodClamp) {
+                                                if (f16TexAddr)
+                                                    s.append(",float16_t");
+                                                else
+                                                    s.append(",float");
+                                            }
+#else
+                                            // lod clamp
+                                            if (lodClamp)
+                                                s.append(",float");
+#endif
+                                            // texel out (for sparse texture)
+                                            if (sparse) {
+                                                s.append(",out ");
+                                                if (sampler.shadow)
+#ifdef AMD_EXTENSIONS
+                                                    if (sampler.type == EbtFloat16)
+                                                        s.append("float16_t");
+                                                    else
+                                                        s.append("float");
+#else
+                                                    s.append("float");
+#endif
+                                                else {
+                                                    s.append(prefixes[sampler.type]);
+                                                    s.append("vec4");
+                                                }
+                                            }
+#ifdef AMD_EXTENSIONS
+                                            // optional bias
+                                            if (bias) {
+                                                if (f16TexAddr)
+                                                    s.append(",float16_t");
+                                                else
+                                                    s.append(",float");
+                                            }
+#else
+                                            // optional bias
+                                            if (bias)
+                                                s.append(",float");
+#endif
+                                            s.append(");\n");
+
+                                            // Add to the per-language set of built-ins
+                                            if (bias || lodClamp)
+                                                stageBuiltins[EShLangFragment].append(s);
+                                            else
+                                                commonBuiltins.append(s);
+
+                                        }
+                                    }
+#ifdef AMD_EXTENSIONS
                                 }
+#endif
                             }
                         }
                     }
@@ -4638,81 +6528,96 @@
     if (version < 140 && sampler.dim == EsdRect && sampler.type != EbtFloat)
         return;
 
-    for (int offset = 0; offset < 3; ++offset) { // loop over three forms of offset in the call name:  none, Offset, and Offsets
+#ifdef AMD_EXTENSIONS
+    for (int f16TexAddr = 0; f16TexAddr <= 1; ++f16TexAddr) { // loop over 16-bit floating-point texel addressing
 
-        for (int comp = 0; comp < 2; ++comp) { // loop over presence of comp argument
+        if (f16TexAddr && sampler.type != EbtFloat16)
+            continue;
+#endif
+        for (int offset = 0; offset < 3; ++offset) { // loop over three forms of offset in the call name:  none, Offset, and Offsets
 
-            if (comp > 0 && sampler.shadow)
-                continue;
+            for (int comp = 0; comp < 2; ++comp) { // loop over presence of comp argument
 
-            if (offset > 0 && sampler.dim == EsdCube)
-                continue;
-
-            for (int sparse = 0; sparse <= 1; ++sparse) { // loop over "bool" sparse or not
-                if (sparse && (profile == EEsProfile || version < 450))
+                if (comp > 0 && sampler.shadow)
                     continue;
 
-                TString s;
+                if (offset > 0 && sampler.dim == EsdCube)
+                    continue;
 
-                // return type
-                if (sparse)
-                    s.append("int ");
-                else {
-                    s.append(prefixes[sampler.type]);
-                    s.append("vec4 ");
+                for (int sparse = 0; sparse <= 1; ++sparse) { // loop over "bool" sparse or not
+                    if (sparse && (profile == EEsProfile || version < 450))
+                        continue;
+
+                    TString s;
+
+                    // return type
+                    if (sparse)
+                        s.append("int ");
+                    else {
+                        s.append(prefixes[sampler.type]);
+                        s.append("vec4 ");
+                    }
+
+                    // name
+                    if (sparse)
+                        s.append("sparseTextureGather");
+                    else
+                        s.append("textureGather");
+                    switch (offset) {
+                    case 1:
+                        s.append("Offset");
+                        break;
+                    case 2:
+                        s.append("Offsets");
+                    default:
+                        break;
+                    }
+                    if (sparse)
+                        s.append("ARB");
+                    s.append("(");
+
+                    // sampler type argument
+                    s.append(typeName);
+
+                    // P coordinate argument
+#ifdef AMD_EXTENSIONS
+                    if (f16TexAddr)
+                        s.append(",f16vec");
+                    else
+                        s.append(",vec");
+#else
+                    s.append(",vec");
+#endif
+                    int totalDims = dimMap[sampler.dim] + (sampler.arrayed ? 1 : 0);
+                    s.append(postfixes[totalDims]);
+
+                    // refZ argument
+                    if (sampler.shadow)
+                        s.append(",float");
+
+                    // offset argument
+                    if (offset > 0) {
+                        s.append(",ivec2");
+                        if (offset == 2)
+                            s.append("[4]");
+                    }
+
+                    // texel out (for sparse texture)
+                    if (sparse) {
+                        s.append(",out ");
+                        s.append(prefixes[sampler.type]);
+                        s.append("vec4 ");
+                    }
+
+                    // comp argument
+                    if (comp)
+                        s.append(",int");
+
+                    s.append(");\n");
+                    commonBuiltins.append(s);
+#ifdef AMD_EXTENSIONS
                 }
-
-                // name
-                if (sparse)
-                    s.append("sparseTextureGather");
-                else
-                    s.append("textureGather");
-                switch (offset) {
-                case 1:
-                    s.append("Offset");
-                    break;
-                case 2:
-                    s.append("Offsets");
-                default:
-                    break;
-                }
-
-                if (sparse)
-                    s.append("ARB");
-                s.append("(");
-
-                // sampler type argument
-                s.append(typeName);
-
-                // P coordinate argument
-                s.append(",vec");
-                int totalDims = dimMap[sampler.dim] + (sampler.arrayed ? 1 : 0);
-                s.append(postfixes[totalDims]);
-
-                // refZ argument
-                if (sampler.shadow)
-                    s.append(",float");
-
-                // offset argument
-                if (offset > 0) {
-                    s.append(",ivec2");
-                    if (offset == 2)
-                        s.append("[4]");
-                }
-
-                // texel out (for sparse texture)
-                if (sparse) {
-                    s.append(",out ");
-                    s.append(prefixes[sampler.type]);
-                    s.append("vec4 ");
-                }
-
-                // comp argument
-                if (comp)
-                    s.append(",int");
-
-                s.append(");\n");
-                commonBuiltins.append(s);
+#endif
             }
         }
     }
@@ -4731,95 +6636,112 @@
             if ((lod && bias) || (lod == 0 && bias == 0))
                 continue;
 
-            for (int offset = 0; offset < 3; ++offset) { // loop over three forms of offset in the call name:  none, Offset, and Offsets
+            for (int f16TexAddr = 0; f16TexAddr <= 1; ++f16TexAddr) { // loop over 16-bit floating-point texel addressing
 
-                for (int comp = 0; comp < 2; ++comp) { // loop over presence of comp argument
+                if (f16TexAddr && sampler.type != EbtFloat16)
+                    continue;
 
-                    if (comp == 0 && bias)
-                        continue;
+                for (int offset = 0; offset < 3; ++offset) { // loop over three forms of offset in the call name:  none, Offset, and Offsets
 
-                    if (offset > 0 && sampler.dim == EsdCube)
-                        continue;
+                    for (int comp = 0; comp < 2; ++comp) { // loop over presence of comp argument
 
-                    for (int sparse = 0; sparse <= 1; ++sparse) { // loop over "bool" sparse or not
-                        if (sparse && (profile == EEsProfile || version < 450))
+                        if (comp == 0 && bias)
                             continue;
 
-                        TString s;
+                        if (offset > 0 && sampler.dim == EsdCube)
+                            continue;
 
-                        // return type
-                        if (sparse)
-                            s.append("int ");
-                        else {
-                            s.append(prefixes[sampler.type]);
-                            s.append("vec4 ");
+                        for (int sparse = 0; sparse <= 1; ++sparse) { // loop over "bool" sparse or not
+                            if (sparse && (profile == EEsProfile || version < 450))
+                                continue;
+
+                            TString s;
+
+                            // return type
+                            if (sparse)
+                                s.append("int ");
+                            else {
+                                s.append(prefixes[sampler.type]);
+                                s.append("vec4 ");
+                            }
+
+                            // name
+                            if (sparse)
+                                s.append("sparseTextureGather");
+                            else
+                                s.append("textureGather");
+
+                            if (lod)
+                                s.append("Lod");
+
+                            switch (offset) {
+                            case 1:
+                                s.append("Offset");
+                                break;
+                            case 2:
+                                s.append("Offsets");
+                            default:
+                                break;
+                            }
+
+                            if (lod)
+                                s.append("AMD");
+                            else if (sparse)
+                                s.append("ARB");
+
+                            s.append("(");
+
+                            // sampler type argument
+                            s.append(typeName);
+
+                            // P coordinate argument
+                            if (f16TexAddr)
+                                s.append(",f16vec");
+                            else
+                                s.append(",vec");
+                            int totalDims = dimMap[sampler.dim] + (sampler.arrayed ? 1 : 0);
+                            s.append(postfixes[totalDims]);
+
+                            // lod argument
+                            if (lod) {
+                                if (f16TexAddr)
+                                    s.append(",float16_t");
+                                else
+                                    s.append(",float");
+                            }
+
+                            // offset argument
+                            if (offset > 0) {
+                                s.append(",ivec2");
+                                if (offset == 2)
+                                    s.append("[4]");
+                            }
+
+                            // texel out (for sparse texture)
+                            if (sparse) {
+                                s.append(",out ");
+                                s.append(prefixes[sampler.type]);
+                                s.append("vec4 ");
+                            }
+
+                            // comp argument
+                            if (comp)
+                                s.append(",int");
+
+                            // bias argument
+                            if (bias) {
+                                if (f16TexAddr)
+                                    s.append(",float16_t");
+                                else
+                                    s.append(",float");
+                            }
+
+                            s.append(");\n");
+                            if (bias)
+                                stageBuiltins[EShLangFragment].append(s);
+                            else
+                                commonBuiltins.append(s);
                         }
-
-                        // name
-                        if (sparse)
-                            s.append("sparseTextureGather");
-                        else
-                            s.append("textureGather");
-
-                        if (lod)
-                            s.append("Lod");
-
-                        switch (offset) {
-                        case 1:
-                            s.append("Offset");
-                            break;
-                        case 2:
-                            s.append("Offsets");
-                        default:
-                            break;
-                        }
-
-                        if (lod)
-                            s.append("AMD");
-                        else if (sparse)
-                            s.append("ARB");
-
-                        s.append("(");
-
-                        // sampler type argument
-                        s.append(typeName);
-
-                        // P coordinate argument
-                        s.append(",vec");
-                        int totalDims = dimMap[sampler.dim] + (sampler.arrayed ? 1 : 0);
-                        s.append(postfixes[totalDims]);
-
-                        // lod argument
-                        if (lod)
-                            s.append(",float");
-
-                        // offset argument
-                        if (offset > 0) {
-                            s.append(",ivec2");
-                            if (offset == 2)
-                                s.append("[4]");
-                        }
-
-                        // texel out (for sparse texture)
-                        if (sparse) {
-                            s.append(",out ");
-                            s.append(prefixes[sampler.type]);
-                            s.append("vec4 ");
-                        }
-
-                        // comp argument
-                        if (comp)
-                            s.append(",int");
-
-                        // bias argument
-                        if (bias)
-                            s.append(",float");
-
-                        s.append(");\n");
-                        if (bias)
-                            stageBuiltins[EShLangFragment].append(s);
-                        else
-                            commonBuiltins.append(s);
                     }
                 }
             }
@@ -5406,9 +7328,11 @@
             BuiltInVariable("gl_SubGroupLeMaskARB",     EbvSubGroupLeMask,     symbolTable);
             BuiltInVariable("gl_SubGroupLtMaskARB",     EbvSubGroupLtMask,     symbolTable);
 
-            if (spvVersion.vulkan >= 100)
+            if (spvVersion.vulkan > 0)
                 // Treat "gl_SubGroupSizeARB" as shader input instead of uniform for Vulkan
                 SpecialQualifier("gl_SubGroupSizeARB", EvqVaryingIn, EbvSubGroupSize, symbolTable);
+            else
+                BuiltInVariable("gl_SubGroupSizeARB", EbvSubGroupSize, symbolTable);
 
             if (version >= 430) {
                 symbolTable.setFunctionExtensions("anyInvocationARB",       1, &E_GL_ARB_shader_group_vote);
@@ -5507,7 +7431,7 @@
             SpecialQualifier("gl_InstanceID", EvqInstanceId, EbvInstanceId, symbolTable);
         }
 
-        if (spvVersion.vulkan >= 100) {
+        if (spvVersion.vulkan > 0) {
             BuiltInVariable("gl_VertexIndex",   EbvVertexIndex,   symbolTable);
             BuiltInVariable("gl_InstanceIndex", EbvInstanceIndex, symbolTable);
         }
@@ -5647,6 +7571,25 @@
             symbolTable.setVariableExtensions("gl_ViewIndex", 1, &E_GL_EXT_multiview);
             BuiltInVariable("gl_ViewIndex", EbvViewIndex, symbolTable);
         }
+        
+        // GL_KHR_shader_subgroup
+        if (spvVersion.vulkan > 0) {
+            symbolTable.setVariableExtensions("gl_SubgroupSize",         1, &E_GL_KHR_shader_subgroup_basic);
+            symbolTable.setVariableExtensions("gl_SubgroupInvocationID", 1, &E_GL_KHR_shader_subgroup_basic);
+            symbolTable.setVariableExtensions("gl_SubgroupEqMask",       1, &E_GL_KHR_shader_subgroup_ballot);
+            symbolTable.setVariableExtensions("gl_SubgroupGeMask",       1, &E_GL_KHR_shader_subgroup_ballot);
+            symbolTable.setVariableExtensions("gl_SubgroupGtMask",       1, &E_GL_KHR_shader_subgroup_ballot);
+            symbolTable.setVariableExtensions("gl_SubgroupLeMask",       1, &E_GL_KHR_shader_subgroup_ballot);
+            symbolTable.setVariableExtensions("gl_SubgroupLtMask",       1, &E_GL_KHR_shader_subgroup_ballot);
+
+            BuiltInVariable("gl_SubgroupSize",         EbvSubgroupSize2,       symbolTable);
+            BuiltInVariable("gl_SubgroupInvocationID", EbvSubgroupInvocation2, symbolTable);
+            BuiltInVariable("gl_SubgroupEqMask",       EbvSubgroupEqMask2,     symbolTable);
+            BuiltInVariable("gl_SubgroupGeMask",       EbvSubgroupGeMask2,     symbolTable);
+            BuiltInVariable("gl_SubgroupGtMask",       EbvSubgroupGtMask2,     symbolTable);
+            BuiltInVariable("gl_SubgroupLeMask",       EbvSubgroupLeMask2,     symbolTable);
+            BuiltInVariable("gl_SubgroupLtMask",       EbvSubgroupLtMask2,     symbolTable);
+        }
 
         break;
 
@@ -5858,6 +7801,13 @@
         }
 #endif
 
+#ifdef NV_EXTENSIONS
+        if (profile != EEsProfile && version >= 430) {
+            symbolTable.setVariableExtensions("gl_FragFullyCoveredNV", 1, &E_GL_NV_conservative_raster_underestimation);
+            BuiltInVariable("gl_FragFullyCoveredNV", EbvFragFullyCoveredNV, symbolTable);
+        }
+#endif
+
         symbolTable.setVariableExtensions("gl_FragDepthEXT", 1, &E_GL_EXT_frag_depth);
 
         if (profile == EEsProfile && version < 320) {
@@ -5885,6 +7835,130 @@
             BuiltInVariable("gl_ViewID_OVR", EbvViewIndex, symbolTable);
         }
 
+        // GL_ARB_shader_ballot
+        if (profile != EEsProfile) {
+            symbolTable.setVariableExtensions("gl_SubGroupSizeARB",       1, &E_GL_ARB_shader_ballot);
+            symbolTable.setVariableExtensions("gl_SubGroupInvocationARB", 1, &E_GL_ARB_shader_ballot);
+            symbolTable.setVariableExtensions("gl_SubGroupEqMaskARB",     1, &E_GL_ARB_shader_ballot);
+            symbolTable.setVariableExtensions("gl_SubGroupGeMaskARB",     1, &E_GL_ARB_shader_ballot);
+            symbolTable.setVariableExtensions("gl_SubGroupGtMaskARB",     1, &E_GL_ARB_shader_ballot);
+            symbolTable.setVariableExtensions("gl_SubGroupLeMaskARB",     1, &E_GL_ARB_shader_ballot);
+            symbolTable.setVariableExtensions("gl_SubGroupLtMaskARB",     1, &E_GL_ARB_shader_ballot);
+
+            BuiltInVariable("gl_SubGroupInvocationARB", EbvSubGroupInvocation, symbolTable);
+            BuiltInVariable("gl_SubGroupEqMaskARB",     EbvSubGroupEqMask,     symbolTable);
+            BuiltInVariable("gl_SubGroupGeMaskARB",     EbvSubGroupGeMask,     symbolTable);
+            BuiltInVariable("gl_SubGroupGtMaskARB",     EbvSubGroupGtMask,     symbolTable);
+            BuiltInVariable("gl_SubGroupLeMaskARB",     EbvSubGroupLeMask,     symbolTable);
+            BuiltInVariable("gl_SubGroupLtMaskARB",     EbvSubGroupLtMask,     symbolTable);
+
+            if (spvVersion.vulkan > 0)
+                // Treat "gl_SubGroupSizeARB" as shader input instead of uniform for Vulkan
+                SpecialQualifier("gl_SubGroupSizeARB", EvqVaryingIn, EbvSubGroupSize, symbolTable);
+            else
+                BuiltInVariable("gl_SubGroupSizeARB", EbvSubGroupSize, symbolTable);
+        }
+
+        // GL_KHR_shader_subgroup
+        if (spvVersion.vulkan > 0) {
+            symbolTable.setVariableExtensions("gl_SubgroupSize",         1, &E_GL_KHR_shader_subgroup_basic);
+            symbolTable.setVariableExtensions("gl_SubgroupInvocationID", 1, &E_GL_KHR_shader_subgroup_basic);
+            symbolTable.setVariableExtensions("gl_SubgroupEqMask",       1, &E_GL_KHR_shader_subgroup_ballot);
+            symbolTable.setVariableExtensions("gl_SubgroupGeMask",       1, &E_GL_KHR_shader_subgroup_ballot);
+            symbolTable.setVariableExtensions("gl_SubgroupGtMask",       1, &E_GL_KHR_shader_subgroup_ballot);
+            symbolTable.setVariableExtensions("gl_SubgroupLeMask",       1, &E_GL_KHR_shader_subgroup_ballot);
+            symbolTable.setVariableExtensions("gl_SubgroupLtMask",       1, &E_GL_KHR_shader_subgroup_ballot);
+
+            BuiltInVariable("gl_SubgroupSize",         EbvSubgroupSize2,       symbolTable);
+            BuiltInVariable("gl_SubgroupInvocationID", EbvSubgroupInvocation2, symbolTable);
+            BuiltInVariable("gl_SubgroupEqMask",       EbvSubgroupEqMask2,     symbolTable);
+            BuiltInVariable("gl_SubgroupGeMask",       EbvSubgroupGeMask2,     symbolTable);
+            BuiltInVariable("gl_SubgroupGtMask",       EbvSubgroupGtMask2,     symbolTable);
+            BuiltInVariable("gl_SubgroupLeMask",       EbvSubgroupLeMask2,     symbolTable);
+            BuiltInVariable("gl_SubgroupLtMask",       EbvSubgroupLtMask2,     symbolTable);
+
+            symbolTable.setFunctionExtensions("subgroupBarrier",                 1, &E_GL_KHR_shader_subgroup_basic);
+            symbolTable.setFunctionExtensions("subgroupMemoryBarrier",           1, &E_GL_KHR_shader_subgroup_basic);
+            symbolTable.setFunctionExtensions("subgroupMemoryBarrierBuffer",     1, &E_GL_KHR_shader_subgroup_basic);
+            symbolTable.setFunctionExtensions("subgroupMemoryBarrierImage",      1, &E_GL_KHR_shader_subgroup_basic);
+            symbolTable.setFunctionExtensions("subgroupElect",                   1, &E_GL_KHR_shader_subgroup_basic);
+            symbolTable.setFunctionExtensions("subgroupAll",                     1, &E_GL_KHR_shader_subgroup_vote);
+            symbolTable.setFunctionExtensions("subgroupAny",                     1, &E_GL_KHR_shader_subgroup_vote);
+            symbolTable.setFunctionExtensions("subgroupAllEqual",                1, &E_GL_KHR_shader_subgroup_vote);
+            symbolTable.setFunctionExtensions("subgroupBroadcast",               1, &E_GL_KHR_shader_subgroup_ballot);
+            symbolTable.setFunctionExtensions("subgroupBroadcastFirst",          1, &E_GL_KHR_shader_subgroup_ballot);
+            symbolTable.setFunctionExtensions("subgroupBallot",                  1, &E_GL_KHR_shader_subgroup_ballot);
+            symbolTable.setFunctionExtensions("subgroupInverseBallot",           1, &E_GL_KHR_shader_subgroup_ballot);
+            symbolTable.setFunctionExtensions("subgroupBallotBitExtract",        1, &E_GL_KHR_shader_subgroup_ballot);
+            symbolTable.setFunctionExtensions("subgroupBallotBitCount",          1, &E_GL_KHR_shader_subgroup_ballot);
+            symbolTable.setFunctionExtensions("subgroupBallotInclusiveBitCount", 1, &E_GL_KHR_shader_subgroup_ballot);
+            symbolTable.setFunctionExtensions("subgroupBallotExclusiveBitCount", 1, &E_GL_KHR_shader_subgroup_ballot);
+            symbolTable.setFunctionExtensions("subgroupBallotFindLSB",           1, &E_GL_KHR_shader_subgroup_ballot);
+            symbolTable.setFunctionExtensions("subgroupBallotFindMSB",           1, &E_GL_KHR_shader_subgroup_ballot);
+            symbolTable.setFunctionExtensions("subgroupShuffle",                 1, &E_GL_KHR_shader_subgroup_shuffle);
+            symbolTable.setFunctionExtensions("subgroupShuffleXor",              1, &E_GL_KHR_shader_subgroup_shuffle);
+            symbolTable.setFunctionExtensions("subgroupShuffleUp",               1, &E_GL_KHR_shader_subgroup_shuffle_relative);
+            symbolTable.setFunctionExtensions("subgroupShuffleDown",             1, &E_GL_KHR_shader_subgroup_shuffle_relative);
+            symbolTable.setFunctionExtensions("subgroupAdd",                     1, &E_GL_KHR_shader_subgroup_arithmetic);
+            symbolTable.setFunctionExtensions("subgroupMul",                     1, &E_GL_KHR_shader_subgroup_arithmetic);
+            symbolTable.setFunctionExtensions("subgroupMin",                     1, &E_GL_KHR_shader_subgroup_arithmetic);
+            symbolTable.setFunctionExtensions("subgroupMax",                     1, &E_GL_KHR_shader_subgroup_arithmetic);
+            symbolTable.setFunctionExtensions("subgroupAnd",                     1, &E_GL_KHR_shader_subgroup_arithmetic);
+            symbolTable.setFunctionExtensions("subgroupOr",                      1, &E_GL_KHR_shader_subgroup_arithmetic);
+            symbolTable.setFunctionExtensions("subgroupXor",                     1, &E_GL_KHR_shader_subgroup_arithmetic);
+            symbolTable.setFunctionExtensions("subgroupInclusiveAdd",            1, &E_GL_KHR_shader_subgroup_arithmetic);
+            symbolTable.setFunctionExtensions("subgroupInclusiveMul",            1, &E_GL_KHR_shader_subgroup_arithmetic);
+            symbolTable.setFunctionExtensions("subgroupInclusiveMin",            1, &E_GL_KHR_shader_subgroup_arithmetic);
+            symbolTable.setFunctionExtensions("subgroupInclusiveMax",            1, &E_GL_KHR_shader_subgroup_arithmetic);
+            symbolTable.setFunctionExtensions("subgroupInclusiveAnd",            1, &E_GL_KHR_shader_subgroup_arithmetic);
+            symbolTable.setFunctionExtensions("subgroupInclusiveOr",             1, &E_GL_KHR_shader_subgroup_arithmetic);
+            symbolTable.setFunctionExtensions("subgroupInclusiveXor",            1, &E_GL_KHR_shader_subgroup_arithmetic);
+            symbolTable.setFunctionExtensions("subgroupExclusiveAdd",            1, &E_GL_KHR_shader_subgroup_arithmetic);
+            symbolTable.setFunctionExtensions("subgroupExclusiveMul",            1, &E_GL_KHR_shader_subgroup_arithmetic);
+            symbolTable.setFunctionExtensions("subgroupExclusiveMin",            1, &E_GL_KHR_shader_subgroup_arithmetic);
+            symbolTable.setFunctionExtensions("subgroupExclusiveMax",            1, &E_GL_KHR_shader_subgroup_arithmetic);
+            symbolTable.setFunctionExtensions("subgroupExclusiveAnd",            1, &E_GL_KHR_shader_subgroup_arithmetic);
+            symbolTable.setFunctionExtensions("subgroupExclusiveOr",             1, &E_GL_KHR_shader_subgroup_arithmetic);
+            symbolTable.setFunctionExtensions("subgroupExclusiveXor",            1, &E_GL_KHR_shader_subgroup_arithmetic);
+            symbolTable.setFunctionExtensions("subgroupClusteredAdd",            1, &E_GL_KHR_shader_subgroup_clustered);
+            symbolTable.setFunctionExtensions("subgroupClusteredMul",            1, &E_GL_KHR_shader_subgroup_clustered);
+            symbolTable.setFunctionExtensions("subgroupClusteredMin",            1, &E_GL_KHR_shader_subgroup_clustered);
+            symbolTable.setFunctionExtensions("subgroupClusteredMax",            1, &E_GL_KHR_shader_subgroup_clustered);
+            symbolTable.setFunctionExtensions("subgroupClusteredAnd",            1, &E_GL_KHR_shader_subgroup_clustered);
+            symbolTable.setFunctionExtensions("subgroupClusteredOr",             1, &E_GL_KHR_shader_subgroup_clustered);
+            symbolTable.setFunctionExtensions("subgroupClusteredXor",            1, &E_GL_KHR_shader_subgroup_clustered);
+            symbolTable.setFunctionExtensions("subgroupQuadBroadcast",           1, &E_GL_KHR_shader_subgroup_quad);
+            symbolTable.setFunctionExtensions("subgroupQuadSwapHorizontal",      1, &E_GL_KHR_shader_subgroup_quad);
+            symbolTable.setFunctionExtensions("subgroupQuadSwapVertical",        1, &E_GL_KHR_shader_subgroup_quad);
+            symbolTable.setFunctionExtensions("subgroupQuadSwapDiagonal",        1, &E_GL_KHR_shader_subgroup_quad);
+
+#ifdef NV_EXTENSIONS
+            symbolTable.setFunctionExtensions("subgroupPartitionNV",                          1, &E_GL_NV_shader_subgroup_partitioned);
+            symbolTable.setFunctionExtensions("subgroupPartitionedAddNV",                     1, &E_GL_NV_shader_subgroup_partitioned);
+            symbolTable.setFunctionExtensions("subgroupPartitionedMulNV",                     1, &E_GL_NV_shader_subgroup_partitioned);
+            symbolTable.setFunctionExtensions("subgroupPartitionedMinNV",                     1, &E_GL_NV_shader_subgroup_partitioned);
+            symbolTable.setFunctionExtensions("subgroupPartitionedMaxNV",                     1, &E_GL_NV_shader_subgroup_partitioned);
+            symbolTable.setFunctionExtensions("subgroupPartitionedAndNV",                     1, &E_GL_NV_shader_subgroup_partitioned);
+            symbolTable.setFunctionExtensions("subgroupPartitionedOrNV",                      1, &E_GL_NV_shader_subgroup_partitioned);
+            symbolTable.setFunctionExtensions("subgroupPartitionedXorNV",                     1, &E_GL_NV_shader_subgroup_partitioned);
+            symbolTable.setFunctionExtensions("subgroupPartitionedInclusiveAddNV",            1, &E_GL_NV_shader_subgroup_partitioned);
+            symbolTable.setFunctionExtensions("subgroupPartitionedInclusiveMulNV",            1, &E_GL_NV_shader_subgroup_partitioned);
+            symbolTable.setFunctionExtensions("subgroupPartitionedInclusiveMinNV",            1, &E_GL_NV_shader_subgroup_partitioned);
+            symbolTable.setFunctionExtensions("subgroupPartitionedInclusiveMaxNV",            1, &E_GL_NV_shader_subgroup_partitioned);
+            symbolTable.setFunctionExtensions("subgroupPartitionedInclusiveAndNV",            1, &E_GL_NV_shader_subgroup_partitioned);
+            symbolTable.setFunctionExtensions("subgroupPartitionedInclusiveOrNV",             1, &E_GL_NV_shader_subgroup_partitioned);
+            symbolTable.setFunctionExtensions("subgroupPartitionedInclusiveXorNV",            1, &E_GL_NV_shader_subgroup_partitioned);
+            symbolTable.setFunctionExtensions("subgroupPartitionedExclusiveAddNV",            1, &E_GL_NV_shader_subgroup_partitioned);
+            symbolTable.setFunctionExtensions("subgroupPartitionedExclusiveMulNV",            1, &E_GL_NV_shader_subgroup_partitioned);
+            symbolTable.setFunctionExtensions("subgroupPartitionedExclusiveMinNV",            1, &E_GL_NV_shader_subgroup_partitioned);
+            symbolTable.setFunctionExtensions("subgroupPartitionedExclusiveMaxNV",            1, &E_GL_NV_shader_subgroup_partitioned);
+            symbolTable.setFunctionExtensions("subgroupPartitionedExclusiveAndNV",            1, &E_GL_NV_shader_subgroup_partitioned);
+            symbolTable.setFunctionExtensions("subgroupPartitionedExclusiveOrNV",             1, &E_GL_NV_shader_subgroup_partitioned);
+            symbolTable.setFunctionExtensions("subgroupPartitionedExclusiveXorNV",            1, &E_GL_NV_shader_subgroup_partitioned);
+#endif
+
+        }
+
         if (profile == EEsProfile) {
             symbolTable.setFunctionExtensions("shadow2DEXT",        1, &E_GL_EXT_shadow_samplers);
             symbolTable.setFunctionExtensions("shadow2DProjEXT",    1, &E_GL_EXT_shadow_samplers);
@@ -5923,6 +7997,49 @@
             symbolTable.setFunctionExtensions("groupMemoryBarrier",         1, &E_GL_ARB_compute_shader);
         }
 
+        // GL_ARB_shader_ballot
+        if (profile != EEsProfile) {
+            symbolTable.setVariableExtensions("gl_SubGroupSizeARB",       1, &E_GL_ARB_shader_ballot);
+            symbolTable.setVariableExtensions("gl_SubGroupInvocationARB", 1, &E_GL_ARB_shader_ballot);
+            symbolTable.setVariableExtensions("gl_SubGroupEqMaskARB",     1, &E_GL_ARB_shader_ballot);
+            symbolTable.setVariableExtensions("gl_SubGroupGeMaskARB",     1, &E_GL_ARB_shader_ballot);
+            symbolTable.setVariableExtensions("gl_SubGroupGtMaskARB",     1, &E_GL_ARB_shader_ballot);
+            symbolTable.setVariableExtensions("gl_SubGroupLeMaskARB",     1, &E_GL_ARB_shader_ballot);
+            symbolTable.setVariableExtensions("gl_SubGroupLtMaskARB",     1, &E_GL_ARB_shader_ballot);
+
+            BuiltInVariable("gl_SubGroupInvocationARB", EbvSubGroupInvocation, symbolTable);
+            BuiltInVariable("gl_SubGroupEqMaskARB",     EbvSubGroupEqMask,     symbolTable);
+            BuiltInVariable("gl_SubGroupGeMaskARB",     EbvSubGroupGeMask,     symbolTable);
+            BuiltInVariable("gl_SubGroupGtMaskARB",     EbvSubGroupGtMask,     symbolTable);
+            BuiltInVariable("gl_SubGroupLeMaskARB",     EbvSubGroupLeMask,     symbolTable);
+            BuiltInVariable("gl_SubGroupLtMaskARB",     EbvSubGroupLtMask,     symbolTable);
+
+            if (spvVersion.vulkan > 0)
+                // Treat "gl_SubGroupSizeARB" as shader input instead of uniform for Vulkan
+                SpecialQualifier("gl_SubGroupSizeARB", EvqVaryingIn, EbvSubGroupSize, symbolTable);
+            else
+                BuiltInVariable("gl_SubGroupSizeARB", EbvSubGroupSize, symbolTable);
+        }
+
+        // GL_ARB_shader_ballot
+        if (spvVersion.vulkan > 0) {
+            symbolTable.setVariableExtensions("gl_SubgroupSize",         1, &E_GL_KHR_shader_subgroup_basic);
+            symbolTable.setVariableExtensions("gl_SubgroupInvocationID", 1, &E_GL_KHR_shader_subgroup_basic);
+            symbolTable.setVariableExtensions("gl_SubgroupEqMask",       1, &E_GL_KHR_shader_subgroup_ballot);
+            symbolTable.setVariableExtensions("gl_SubgroupGeMask",       1, &E_GL_KHR_shader_subgroup_ballot);
+            symbolTable.setVariableExtensions("gl_SubgroupGtMask",       1, &E_GL_KHR_shader_subgroup_ballot);
+            symbolTable.setVariableExtensions("gl_SubgroupLeMask",       1, &E_GL_KHR_shader_subgroup_ballot);
+            symbolTable.setVariableExtensions("gl_SubgroupLtMask",       1, &E_GL_KHR_shader_subgroup_ballot);
+
+            BuiltInVariable("gl_SubgroupSize",         EbvSubgroupSize2,       symbolTable);
+            BuiltInVariable("gl_SubgroupInvocationID", EbvSubgroupInvocation2, symbolTable);
+            BuiltInVariable("gl_SubgroupEqMask",       EbvSubgroupEqMask2,     symbolTable);
+            BuiltInVariable("gl_SubgroupGeMask",       EbvSubgroupGeMask2,     symbolTable);
+            BuiltInVariable("gl_SubgroupGtMask",       EbvSubgroupGtMask2,     symbolTable);
+            BuiltInVariable("gl_SubgroupLeMask",       EbvSubgroupLeMask2,     symbolTable);
+            BuiltInVariable("gl_SubgroupLtMask",       EbvSubgroupLtMask2,     symbolTable);
+        }
+
         if ((profile != EEsProfile && version >= 140) ||
             (profile == EEsProfile && version >= 310)) {
             symbolTable.setVariableExtensions("gl_DeviceIndex",  1, &E_GL_EXT_device_group);
@@ -5931,6 +8048,16 @@
             BuiltInVariable("gl_ViewIndex", EbvViewIndex, symbolTable);
         }
 
+        // GL_KHR_shader_subgroup
+        if (spvVersion.vulkan > 0) {
+            symbolTable.setVariableExtensions("gl_NumSubgroups", 1, &E_GL_KHR_shader_subgroup_basic);
+            symbolTable.setVariableExtensions("gl_SubgroupID",   1, &E_GL_KHR_shader_subgroup_basic);
+
+            BuiltInVariable("gl_NumSubgroups", EbvNumSubgroups, symbolTable);
+            BuiltInVariable("gl_SubgroupID",   EbvSubgroupID,   symbolTable);
+
+            symbolTable.setFunctionExtensions("subgroupMemoryBarrierShared", 1, &E_GL_KHR_shader_subgroup_basic);
+        }
         break;
 
     default:
@@ -6016,12 +8143,15 @@
     symbolTable.relateToOperator("doubleBitsToUint64", EOpDoubleBitsToUint64);
     symbolTable.relateToOperator("int64BitsToDouble",  EOpInt64BitsToDouble);
     symbolTable.relateToOperator("uint64BitsToDouble", EOpUint64BitsToDouble);
-#ifdef AMD_EXTENSIONS
+    symbolTable.relateToOperator("halfBitsToInt16",  EOpFloat16BitsToInt16);
+    symbolTable.relateToOperator("halfBitsToUint16", EOpFloat16BitsToUint16);
     symbolTable.relateToOperator("float16BitsToInt16",  EOpFloat16BitsToInt16);
     symbolTable.relateToOperator("float16BitsToUint16", EOpFloat16BitsToUint16);
     symbolTable.relateToOperator("int16BitsToFloat16",  EOpInt16BitsToFloat16);
     symbolTable.relateToOperator("uint16BitsToFloat16", EOpUint16BitsToFloat16);
-#endif
+
+    symbolTable.relateToOperator("int16BitsToHalf",  EOpInt16BitsToFloat16);
+    symbolTable.relateToOperator("uint16BitsToHalf", EOpUint16BitsToFloat16);
 
     symbolTable.relateToOperator("packSnorm2x16",   EOpPackSnorm2x16);
     symbolTable.relateToOperator("unpackSnorm2x16", EOpUnpackSnorm2x16);
@@ -6044,7 +8174,6 @@
     symbolTable.relateToOperator("packUint2x32",    EOpPackUint2x32);
     symbolTable.relateToOperator("unpackUint2x32",  EOpUnpackUint2x32);
 
-#ifdef AMD_EXTENSIONS
     symbolTable.relateToOperator("packInt2x16",     EOpPackInt2x16);
     symbolTable.relateToOperator("unpackInt2x16",   EOpUnpackInt2x16);
     symbolTable.relateToOperator("packUint2x16",    EOpPackUint2x16);
@@ -6054,10 +8183,16 @@
     symbolTable.relateToOperator("unpackInt4x16",   EOpUnpackInt4x16);
     symbolTable.relateToOperator("packUint4x16",    EOpPackUint4x16);
     symbolTable.relateToOperator("unpackUint4x16",  EOpUnpackUint4x16);
-
     symbolTable.relateToOperator("packFloat2x16",   EOpPackFloat2x16);
     symbolTable.relateToOperator("unpackFloat2x16", EOpUnpackFloat2x16);
-#endif
+
+    symbolTable.relateToOperator("pack16",          EOpPack16);
+    symbolTable.relateToOperator("pack32",          EOpPack32);
+    symbolTable.relateToOperator("pack64",          EOpPack64);
+
+    symbolTable.relateToOperator("unpack32",        EOpUnpack32);
+    symbolTable.relateToOperator("unpack16",        EOpUnpack16);
+    symbolTable.relateToOperator("unpack8",         EOpUnpack8);
 
     symbolTable.relateToOperator("length",       EOpLength);
     symbolTable.relateToOperator("distance",     EOpDistance);
@@ -6301,6 +8436,90 @@
             symbolTable.relateToOperator("fragmentFetchAMD",                    EOpFragmentFetch);
 #endif
         }
+
+        // GL_KHR_shader_subgroup
+        if (spvVersion.vulkan > 0) {
+            symbolTable.relateToOperator("subgroupBarrier",                 EOpSubgroupBarrier);
+            symbolTable.relateToOperator("subgroupMemoryBarrier",           EOpSubgroupMemoryBarrier);
+            symbolTable.relateToOperator("subgroupMemoryBarrierBuffer",     EOpSubgroupMemoryBarrierBuffer);
+            symbolTable.relateToOperator("subgroupMemoryBarrierImage",      EOpSubgroupMemoryBarrierImage);
+            symbolTable.relateToOperator("subgroupElect",                   EOpSubgroupElect);
+            symbolTable.relateToOperator("subgroupAll",                     EOpSubgroupAll);
+            symbolTable.relateToOperator("subgroupAny",                     EOpSubgroupAny);
+            symbolTable.relateToOperator("subgroupAllEqual",                EOpSubgroupAllEqual);
+            symbolTable.relateToOperator("subgroupBroadcast",               EOpSubgroupBroadcast);
+            symbolTable.relateToOperator("subgroupBroadcastFirst",          EOpSubgroupBroadcastFirst);
+            symbolTable.relateToOperator("subgroupBallot",                  EOpSubgroupBallot);
+            symbolTable.relateToOperator("subgroupInverseBallot",           EOpSubgroupInverseBallot);
+            symbolTable.relateToOperator("subgroupBallotBitExtract",        EOpSubgroupBallotBitExtract);
+            symbolTable.relateToOperator("subgroupBallotBitCount",          EOpSubgroupBallotBitCount);
+            symbolTable.relateToOperator("subgroupBallotInclusiveBitCount", EOpSubgroupBallotInclusiveBitCount);
+            symbolTable.relateToOperator("subgroupBallotExclusiveBitCount", EOpSubgroupBallotExclusiveBitCount);
+            symbolTable.relateToOperator("subgroupBallotFindLSB",           EOpSubgroupBallotFindLSB);
+            symbolTable.relateToOperator("subgroupBallotFindMSB",           EOpSubgroupBallotFindMSB);
+            symbolTable.relateToOperator("subgroupShuffle",                 EOpSubgroupShuffle);
+            symbolTable.relateToOperator("subgroupShuffleXor",              EOpSubgroupShuffleXor);
+            symbolTable.relateToOperator("subgroupShuffleUp",               EOpSubgroupShuffleUp);
+            symbolTable.relateToOperator("subgroupShuffleDown",             EOpSubgroupShuffleDown);
+            symbolTable.relateToOperator("subgroupAdd",                     EOpSubgroupAdd);
+            symbolTable.relateToOperator("subgroupMul",                     EOpSubgroupMul);
+            symbolTable.relateToOperator("subgroupMin",                     EOpSubgroupMin);
+            symbolTable.relateToOperator("subgroupMax",                     EOpSubgroupMax);
+            symbolTable.relateToOperator("subgroupAnd",                     EOpSubgroupAnd);
+            symbolTable.relateToOperator("subgroupOr",                      EOpSubgroupOr);
+            symbolTable.relateToOperator("subgroupXor",                     EOpSubgroupXor);
+            symbolTable.relateToOperator("subgroupInclusiveAdd",            EOpSubgroupInclusiveAdd);
+            symbolTable.relateToOperator("subgroupInclusiveMul",            EOpSubgroupInclusiveMul);
+            symbolTable.relateToOperator("subgroupInclusiveMin",            EOpSubgroupInclusiveMin);
+            symbolTable.relateToOperator("subgroupInclusiveMax",            EOpSubgroupInclusiveMax);
+            symbolTable.relateToOperator("subgroupInclusiveAnd",            EOpSubgroupInclusiveAnd);
+            symbolTable.relateToOperator("subgroupInclusiveOr",             EOpSubgroupInclusiveOr);
+            symbolTable.relateToOperator("subgroupInclusiveXor",            EOpSubgroupInclusiveXor);
+            symbolTable.relateToOperator("subgroupExclusiveAdd",            EOpSubgroupExclusiveAdd);
+            symbolTable.relateToOperator("subgroupExclusiveMul",            EOpSubgroupExclusiveMul);
+            symbolTable.relateToOperator("subgroupExclusiveMin",            EOpSubgroupExclusiveMin);
+            symbolTable.relateToOperator("subgroupExclusiveMax",            EOpSubgroupExclusiveMax);
+            symbolTable.relateToOperator("subgroupExclusiveAnd",            EOpSubgroupExclusiveAnd);
+            symbolTable.relateToOperator("subgroupExclusiveOr",             EOpSubgroupExclusiveOr);
+            symbolTable.relateToOperator("subgroupExclusiveXor",            EOpSubgroupExclusiveXor);
+            symbolTable.relateToOperator("subgroupClusteredAdd",            EOpSubgroupClusteredAdd);
+            symbolTable.relateToOperator("subgroupClusteredMul",            EOpSubgroupClusteredMul);
+            symbolTable.relateToOperator("subgroupClusteredMin",            EOpSubgroupClusteredMin);
+            symbolTable.relateToOperator("subgroupClusteredMax",            EOpSubgroupClusteredMax);
+            symbolTable.relateToOperator("subgroupClusteredAnd",            EOpSubgroupClusteredAnd);
+            symbolTable.relateToOperator("subgroupClusteredOr",             EOpSubgroupClusteredOr);
+            symbolTable.relateToOperator("subgroupClusteredXor",            EOpSubgroupClusteredXor);
+            symbolTable.relateToOperator("subgroupQuadBroadcast",           EOpSubgroupQuadBroadcast);
+            symbolTable.relateToOperator("subgroupQuadSwapHorizontal",      EOpSubgroupQuadSwapHorizontal);
+            symbolTable.relateToOperator("subgroupQuadSwapVertical",        EOpSubgroupQuadSwapVertical);
+            symbolTable.relateToOperator("subgroupQuadSwapDiagonal",        EOpSubgroupQuadSwapDiagonal);
+
+#ifdef NV_EXTENSIONS
+            symbolTable.relateToOperator("subgroupPartitionNV",                          EOpSubgroupPartition);
+            symbolTable.relateToOperator("subgroupPartitionedAddNV",                     EOpSubgroupPartitionedAdd);
+            symbolTable.relateToOperator("subgroupPartitionedMulNV",                     EOpSubgroupPartitionedMul);
+            symbolTable.relateToOperator("subgroupPartitionedMinNV",                     EOpSubgroupPartitionedMin);
+            symbolTable.relateToOperator("subgroupPartitionedMaxNV",                     EOpSubgroupPartitionedMax);
+            symbolTable.relateToOperator("subgroupPartitionedAndNV",                     EOpSubgroupPartitionedAnd);
+            symbolTable.relateToOperator("subgroupPartitionedOrNV",                      EOpSubgroupPartitionedOr);
+            symbolTable.relateToOperator("subgroupPartitionedXorNV",                     EOpSubgroupPartitionedXor);
+            symbolTable.relateToOperator("subgroupPartitionedInclusiveAddNV",            EOpSubgroupPartitionedInclusiveAdd);
+            symbolTable.relateToOperator("subgroupPartitionedInclusiveMulNV",            EOpSubgroupPartitionedInclusiveMul);
+            symbolTable.relateToOperator("subgroupPartitionedInclusiveMinNV",            EOpSubgroupPartitionedInclusiveMin);
+            symbolTable.relateToOperator("subgroupPartitionedInclusiveMaxNV",            EOpSubgroupPartitionedInclusiveMax);
+            symbolTable.relateToOperator("subgroupPartitionedInclusiveAndNV",            EOpSubgroupPartitionedInclusiveAnd);
+            symbolTable.relateToOperator("subgroupPartitionedInclusiveOrNV",             EOpSubgroupPartitionedInclusiveOr);
+            symbolTable.relateToOperator("subgroupPartitionedInclusiveXorNV",            EOpSubgroupPartitionedInclusiveXor);
+            symbolTable.relateToOperator("subgroupPartitionedExclusiveAddNV",            EOpSubgroupPartitionedExclusiveAdd);
+            symbolTable.relateToOperator("subgroupPartitionedExclusiveMulNV",            EOpSubgroupPartitionedExclusiveMul);
+            symbolTable.relateToOperator("subgroupPartitionedExclusiveMinNV",            EOpSubgroupPartitionedExclusiveMin);
+            symbolTable.relateToOperator("subgroupPartitionedExclusiveMaxNV",            EOpSubgroupPartitionedExclusiveMax);
+            symbolTable.relateToOperator("subgroupPartitionedExclusiveAndNV",            EOpSubgroupPartitionedExclusiveAnd);
+            symbolTable.relateToOperator("subgroupPartitionedExclusiveOrNV",             EOpSubgroupPartitionedExclusiveOr);
+            symbolTable.relateToOperator("subgroupPartitionedExclusiveXorNV",            EOpSubgroupPartitionedExclusiveXor);
+#endif
+        }
+
         if (profile == EEsProfile) {
             symbolTable.relateToOperator("shadow2DEXT",              EOpTexture);
             symbolTable.relateToOperator("shadow2DProjEXT",          EOpTextureProj);
@@ -6341,12 +8560,13 @@
 #ifdef AMD_EXTENSIONS
         if (profile != EEsProfile)
             symbolTable.relateToOperator("interpolateAtVertexAMD", EOpInterpolateAtVertex);
-        break;
 #endif
+        break;
 
     case EShLangCompute:
-        symbolTable.relateToOperator("memoryBarrierShared",     EOpMemoryBarrierShared);
-        symbolTable.relateToOperator("groupMemoryBarrier",      EOpGroupMemoryBarrier);
+        symbolTable.relateToOperator("memoryBarrierShared",         EOpMemoryBarrierShared);
+        symbolTable.relateToOperator("groupMemoryBarrier",          EOpGroupMemoryBarrier);
+        symbolTable.relateToOperator("subgroupMemoryBarrierShared", EOpSubgroupMemoryBarrierShared);
         break;
 
     default:
@@ -6382,9 +8602,9 @@
         if (version == 100 || IncludeLegacy(version, profile, spvVersion) || (! ForwardCompatibility && profile != EEsProfile && version < 420)) {
             TPrecisionQualifier pq = profile == EEsProfile ? EpqMedium : EpqNone;
             TType fragData(EbtFloat, EvqFragColor, pq, 4);
-            TArraySizes& arraySizes = *new TArraySizes;
-            arraySizes.addInnerSize(resources.maxDrawBuffers);
-            fragData.newArraySizes(arraySizes);
+            TArraySizes* arraySizes = new TArraySizes;
+            arraySizes->addInnerSize(resources.maxDrawBuffers);
+            fragData.transferArraySizes(arraySizes);
             symbolTable.insert(*new TVariable(NewPoolTString("gl_FragData"), fragData));
             SpecialQualifier("gl_FragData", EvqFragColor, EbvFragData, symbolTable);
         }
diff --git a/glslang/MachineIndependent/Initialize.h b/glslang/MachineIndependent/Initialize.h
index 6b54c4d..b5de324 100644
--- a/glslang/MachineIndependent/Initialize.h
+++ b/glslang/MachineIndependent/Initialize.h
@@ -67,7 +67,6 @@
     virtual const TString& getStageString(EShLanguage language) const { return stageBuiltins[language]; }
 
     virtual void identifyBuiltIns(int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language, TSymbolTable& symbolTable) = 0;
-
     virtual void identifyBuiltIns(int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language, TSymbolTable& symbolTable, const TBuiltInResource &resources) = 0;
 
 protected:
@@ -89,7 +88,6 @@
     void initialize(const TBuiltInResource& resources, int version, EProfile, const SpvVersion& spvVersion, EShLanguage);
 
     void identifyBuiltIns(int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language, TSymbolTable& symbolTable);
-
     void identifyBuiltIns(int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language, TSymbolTable& symbolTable, const TBuiltInResource &resources);
 
 protected:
diff --git a/glslang/MachineIndependent/Intermediate.cpp b/glslang/MachineIndependent/Intermediate.cpp
index 78e6563..0333e5d 100644
--- a/glslang/MachineIndependent/Intermediate.cpp
+++ b/glslang/MachineIndependent/Intermediate.cpp
@@ -2,6 +2,7 @@
 // Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
 // Copyright (C) 2012-2015 LunarG, Inc.
 // Copyright (C) 2015-2016 Google, Inc.
+// Copyright (C) 2017 ARM Limited.
 //
 // All rights reserved.
 //
@@ -46,6 +47,7 @@
 
 #include <cfloat>
 #include <utility>
+#include <tuple>
 
 namespace glslang {
 
@@ -118,16 +120,12 @@
         return nullptr;
 
     // Try converting the children's base types to compatible types.
-    TIntermTyped* child = addConversion(op, left->getType(), right);
-    if (child)
-        right = child;
-    else {
-        child = addConversion(op, right->getType(), left);
-        if (child)
-            left = child;
-        else
-            return nullptr;
-    }
+    auto children = addConversion(op, left, right);
+    left = std::get<0>(children);
+    right = std::get<1>(children);
+
+    if (left == nullptr || right == nullptr)
+        return nullptr;
 
     // Convert the children's type shape to be compatible.
     addBiShapeConversion(op, left, right);
@@ -161,6 +159,11 @@
     if (specConstantPropagates(*node->getLeft(), *node->getRight()) && isSpecializationOperation(*node))
         node->getWritableType().getQualifier().makeSpecConstant();
 
+    // If must propagate nonuniform, make a nonuniform.
+    if ((node->getLeft()->getQualifier().nonUniform || node->getRight()->getQualifier().nonUniform) &&
+            isNonuniformPropagating(node->getOp()))
+        node->getWritableType().getQualifier().nonUniform = true;
+
     return node;
 }
 
@@ -304,20 +307,18 @@
     //
     TBasicType newType = EbtVoid;
     switch (op) {
+    case EOpConstructInt8:   newType = EbtInt8;   break;
+    case EOpConstructUint8:  newType = EbtUint8;  break;
+    case EOpConstructInt16:  newType = EbtInt16;    break;
+    case EOpConstructUint16: newType = EbtUint16;   break;
     case EOpConstructInt:    newType = EbtInt;    break;
     case EOpConstructUint:   newType = EbtUint;   break;
     case EOpConstructInt64:  newType = EbtInt64;  break;
     case EOpConstructUint64: newType = EbtUint64; break;
-#ifdef AMD_EXTENSIONS
-    case EOpConstructInt16:  newType = EbtInt16;  break;
-    case EOpConstructUint16: newType = EbtUint16; break;
-#endif
     case EOpConstructBool:   newType = EbtBool;   break;
     case EOpConstructFloat:  newType = EbtFloat;  break;
     case EOpConstructDouble: newType = EbtDouble; break;
-#ifdef AMD_EXTENSIONS
     case EOpConstructFloat16: newType = EbtFloat16; break;
-#endif
     default: break; // some compilers want this
     }
 
@@ -336,20 +337,18 @@
     // TODO: but, did this bypass constant folding?
     //
     switch (op) {
+    case EOpConstructInt8:
+    case EOpConstructUint8:
+    case EOpConstructInt16:
+    case EOpConstructUint16:
     case EOpConstructInt:
     case EOpConstructUint:
     case EOpConstructInt64:
     case EOpConstructUint64:
-#ifdef AMD_EXTENSIONS
-    case EOpConstructInt16:
-    case EOpConstructUint16:
-#endif
     case EOpConstructBool:
     case EOpConstructFloat:
     case EOpConstructDouble:
-#ifdef AMD_EXTENSIONS
     case EOpConstructFloat16:
-#endif
         return child;
     default: break; // some compilers want this
     }
@@ -373,10 +372,15 @@
     if (node->getOperand()->getType().getQualifier().isSpecConstant() && isSpecializationOperation(*node))
         node->getWritableType().getQualifier().makeSpecConstant();
 
+    // If must propagate nonuniform, make a nonuniform.
+    if (node->getOperand()->getQualifier().nonUniform && isNonuniformPropagating(node->getOp()))
+        node->getWritableType().getQualifier().nonUniform = true;
+
     return node;
 }
 
-TIntermTyped* TIntermediate::addBuiltInFunctionCall(const TSourceLoc& loc, TOperator op, bool unary, TIntermNode* childNode, const TType& returnType)
+TIntermTyped* TIntermediate::addBuiltInFunctionCall(const TSourceLoc& loc, TOperator op, bool unary,
+    TIntermNode* childNode, const TType& returnType)
 {
     if (unary) {
         //
@@ -420,7 +424,7 @@
     //
     // Make sure we have an aggregate.  If not turn it into one.
     //
-    if (node) {
+    if (node != nullptr) {
         aggNode = node->getAsAggregate();
         if (aggNode == nullptr || aggNode->getOp() != EOpNull) {
             //
@@ -446,27 +450,14 @@
     return fold(aggNode);
 }
 
-//
-// Convert the node's type to the given type, as allowed by the operation involved: 'op'.
-// For implicit conversions, 'op' is not the requested conversion, it is the explicit
-// operation requiring the implicit conversion.
-//
-// Returns a node representing the conversion, which could be the same
-// node passed in if no conversion was needed.
-//
-// Generally, this is focused on basic type conversion, not shape conversion.
-// See addShapeConversion().
-//
-// Return nullptr if a conversion can't be done.
-//
-TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TIntermTyped* node) const
+bool TIntermediate::isConversionAllowed(TOperator op, TIntermTyped* node) const
 {
     //
     // Does the base type even allow the operation?
     //
     switch (node->getBasicType()) {
     case EbtVoid:
-        return nullptr;
+        return false;
     case EbtAtomicUint:
     case EbtSampler:
         // opaque types can be passed to functions
@@ -484,11 +475,396 @@
             break;
 
         // otherwise, opaque types can't even be operated on, let alone converted
-        return nullptr;
+        return false;
     default:
         break;
     }
 
+    return true;
+}
+
+// This is 'mechanism' here, it does any conversion told.
+// It is about basic type, not about shape.
+// The policy comes from the shader or the calling code.
+TIntermUnary* TIntermediate::createConversion(TBasicType convertTo, TIntermTyped* node) const
+{
+    //
+    // Add a new newNode for the conversion.
+    //
+    TIntermUnary* newNode = nullptr;
+
+    TOperator newOp = EOpNull;
+
+    switch (convertTo) {
+    case EbtDouble:
+        switch (node->getBasicType()) {
+        case EbtInt8:    newOp = EOpConvInt8ToDouble;    break;
+        case EbtUint8:   newOp = EOpConvUint8ToDouble;   break;
+        case EbtInt16:   newOp = EOpConvInt16ToDouble;   break;
+        case EbtUint16:  newOp = EOpConvUint16ToDouble;  break;
+        case EbtInt:     newOp = EOpConvIntToDouble;     break;
+        case EbtUint:    newOp = EOpConvUintToDouble;    break;
+        case EbtBool:    newOp = EOpConvBoolToDouble;    break;
+        case EbtFloat:   newOp = EOpConvFloatToDouble;   break;
+        case EbtFloat16: newOp = EOpConvFloat16ToDouble; break;
+        case EbtInt64:   newOp = EOpConvInt64ToDouble;   break;
+        case EbtUint64:  newOp = EOpConvUint64ToDouble;  break;
+        default:
+            return nullptr;
+        }
+        break;
+    case EbtFloat:
+        switch (node->getBasicType()) {
+        case EbtInt8:    newOp = EOpConvInt8ToFloat;    break;
+        case EbtUint8:   newOp = EOpConvUint8ToFloat;   break;
+        case EbtInt16:   newOp = EOpConvInt16ToFloat;   break;
+        case EbtUint16:  newOp = EOpConvUint16ToFloat;  break;
+        case EbtInt:     newOp = EOpConvIntToFloat;     break;
+        case EbtUint:    newOp = EOpConvUintToFloat;    break;
+        case EbtBool:    newOp = EOpConvBoolToFloat;    break;
+        case EbtDouble:  newOp = EOpConvDoubleToFloat;  break;
+        case EbtFloat16: newOp = EOpConvFloat16ToFloat; break;
+        case EbtInt64:   newOp = EOpConvInt64ToFloat;   break;
+        case EbtUint64:  newOp = EOpConvUint64ToFloat;  break;
+        default:
+            return nullptr;
+        }
+        break;
+    case EbtFloat16:
+        switch (node->getBasicType()) {
+        case EbtInt8:   newOp = EOpConvInt8ToFloat16;   break;
+        case EbtUint8:  newOp = EOpConvUint8ToFloat16;  break;
+        case EbtInt16:  newOp = EOpConvInt16ToFloat16;  break;
+        case EbtUint16: newOp = EOpConvUint16ToFloat16; break;
+        case EbtInt:    newOp = EOpConvIntToFloat16;    break;
+        case EbtUint:   newOp = EOpConvUintToFloat16;   break;
+        case EbtBool:   newOp = EOpConvBoolToFloat16;   break;
+        case EbtFloat:  newOp = EOpConvFloatToFloat16;  break;
+        case EbtDouble: newOp = EOpConvDoubleToFloat16; break;
+        case EbtInt64:  newOp = EOpConvInt64ToFloat16;  break;
+        case EbtUint64: newOp = EOpConvUint64ToFloat16; break;
+        default:
+            return nullptr;
+        }
+        break;
+    case EbtBool:
+        switch (node->getBasicType()) {
+        case EbtInt8:    newOp = EOpConvInt8ToBool;    break;
+        case EbtUint8:   newOp = EOpConvUint8ToBool;   break;
+        case EbtInt16:   newOp = EOpConvInt16ToBool;   break;
+        case EbtUint16:  newOp = EOpConvUint16ToBool;  break;
+        case EbtInt:     newOp = EOpConvIntToBool;     break;
+        case EbtUint:    newOp = EOpConvUintToBool;    break;
+        case EbtFloat:   newOp = EOpConvFloatToBool;   break;
+        case EbtDouble:  newOp = EOpConvDoubleToBool;  break;
+        case EbtFloat16: newOp = EOpConvFloat16ToBool; break;
+        case EbtInt64:   newOp = EOpConvInt64ToBool;   break;
+        case EbtUint64:  newOp = EOpConvUint64ToBool;  break;
+        default:
+            return nullptr;
+        }
+        break;
+    case EbtInt8:
+        switch (node->getBasicType()) {
+        case EbtUint8:   newOp = EOpConvUint8ToInt8;   break;
+        case EbtInt16:   newOp = EOpConvInt16ToInt8;   break;
+        case EbtUint16:  newOp = EOpConvUint16ToInt8;  break;
+        case EbtInt:     newOp = EOpConvIntToInt8;     break;
+        case EbtUint:    newOp = EOpConvUintToInt8;    break;
+        case EbtInt64:   newOp = EOpConvInt64ToInt8;   break;
+        case EbtUint64:  newOp = EOpConvUint64ToInt8;  break;
+        case EbtBool:    newOp = EOpConvBoolToInt8;    break;
+        case EbtFloat:   newOp = EOpConvFloatToInt8;   break;
+        case EbtDouble:  newOp = EOpConvDoubleToInt8;  break;
+        case EbtFloat16: newOp = EOpConvFloat16ToInt8; break;
+        default:
+            return nullptr;
+        }
+        break;
+    case EbtUint8:
+        switch (node->getBasicType()) {
+        case EbtInt8:    newOp = EOpConvInt8ToUint8;    break;
+        case EbtInt16:   newOp = EOpConvInt16ToUint8;   break;
+        case EbtUint16:  newOp = EOpConvUint16ToUint8;  break;
+        case EbtInt:     newOp = EOpConvIntToUint8;     break;
+        case EbtUint:    newOp = EOpConvUintToUint8;    break;
+        case EbtInt64:   newOp = EOpConvInt64ToUint8;   break;
+        case EbtUint64:  newOp = EOpConvUint64ToUint8;  break;
+        case EbtBool:    newOp = EOpConvBoolToUint8;    break;
+        case EbtFloat:   newOp = EOpConvFloatToUint8;   break;
+        case EbtDouble:  newOp = EOpConvDoubleToUint8;  break;
+        case EbtFloat16: newOp = EOpConvFloat16ToUint8; break;
+        default:
+            return nullptr;
+        }
+        break;
+
+    case EbtInt16:
+        switch (node->getBasicType()) {
+        case EbtUint8:   newOp = EOpConvUint8ToInt16;   break;
+        case EbtInt8:    newOp = EOpConvInt8ToInt16;    break;
+        case EbtUint16:  newOp = EOpConvUint16ToInt16;  break;
+        case EbtInt:     newOp = EOpConvIntToInt16;     break;
+        case EbtUint:    newOp = EOpConvUintToInt16;    break;
+        case EbtInt64:   newOp = EOpConvInt64ToInt16;   break;
+        case EbtUint64:  newOp = EOpConvUint64ToInt16;  break;
+        case EbtBool:    newOp = EOpConvBoolToInt16;    break;
+        case EbtFloat:   newOp = EOpConvFloatToInt16;   break;
+        case EbtDouble:  newOp = EOpConvDoubleToInt16;  break;
+        case EbtFloat16: newOp = EOpConvFloat16ToInt16; break;
+        default:
+            return nullptr;
+        }
+        break;
+    case EbtUint16:
+        switch (node->getBasicType()) {
+        case EbtInt8:    newOp = EOpConvInt8ToUint16;    break;
+        case EbtUint8:   newOp = EOpConvUint8ToUint16;   break;
+        case EbtInt16:   newOp = EOpConvInt16ToUint16;   break;
+        case EbtInt:     newOp = EOpConvIntToUint16;     break;
+        case EbtUint:    newOp = EOpConvUintToUint16;    break;
+        case EbtInt64:   newOp = EOpConvInt64ToUint16;   break;
+        case EbtUint64:  newOp = EOpConvUint64ToUint16;  break;
+        case EbtBool:    newOp = EOpConvBoolToUint16;    break;
+        case EbtFloat:   newOp = EOpConvFloatToUint16;   break;
+        case EbtDouble:  newOp = EOpConvDoubleToUint16;  break;
+        case EbtFloat16: newOp = EOpConvFloat16ToUint16; break;
+        default:
+            return nullptr;
+        }
+        break;
+
+    case EbtInt:
+        switch (node->getBasicType()) {
+        case EbtInt8:    newOp = EOpConvInt8ToInt;    break;
+        case EbtUint8:   newOp = EOpConvUint8ToInt;   break;
+        case EbtInt16:   newOp = EOpConvInt16ToInt;   break;
+        case EbtUint16:  newOp = EOpConvUint16ToInt;  break;
+        case EbtUint:    newOp = EOpConvUintToInt;    break;
+        case EbtBool:    newOp = EOpConvBoolToInt;    break;
+        case EbtFloat:   newOp = EOpConvFloatToInt;   break;
+        case EbtDouble:  newOp = EOpConvDoubleToInt;  break;
+        case EbtFloat16: newOp = EOpConvFloat16ToInt; break;
+        case EbtInt64:   newOp = EOpConvInt64ToInt;   break;
+        case EbtUint64:  newOp = EOpConvUint64ToInt;  break;
+        default:
+            return nullptr;
+        }
+        break;
+    case EbtUint:
+        switch (node->getBasicType()) {
+        case EbtInt8:    newOp = EOpConvInt8ToUint;    break;
+        case EbtUint8:   newOp = EOpConvUint8ToUint;   break;
+        case EbtInt16:   newOp = EOpConvInt16ToUint;   break;
+        case EbtUint16:  newOp = EOpConvUint16ToUint;  break;
+        case EbtInt:     newOp = EOpConvIntToUint;     break;
+        case EbtBool:    newOp = EOpConvBoolToUint;    break;
+        case EbtFloat:   newOp = EOpConvFloatToUint;   break;
+        case EbtDouble:  newOp = EOpConvDoubleToUint;  break;
+        case EbtFloat16: newOp = EOpConvFloat16ToUint; break;
+        case EbtInt64:   newOp = EOpConvInt64ToUint;   break;
+        case EbtUint64:  newOp = EOpConvUint64ToUint;  break;
+        default:
+            return nullptr;
+        }
+        break;
+    case EbtInt64:
+        switch (node->getBasicType()) {
+        case EbtInt8:    newOp = EOpConvInt8ToInt64;    break;
+        case EbtUint8:   newOp = EOpConvUint8ToInt64;   break;
+        case EbtInt16:   newOp = EOpConvInt16ToInt64;   break;
+        case EbtUint16:  newOp = EOpConvUint16ToInt64;  break;
+        case EbtInt:     newOp = EOpConvIntToInt64;     break;
+        case EbtUint:    newOp = EOpConvUintToInt64;    break;
+        case EbtBool:    newOp = EOpConvBoolToInt64;    break;
+        case EbtFloat:   newOp = EOpConvFloatToInt64;   break;
+        case EbtDouble:  newOp = EOpConvDoubleToInt64;  break;
+        case EbtFloat16: newOp = EOpConvFloat16ToInt64; break;
+        case EbtUint64:  newOp = EOpConvUint64ToInt64;  break;
+        default:
+            return nullptr;
+        }
+        break;
+    case EbtUint64:
+        switch (node->getBasicType()) {
+        case EbtInt8:    newOp = EOpConvInt8ToUint64;    break;
+        case EbtUint8:   newOp = EOpConvUint8ToUint64;   break;
+        case EbtInt16:   newOp = EOpConvInt16ToUint64;   break;
+        case EbtUint16:  newOp = EOpConvUint16ToUint64;  break;
+        case EbtInt:     newOp = EOpConvIntToUint64;     break;
+        case EbtUint:    newOp = EOpConvUintToUint64;    break;
+        case EbtBool:    newOp = EOpConvBoolToUint64;    break;
+        case EbtFloat:   newOp = EOpConvFloatToUint64;   break;
+        case EbtDouble:  newOp = EOpConvDoubleToUint64;  break;
+        case EbtFloat16: newOp = EOpConvFloat16ToUint64; break;
+        case EbtInt64:   newOp = EOpConvInt64ToUint64;   break;
+        default:
+            return nullptr;
+        }
+        break;
+    default:
+        return nullptr;
+    }
+
+    TType newType(convertTo, EvqTemporary, node->getVectorSize(), node->getMatrixCols(), node->getMatrixRows());
+    newNode = addUnaryNode(newOp, node, node->getLoc(), newType);
+
+    // TODO: it seems that some unary folding operations should occur here, but are not
+
+    // Propagate specialization-constant-ness, if allowed
+    if (node->getType().getQualifier().isSpecConstant() && isSpecializationOperation(*newNode))
+        newNode->getWritableType().getQualifier().makeSpecConstant();
+
+    return newNode;
+}
+
+// For converting a pair of operands to a binary operation to compatible
+// types with each other, relative to the operation in 'op'.
+// This does not cover assignment operations, which is asymmetric in that the
+// left type is not changeable.
+// See addConversion(op, type, node) for assignments and unary operation
+// conversions.
+//
+// Generally, this is focused on basic type conversion, not shape conversion.
+// See addShapeConversion() for shape conversions.
+//
+// Returns the converted pair of nodes.
+// Returns <nullptr, nullptr> when there is no conversion.
+std::tuple<TIntermTyped*, TIntermTyped*>
+TIntermediate::addConversion(TOperator op, TIntermTyped* node0, TIntermTyped* node1) const
+{
+    if (!isConversionAllowed(op, node0) || !isConversionAllowed(op, node1))
+        return std::make_tuple(nullptr, nullptr);
+
+    if (node0->getType() != node1->getType()) {
+        // If differing structure, then no conversions.
+        if (node0->isStruct() || node1->isStruct())
+            return std::make_tuple(nullptr, nullptr);
+
+        // If differing arrays, then no conversions.
+        if (node0->getType().isArray() || node1->getType().isArray())
+            return std::make_tuple(nullptr, nullptr);
+    }
+
+    auto promoteTo = std::make_tuple(EbtNumTypes, EbtNumTypes);
+
+    switch (op) {
+    //
+    // List all the binary ops that can implicitly convert one operand to the other's type;
+    // This implements the 'policy' for implicit type conversion.
+    //
+    case EOpLessThan:
+    case EOpGreaterThan:
+    case EOpLessThanEqual:
+    case EOpGreaterThanEqual:
+    case EOpEqual:
+    case EOpNotEqual:
+
+    case EOpAdd:
+    case EOpSub:
+    case EOpMul:
+    case EOpDiv:
+    case EOpMod:
+
+    case EOpVectorTimesScalar:
+    case EOpVectorTimesMatrix:
+    case EOpMatrixTimesVector:
+    case EOpMatrixTimesScalar:
+
+    case EOpAnd:
+    case EOpInclusiveOr:
+    case EOpExclusiveOr:
+
+    case EOpSequence:          // used by ?:
+
+        if (node0->getBasicType() == node1->getBasicType())
+            return std::make_tuple(node0, node1);
+
+        promoteTo = getConversionDestinatonType(node0->getBasicType(), node1->getBasicType(), op);
+        if (std::get<0>(promoteTo) == EbtNumTypes || std::get<1>(promoteTo) == EbtNumTypes)
+            return std::make_tuple(nullptr, nullptr);
+
+        break;
+
+    case EOpLogicalAnd:
+    case EOpLogicalOr:
+    case EOpLogicalXor:
+        if (source == EShSourceHlsl)
+            promoteTo = std::make_tuple(EbtBool, EbtBool);
+        else
+            return std::make_tuple(node0, node1);
+        break;
+
+    // There are no conversions needed for GLSL; the shift amount just needs to be an
+    // integer type, as does the base.
+    // HLSL can promote bools to ints to make this work.
+    case EOpLeftShift:
+    case EOpRightShift:
+        if (source == EShSourceHlsl) {
+            TBasicType node0BasicType = node0->getBasicType();
+            if (node0BasicType == EbtBool)
+                node0BasicType = EbtInt;
+            if (node1->getBasicType() == EbtBool)
+                promoteTo = std::make_tuple(node0BasicType, EbtInt);
+            else
+                promoteTo = std::make_tuple(node0BasicType, node1->getBasicType());
+        } else {
+            if (isTypeInt(node0->getBasicType()) && isTypeInt(node1->getBasicType()))
+                return std::make_tuple(node0, node1);
+            else
+                return std::make_tuple(nullptr, nullptr);
+        }
+        break;
+
+    default:
+        if (node0->getType() == node1->getType())
+            return std::make_tuple(node0, node1);
+
+        return std::make_tuple(nullptr, nullptr);
+    }
+
+    TIntermTyped* newNode0;
+    TIntermTyped* newNode1;
+
+    if (std::get<0>(promoteTo) != node0->getType().getBasicType()) {
+        if (node0->getAsConstantUnion())
+            newNode0 = promoteConstantUnion(std::get<0>(promoteTo), node0->getAsConstantUnion());
+        else
+            newNode0 = createConversion(std::get<0>(promoteTo), node0);
+    } else
+        newNode0 = node0;
+
+    if (std::get<1>(promoteTo) != node1->getType().getBasicType()) {
+        if (node1->getAsConstantUnion())
+            newNode1 = promoteConstantUnion(std::get<1>(promoteTo), node1->getAsConstantUnion());
+        else
+            newNode1 = createConversion(std::get<1>(promoteTo), node1);
+    } else
+        newNode1 = node1;
+
+    return std::make_tuple(newNode0, newNode1);
+}
+
+//
+// Convert the node's type to the given type, as allowed by the operation involved: 'op'.
+// For implicit conversions, 'op' is not the requested conversion, it is the explicit
+// operation requiring the implicit conversion.
+//
+// Binary operation conversions should be handled by addConversion(op, node, node), not here.
+//
+// Returns a node representing the conversion, which could be the same
+// node passed in if no conversion was needed.
+//
+// Generally, this is focused on basic type conversion, not shape conversion.
+// See addShapeConversion() for shape conversions.
+//
+// Return nullptr if a conversion can't be done.
+//
+TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TIntermTyped* node) const
+{
+    if (!isConversionAllowed(op, node))
+        return nullptr;
+
     // Otherwise, if types are identical, no problem
     if (type == node->getType())
         return node;
@@ -519,11 +895,21 @@
     case EOpConstructDouble:
         promoteTo = EbtDouble;
         break;
-#ifdef AMD_EXTENSIONS
     case EOpConstructFloat16:
         promoteTo = EbtFloat16;
         break;
-#endif
+    case EOpConstructInt8:
+        promoteTo = EbtInt8;
+        break;
+    case EOpConstructUint8:
+        promoteTo = EbtUint8;
+        break;
+    case EOpConstructInt16:
+        promoteTo = EbtInt16;
+        break;
+    case EOpConstructUint16:
+        promoteTo = EbtUint16;
+        break;
     case EOpConstructInt:
         promoteTo = EbtInt;
         break;
@@ -536,49 +922,11 @@
     case EOpConstructUint64:
         promoteTo = EbtUint64;
         break;
-#ifdef AMD_EXTENSIONS
-    case EOpConstructInt16:
-        promoteTo = EbtInt16;
-        break;
-    case EOpConstructUint16:
-        promoteTo = EbtUint16;
-        break;
-#endif
 
-    //
-    // List all the binary ops that can implicitly convert one operand to the other's type;
-    // This implements the 'policy' for implicit type conversion.
-    //
-    case EOpLessThan:
-    case EOpGreaterThan:
-    case EOpLessThanEqual:
-    case EOpGreaterThanEqual:
-    case EOpEqual:
-    case EOpNotEqual:
-
-    case EOpAdd:
-    case EOpSub:
-    case EOpMul:
-    case EOpDiv:
-    case EOpMod:
-
-    case EOpVectorTimesScalar:
-    case EOpVectorTimesMatrix:
-    case EOpMatrixTimesVector:
-    case EOpMatrixTimesScalar:
-
-    case EOpAnd:
-    case EOpInclusiveOr:
-    case EOpExclusiveOr:
-    case EOpAndAssign:
-    case EOpInclusiveOrAssign:
-    case EOpExclusiveOrAssign:
     case EOpLogicalNot:
-    case EOpLogicalAnd:
-    case EOpLogicalOr:
-    case EOpLogicalXor:
 
     case EOpFunctionCall:
+
     case EOpReturn:
     case EOpAssign:
     case EOpAddAssign:
@@ -588,6 +936,9 @@
     case EOpMatrixTimesScalarAssign:
     case EOpDivAssign:
     case EOpModAssign:
+    case EOpAndAssign:
+    case EOpInclusiveOrAssign:
+    case EOpExclusiveOrAssign:
 
     case EOpAtan:
     case EOpClamp:
@@ -616,43 +967,28 @@
         if (type.getBasicType() == node->getType().getBasicType())
             return node;
 
-        if (canImplicitlyPromote(node->getType().getBasicType(), type.getBasicType(), op))
+        if (canImplicitlyPromote(node->getBasicType(), type.getBasicType(), op))
             promoteTo = type.getBasicType();
         else
-            return nullptr;
-
+           return nullptr;
         break;
 
-    // Shifts can have mixed types as long as they are integer, without converting.
-    // It's the left operand's type that determines the resulting type, so no issue
-    // with assign shift ops either.
-    case EOpLeftShift:
-    case EOpRightShift:
+    // For GLSL, there are no conversions needed; the shift amount just needs to be an
+    // integer type, as do the base/result.
+    // HLSL can convert the shift from a bool to an int.
     case EOpLeftShiftAssign:
     case EOpRightShiftAssign:
-        if ((type.getBasicType() == EbtInt ||
-             type.getBasicType() == EbtUint ||
-#ifdef AMD_EXTENSIONS
-             type.getBasicType() == EbtInt16 ||
-             type.getBasicType() == EbtUint16 ||
-#endif
-             type.getBasicType() == EbtInt64 ||
-             type.getBasicType() == EbtUint64) &&
-            (node->getType().getBasicType() == EbtInt ||
-             node->getType().getBasicType() == EbtUint ||
-#ifdef AMD_EXTENSIONS
-             node->getType().getBasicType() == EbtInt16 ||
-             node->getType().getBasicType() == EbtUint16 ||
-#endif
-             node->getType().getBasicType() == EbtInt64 ||
-             node->getType().getBasicType() == EbtUint64))
-
-            return node;
-        else if (source == EShSourceHlsl && node->getType().getBasicType() == EbtBool) {
+    {
+        if (source == EShSourceHlsl && node->getType().getBasicType() == EbtBool)
             promoteTo = type.getBasicType();
-            break;
-        } else
-            return nullptr;
+        else {
+            if (isTypeInt(type.getBasicType()) && isTypeInt(node->getBasicType()))
+                return node;
+            else
+                return nullptr;
+        }
+        break;
+    }
 
     default:
         // default is to require a match; all exceptions should have case statements above
@@ -669,207 +1005,7 @@
     //
     // Add a new newNode for the conversion.
     //
-    TIntermUnary* newNode = nullptr;
-
-    TOperator newOp = EOpNull;
-
-    // This is 'mechanism' here, it does any conversion told.  The policy comes
-    // from the shader or the above code.
-    switch (promoteTo) {
-    case EbtDouble:
-        switch (node->getBasicType()) {
-        case EbtInt:   newOp = EOpConvIntToDouble;   break;
-        case EbtUint:  newOp = EOpConvUintToDouble;  break;
-        case EbtBool:  newOp = EOpConvBoolToDouble;  break;
-        case EbtFloat: newOp = EOpConvFloatToDouble; break;
-#ifdef AMD_EXTENSIONS
-        case EbtFloat16: newOp = EOpConvFloat16ToDouble; break;
-#endif
-        case EbtInt64: newOp = EOpConvInt64ToDouble; break;
-        case EbtUint64: newOp = EOpConvUint64ToDouble; break;
-#ifdef AMD_EXTENSIONS
-        case EbtInt16:  newOp = EOpConvInt16ToDouble;  break;
-        case EbtUint16: newOp = EOpConvUint16ToDouble; break;
-#endif
-        default:
-            return nullptr;
-        }
-        break;
-    case EbtFloat:
-        switch (node->getBasicType()) {
-        case EbtInt:    newOp = EOpConvIntToFloat;    break;
-        case EbtUint:   newOp = EOpConvUintToFloat;   break;
-        case EbtBool:   newOp = EOpConvBoolToFloat;   break;
-        case EbtDouble: newOp = EOpConvDoubleToFloat; break;
-#ifdef AMD_EXTENSIONS
-        case EbtFloat16: newOp = EOpConvFloat16ToFloat; break;
-#endif
-        case EbtInt64:  newOp = EOpConvInt64ToFloat;  break;
-        case EbtUint64: newOp = EOpConvUint64ToFloat; break;
-#ifdef AMD_EXTENSIONS
-        case EbtInt16:  newOp = EOpConvInt16ToFloat;  break;
-        case EbtUint16: newOp = EOpConvUint16ToFloat; break;
-#endif
-        default:
-            return nullptr;
-        }
-        break;
-#ifdef AMD_EXTENSIONS
-    case EbtFloat16:
-        switch (node->getBasicType()) {
-        case EbtInt:    newOp = EOpConvIntToFloat16;    break;
-        case EbtUint:   newOp = EOpConvUintToFloat16;   break;
-        case EbtBool:   newOp = EOpConvBoolToFloat16;   break;
-        case EbtFloat:  newOp = EOpConvFloatToFloat16;  break;
-        case EbtDouble: newOp = EOpConvDoubleToFloat16; break;
-        case EbtInt64:  newOp = EOpConvInt64ToFloat16;  break;
-        case EbtUint64: newOp = EOpConvUint64ToFloat16; break;
-        case EbtInt16:  newOp = EOpConvInt16ToFloat16;  break;
-        case EbtUint16: newOp = EOpConvUint16ToFloat16; break;
-        default:
-            return nullptr;
-        }
-        break;
-#endif
-    case EbtBool:
-        switch (node->getBasicType()) {
-        case EbtInt:    newOp = EOpConvIntToBool;    break;
-        case EbtUint:   newOp = EOpConvUintToBool;   break;
-        case EbtFloat:  newOp = EOpConvFloatToBool;  break;
-        case EbtDouble: newOp = EOpConvDoubleToBool; break;
-#ifdef AMD_EXTENSIONS
-        case EbtFloat16: newOp = EOpConvFloat16ToBool; break;
-#endif
-        case EbtInt64:  newOp = EOpConvInt64ToBool;  break;
-        case EbtUint64: newOp = EOpConvUint64ToBool; break;
-#ifdef AMD_EXTENSIONS
-        case EbtInt16:  newOp = EOpConvInt16ToBool;  break;
-        case EbtUint16: newOp = EOpConvUint16ToBool; break;
-#endif
-        default:
-            return nullptr;
-        }
-        break;
-    case EbtInt:
-        switch (node->getBasicType()) {
-        case EbtUint:   newOp = EOpConvUintToInt;   break;
-        case EbtBool:   newOp = EOpConvBoolToInt;   break;
-        case EbtFloat:  newOp = EOpConvFloatToInt;  break;
-        case EbtDouble: newOp = EOpConvDoubleToInt; break;
-#ifdef AMD_EXTENSIONS
-        case EbtFloat16: newOp = EOpConvFloat16ToInt; break;
-#endif
-        case EbtInt64:  newOp = EOpConvInt64ToInt;  break;
-        case EbtUint64: newOp = EOpConvUint64ToInt; break;
-#ifdef AMD_EXTENSIONS
-        case EbtInt16:  newOp = EOpConvInt16ToInt;  break;
-        case EbtUint16: newOp = EOpConvUint16ToInt; break;
-#endif
-        default:
-            return nullptr;
-        }
-        break;
-    case EbtUint:
-        switch (node->getBasicType()) {
-        case EbtInt:    newOp = EOpConvIntToUint;    break;
-        case EbtBool:   newOp = EOpConvBoolToUint;   break;
-        case EbtFloat:  newOp = EOpConvFloatToUint;  break;
-        case EbtDouble: newOp = EOpConvDoubleToUint; break;
-#ifdef AMD_EXTENSIONS
-        case EbtFloat16: newOp = EOpConvFloat16ToUint; break;
-#endif
-        case EbtInt64:  newOp = EOpConvInt64ToUint;  break;
-        case EbtUint64: newOp = EOpConvUint64ToUint; break;
-#ifdef AMD_EXTENSIONS
-        case EbtInt16:  newOp = EOpConvInt16ToUint;  break;
-        case EbtUint16: newOp = EOpConvUint16ToUint; break;
-#endif
-        default:
-            return nullptr;
-        }
-        break;
-    case EbtInt64:
-        switch (node->getBasicType()) {
-        case EbtInt:    newOp = EOpConvIntToInt64;    break;
-        case EbtUint:   newOp = EOpConvUintToInt64;   break;
-        case EbtBool:   newOp = EOpConvBoolToInt64;   break;
-        case EbtFloat:  newOp = EOpConvFloatToInt64;  break;
-        case EbtDouble: newOp = EOpConvDoubleToInt64; break;
-#ifdef AMD_EXTENSIONS
-        case EbtFloat16: newOp = EOpConvFloat16ToInt64; break;
-#endif
-        case EbtUint64: newOp = EOpConvUint64ToInt64; break;
-#ifdef AMD_EXTENSIONS
-        case EbtInt16:  newOp = EOpConvInt16ToInt64;  break;
-        case EbtUint16: newOp = EOpConvUint16ToInt64; break;
-#endif
-        default:
-            return nullptr;
-        }
-        break;
-    case EbtUint64:
-        switch (node->getBasicType()) {
-        case EbtInt:    newOp = EOpConvIntToUint64;    break;
-        case EbtUint:   newOp = EOpConvUintToUint64;   break;
-        case EbtBool:   newOp = EOpConvBoolToUint64;   break;
-        case EbtFloat:  newOp = EOpConvFloatToUint64;  break;
-        case EbtDouble: newOp = EOpConvDoubleToUint64; break;
-#ifdef AMD_EXTENSIONS
-        case EbtFloat16: newOp = EOpConvFloat16ToUint64; break;
-#endif
-        case EbtInt64:  newOp = EOpConvInt64ToUint64;  break;
-#ifdef AMD_EXTENSIONS
-        case EbtInt16:  newOp = EOpConvInt16ToUint64;  break;
-        case EbtUint16: newOp = EOpConvUint16ToUint64; break;
-#endif
-        default:
-            return nullptr;
-        }
-        break;
-#ifdef AMD_EXTENSIONS
-    case EbtInt16:
-        switch (node->getBasicType()) {
-        case EbtInt:     newOp = EOpConvIntToInt16;     break;
-        case EbtUint:    newOp = EOpConvUintToInt16;    break;
-        case EbtBool:    newOp = EOpConvBoolToInt16;    break;
-        case EbtFloat:   newOp = EOpConvFloatToInt16;   break;
-        case EbtDouble:  newOp = EOpConvDoubleToInt16;  break;
-        case EbtFloat16: newOp = EOpConvFloat16ToInt16; break;
-        case EbtInt64:   newOp = EOpConvInt64ToInt16;   break;
-        case EbtUint64:  newOp = EOpConvUint64ToInt16;  break;
-        case EbtUint16:  newOp = EOpConvUint16ToInt16;  break;
-        default:
-            return nullptr;
-        }
-        break;
-    case EbtUint16:
-        switch (node->getBasicType()) {
-        case EbtInt:     newOp = EOpConvIntToUint16;     break;
-        case EbtUint:    newOp = EOpConvUintToUint16;    break;
-        case EbtBool:    newOp = EOpConvBoolToUint16;    break;
-        case EbtFloat:   newOp = EOpConvFloatToUint16;   break;
-        case EbtDouble:  newOp = EOpConvDoubleToUint16;  break;
-        case EbtFloat16: newOp = EOpConvFloat16ToUint16; break;
-        case EbtInt64:   newOp = EOpConvInt64ToUint16;   break;
-        case EbtUint64:  newOp = EOpConvUint64ToUint16;  break;
-        case EbtInt16:   newOp = EOpConvInt16ToUint16;   break;
-        default:
-            return nullptr;
-        }
-        break;
-#endif
-    default:
-        return nullptr;
-    }
-
-    TType newType(promoteTo, EvqTemporary, node->getVectorSize(), node->getMatrixCols(), node->getMatrixRows());
-    newNode = addUnaryNode(newOp, node, node->getLoc(), newType);
-
-    // TODO: it seems that some unary folding operations should occur here, but are not
-
-    // Propagate specialization-constant-ness, if allowed
-    if (node->getType().getQualifier().isSpecConstant() && isSpecializationOperation(*newNode))
-        newNode->getWritableType().getQualifier().makeSpecConstant();
+    TIntermUnary* newNode = createConversion(promoteTo, node);
 
     return newNode;
 }
@@ -1019,12 +1155,11 @@
     rhsNode = addShapeConversion(lhsNode->getType(), rhsNode);
 }
 
-// Convert the node's shape of type for the given type. It's not necessarily
-// an error if they are different and not converted, as some operations accept
-// mixed types.  Promotion will do final shape checking.
+// Convert the node's shape of type for the given type, as allowed by the
+// operation involved: 'op'.
 //
-// If there is a chance of two nodes, with conversions possible in each direction,
-// the policy for what to ask for must be in the caller; this will do what is asked.
+// Generally, the AST represents allowed GLSL shapes, so this isn't needed
+// for GLSL.  Bad shapes are caught in conversion or promotion.
 //
 // Return 'node' if no conversion was done. Promotion handles final shape
 // checking.
@@ -1080,6 +1215,166 @@
     return node;
 }
 
+bool TIntermediate::isIntegralPromotion(TBasicType from, TBasicType to) const
+{
+    // integral promotions
+    if (to == EbtInt) {
+        switch(from) {
+        case EbtInt8:
+        case EbtInt16:
+        case EbtUint8:
+        case EbtUint16:
+            return true;
+        default:
+            break;
+        }
+    }
+    return false;
+}
+
+bool TIntermediate::isFPPromotion(TBasicType from, TBasicType to) const
+{
+    // floating-point promotions
+    if (to == EbtDouble) {
+        switch(from) {
+        case EbtFloat16:
+        case EbtFloat:
+            return true;
+        default:
+            break;
+        }
+    }
+    return false;
+}
+
+bool TIntermediate::isIntegralConversion(TBasicType from, TBasicType to) const
+{
+    switch (from) {
+    case EbtInt8:
+        switch (to) {
+        case EbtUint8:
+        case EbtInt16:
+        case EbtUint16:
+        case EbtUint:
+        case EbtInt64:
+        case EbtUint64:
+            return true;
+        default:
+            break;
+        }
+        break;
+    case EbtUint8:
+        switch (to) {
+        case EbtInt16:
+        case EbtUint16:
+        case EbtUint:
+        case EbtInt64:
+        case EbtUint64:
+            return true;
+        default:
+            break;
+        }
+        break;
+    case EbtInt16:
+        switch(to) {
+        case EbtUint16:
+        case EbtUint:
+        case EbtInt64:
+        case EbtUint64:
+            return true;
+        default:
+            break;
+        }
+        break;
+    case EbtUint16:
+        switch(to) {
+        case EbtUint:
+        case EbtInt64:
+        case EbtUint64:
+            return true;
+        default:
+            break;
+        }
+        break;
+    case EbtInt:
+        switch(to) {
+        case EbtUint:
+            return version >= 400 || (source == EShSourceHlsl);
+        case EbtInt64:
+        case EbtUint64:
+            return true;
+        default:
+            break;
+        }
+        break;
+    case EbtUint:
+        switch(to) {
+        case EbtInt64:
+        case EbtUint64:
+            return true;
+        default:
+            break;
+        }
+        break;
+    case EbtInt64:
+        if (to == EbtUint64) {
+            return true;
+        }
+        break;
+    default:
+        break;
+    }
+    return false;
+}
+
+bool TIntermediate::isFPConversion(TBasicType from, TBasicType to) const
+{
+    if (to == EbtFloat && from == EbtFloat16) {
+        return true;
+    } else {
+        return false;
+    }
+}
+
+bool TIntermediate::isFPIntegralConversion(TBasicType from, TBasicType to) const
+{
+    switch (from) {
+    case EbtInt8:
+    case EbtUint8:
+    case EbtInt16:
+    case EbtUint16:
+        switch (to) {
+        case EbtFloat16:
+        case EbtFloat:
+        case EbtDouble:
+            return true;
+        default:
+            break;
+        }
+        break;
+    case EbtInt:
+    case EbtUint:
+        switch(to) {
+        case EbtFloat:
+        case EbtDouble:
+            return true;
+        default:
+            break;
+        }
+        break;
+    case EbtInt64:
+    case EbtUint64:
+        if (to == EbtDouble) {
+            return true;
+        }
+        break;
+
+    default:
+        break;
+    }
+    return false;
+}
+
 //
 // See if the 'from' type is allowed to be implicitly converted to the
 // 'to' type.  This is not about vector/array/struct, only about basic type.
@@ -1125,120 +1420,337 @@
         }
     }
 
-    switch (to) {
-    case EbtDouble:
-        switch (from) {
-        case EbtInt:
-        case EbtUint:
-        case EbtInt64:
-        case EbtUint64:
-#ifdef AMD_EXTENSIONS
-        case EbtInt16:
-        case EbtUint16:
-#endif
-        case EbtFloat:
+    bool explicitTypesEnabled = extensionRequested(E_GL_KHX_shader_explicit_arithmetic_types) ||
+                                extensionRequested(E_GL_KHX_shader_explicit_arithmetic_types_int8) ||
+                                extensionRequested(E_GL_KHX_shader_explicit_arithmetic_types_int16) ||
+                                extensionRequested(E_GL_KHX_shader_explicit_arithmetic_types_int32) ||
+                                extensionRequested(E_GL_KHX_shader_explicit_arithmetic_types_int64) ||
+                                extensionRequested(E_GL_KHX_shader_explicit_arithmetic_types_float16) ||
+                                extensionRequested(E_GL_KHX_shader_explicit_arithmetic_types_float32) ||
+                                extensionRequested(E_GL_KHX_shader_explicit_arithmetic_types_float64);
+
+    if (explicitTypesEnabled) {
+        // integral promotions
+        if (isIntegralPromotion(from, to)) {
+            return true;
+        }
+
+        // floating-point promotions
+        if (isFPPromotion(from, to)) {
+            return true;
+        }
+
+        // integral conversions
+        if (isIntegralConversion(from, to)) {
+            return true;
+        }
+
+        // floating-point conversions
+        if (isFPConversion(from, to)) {
+           return true;
+        }
+
+        // floating-integral conversions
+        if (isFPIntegralConversion(from, to)) {
+           return true;
+        }
+
+        // hlsl supported conversions
+        if (source == EShSourceHlsl) {
+            if (from == EbtBool && (to == EbtInt || to == EbtUint || to == EbtFloat))
+                return true;
+        }
+    } else {
+        switch (to) {
         case EbtDouble:
+            switch (from) {
+            case EbtInt:
+            case EbtUint:
+            case EbtInt64:
+            case EbtUint64:
 #ifdef AMD_EXTENSIONS
-        case EbtFloat16:
+            case EbtInt16:
+            case EbtUint16:
 #endif
-            return true;
-        default:
-            return false;
-        }
-    case EbtFloat:
-        switch (from) {
-        case EbtInt:
-        case EbtUint:
+             case EbtFloat:
+             case EbtDouble:
 #ifdef AMD_EXTENSIONS
-        case EbtInt16:
-        case EbtUint16:
+             case EbtFloat16:
 #endif
+                return true;
+            default:
+                return false;
+           }
         case EbtFloat:
+            switch (from) {
+            case EbtInt:
+            case EbtUint:
 #ifdef AMD_EXTENSIONS
-        case EbtFloat16:
+            case EbtInt16:
+            case EbtUint16:
 #endif
-            return true;
-        case EbtBool:
-            return (source == EShSourceHlsl);
-        default:
-            return false;
-        }
-    case EbtUint:
-        switch (from) {
-        case EbtInt:
-            return version >= 400 || (source == EShSourceHlsl);
+            case EbtFloat:
+#ifdef AMD_EXTENSIONS
+            case EbtFloat16:
+#endif
+                 return true;
+            case EbtBool:
+                 return (source == EShSourceHlsl);
+            default:
+                 return false;
+            }
         case EbtUint:
+            switch (from) {
+            case EbtInt:
+                 return version >= 400 || (source == EShSourceHlsl);
+            case EbtUint:
 #ifdef AMD_EXTENSIONS
-        case EbtInt16:
-        case EbtUint16:
+            case EbtInt16:
+            case EbtUint16:
 #endif
-            return true;
-        case EbtBool:
-            return (source == EShSourceHlsl);
-        default:
-            return false;
-        }
-    case EbtInt:
-        switch (from) {
+                return true;
+            case EbtBool:
+                return (source == EShSourceHlsl);
+            default:
+                return false;
+            }
         case EbtInt:
+            switch (from) {
+            case EbtInt:
 #ifdef AMD_EXTENSIONS
-        case EbtInt16:
+            case EbtInt16:
 #endif
-            return true;
-        case EbtBool:
-            return (source == EShSourceHlsl);
-        default:
-            return false;
-        }
-    case EbtUint64:
-        switch (from) {
-        case EbtInt:
-        case EbtUint:
-        case EbtInt64:
+                return true;
+            case EbtBool:
+                return (source == EShSourceHlsl);
+            default:
+                return false;
+            }
         case EbtUint64:
+            switch (from) {
+            case EbtInt:
+            case EbtUint:
+            case EbtInt64:
+            case EbtUint64:
 #ifdef AMD_EXTENSIONS
-        case EbtInt16:
-        case EbtUint16:
+            case EbtInt16:
+            case EbtUint16:
 #endif
-            return true;
-        default:
-            return false;
-        }
-    case EbtInt64:
-        switch (from) {
-        case EbtInt:
+                return true;
+            default:
+                return false;
+            }
         case EbtInt64:
+            switch (from) {
+            case EbtInt:
+            case EbtInt64:
 #ifdef AMD_EXTENSIONS
-        case EbtInt16:
+            case EbtInt16:
 #endif
-            return true;
-        default:
-            return false;
-        }
+                return true;
+            default:
+                return false;
+            }
 #ifdef AMD_EXTENSIONS
-    case EbtFloat16:
-        switch (from) {
-        case EbtInt16:
-        case EbtUint16:
         case EbtFloat16:
-            return true;
-        default:
-            return false;
+            switch (from) {
+            case EbtInt16:
+            case EbtUint16:
+            case EbtFloat16:
+                return true;
+            default:
+                return false;
         }
-    case EbtUint16:
-        switch (from) {
-        case EbtInt16:
         case EbtUint16:
-            return true;
-        default:
-            return false;
+            switch (from) {
+            case EbtInt16:
+            case EbtUint16:
+                return true;
+            default:
+                return false;
         }
 #endif
+        default:
+            return false;
+        }
+    }
+
+    return false;
+}
+
+static bool canSignedIntTypeRepresentAllUnsignedValues(TBasicType sintType, TBasicType uintType) {
+    switch(sintType) {
+    case EbtInt8:
+        switch(uintType) {
+        case EbtUint8:
+        case EbtUint16:
+        case EbtUint:
+        case EbtUint64:
+            return false;
+        default:
+            assert(false);
+            return false;
+        }
+        break;
+    case EbtInt16:
+        switch(uintType) {
+        case EbtUint8:
+            return true;
+        case EbtUint16:
+        case EbtUint:
+        case EbtUint64:
+            return false;
+        default:
+            assert(false);
+            return false;
+        }
+        break;
+    case EbtInt:
+        switch(uintType) {
+        case EbtUint8:
+        case EbtUint16:
+            return true;
+        case EbtUint:
+            return false;
+        default:
+            assert(false);
+            return false;
+        }
+        break;
+    case EbtInt64:
+        switch(uintType) {
+        case EbtUint8:
+        case EbtUint16:
+        case EbtUint:
+            return true;
+        case EbtUint64:
+            return false;
+        default:
+            assert(false);
+            return false;
+        }
+        break;
     default:
+        assert(false);
         return false;
     }
 }
 
+
+static TBasicType getCorrespondingUnsignedType(TBasicType type) {
+    switch(type) {
+    case EbtInt8:
+        return EbtUint8;
+    case EbtInt16:
+        return EbtUint16;
+    case EbtInt:
+        return EbtUint;
+    case EbtInt64:
+        return EbtUint64;
+    default:
+        assert(false);
+        return EbtNumTypes;
+    }
+}
+
+// Implements the following rules
+//    - If either operand has type float64_t or derived from float64_t,
+//      the other shall be converted to float64_t or derived type.
+//    - Otherwise, if either operand has type float32_t or derived from
+//      float32_t, the other shall be converted to float32_t or derived type.
+//    - Otherwise, if either operand has type float16_t or derived from
+//      float16_t, the other shall be converted to float16_t or derived type.
+//    - Otherwise, if both operands have integer types the following rules
+//      shall be applied to the operands:
+//      - If both operands have the same type, no further conversion
+//        is needed.
+//      - Otherwise, if both operands have signed integer types or both
+//        have unsigned integer types, the operand with the type of lesser
+//        integer conversion rank shall be converted to the type of the
+//        operand with greater rank.
+//      - Otherwise, if the operand that has unsigned integer type has rank
+//        greater than or equal to the rank of the type of the other
+//        operand, the operand with signed integer type shall be converted
+//        to the type of the operand with unsigned integer type.
+//      - Otherwise, if the type of the operand with signed integer type can
+//        represent all of the values of the type of the operand with
+//        unsigned integer type, the operand with unsigned integer type
+//        shall be converted to the type of the operand with signed
+//        integer type.
+//      - Otherwise, both operands shall be converted to the unsigned
+//        integer type corresponding to the type of the operand with signed
+//        integer type.
+
+std::tuple<TBasicType, TBasicType> TIntermediate::getConversionDestinatonType(TBasicType type0, TBasicType type1, TOperator op) const
+{
+    TBasicType res0 = EbtNumTypes;
+    TBasicType res1 = EbtNumTypes;
+
+    if (profile == EEsProfile || version == 110)
+        return std::make_tuple(res0, res1);;
+
+    if (source == EShSourceHlsl) {
+        if (canImplicitlyPromote(type1, type0, op)) {
+            res0 = type0;
+            res1 = type0;
+        } else if (canImplicitlyPromote(type0, type1, op)) {
+            res0 = type1;
+            res1 = type1;
+        }
+        return std::make_tuple(res0, res1);
+    }
+
+    if ((type0 == EbtDouble && canImplicitlyPromote(type1, EbtDouble, op)) ||
+        (type1 == EbtDouble && canImplicitlyPromote(type0, EbtDouble, op)) ) {
+        res0 = EbtDouble;
+        res1 = EbtDouble;
+    } else if ((type0 == EbtFloat && canImplicitlyPromote(type1, EbtFloat, op)) ||
+               (type1 == EbtFloat && canImplicitlyPromote(type0, EbtFloat, op)) ) {
+        res0 = EbtFloat;
+        res1 = EbtFloat;
+    } else if ((type0 == EbtFloat16 && canImplicitlyPromote(type1, EbtFloat16, op)) ||
+               (type1 == EbtFloat16 && canImplicitlyPromote(type0, EbtFloat16, op)) ) {
+        res0 = EbtFloat16;
+        res1 = EbtFloat16;
+    } else if (isTypeInt(type0) && isTypeInt(type1) &&
+               (canImplicitlyPromote(type0, type1, op) || canImplicitlyPromote(type1, type0, op))) {
+        if ((isTypeSignedInt(type0) && isTypeSignedInt(type1)) ||
+            (isTypeUnsignedInt(type0) && isTypeUnsignedInt(type1))) {
+            if (getTypeRank(type0) < getTypeRank(type1)) {
+                res0 = type1;
+                res1 = type1;
+            } else {
+                res0 = type0;
+                res1 = type0;
+            }
+        } else if (isTypeUnsignedInt(type0) && (getTypeRank(type0) > getTypeRank(type1))) {
+            res0 = type0;
+            res1 = type0;
+        } else if (isTypeUnsignedInt(type1) && (getTypeRank(type1) > getTypeRank(type0))) {
+            res0 = type1;
+            res1 = type1;
+        } else if (isTypeSignedInt(type0)) {
+            if (canSignedIntTypeRepresentAllUnsignedValues(type0, type1)) {
+                res0 = type0;
+                res1 = type0;
+            } else {
+                res0 = getCorrespondingUnsignedType(type0);
+                res1 = getCorrespondingUnsignedType(type0);
+            }
+        } else if (isTypeSignedInt(type1)) {
+            if (canSignedIntTypeRepresentAllUnsignedValues(type1, type0)) {
+                res0 = type1;
+                res1 = type1;
+            } else {
+                res0 = getCorrespondingUnsignedType(type1);
+                res1 = getCorrespondingUnsignedType(type1);
+            }
+        }
+    }
+
+    return std::make_tuple(res0, res1);
+}
+
 //
 // Given a type, find what operation would fully construct it.
 //
@@ -1246,6 +1758,9 @@
 {
     TOperator op = EOpNull;
 
+    if (type.getQualifier().nonUniform)
+        return EOpConstructNonuniform;
+
     switch (type.getBasicType()) {
     case EbtStruct:
         op = EOpConstructStruct;
@@ -1331,7 +1846,6 @@
             }
         }
         break;
-#ifdef AMD_EXTENSIONS
     case EbtFloat16:
         if (type.getMatrixCols()) {
             switch (type.getMatrixCols()) {
@@ -1371,7 +1885,42 @@
             }
         }
         break;
-#endif
+    case EbtInt8:
+        switch(type.getVectorSize()) {
+        case 1: op = EOpConstructInt8;   break;
+        case 2: op = EOpConstructI8Vec2; break;
+        case 3: op = EOpConstructI8Vec3; break;
+        case 4: op = EOpConstructI8Vec4; break;
+        default: break; // some compilers want this
+        }
+        break;
+    case EbtUint8:
+        switch(type.getVectorSize()) {
+        case 1: op = EOpConstructUint8;  break;
+        case 2: op = EOpConstructU8Vec2; break;
+        case 3: op = EOpConstructU8Vec3; break;
+        case 4: op = EOpConstructU8Vec4; break;
+        default: break; // some compilers want this
+        }
+        break;
+    case EbtInt16:
+        switch(type.getVectorSize()) {
+        case 1: op = EOpConstructInt16;   break;
+        case 2: op = EOpConstructI16Vec2; break;
+        case 3: op = EOpConstructI16Vec3; break;
+        case 4: op = EOpConstructI16Vec4; break;
+        default: break; // some compilers want this
+        }
+        break;
+    case EbtUint16:
+        switch(type.getVectorSize()) {
+        case 1: op = EOpConstructUint16;  break;
+        case 2: op = EOpConstructU16Vec2; break;
+        case 3: op = EOpConstructU16Vec3; break;
+        case 4: op = EOpConstructU16Vec4; break;
+        default: break; // some compilers want this
+        }
+        break;
     case EbtInt:
         if (type.getMatrixCols()) {
             switch (type.getMatrixCols()) {
@@ -1466,26 +2015,6 @@
         default: break; // some compilers want this
         }
         break;
-#ifdef AMD_EXTENSIONS
-    case EbtInt16:
-        switch(type.getVectorSize()) {
-        case 1: op = EOpConstructInt16;   break;
-        case 2: op = EOpConstructI16Vec2; break;
-        case 3: op = EOpConstructI16Vec3; break;
-        case 4: op = EOpConstructI16Vec4; break;
-        default: break; // some compilers want this
-        }
-        break;
-    case EbtUint16:
-        switch(type.getVectorSize()) {
-        case 1: op = EOpConstructUint16;  break;
-        case 2: op = EOpConstructU16Vec2; break;
-        case 3: op = EOpConstructU16Vec3; break;
-        case 4: op = EOpConstructU16Vec4; break;
-        default: break; // some compilers want this
-        }
-        break;
-#endif
     case EbtBool:
         if (type.getMatrixCols()) {
             switch (type.getMatrixCols()) {
@@ -1614,7 +2143,7 @@
 //
 // Returns the selection node created.
 //
-TIntermTyped* TIntermediate::addSelection(TIntermTyped* cond, TIntermNodePair nodePair, const TSourceLoc& loc, TSelectionControl control)
+TIntermSelection* TIntermediate::addSelection(TIntermTyped* cond, TIntermNodePair nodePair, const TSourceLoc& loc)
 {
     //
     // Don't prune the false path for compile-time constants; it's needed
@@ -1623,7 +2152,6 @@
 
     TIntermSelection* node = new TIntermSelection(cond, nodePair.node1, nodePair.node2);
     node->setLoc(loc);
-    node->setSelectionControl(control);
 
     return node;
 }
@@ -1666,27 +2194,28 @@
 //
 // Returns the selection node created, or nullptr if one could not be.
 //
-TIntermTyped* TIntermediate::addSelection(TIntermTyped* cond, TIntermTyped* trueBlock, TIntermTyped* falseBlock, const TSourceLoc& loc, TSelectionControl control)
+TIntermTyped* TIntermediate::addSelection(TIntermTyped* cond, TIntermTyped* trueBlock, TIntermTyped* falseBlock,
+                                          const TSourceLoc& loc)
 {
     // If it's void, go to the if-then-else selection()
     if (trueBlock->getBasicType() == EbtVoid && falseBlock->getBasicType() == EbtVoid) {
         TIntermNodePair pair = { trueBlock, falseBlock };
-        return addSelection(cond, pair, loc, control);
+        TIntermSelection* selection = addSelection(cond, pair, loc);
+        if (getSource() == EShSourceHlsl)
+            selection->setNoShortCircuit();
+
+        return selection;
     }
 
     //
     // Get compatible types.
     //
-    TIntermTyped* child = addConversion(EOpSequence, trueBlock->getType(), falseBlock);
-    if (child)
-        falseBlock = child;
-    else {
-        child = addConversion(EOpSequence, falseBlock->getType(), trueBlock);
-        if (child)
-            trueBlock = child;
-        else
-            return nullptr;
-    }
+    auto children = addConversion(EOpSequence, trueBlock, falseBlock);
+    trueBlock = std::get<0>(children);
+    falseBlock = std::get<1>(children);
+
+    if (trueBlock == nullptr || falseBlock == nullptr)
+        return nullptr;
 
     // Handle a vector condition as a mix
     if (!cond->getType().isScalarOrVec1()) {
@@ -1742,6 +2271,9 @@
     else
         node->getQualifier().makeTemporary();
 
+    if (getSource() == EShSourceHlsl)
+        node->setNoShortCircuit();
+
     return node;
 }
 
@@ -1761,6 +2293,37 @@
 
     return node;
 }
+TIntermConstantUnion* TIntermediate::addConstantUnion(signed char i8, const TSourceLoc& loc, bool literal) const
+{
+    TConstUnionArray unionArray(1);
+    unionArray[0].setI8Const(i8);
+
+    return addConstantUnion(unionArray, TType(EbtInt8, EvqConst), loc, literal);
+}
+
+TIntermConstantUnion* TIntermediate::addConstantUnion(unsigned char u8, const TSourceLoc& loc, bool literal) const
+{
+    TConstUnionArray unionArray(1);
+    unionArray[0].setUConst(u8);
+
+    return addConstantUnion(unionArray, TType(EbtUint8, EvqConst), loc, literal);
+}
+
+TIntermConstantUnion* TIntermediate::addConstantUnion(signed short i16, const TSourceLoc& loc, bool literal) const
+{
+    TConstUnionArray unionArray(1);
+    unionArray[0].setI16Const(i16);
+
+    return addConstantUnion(unionArray, TType(EbtInt16, EvqConst), loc, literal);
+}
+
+TIntermConstantUnion* TIntermediate::addConstantUnion(unsigned short u16, const TSourceLoc& loc, bool literal) const
+{
+    TConstUnionArray unionArray(1);
+    unionArray[0].setU16Const(u16);
+
+    return addConstantUnion(unionArray, TType(EbtUint16, EvqConst), loc, literal);
+}
 
 TIntermConstantUnion* TIntermediate::addConstantUnion(int i, const TSourceLoc& loc, bool literal) const
 {
@@ -1794,24 +2357,6 @@
     return addConstantUnion(unionArray, TType(EbtUint64, EvqConst), loc, literal);
 }
 
-#ifdef AMD_EXTENSIONS
-TIntermConstantUnion* TIntermediate::addConstantUnion(short i16, const TSourceLoc& loc, bool literal) const
-{
-    TConstUnionArray unionArray(1);
-    unionArray[0].setIConst(i16);
-
-    return addConstantUnion(unionArray, TType(EbtInt16, EvqConst), loc, literal);
-}
-
-TIntermConstantUnion* TIntermediate::addConstantUnion(unsigned short u16, const TSourceLoc& loc, bool literal) const
-{
-    TConstUnionArray unionArray(1);
-    unionArray[0].setUConst(u16);
-
-    return addConstantUnion(unionArray, TType(EbtUint16, EvqConst), loc, literal);
-}
-#endif
-
 TIntermConstantUnion* TIntermediate::addConstantUnion(bool b, const TSourceLoc& loc, bool literal) const
 {
     TConstUnionArray unionArray(1);
@@ -1822,11 +2367,7 @@
 
 TIntermConstantUnion* TIntermediate::addConstantUnion(double d, TBasicType baseType, const TSourceLoc& loc, bool literal) const
 {
-#ifdef AMD_EXTENSIONS
     assert(baseType == EbtFloat || baseType == EbtDouble || baseType == EbtFloat16);
-#else
-    assert(baseType == EbtFloat || baseType == EbtDouble);
-#endif
 
     TConstUnionArray unionArray(1);
     unionArray[0].setDConst(d);
@@ -1909,11 +2450,11 @@
 //
 // Create while and do-while loop nodes.
 //
-TIntermLoop* TIntermediate::addLoop(TIntermNode* body, TIntermTyped* test, TIntermTyped* terminal, bool testFirst, const TSourceLoc& loc, TLoopControl control)
+TIntermLoop* TIntermediate::addLoop(TIntermNode* body, TIntermTyped* test, TIntermTyped* terminal, bool testFirst,
+    const TSourceLoc& loc)
 {
     TIntermLoop* node = new TIntermLoop(body, test, terminal, testFirst);
     node->setLoc(loc);
-    node->setLoopControl(control);
 
     return node;
 }
@@ -1921,11 +2462,11 @@
 //
 // Create a for-loop sequence.
 //
-TIntermAggregate* TIntermediate::addForLoop(TIntermNode* body, TIntermNode* initializer, TIntermTyped* test, TIntermTyped* terminal, bool testFirst, const TSourceLoc& loc, TLoopControl control)
+TIntermAggregate* TIntermediate::addForLoop(TIntermNode* body, TIntermNode* initializer, TIntermTyped* test,
+    TIntermTyped* terminal, bool testFirst, const TSourceLoc& loc, TIntermLoop*& node)
 {
-    TIntermLoop* node = new TIntermLoop(body, test, terminal, testFirst);
+    node = new TIntermLoop(body, test, terminal, testFirst);
     node->setLoc(loc);
-    node->setLoopControl(control);
 
     // make a sequence of the initializer and statement, but try to reuse the
     // aggregate already created for whatever is in the initializer, if there is one
@@ -2121,12 +2662,10 @@
         case EOpVectorSwizzle:
         case EOpConvFloatToDouble:
         case EOpConvDoubleToFloat:
-#ifdef AMD_EXTENSIONS
         case EOpConvFloat16ToFloat:
         case EOpConvFloatToFloat16:
         case EOpConvFloat16ToDouble:
         case EOpConvDoubleToFloat16:
-#endif
             return true;
         default:
             return false;
@@ -2150,51 +2689,97 @@
     case EOpIndexDirectStruct:
     case EOpVectorSwizzle:
 
-    // conversion constructors
-    case EOpConvIntToBool:
-    case EOpConvUintToBool:
-    case EOpConvUintToInt:
-    case EOpConvBoolToInt:
-    case EOpConvIntToUint:
-    case EOpConvBoolToUint:
-    case EOpConvInt64ToBool:
-    case EOpConvBoolToInt64:
-    case EOpConvUint64ToBool:
-    case EOpConvBoolToUint64:
-    case EOpConvInt64ToInt:
-    case EOpConvIntToInt64:
-    case EOpConvUint64ToUint:
-    case EOpConvUintToUint64:
-    case EOpConvInt64ToUint64:
-    case EOpConvUint64ToInt64:
-    case EOpConvInt64ToUint:
-    case EOpConvUintToInt64:
-    case EOpConvUint64ToInt:
-    case EOpConvIntToUint64:
-#ifdef AMD_EXTENSIONS
+    // (u)int* -> bool
+    case EOpConvInt8ToBool:
     case EOpConvInt16ToBool:
-    case EOpConvBoolToInt16:
-    case EOpConvInt16ToInt:
-    case EOpConvIntToInt16:
-    case EOpConvInt16ToUint:
-    case EOpConvUintToInt16:
-    case EOpConvInt16ToInt64:
-    case EOpConvInt64ToInt16:
-    case EOpConvInt16ToUint64:
-    case EOpConvUint64ToInt16:
+    case EOpConvIntToBool:
+    case EOpConvInt64ToBool:
+    case EOpConvUint8ToBool:
     case EOpConvUint16ToBool:
+    case EOpConvUintToBool:
+    case EOpConvUint64ToBool:
+
+    // bool -> (u)int*
+    case EOpConvBoolToInt8:
+    case EOpConvBoolToInt16:
+    case EOpConvBoolToInt:
+    case EOpConvBoolToInt64:
+    case EOpConvBoolToUint8:
     case EOpConvBoolToUint16:
-    case EOpConvUint16ToInt:
-    case EOpConvIntToUint16:
-    case EOpConvUint16ToUint:
-    case EOpConvUintToUint16:
-    case EOpConvUint16ToInt64:
-    case EOpConvInt64ToUint16:
-    case EOpConvUint16ToUint64:
-    case EOpConvUint64ToUint16:
+    case EOpConvBoolToUint:
+    case EOpConvBoolToUint64:
+
+    // int8_t -> (u)int*
+    case EOpConvInt8ToInt16:
+    case EOpConvInt8ToInt:
+    case EOpConvInt8ToInt64:
+    case EOpConvInt8ToUint8:
+    case EOpConvInt8ToUint16:
+    case EOpConvInt8ToUint:
+    case EOpConvInt8ToUint64:
+
+    // int16_t -> (u)int*
+    case EOpConvInt16ToInt8:
+    case EOpConvInt16ToInt:
+    case EOpConvInt16ToInt64:
+    case EOpConvInt16ToUint8:
     case EOpConvInt16ToUint16:
+    case EOpConvInt16ToUint:
+    case EOpConvInt16ToUint64:
+
+    // int32_t -> (u)int*
+    case EOpConvIntToInt8:
+    case EOpConvIntToInt16:
+    case EOpConvIntToInt64:
+    case EOpConvIntToUint8:
+    case EOpConvIntToUint16:
+    case EOpConvIntToUint:
+    case EOpConvIntToUint64:
+
+    // int64_t -> (u)int*
+    case EOpConvInt64ToInt8:
+    case EOpConvInt64ToInt16:
+    case EOpConvInt64ToInt:
+    case EOpConvInt64ToUint8:
+    case EOpConvInt64ToUint16:
+    case EOpConvInt64ToUint:
+    case EOpConvInt64ToUint64:
+
+    // uint8_t -> (u)int*
+    case EOpConvUint8ToInt8:
+    case EOpConvUint8ToInt16:
+    case EOpConvUint8ToInt:
+    case EOpConvUint8ToInt64:
+    case EOpConvUint8ToUint16:
+    case EOpConvUint8ToUint:
+    case EOpConvUint8ToUint64:
+
+    // uint16_t -> (u)int*
+    case EOpConvUint16ToInt8:
     case EOpConvUint16ToInt16:
-#endif
+    case EOpConvUint16ToInt:
+    case EOpConvUint16ToInt64:
+    case EOpConvUint16ToUint8:
+    case EOpConvUint16ToUint:
+    case EOpConvUint16ToUint64:
+
+    // uint32_t -> (u)int*
+    case EOpConvUintToInt8:
+    case EOpConvUintToInt16:
+    case EOpConvUintToInt:
+    case EOpConvUintToInt64:
+    case EOpConvUintToUint8:
+    case EOpConvUintToUint16:
+    case EOpConvUintToUint64:
+
+    // uint64_t -> (u)int*
+    case EOpConvUint64ToInt8:
+    case EOpConvUint64ToInt16:
+    case EOpConvUint64ToInt:
+    case EOpConvUint64ToInt64:
+    case EOpConvUint64ToUint8:
+    case EOpConvUint64ToUint16:
+    case EOpConvUint64ToUint:
 
     // unary operations
     case EOpNegative:
@@ -2228,6 +2813,64 @@
     }
 }
 
+// Is the operation one that must propagate nonuniform?
+bool TIntermediate::isNonuniformPropagating(TOperator op) const
+{
+    // "* All Operators in Section 5.1 (Operators), except for assignment,
+    //    arithmetic assignment, and sequence
+    //  * Component selection in Section 5.5
+    //  * Matrix components in Section 5.6
+    //  * Structure and Array Operations in Section 5.7, except for the length
+    //    method."
+    switch (op) {
+    case EOpPostIncrement:
+    case EOpPostDecrement:
+    case EOpPreIncrement:
+    case EOpPreDecrement:
+
+    case EOpNegative:
+    case EOpLogicalNot:
+    case EOpVectorLogicalNot:
+    case EOpBitwiseNot:
+
+    case EOpAdd:
+    case EOpSub:
+    case EOpMul:
+    case EOpDiv:
+    case EOpMod:
+    case EOpRightShift:
+    case EOpLeftShift:
+    case EOpAnd:
+    case EOpInclusiveOr:
+    case EOpExclusiveOr:
+    case EOpEqual:
+    case EOpNotEqual:
+    case EOpLessThan:
+    case EOpGreaterThan:
+    case EOpLessThanEqual:
+    case EOpGreaterThanEqual:
+    case EOpVectorTimesScalar:
+    case EOpVectorTimesMatrix:
+    case EOpMatrixTimesVector:
+    case EOpMatrixTimesScalar:
+
+    case EOpLogicalOr:
+    case EOpLogicalXor:
+    case EOpLogicalAnd:
+
+    case EOpIndexDirect:
+    case EOpIndexIndirect:
+    case EOpIndexDirectStruct:
+    case EOpVectorSwizzle:
+        return true;
+
+    default:
+        break;
+    }
+
+    return false;
+}
+
 ////////////////////////////////////////////////////////////////
 //
 // Member functions of the nodes used for building the tree.
@@ -2312,7 +2955,7 @@
         // Convert operand to a boolean type
         if (operand->getBasicType() != EbtBool) {
             // Add constructor to boolean type. If that fails, we can't do it, so return false.
-            TIntermTyped* converted = convertToBasicType(op, EbtBool, operand);
+            TIntermTyped* converted = addConversion(op, TType(EbtBool), operand);
             if (converted == nullptr)
                 return false;
 
@@ -2321,15 +2964,7 @@
         }
         break;
     case EOpBitwiseNot:
-        if (operand->getBasicType() != EbtInt &&
-            operand->getBasicType() != EbtUint &&
-#ifdef AMD_EXTENSIONS
-            operand->getBasicType() != EbtInt16 &&
-            operand->getBasicType() != EbtUint16 &&
-#endif
-            operand->getBasicType() != EbtInt64 &&
-            operand->getBasicType() != EbtUint64)
-
+        if (!isTypeInt(operand->getBasicType()))
             return false;
         break;
     case EOpNegative:
@@ -2337,18 +2972,9 @@
     case EOpPostDecrement:
     case EOpPreIncrement:
     case EOpPreDecrement:
-        if (operand->getBasicType() != EbtInt &&
-            operand->getBasicType() != EbtUint &&
-            operand->getBasicType() != EbtInt64 &&
-            operand->getBasicType() != EbtUint64 &&
-#ifdef AMD_EXTENSIONS
-            operand->getBasicType() != EbtInt16 &&
-            operand->getBasicType() != EbtUint16 &&
-#endif
+        if (!isTypeInt(operand->getBasicType()) &&
             operand->getBasicType() != EbtFloat &&
-#ifdef AMD_EXTENSIONS
             operand->getBasicType() != EbtFloat16 &&
-#endif
             operand->getBasicType() != EbtDouble)
 
             return false;
@@ -2368,34 +2994,12 @@
 
 void TIntermUnary::updatePrecision()
 {
-#ifdef AMD_EXTENSIONS
     if (getBasicType() == EbtInt || getBasicType() == EbtUint || getBasicType() == EbtFloat || getBasicType() == EbtFloat16) {
-#else
-    if (getBasicType() == EbtInt || getBasicType() == EbtUint || getBasicType() == EbtFloat) {
-#endif
         if (operand->getQualifier().precision > getQualifier().precision)
             getQualifier().precision = operand->getQualifier().precision;
     }
 }
 
-// If it is not already, convert this node to the given basic type.
-TIntermTyped* TIntermediate::convertToBasicType(TOperator op, TBasicType basicType, TIntermTyped* node) const
-{
-    if (node == nullptr)
-        return nullptr;
-
-    // It's already this basic type: nothing needs to be done, so use the node directly.
-    if (node->getBasicType() == basicType)
-        return node;
-
-    const TType& type = node->getType();
-    const TType newType(basicType, type.getQualifier().storage,
-                        type.getVectorSize(), type.getMatrixCols(), type.getMatrixRows(), type.isVector());
-
-    // Add constructor to the right vectorness of the right type. If that fails, we can't do it, so return nullptr.
-    return addConversion(op, newType, node);
-}
-
 //
 // See TIntermediate::promote
 //
@@ -2468,12 +3072,19 @@
         case EOpSub:
         case EOpDiv:
         case EOpMul:
-            left = addConversion(op, TType(EbtInt, EvqTemporary, left->getVectorSize()), left);
-            right = addConversion(op, TType(EbtInt, EvqTemporary, right->getVectorSize()), right);
+            if (left->getBasicType() == EbtBool)
+                left  = createConversion(EbtInt, left);
+            if (right->getBasicType() == EbtBool)
+                right = createConversion(EbtInt, right);
             if (left == nullptr || right == nullptr)
                 return false;
             node.setLeft(left);
             node.setRight(right);
+
+            // Update the original base assumption on result type..
+            node.setType(left->getType());
+            node.getWritableType().getQualifier().clear();
+
             break;
 
         default:
@@ -2515,21 +3126,17 @@
     case EOpLogicalAnd:
     case EOpLogicalOr:
     case EOpLogicalXor:
-        if (getSource() == EShSourceHlsl) {
-            TIntermTyped* convertedL = convertToBasicType(op, EbtBool, left);
-            TIntermTyped* convertedR = convertToBasicType(op, EbtBool, right);
-            if (convertedL == nullptr || convertedR == nullptr)
+        // logical ops operate only on Booleans or vectors of Booleans.
+        if (left->getBasicType() != EbtBool || left->isMatrix())
                 return false;
-            node.setLeft(left = convertedL);   // also updates stack variable
-            node.setRight(right = convertedR); // also updates stack variable
-        } else {
+
+        if (getSource() == EShSourceGlsl) {
             // logical ops operate only on scalar Booleans and will promote to scalar Boolean.
-            if (left->getBasicType() != EbtBool || left->isVector() || left->isMatrix())
+            if (left->isVector())
                 return false;
         }
 
         node.setType(TType(EbtBool, EvqTemporary, left->getVectorSize()));
-
         break;
 
     case EOpRightShift:
@@ -2550,16 +3157,7 @@
             break;
 
         // Check for integer-only operands.
-        if ((left->getBasicType() != EbtInt &&  left->getBasicType() != EbtUint &&
-#ifdef AMD_EXTENSIONS
-             left->getBasicType() != EbtInt16 && left->getBasicType() != EbtUint16 &&
-#endif
-             left->getBasicType() != EbtInt64 && left->getBasicType() != EbtUint64) ||
-            (right->getBasicType() != EbtInt && right->getBasicType() != EbtUint &&
-#ifdef AMD_EXTENSIONS
-             right->getBasicType() != EbtInt16 && right->getBasicType() != EbtUint16 &&
-#endif
-             right->getBasicType() != EbtInt64 && right->getBasicType() != EbtUint64))
+        if (!isTypeInt(left->getBasicType()) && !isTypeInt(right->getBasicType()))
             return false;
         if (left->isMatrix() || right->isMatrix())
             return false;
@@ -2700,7 +3298,7 @@
                 node.setOp(op = EOpMatrixTimesScalarAssign);
             }
         } else if (left->isMatrix() && right->isMatrix()) {
-            if (left->getMatrixCols() != left->getMatrixRows() || left->getMatrixCols() != right->getMatrixCols() || left->getMatrixCols() != right->getMatrixRows())
+            if (left->getMatrixCols() != right->getMatrixCols() || left->getMatrixCols() != right->getMatrixRows())
                 return false;
             node.setOp(op = EOpMatrixTimesMatrixAssign);
         } else if (!left->isMatrix() && !right->isMatrix()) {
@@ -2860,11 +3458,7 @@
 
 void TIntermBinary::updatePrecision()
 {
-#ifdef AMD_EXTENSIONS
     if (getBasicType() == EbtInt || getBasicType() == EbtUint || getBasicType() == EbtFloat || getBasicType() == EbtFloat16) {
-#else
-    if (getBasicType() == EbtInt || getBasicType() == EbtUint || getBasicType() == EbtFloat) {
-#endif
         getQualifier().precision = std::max(right->getQualifier().precision, left->getQualifier().precision);
         if (getQualifier().precision != EpqNone) {
             left->propagatePrecision(getQualifier().precision);
@@ -2875,11 +3469,7 @@
 
 void TIntermTyped::propagatePrecision(TPrecisionQualifier newPrecision)
 {
-#ifdef AMD_EXTENSIONS
     if (getQualifier().precision != EpqNone || (getBasicType() != EbtInt && getBasicType() != EbtUint && getBasicType() != EbtFloat && getBasicType() != EbtFloat16))
-#else
-    if (getQualifier().precision != EpqNone || (getBasicType() != EbtInt && getBasicType() != EbtUint && getBasicType() != EbtFloat))
-#endif
         return;
 
     getQualifier().precision = newPrecision;
@@ -2954,9 +3544,7 @@
                 break;
             case EbtFloat:
             case EbtDouble:
-#ifdef AMD_EXTENSIONS
             case EbtFloat16:
-#endif
                 leftUnionArray[i] = rightUnionArray[i];
                 break;
             default:
@@ -2982,16 +3570,13 @@
                 break;
             case EbtFloat:
             case EbtDouble:
-#ifdef AMD_EXTENSIONS
             case EbtFloat16:
-#endif
                 leftUnionArray[i] = rightUnionArray[i];
                 break;
             default:
                 return node;
             }
             break;
-#ifdef AMD_EXTENSIONS
         case EbtFloat16:
             switch (node->getType().getBasicType()) {
             case EbtInt:
@@ -3018,7 +3603,6 @@
                 return node;
             }
             break;
-#endif
         case EbtInt:
             switch (node->getType().getBasicType()) {
             case EbtInt:
@@ -3038,9 +3622,7 @@
                 break;
             case EbtFloat:
             case EbtDouble:
-#ifdef AMD_EXTENSIONS
             case EbtFloat16:
-#endif
                 leftUnionArray[i].setIConst(static_cast<int>(rightUnionArray[i].getDConst()));
                 break;
             default:
@@ -3066,9 +3648,7 @@
                 break;
             case EbtFloat:
             case EbtDouble:
-#ifdef AMD_EXTENSIONS
             case EbtFloat16:
-#endif
                 leftUnionArray[i].setUConst(static_cast<unsigned int>(rightUnionArray[i].getDConst()));
                 break;
             default:
@@ -3094,9 +3674,7 @@
                 break;
             case EbtFloat:
             case EbtDouble:
-#ifdef AMD_EXTENSIONS
             case EbtFloat16:
-#endif
                 leftUnionArray[i].setBConst(rightUnionArray[i].getDConst() != 0.0);
                 break;
             default:
@@ -3122,9 +3700,7 @@
                 break;
             case EbtFloat:
             case EbtDouble:
-#ifdef AMD_EXTENSIONS
             case EbtFloat16:
-#endif
                 leftUnionArray[i].setI64Const(static_cast<long long>(rightUnionArray[i].getDConst()));
                 break;
             default:
@@ -3150,9 +3726,7 @@
                 break;
             case EbtFloat:
             case EbtDouble:
-#ifdef AMD_EXTENSIONS
             case EbtFloat16:
-#endif
                 leftUnionArray[i].setU64Const(static_cast<unsigned long long>(rightUnionArray[i].getDConst()));
                 break;
             default:
@@ -3170,10 +3744,10 @@
                             node->getLoc());
 }
 
-void TIntermAggregate::addToPragmaTable(const TPragmaTable& pTable)
+void TIntermAggregate::setPragmaTable(const TPragmaTable& pTable)
 {
-    assert(!pragmaTable);
-    pragmaTable = new TPragmaTable();
+    assert(pragmaTable == nullptr);
+    pragmaTable = new TPragmaTable;
     *pragmaTable = pTable;
 }
 
diff --git a/glslang/MachineIndependent/ParseContextBase.cpp b/glslang/MachineIndependent/ParseContextBase.cpp
index bbc3cac..bfa9de4 100644
--- a/glslang/MachineIndependent/ParseContextBase.cpp
+++ b/glslang/MachineIndependent/ParseContextBase.cpp
@@ -228,6 +228,7 @@
 // must still be valid.
 // It is okay if the symbol's type will be subsequently edited;
 // the modifications will be tracked.
+// Order is preserved, to avoid creating novel forward references.
 void TParseContextBase::trackLinkage(TSymbol& symbol)
 {
     if (!parsingBuiltins)
@@ -242,7 +243,7 @@
         error(loc, "", "[", "index out of range '%d'", index);
         index = 0;
     } else if (type.isArray()) {
-        if (type.isExplicitlySizedArray() && index >= type.getOuterArraySize()) {
+        if (type.isSizedArray() && index >= type.getOuterArraySize()) {
             error(loc, "", "[", "array index out of range '%d'", index);
             index = type.getOuterArraySize() - 1;
         }
@@ -602,7 +603,7 @@
     if (parsingBuiltins)
         return;
 
-    // Transfer the linkage symbols to AST nodes
+    // Transfer the linkage symbols to AST nodes, preserving order.
     TIntermAggregate* linkage = new TIntermAggregate;
     for (auto i = linkageSymbols.begin(); i != linkageSymbols.end(); ++i)
         intermediate.addSymbolLinkageNode(linkage, **i);
diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp
index a648b9b..45c050d 100644
--- a/glslang/MachineIndependent/ParseHelper.cpp
+++ b/glslang/MachineIndependent/ParseHelper.cpp
@@ -2,6 +2,7 @@
 // Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
 // Copyright (C) 2012-2015 LunarG, Inc.
 // Copyright (C) 2015-2016 Google, Inc.
+// Copyright (C) 2017 ARM Limited.
 //
 // All rights reserved.
 //
@@ -266,6 +267,8 @@
         if (tokens.size() != 1)
             error(loc, "extra tokens", "#pragma", "");
         intermediate.setUseStorageBuffer();
+    } else if (tokens[0].compare("once") == 0) {
+        warn(loc, "not implemented", "#pragma once", "");
     }
 }
 
@@ -281,17 +284,17 @@
         requireExtensions(loc, symbol->getNumExtensions(), symbol->getExtensions(), symbol->getName().c_str());
 
     if (symbol && symbol->isReadOnly()) {
-        // All shared things containing an implicitly sized array must be copied up
+        // All shared things containing an unsized array must be copied up
         // on first use, so that all future references will share its array structure,
         // so that editing the implicit size will effect all nodes consuming it,
         // and so that editing the implicit size won't change the shared one.
         //
         // If this is a variable or a block, check it and all it contains, but if this
         // is a member of an anonymous block, check the whole block, as the whole block
-        // will need to be copied up if it contains an implicitly-sized array.
-        if (symbol->getType().containsImplicitlySizedArray() ||
+        // will need to be copied up if it contains an unsized array.
+        if (symbol->getType().containsUnsizedArray() ||
             (symbol->getAsAnonMember() &&
-             symbol->getAsAnonMember()->getAnonContainer().getType().containsImplicitlySizedArray()))
+             symbol->getAsAnonMember()->getAnonContainer().getType().containsUnsizedArray()))
             makeEditable(symbol);
     }
 
@@ -369,21 +372,29 @@
     } else {
         // at least one of base and index is not a front-end constant variable...
 
+        if (index->getQualifier().isFrontEndConstant())
+            checkIndex(loc, base->getType(), indexValue);
+
         if (base->getAsSymbolNode() && isIoResizeArray(base->getType()))
             handleIoResizeArrayAccess(loc, base);
 
         if (index->getQualifier().isFrontEndConstant()) {
-            if (base->getType().isImplicitlySizedArray())
-                updateImplicitArraySize(loc, base, indexValue);
+            if (base->getType().isUnsizedArray())
+                base->getWritableType().updateImplicitArraySize(indexValue + 1);
             else
                 checkIndex(loc, base->getType(), indexValue);
             result = intermediate.addIndex(EOpIndexDirect, base, index, loc);
         } else {
-            if (base->getType().isImplicitlySizedArray()) {
+            if (base->getType().isUnsizedArray()) {
+                // we have a variable index into an unsized array, which is okay,
+                // depending on the situation
                 if (base->getAsSymbolNode() && isIoResizeArray(base->getType()))
                     error(loc, "", "[", "array must be sized by a redeclaration or layout qualifier before being indexed with a variable");
-                else
-                    error(loc, "", "[", "array must be redeclared with a size before being indexed with a variable");
+                else {
+                    // it is okay for a run-time sized array
+                    checkRuntimeSizable(loc, *base);
+                }
+                base->getWritableType().setArrayVariablyIndexed();
             }
             if (base->getBasicType() == EbtBlock) {
                 if (base->getQualifier().storage == EvqBuffer)
@@ -424,6 +435,10 @@
         }
         result->setType(newType);
 
+        // Propagate nonuniform
+        if (base->getQualifier().isNonUniform() || index->getQualifier().isNonUniform())
+            result->getWritableType().getQualifier().nonUniform = true;
+
         if (anyIndexLimits)
             handleIndexLimits(loc, base, index);
     }
@@ -482,7 +497,7 @@
 
     if (language == EShLangTessControl || language == EShLangTessEvaluation) {
         if (type.getOuterArraySize() != resources.maxPatchVertices) {
-            if (type.isExplicitlySizedArray())
+            if (type.isSizedArray())
                 error(loc, "tessellation input array size must be gl_MaxPatchVertices or implicitly sized", "[]", "");
             type.changeOuterArraySize(resources.maxPatchVertices);
         }
@@ -515,7 +530,7 @@
         return;
 
     // fix array size, if it can be fixed and needs to be fixed (will allow variable indexing)
-    if (symbolNode->getType().isImplicitlySizedArray()) {
+    if (symbolNode->getType().isUnsizedArray()) {
         int newSize = getIoArrayImplicitSize();
         if (newSize > 0)
             symbolNode->getWritableType().changeOuterArraySize(newSize);
@@ -565,7 +580,7 @@
 
 void TParseContext::checkIoArrayConsistency(const TSourceLoc& loc, int requiredSize, const char* feature, TType& type, const TString& name)
 {
-    if (type.isImplicitlySizedArray())
+    if (type.isUnsizedArray())
         type.changeOuterArraySize(requiredSize);
     else if (type.getOuterArraySize() != requiredSize) {
         if (language == EShLangGeometry)
@@ -732,6 +747,10 @@
     if (base->getQualifier().noContraction)
         result->getWritableType().getQualifier().noContraction = true;
 
+    // Propagate nonuniform
+    if (base->getQualifier().isNonUniform())
+        result->getWritableType().getQualifier().nonUniform = true;
+
     return result;
 }
 
@@ -776,7 +795,7 @@
         if (prevDec->isPrototyped() && prototype)
             profileRequires(loc, EEsProfile, 300, nullptr, "multiple prototypes for same function");
         if (prevDec->getType() != function.getType())
-            error(loc, "overloaded functions must have the same return type", function.getType().getBasicTypeString().c_str(), "");
+            error(loc, "overloaded functions must have the same return type", function.getName().c_str(), "");
         for (int i = 0; i < prevDec->getParamCount(); ++i) {
             if ((*prevDec)[i].type->getQualifier().storage != function[i].type->getQualifier().storage)
                 error(loc, "overloaded functions must have the same parameter storage qualifiers for argument", function[i].type->getStorageQualifierString(), "%d", i+1);
@@ -950,7 +969,7 @@
             if (builtIn && fnCandidate->getNumExtensions())
                 requireExtensions(loc, fnCandidate->getNumExtensions(), fnCandidate->getExtensions(), fnCandidate->getName().c_str());
 
-            if (arguments) {
+            if (arguments != nullptr) {
                 // Make sure qualifications work for these arguments.
                 TIntermAggregate* aggregate = arguments->getAsAggregate();
                 for (int i = 0; i < fnCandidate->getParamCount(); ++i) {
@@ -988,7 +1007,7 @@
 
             if (builtIn && fnCandidate->getBuiltInOp() != EOpNull) {
                 // A function call mapped to a built-in operation.
-                result = handleBuiltInFunctionCall(loc, *arguments, *fnCandidate);
+                result = handleBuiltInFunctionCall(loc, arguments, *fnCandidate);
             } else {
                 // This is a function call not mapped to built-in operator.
                 // It could still be a built-in function, but only if PureOperatorBuiltins == false.
@@ -1036,20 +1055,24 @@
     return result;
 }
 
-TIntermTyped* TParseContext::handleBuiltInFunctionCall(TSourceLoc loc, TIntermNode& arguments,
+TIntermTyped* TParseContext::handleBuiltInFunctionCall(TSourceLoc loc, TIntermNode* arguments,
                                                        const TFunction& function)
 {
     checkLocation(loc, function.getBuiltInOp());
     TIntermTyped *result = intermediate.addBuiltInFunctionCall(loc, function.getBuiltInOp(),
                                                                function.getParamCount() == 1,
-                                                               &arguments, function.getType());
+                                                               arguments, function.getType());
     if (obeyPrecisionQualifiers())
         computeBuiltinPrecisions(*result, function);
 
-    if (result == nullptr)  {
-        error(arguments.getLoc(), " wrong operand type", "Internal Error",
-                                  "built in unary operator function.  Type: %s",
-                                  static_cast<TIntermTyped*>(&arguments)->getCompleteString().c_str());
+    if (result == nullptr) {
+        if (arguments == nullptr)
+            error(loc, " wrong operand type", "Internal Error",
+                                      "built in unary operator function.  Type: %s", "");
+        else
+            error(arguments->getLoc(), " wrong operand type", "Internal Error",
+                                      "built in unary operator function.  Type: %s",
+                                      static_cast<TIntermTyped*>(arguments)->getCompleteString().c_str());
     } else if (result->getAsOperator())
         builtInOpCheck(loc, function, *result->getAsOperator());
 
@@ -1208,10 +1231,7 @@
     else {
         const TType& type = intermNode->getAsTyped()->getType();
         if (type.isArray()) {
-            if (type.isRuntimeSizedArray()) {
-                // Create a unary op and let the back end handle it
-                return intermediate.addBuiltInFunctionCall(loc, EOpArrayLength, true, intermNode, TType(EbtInt));
-            } else if (type.isImplicitlySizedArray()) {
+            if (type.isUnsizedArray()) {
                 if (intermNode->getAsSymbolNode() && isIoResizeArray(type)) {
                     // We could be between a layout declaration that gives a built-in io array implicit size and
                     // a user redeclaration of that array, meaning we have to substitute its implicit size here
@@ -1224,7 +1244,10 @@
                 if (length == 0) {
                     if (intermNode->getAsSymbolNode() && isIoResizeArray(type))
                         error(loc, "", function->getName().c_str(), "array must first be sized by a redeclaration or layout qualifier");
-                    else
+                    else if (isRuntimeLength(*intermNode->getAsTyped())) {
+                        // Create a unary op and let the back end handle it
+                        return intermediate.addBuiltInFunctionCall(loc, EOpArrayLength, true, intermNode, TType(EbtInt));
+                    } else
                         error(loc, "", function->getName().c_str(), "array must be declared with a size before using this method");
                 }
             } else if (type.getOuterArrayNode()) {
@@ -1378,6 +1401,8 @@
         arg0 = unaryArg;
     }
 
+    TString featureString;
+    const char* feature = nullptr;
     switch (callNode.getOp()) {
     case EOpTextureGather:
     case EOpTextureGatherOffset:
@@ -1386,8 +1411,9 @@
         // Figure out which variants are allowed by what extensions,
         // and what arguments must be constant for which situations.
 
-        TString featureString = fnCandidate.getName() + "(...)";
-        const char* feature = featureString.c_str();
+        featureString = fnCandidate.getName();
+        featureString += "(...)";
+        feature = featureString.c_str();
         profileRequires(loc, EEsProfile, 310, nullptr, feature);
         int compArg = -1;  // track which argument, if any, is the constant component argument
         switch (callNode.getOp()) {
@@ -1443,8 +1469,9 @@
             bias = fnCandidate.getParamCount() > 4;
 
         if (bias) {
-            TString biasFeatureString = fnCandidate.getName() + "with bias argument";
-            const char* feature = biasFeatureString.c_str();
+            featureString = fnCandidate.getName();
+            featureString += "with bias argument";
+            feature = featureString.c_str();
             profileRequires(loc, ~EEsProfile, 450, nullptr, feature);
             requireExtensions(loc, 1, &E_GL_AMD_texture_gather_bias_lod, feature);
         }
@@ -1466,8 +1493,9 @@
             bias = fnCandidate.getParamCount() > 5;
 
         if (bias) {
-            TString featureString = fnCandidate.getName() + "with bias argument";
-            const char* feature = featureString.c_str();
+            featureString = fnCandidate.getName();
+            featureString += "with bias argument";
+            feature = featureString.c_str();
             profileRequires(loc, ~EEsProfile, 450, nullptr, feature);
             requireExtensions(loc, 1, &E_GL_AMD_texture_gather_bias_lod, feature);
         }
@@ -1482,6 +1510,39 @@
         requireExtensions(loc, 1, &E_GL_ARB_sparse_texture2, fnCandidate.getName().c_str());
         break;
     }
+
+    case EOpSwizzleInvocations:
+    {
+        if (! (*argp)[1]->getAsConstantUnion())
+            error(loc, "argument must be compile-time constant", "offset", "");
+        else {
+            unsigned offset[4] = {};
+            offset[0] = (*argp)[1]->getAsConstantUnion()->getConstArray()[0].getUConst();
+            offset[1] = (*argp)[1]->getAsConstantUnion()->getConstArray()[1].getUConst();
+            offset[2] = (*argp)[1]->getAsConstantUnion()->getConstArray()[2].getUConst();
+            offset[3] = (*argp)[1]->getAsConstantUnion()->getConstArray()[3].getUConst();
+            if (offset[0] > 3 || offset[1] > 3 || offset[2] > 3 || offset[3] > 3)
+                error(loc, "components must be in the range [0, 3]", "offset", "");
+        }
+
+        break;
+    }
+
+    case EOpSwizzleInvocationsMasked:
+    {
+        if (! (*argp)[1]->getAsConstantUnion())
+            error(loc, "argument must be compile-time constant", "mask", "");
+        else {
+            unsigned mask[3] = {};
+            mask[0] = (*argp)[1]->getAsConstantUnion()->getConstArray()[0].getUConst();
+            mask[1] = (*argp)[1]->getAsConstantUnion()->getConstArray()[1].getUConst();
+            mask[2] = (*argp)[1]->getAsConstantUnion()->getConstArray()[2].getUConst();
+            if (mask[0] > 31 || mask[1] > 31 || mask[2] > 31)
+                error(loc, "components must be in the range [0, 31]", "mask", "");
+        }
+
+        break;
+    }
 #endif
 
     case EOpTextureOffset:
@@ -1509,6 +1570,12 @@
         }
 
         if (arg > 0) {
+
+#ifdef AMD_EXTENSIONS
+            bool f16ShadowCompare = (*argp)[1]->getAsTyped()->getBasicType() == EbtFloat16 && arg0->getType().getSampler().shadow;
+            if (f16ShadowCompare)
+                ++arg;
+#endif
             if (! (*argp)[arg]->getAsConstantUnion())
                 error(loc, "argument must be compile-time constant", "texel offset", "");
             else {
@@ -1574,6 +1641,9 @@
     case EOpInterpolateAtCentroid:
     case EOpInterpolateAtSample:
     case EOpInterpolateAtOffset:
+#ifdef AMD_EXTENSIONS
+    case EOpInterpolateAtVertex:
+#endif
         // Make sure the first argument is an interpolant, or an array element of an interpolant
         if (arg0->getType().getQualifier().storage != EvqVaryingIn) {
             // It might still be an array element.
@@ -1588,6 +1658,23 @@
             if (base == nullptr || base->getType().getQualifier().storage != EvqVaryingIn)
                 error(loc, "first argument must be an interpolant, or interpolant-array element", fnCandidate.getName().c_str(), "");
         }
+
+#ifdef AMD_EXTENSIONS
+        if (callNode.getOp() == EOpInterpolateAtVertex) {
+            if (!arg0->getType().getQualifier().isExplicitInterpolation())
+                error(loc, "argument must be qualified as __explicitInterpAMD in", "interpolant", "");
+            else {
+                if (! (*argp)[1]->getAsConstantUnion())
+                    error(loc, "argument must be compile-time constant", "vertex index", "");
+                else {
+                    unsigned vertexIdx = (*argp)[1]->getAsConstantUnion()->getConstArray()[0].getUConst();
+                    if (vertexIdx > 2)
+                        error(loc, "must be in the range [0, 2]", "vertex index", "");
+                }
+            }
+        }
+#endif
+
         break;
 
     case EOpEmitStreamVertex:
@@ -1595,9 +1682,33 @@
         intermediate.setMultiStream();
         break;
 
+    case EOpSubgroupClusteredAdd:
+    case EOpSubgroupClusteredMul:
+    case EOpSubgroupClusteredMin:
+    case EOpSubgroupClusteredMax:
+    case EOpSubgroupClusteredAnd:
+    case EOpSubgroupClusteredOr:
+    case EOpSubgroupClusteredXor:
+        if ((*argp)[1]->getAsConstantUnion() == nullptr)
+            error(loc, "argument must be compile-time constant", "cluster size", "");
+        else {
+            int size = (*argp)[1]->getAsConstantUnion()->getConstArray()[0].getIConst();
+            if (size < 1)
+                error(loc, "argument must be at least 1", "cluster size", "");
+            else if (!IsPow2(size))
+                error(loc, "argument must be a power of 2", "cluster size", "");
+        }
+        break;
+
     default:
         break;
     }
+
+    if (callNode.getOp() > EOpSubgroupGuardStart && callNode.getOp() < EOpSubgroupGuardStop) {
+        // these require SPIR-V 1.3
+        if (spvVersion.spv > 0 && spvVersion.spv < EShTargetSpv_1_3)
+            error(loc, "requires SPIR-V 1.3", "subgroup op", "");
+    }
 }
 
 extern bool PureOperatorBuiltins;
@@ -2159,7 +2270,6 @@
     case EOpConstructDMat4x2:
     case EOpConstructDMat4x3:
     case EOpConstructDMat4x4:
-#ifdef AMD_EXTENSIONS
     case EOpConstructF16Mat2x2:
     case EOpConstructF16Mat2x3:
     case EOpConstructF16Mat2x4:
@@ -2169,7 +2279,6 @@
     case EOpConstructF16Mat4x2:
     case EOpConstructF16Mat4x3:
     case EOpConstructF16Mat4x4:
-#endif
         constructingMatrix = true;
         break;
     default:
@@ -2190,7 +2299,7 @@
     bool floatArgument = false;
     for (int arg = 0; arg < function.getParamCount(); ++arg) {
         if (function[arg].type->isArray()) {
-            if (! function[arg].type->isExplicitlySizedArray()) {
+            if (function[arg].type->isUnsizedArray()) {
                 // Can't construct from an unsized array.
                 error(loc, "array argument must be sized", "constructor", "");
                 return true;
@@ -2226,18 +2335,30 @@
         // Finish pinning down spec-const semantics
         if (specConstType) {
             switch (op) {
+            case EOpConstructInt8:
+            case EOpConstructUint8:
+            case EOpConstructInt16:
+            case EOpConstructUint16:
             case EOpConstructInt:
             case EOpConstructUint:
             case EOpConstructInt64:
             case EOpConstructUint64:
-#ifdef AMD_EXTENSIONS
-            case EOpConstructInt16:
-            case EOpConstructUint16:
-#endif
             case EOpConstructBool:
             case EOpConstructBVec2:
             case EOpConstructBVec3:
             case EOpConstructBVec4:
+            case EOpConstructI8Vec2:
+            case EOpConstructI8Vec3:
+            case EOpConstructI8Vec4:
+            case EOpConstructU8Vec2:
+            case EOpConstructU8Vec3:
+            case EOpConstructU8Vec4:
+            case EOpConstructI16Vec2:
+            case EOpConstructI16Vec3:
+            case EOpConstructI16Vec4:
+            case EOpConstructU16Vec2:
+            case EOpConstructU16Vec3:
+            case EOpConstructU16Vec4:
             case EOpConstructIVec2:
             case EOpConstructIVec3:
             case EOpConstructIVec4:
@@ -2250,14 +2371,6 @@
             case EOpConstructU64Vec2:
             case EOpConstructU64Vec3:
             case EOpConstructU64Vec4:
-#ifdef AMD_EXTENSIONS
-            case EOpConstructI16Vec2:
-            case EOpConstructI16Vec3:
-            case EOpConstructI16Vec4:
-            case EOpConstructU16Vec2:
-            case EOpConstructU16Vec3:
-            case EOpConstructU16Vec4:
-#endif
                 // This was the list of valid ones, if they aren't converting from float
                 // and aren't making an array.
                 makeSpecConst = ! floatArgument && ! type.isArray();
@@ -2284,7 +2397,7 @@
             return true;
         }
 
-        if (type.isImplicitlySizedArray()) {
+        if (type.isUnsizedArray()) {
             // auto adapt the constructor type to the number of arguments
             type.changeOuterArraySize(function.getParamCount());
         } else if (type.getOuterArraySize() != function.getParamCount()) {
@@ -2296,20 +2409,21 @@
             // Types have to match, but we're still making the type.
             // Finish making the type, and the comparison is done later
             // when checking for conversion.
-            TArraySizes& arraySizes = type.getArraySizes();
+            TArraySizes& arraySizes = *type.getArraySizes();
 
             // At least the dimensionalities have to match.
-            if (! function[0].type->isArray() || arraySizes.getNumDims() != function[0].type->getArraySizes().getNumDims() + 1) {
+            if (! function[0].type->isArray() ||
+                    arraySizes.getNumDims() != function[0].type->getArraySizes()->getNumDims() + 1) {
                 error(loc, "array constructor argument not correct type to construct array element", "constructor", "");
                 return true;
             }
 
-            if (arraySizes.isInnerImplicit()) {
+            if (arraySizes.isInnerUnsized()) {
                 // "Arrays of arrays ..., and the size for any dimension is optional"
                 // That means we need to adopt (from the first argument) the other array sizes into the type.
                 for (int d = 1; d < arraySizes.getNumDims(); ++d) {
                     if (arraySizes.getDimSize(d) == UnsizedArraySize) {
-                        arraySizes.setDimSize(d, function[0].type->getArraySizes().getDimSize(d - 1));
+                        arraySizes.setDimSize(d, function[0].type->getArraySizes()->getDimSize(d - 1));
                     }
                 }
             }
@@ -2511,16 +2625,32 @@
 }
 
 //
+// Qualifier checks knowing the qualifier and that it is a member of a struct/block.
+//
+void TParseContext::memberQualifierCheck(glslang::TPublicType& publicType)
+{
+    globalQualifierFixCheck(publicType.loc, publicType.qualifier);
+    checkNoShaderLayouts(publicType.loc, publicType.shaderQualifiers);
+    if (publicType.qualifier.isNonUniform()) {
+        error(publicType.loc, "not allowed on block or structure members", "nonuniformEXT", "");
+        publicType.qualifier.nonUniform = false;
+    }
+}
+
+//
 // Check/fix just a full qualifier (no variables or types yet, but qualifier is complete) at global level.
 //
 void TParseContext::globalQualifierFixCheck(const TSourceLoc& loc, TQualifier& qualifier)
 {
+    bool nonuniformOkay = false;
+
     // move from parameter/unknown qualifiers to pipeline in/out qualifiers
     switch (qualifier.storage) {
     case EvqIn:
         profileRequires(loc, ENoProfile, 130, nullptr, "in for stage inputs");
         profileRequires(loc, EEsProfile, 300, nullptr, "in for stage inputs");
         qualifier.storage = EvqVaryingIn;
+        nonuniformOkay = true;
         break;
     case EvqOut:
         profileRequires(loc, ENoProfile, 130, nullptr, "out for stage outputs");
@@ -2531,10 +2661,17 @@
         qualifier.storage = EvqVaryingIn;
         error(loc, "cannot use 'inout' at global scope", "", "");
         break;
+    case EvqGlobal:
+    case EvqTemporary:
+        nonuniformOkay = true;
+        break;
     default:
         break;
     }
 
+    if (!nonuniformOkay && qualifier.nonUniform)
+        error(loc, "for non-parameter, can only apply to 'in' or no storage qualifier", "nonuniformEXT", "");
+
     invariantCheck(loc, qualifier);
 }
 
@@ -2560,17 +2697,12 @@
 
     // now, knowing it is a shader in/out, do all the in/out semantic checks
 
-    if (publicType.basicType == EbtBool) {
+    if (publicType.basicType == EbtBool && !parsingBuiltins) {
         error(loc, "cannot be bool", GetStorageQualifierString(qualifier.storage), "");
         return;
     }
 
-    if (publicType.basicType == EbtInt   || publicType.basicType == EbtUint   ||
-#ifdef AMD_EXTENSIONS
-        publicType.basicType == EbtInt16 || publicType.basicType == EbtUint16 ||
-#endif
-        publicType.basicType == EbtInt64 || publicType.basicType == EbtUint64 ||
-        publicType.basicType == EbtDouble)
+    if (isTypeInt(publicType.basicType) || publicType.basicType == EbtDouble)
         profileRequires(loc, EEsProfile, 300, nullptr, "shader input/output");
 
 #ifdef AMD_EXTENSIONS
@@ -2578,13 +2710,13 @@
 #else
     if (!qualifier.flat) {
 #endif
-        if (publicType.basicType == EbtInt    || publicType.basicType == EbtUint   ||
-#ifdef AMD_EXTENSIONS
-            publicType.basicType == EbtInt16  || publicType.basicType == EbtUint16 ||
-#endif
-            publicType.basicType == EbtInt64  || publicType.basicType == EbtUint64 ||
+        if (isTypeInt(publicType.basicType) ||
             publicType.basicType == EbtDouble ||
-            (publicType.userDef && (publicType.userDef->containsBasicType(EbtInt)    ||
+            (publicType.userDef && (publicType.userDef->containsBasicType(EbtInt8)   ||
+                                    publicType.userDef->containsBasicType(EbtUint8)  ||
+                                    publicType.userDef->containsBasicType(EbtInt16)  ||
+                                    publicType.userDef->containsBasicType(EbtUint16) ||
+                                    publicType.userDef->containsBasicType(EbtInt)    ||
                                     publicType.userDef->containsBasicType(EbtUint)   ||
                                     publicType.userDef->containsBasicType(EbtInt64)  ||
                                     publicType.userDef->containsBasicType(EbtUint64) ||
@@ -2686,8 +2818,8 @@
                 error(loc, "can't use auxiliary qualifier on a fragment output", "centroid/sample/patch", "");
             if (qualifier.isInterpolation())
                 error(loc, "can't use interpolation qualifier on a fragment output", "flat/smooth/noperspective", "");
-            if (publicType.basicType == EbtDouble)
-                error(loc, "cannot contain a double", GetStorageQualifierString(qualifier.storage), "");
+            if (publicType.basicType == EbtDouble || publicType.basicType == EbtInt64 || publicType.basicType == EbtUint64)
+                error(loc, "cannot contain a double, int64, or uint64", GetStorageQualifierString(qualifier.storage), "");
         break;
 
         case EShLangCompute:
@@ -2788,6 +2920,7 @@
     MERGE_SINGLETON(readonly);
     MERGE_SINGLETON(writeonly);
     MERGE_SINGLETON(specConstant);
+    MERGE_SINGLETON(nonUniform);
 
     if (repeated)
         error(loc, "replicated qualifiers", "", "");
@@ -2988,7 +3121,7 @@
 //
 void TParseContext::arraySizeRequiredCheck(const TSourceLoc& loc, const TArraySizes& arraySizes)
 {
-    if (arraySizes.isImplicit())
+    if (arraySizes.hasUnsized())
         error(loc, "array size required", "", "");
 }
 
@@ -3002,7 +3135,7 @@
     }
 }
 
-void TParseContext::arraySizesCheck(const TSourceLoc& loc, const TQualifier& qualifier, const TArraySizes* arraySizes, bool initializer, bool lastMember)
+void TParseContext::arraySizesCheck(const TSourceLoc& loc, const TQualifier& qualifier, TArraySizes* arraySizes, bool initializer, bool lastMember)
 {
     assert(arraySizes);
 
@@ -3015,8 +3148,10 @@
         return;
 
     // No environment allows any non-outer-dimension to be implicitly sized
-    if (arraySizes->isInnerImplicit())
+    if (arraySizes->isInnerUnsized()) {
         error(loc, "only outermost dimension of an array of arrays can be implicitly sized", "[]", "");
+        arraySizes->clearInnerUnsized();
+    }
 
     if (arraySizes->isInnerSpecialization())
         error(loc, "only outermost dimension of an array of arrays can be a specialization constant", "[]", "");
@@ -3061,8 +3196,11 @@
     arraySizeRequiredCheck(loc, *arraySizes);
 }
 
-void TParseContext::arrayOfArrayVersionCheck(const TSourceLoc& loc)
+void TParseContext::arrayOfArrayVersionCheck(const TSourceLoc& loc, const TArraySizes* sizes)
 {
+    if (sizes == nullptr || sizes->getNumDims() == 1)
+        return;
+
     const char* feature = "arrays of arrays";
 
     requireProfile(loc, EEsProfile | ECoreProfile | ECompatibilityProfile, feature);
@@ -3070,36 +3208,6 @@
     profileRequires(loc, ECoreProfile | ECompatibilityProfile, 430, nullptr, feature);
 }
 
-void TParseContext::arrayDimCheck(const TSourceLoc& loc, const TArraySizes* sizes1, const TArraySizes* sizes2)
-{
-    if ((sizes1 && sizes2) ||
-        (sizes1 && sizes1->getNumDims() > 1) ||
-        (sizes2 && sizes2->getNumDims() > 1))
-        arrayOfArrayVersionCheck(loc);
-}
-
-void TParseContext::arrayDimCheck(const TSourceLoc& loc, const TType* type, const TArraySizes* sizes2)
-{
-    // skip checking for multiple dimensions on the type; it was caught earlier
-    if ((type && type->isArray() && sizes2) ||
-        (sizes2 && sizes2->getNumDims() > 1))
-        arrayOfArrayVersionCheck(loc);
-}
-
-// Merge array dimensions listed in 'sizes' onto the type's array dimensions.
-//
-// From the spec: "vec4[2] a[3]; // size-3 array of size-2 array of vec4"
-//
-// That means, the 'sizes' go in front of the 'type' as outermost sizes.
-// 'type' is the type part of the declaration (to the left)
-// 'sizes' is the arrayness tagged on the identifier (to the right)
-//
-void TParseContext::arrayDimMerge(TType& type, const TArraySizes* sizes)
-{
-    if (sizes)
-        type.addArrayOuterSizes(*sizes);
-}
-
 //
 // Do all the semantic checking for declaring or redeclaring an array, with and
 // without a size, and make the right changes to the symbol table.
@@ -3169,7 +3277,7 @@
         return;
     }
 
-    if (existingType.isExplicitlySizedArray()) {
+    if (existingType.isSizedArray()) {
         // be more leniant for input arrays to geometry shaders and tessellation control outputs, where the redeclaration is the same size
         if (! (isIoResizeArray(type) && existingType.getOuterArraySize() == type.getOuterArraySize()))
             error(loc, "redeclaration of array with size", identifier.c_str(), "");
@@ -3184,64 +3292,37 @@
         checkIoArraysConsistency(loc);
 }
 
-void TParseContext::updateImplicitArraySize(const TSourceLoc& loc, TIntermNode *node, int index)
+// Policy and error check for needing a runtime sized array.
+void TParseContext::checkRuntimeSizable(const TSourceLoc& loc, const TIntermTyped& base)
 {
-    // maybe there is nothing to do...
-    TIntermTyped* typedNode = node->getAsTyped();
-    if (typedNode->getType().getImplicitArraySize() > index)
+    // runtime length implies runtime sizeable, so no problem
+    if (isRuntimeLength(base))
         return;
 
-    // something to do...
-
-    // Figure out what symbol to lookup, as we will use its type to edit for the size change,
-    // as that type will be shared through shallow copies for future references.
-    TSymbol* symbol = nullptr;
-    int blockIndex = -1;
-    const TString* lookupName = nullptr;
-    if (node->getAsSymbolNode())
-        lookupName = &node->getAsSymbolNode()->getName();
-    else if (node->getAsBinaryNode()) {
-        const TIntermBinary* deref = node->getAsBinaryNode();
-        // This has to be the result of a block dereference, unless it's bad shader code
-        // If it's a uniform block, then an error will be issued elsewhere, but
-        // return early now to avoid crashing later in this function.
-        if (deref->getLeft()->getBasicType() != EbtBlock ||
-            deref->getLeft()->getType().getQualifier().storage == EvqUniform ||
-            deref->getRight()->getAsConstantUnion() == nullptr)
-            return;
-
-        const TIntermTyped* left  = deref->getLeft();
-        const TIntermTyped* right = deref->getRight();
-
-        if (left->getAsBinaryNode()) {
-            left = left->getAsBinaryNode()->getLeft(); // Block array access
-            assert(left->isArray());
-        }
-
-        if (! left->getAsSymbolNode())
-            return;
-
-        blockIndex = right->getAsConstantUnion()->getConstArray()[0].getIConst();
-
-        lookupName = &left->getAsSymbolNode()->getName();
-        if (IsAnonymous(*lookupName))
-            lookupName = &(*left->getType().getStruct())[blockIndex].type->getFieldName();
-    }
-
-    // Lookup the symbol, should only fail if shader code is incorrect
-    symbol = symbolTable.find(*lookupName);
-    if (symbol == nullptr)
-        return;
-
-    if (symbol->getAsFunction()) {
-        error(loc, "array variable name expected", symbol->getName().c_str(), "");
-        return;
-    }
-
-    if (symbol->getType().isStruct() && blockIndex != -1)
-        (*symbol->getWritableType().getStruct())[blockIndex].type->setImplicitArraySize(index + 1);
+    // check for additional things allowed by GL_EXT_nonuniform_qualifier
+    if (base.getBasicType() == EbtSampler ||
+            (base.getBasicType() == EbtBlock && base.getType().getQualifier().isUniformOrBuffer()))
+        requireExtensions(loc, 1, &E_GL_EXT_nonuniform_qualifier, "variable index");
     else
-        symbol->getWritableType().setImplicitArraySize(index + 1);
+        error(loc, "", "[", "array must be redeclared with a size before being indexed with a variable");
+}
+
+// Policy decision for whether a run-time .length() is allowed.
+bool TParseContext::isRuntimeLength(const TIntermTyped& base) const
+{
+    if (base.getType().getQualifier().storage == EvqBuffer) {
+        // in a buffer block
+        const TIntermBinary* binary = base.getAsBinaryNode();
+        if (binary != nullptr && binary->getOp() == EOpIndexDirectStruct) {
+            // is it the last member?
+            const int index = binary->getRight()->getAsConstantUnion()->getConstArray()[0].getIConst();
+            const int memberCount = (int)binary->getLeft()->getType().getStruct()->size();
+            if (index == memberCount - 1)
+                return true;
+        }
+    }
+
+    return false;
 }
 
 // Returns true if the first argument to the #line directive is the line number for the next line.
@@ -3476,17 +3557,25 @@
         return;
     }
 
+    // Fix XFB stuff up, it applies to the order of the redeclaration, not
+    // the order of the original members.
+    if (currentBlockQualifier.storage == EvqVaryingOut && globalOutputDefaults.hasXfbBuffer()) {
+        if (!currentBlockQualifier.hasXfbBuffer())
+            currentBlockQualifier.layoutXfbBuffer = globalOutputDefaults.layoutXfbBuffer;
+        fixBlockXfbOffsets(currentBlockQualifier, newTypeList);
+    }
+
     // Edit and error check the container against the redeclaration
     //  - remove unused members
     //  - ensure remaining qualifiers/types match
+
     TType& type = block->getWritableType();
 
 #ifdef NV_EXTENSIONS
     // if gl_PerVertex is redeclared for the purpose of passing through "gl_Position"
-    // for passthrough purpose, the redclared block should have the same qualifers as
+    // for passthrough purpose, the redeclared block should have the same qualifers as
     // the current one
-    if (currentBlockQualifier.layoutPassthrough)
-    {
+    if (currentBlockQualifier.layoutPassthrough) {
         type.getQualifier().layoutPassthrough = currentBlockQualifier.layoutPassthrough;
         type.getQualifier().storage = currentBlockQualifier.storage;
         type.getQualifier().layoutStream = currentBlockQualifier.layoutStream;
@@ -3521,16 +3610,19 @@
                 error(memberLoc, "cannot redeclare block member with a different type", member->type->getFieldName().c_str(), "");
             if (oldType.isArray() != newType.isArray())
                 error(memberLoc, "cannot change arrayness of redeclared block member", member->type->getFieldName().c_str(), "");
-            else if (! oldType.sameArrayness(newType) && oldType.isExplicitlySizedArray())
+            else if (! oldType.sameArrayness(newType) && oldType.isSizedArray())
                 error(memberLoc, "cannot change array size of redeclared block member", member->type->getFieldName().c_str(), "");
             else if (newType.isArray())
                 arrayLimitCheck(loc, member->type->getFieldName(), newType.getOuterArraySize());
             if (newType.getQualifier().isMemory())
                 error(memberLoc, "cannot add memory qualifier to redeclared block member", member->type->getFieldName().c_str(), "");
-            if (newType.getQualifier().hasLayout())
-                error(memberLoc, "cannot add layout to redeclared block member", member->type->getFieldName().c_str(), "");
+            if (newType.getQualifier().hasNonXfbLayout())
+                error(memberLoc, "cannot add non-XFB layout to redeclared block member", member->type->getFieldName().c_str(), "");
             if (newType.getQualifier().patch)
                 error(memberLoc, "cannot add patch to redeclared block member", member->type->getFieldName().c_str(), "");
+            if (newType.getQualifier().hasXfbBuffer() &&
+                newType.getQualifier().layoutXfbBuffer != currentBlockQualifier.layoutXfbBuffer)
+                error(memberLoc, "member cannot contradict block (or what block inherited from global)", "xfb_buffer", "");
             oldType.getQualifier().centroid = newType.getQualifier().centroid;
             oldType.getQualifier().sample = newType.getQualifier().sample;
             oldType.getQualifier().invariant = newType.getQualifier().invariant;
@@ -3538,10 +3630,21 @@
             oldType.getQualifier().smooth = newType.getQualifier().smooth;
             oldType.getQualifier().flat = newType.getQualifier().flat;
             oldType.getQualifier().nopersp = newType.getQualifier().nopersp;
-
-            if (oldType.isImplicitlySizedArray() && newType.isExplicitlySizedArray())
+            oldType.getQualifier().layoutXfbOffset = newType.getQualifier().layoutXfbOffset;
+            oldType.getQualifier().layoutXfbBuffer = newType.getQualifier().layoutXfbBuffer;
+            oldType.getQualifier().layoutXfbStride = newType.getQualifier().layoutXfbStride;
+            if (oldType.getQualifier().layoutXfbOffset != TQualifier::layoutXfbBufferEnd) {
+                // if any member as an xfb_offset, then the block's xfb_buffer inherents current xfb_buffer,
+                // and for xfb processing, the member needs it as well, along with xfb_stride
+                type.getQualifier().layoutXfbBuffer = currentBlockQualifier.layoutXfbBuffer;
+                oldType.getQualifier().layoutXfbBuffer = currentBlockQualifier.layoutXfbBuffer;
+            }
+            if (oldType.isUnsizedArray() && newType.isSizedArray())
                 oldType.changeOuterArraySize(newType.getOuterArraySize());
 
+            //  check and process the member's type, which will include managing xfb information
+            layoutTypeCheck(loc, oldType);
+
             // go to next member
             ++member;
         } else {
@@ -3562,11 +3665,11 @@
     if (type.isArray() != (arraySizes != nullptr))
         error(loc, "cannot change arrayness of redeclared block", blockName.c_str(), "");
     else if (type.isArray()) {
-        if (type.isExplicitlySizedArray() && arraySizes->getOuterSize() == UnsizedArraySize)
-            error(loc, "block already declared with size, can't redeclare as implicitly-sized", blockName.c_str(), "");
-        else if (type.isExplicitlySizedArray() && type.getArraySizes() != *arraySizes)
+        if (type.isSizedArray() && !arraySizes->isSized())
+            error(loc, "block already declared with size, can't redeclare as unsized", blockName.c_str(), "");
+        else if (type.isSizedArray() && *type.getArraySizes() != *arraySizes)
             error(loc, "cannot change array size of redeclared block", blockName.c_str(), "");
-        else if (type.isImplicitlySizedArray() && arraySizes->getOuterSize() != UnsizedArraySize)
+        else if (!type.isSizedArray() && arraySizes->isSized())
             type.changeOuterArraySize(arraySizes->getOuterSize());
     }
 
@@ -3586,7 +3689,7 @@
     trackLinkage(*block);
 }
 
-void TParseContext::paramCheckFix(const TSourceLoc& loc, const TStorageQualifier& qualifier, TType& type)
+void TParseContext::paramCheckFixStorage(const TSourceLoc& loc, const TStorageQualifier& qualifier, TType& type)
 {
     switch (qualifier) {
     case EvqConst:
@@ -3632,8 +3735,10 @@
         else
             warn(loc, "qualifier has no effect on non-output parameters", "precise", "");
     }
+    if (qualifier.isNonUniform())
+        type.getQualifier().nonUniform = qualifier.nonUniform;
 
-    paramCheckFix(loc, qualifier.storage, type);
+    paramCheckFixStorage(loc, qualifier.storage, type);
 }
 
 void TParseContext::nestedBlockCheck(const TSourceLoc& loc)
@@ -3872,6 +3977,28 @@
     default:
         break;
     }
+
+#ifdef NV_EXTENSIONS
+    // Set default outputs for GL_NV_geometry_shader_passthrough
+    if (language == EShLangGeometry && extensionTurnedOn(E_SPV_NV_geometry_shader_passthrough)) {
+        if (intermediate.getOutputPrimitive() == ElgNone) {
+            switch (intermediate.getInputPrimitive()) {
+            case ElgPoints:      intermediate.setOutputPrimitive(ElgPoints);    break;
+            case ElgLines:       intermediate.setOutputPrimitive(ElgLineStrip); break;
+            case ElgTriangles:   intermediate.setOutputPrimitive(ElgTriangles); break;
+            default: break;
+            }
+        }
+        if (intermediate.getVertices() == TQualifier::layoutNotSet) {
+            switch (intermediate.getInputPrimitive()) {
+            case ElgPoints:      intermediate.setVertices(1); break;
+            case ElgLines:       intermediate.setVertices(2); break;
+            case ElgTriangles:   intermediate.setVertices(3); break;
+            default: break;
+            }
+        }
+    }
+#endif
 }
 
 //
@@ -4505,7 +4632,8 @@
 // they are not allowed on block members.  For arrayed interfaces (those generally having an
 // extra level of arrayness due to interface expansion), the outer array is stripped before
 // applying this rule."
-void TParseContext::layoutMemberLocationArrayCheck(const TSourceLoc& loc, bool memberWithLocation, TArraySizes* arraySizes)
+void TParseContext::layoutMemberLocationArrayCheck(const TSourceLoc& loc, bool memberWithLocation,
+    TArraySizes* arraySizes)
 {
     if (memberWithLocation && arraySizes != nullptr) {
         if (arraySizes->getNumDims() > (currentBlockQualifier.isArrayedIo(language) ? 1 : 0))
@@ -4554,6 +4682,8 @@
             break;
         case EvqUniform:
         case EvqBuffer:
+            if (type.getBasicType() == EbtBlock)
+                error(loc, "cannot apply to uniform or buffer block", "location", "");
             break;
         default:
             error(loc, "can only apply to uniform, buffer, in, or out storage qualifiers", "location", "");
@@ -4580,11 +4710,9 @@
         // containing a double, the offset must also be a multiple of 8..."
         if (type.containsBasicType(EbtDouble) && ! IsMultipleOfPow2(qualifier.layoutXfbOffset, 8))
             error(loc, "type contains double; xfb_offset must be a multiple of 8", "xfb_offset", "");
-#ifdef AMD_EXTENSIONS
         // ..., if applied to an aggregate containing a float16_t, the offset must also be a multiple of 2..."
         else if (type.containsBasicType(EbtFloat16) && !IsMultipleOfPow2(qualifier.layoutXfbOffset, 2))
             error(loc, "type contains half float; xfb_offset must be a multiple of 2", "xfb_offset", "");
-#endif
         else if (! IsMultipleOfPow2(qualifier.layoutXfbOffset, 4))
             error(loc, "must be a multiple of size of first component", "xfb_offset", "");
     }
@@ -4608,13 +4736,19 @@
         if (type.getBasicType() == EbtSampler) {
             int lastBinding = qualifier.layoutBinding;
             if (type.isArray()) {
-                if (type.isImplicitlySizedArray()) {
+                if (spvVersion.vulkan > 0)
                     lastBinding += 1;
-                    warn(loc, "assuming array size of one for compile-time checking of binding numbers for implicitly-sized array", "[]", "");
-                } else
-                    lastBinding += type.getCumulativeArraySize();
+                else {
+                    if (type.isSizedArray())
+                        lastBinding += type.getCumulativeArraySize();
+                    else {
+                        lastBinding += 1;
+                        if (spvVersion.vulkan == 0)
+                            warn(loc, "assuming binding count of one for compile-time checking of binding numbers for unsized array", "[]", "");
+                    }
+                }
             }
-            if (lastBinding >= resources.maxCombinedTextureImageUnits)
+            if (spvVersion.vulkan == 0 && lastBinding >= resources.maxCombinedTextureImageUnits)
                 error(loc, "sampler binding not less than gl_MaxCombinedTextureImageUnits", "binding", type.isArray() ? "(using array)" : "");
         }
         if (type.getBasicType() == EbtAtomicUint) {
@@ -4623,12 +4757,23 @@
                 return;
             }
         }
-    }
+    } else if (!intermediate.getAutoMapBindings()) {
+        // some types require bindings
 
-    // atomic_uint
-    if (type.getBasicType() == EbtAtomicUint) {
-        if (! type.getQualifier().hasBinding())
+        // atomic_uint
+        if (type.getBasicType() == EbtAtomicUint)
             error(loc, "layout(binding=X) is required", "atomic_uint", "");
+
+        // SPIR-V
+        if (spvVersion.spv > 0) {
+            if (qualifier.isUniformOrBuffer()) {
+                if (type.getBasicType() == EbtBlock && !qualifier.layoutPushConstant &&
+                                                       !qualifier.layoutAttachment)
+                    error(loc, "uniform/buffer blocks require layout(binding=X)", "binding", "");
+                else if (spvVersion.vulkan > 0 && type.getBasicType() == EbtSampler)
+                    error(loc, "sampler/texture/image requires layout(binding=X)", "binding", "");
+            }
+        }
     }
 
     // "The offset qualifier can only be used on block members of blocks..."
@@ -4684,20 +4829,18 @@
             error(loc, "can only be applied to a scalar", "constant_id", "");
         switch (type.getBasicType())
         {
+        case EbtInt8:
+        case EbtUint8:
+        case EbtInt16:
+        case EbtUint16:
         case EbtInt:
         case EbtUint:
         case EbtInt64:
         case EbtUint64:
-#ifdef AMD_EXTENSIONS
-        case EbtInt16:
-        case EbtUint16:
-#endif
         case EbtBool:
         case EbtFloat:
         case EbtDouble:
-#ifdef AMD_EXTENSIONS
         case EbtFloat16:
-#endif
             break;
         default:
             error(loc, "cannot be applied to this type", "constant_id", "");
@@ -4783,11 +4926,11 @@
             error(loc, "requires uniform or buffer storage qualifier", "binding", "");
     }
     if (qualifier.hasStream()) {
-        if (qualifier.storage != EvqVaryingOut)
+        if (!qualifier.isPipeOutput())
             error(loc, "can only be used on an output", "stream", "");
     }
     if (qualifier.hasXfb()) {
-        if (qualifier.storage != EvqVaryingOut)
+        if (!qualifier.isPipeOutput())
             error(loc, "can only be used on an output", "xfb layout qualifier", "");
     }
     if (qualifier.hasUniformLayout()) {
@@ -4863,7 +5006,7 @@
             // Check for overlap
             int numOffsets = 4;
             if (symbol.getType().isArray()) {
-                if (symbol.getType().isExplicitlySizedArray() && ! symbol.getType().getArraySizes()->isInnerImplicit())
+                if (symbol.getType().isSizedArray() && !symbol.getType().getArraySizes()->isInnerUnsized())
                     numOffsets *= symbol.getType().getCumulativeArraySize();
                 else {
                     // "It is a compile-time error to declare an unsized array of atomic_uint."
@@ -4894,10 +5037,21 @@
         return nullptr;
     }
 
+    bool explicitTypesEnabled = extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types) ||
+                                extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types_int8) ||
+                                extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types_int16) ||
+                                extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types_int32) ||
+                                extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types_int64) ||
+                                extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types_float16) ||
+                                extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types_float32) ||
+                                extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types_float64);
+
     if (profile == EEsProfile || version < 120)
         function = findFunctionExact(loc, call, builtIn);
     else if (version < 400)
         function = findFunction120(loc, call, builtIn);
+    else if (explicitTypesEnabled)
+        function = findFunctionExplicitTypes(loc, call, builtIn);
     else
         function = findFunction400(loc, call, builtIn);
 
@@ -5082,6 +5236,85 @@
     return bestMatch;
 }
 
+// "To determine whether the conversion for a single argument in one match
+//  is better than that for another match, the conversion is assigned of the
+//  three ranks ordered from best to worst:
+//   1. Exact match: no conversion.
+//    2. Promotion: integral or floating-point promotion.
+//    3. Conversion: integral conversion, floating-point conversion,
+//       floating-integral conversion.
+//  A conversion C1 is better than a conversion C2 if the rank of C1 is
+//  better than the rank of C2."
+const TFunction* TParseContext::findFunctionExplicitTypes(const TSourceLoc& loc, const TFunction& call, bool& builtIn)
+{
+    // first, look for an exact match
+    TSymbol* symbol = symbolTable.find(call.getMangledName(), &builtIn);
+    if (symbol)
+        return symbol->getAsFunction();
+
+    // no exact match, use the generic selector, parameterized by the GLSL rules
+
+    // create list of candidates to send
+    TVector<const TFunction*> candidateList;
+    symbolTable.findFunctionNameList(call.getMangledName(), candidateList, builtIn);
+
+    // can 'from' convert to 'to'?
+    const auto convertible = [this](const TType& from, const TType& to, TOperator, int) -> bool {
+        if (from == to)
+            return true;
+        if (from.isArray() || to.isArray() || ! from.sameElementShape(to))
+            return false;
+        return intermediate.canImplicitlyPromote(from.getBasicType(), to.getBasicType());
+    };
+
+    // Is 'to2' a better conversion than 'to1'?
+    // Ties should not be considered as better.
+    // Assumes 'convertible' already said true.
+    const auto better = [this](const TType& from, const TType& to1, const TType& to2) -> bool {
+        // 1. exact match
+        if (from == to2)
+            return from != to1;
+        if (from == to1)
+            return false;
+
+        // 2. Promotion (integral, floating-point) is better
+        TBasicType from_type = from.getBasicType();
+        TBasicType to1_type = to1.getBasicType();
+        TBasicType to2_type = to2.getBasicType();
+        bool isPromotion1 = (intermediate.isIntegralPromotion(from_type, to1_type) ||
+                             intermediate.isFPPromotion(from_type, to1_type));
+        bool isPromotion2 = (intermediate.isIntegralPromotion(from_type, to2_type) ||
+                             intermediate.isFPPromotion(from_type, to2_type));
+        if (isPromotion2)
+            return !isPromotion1;
+        if(isPromotion1)
+            return false;
+
+        // 3. Conversion (integral, floating-point , floating-integral)
+        bool isConversion1 = (intermediate.isIntegralConversion(from_type, to1_type) ||
+                              intermediate.isFPConversion(from_type, to1_type) ||
+                              intermediate.isFPIntegralConversion(from_type, to1_type));
+        bool isConversion2 = (intermediate.isIntegralConversion(from_type, to2_type) ||
+                              intermediate.isFPConversion(from_type, to2_type) ||
+                              intermediate.isFPIntegralConversion(from_type, to2_type));
+
+        return isConversion2 && !isConversion1;
+    };
+
+    // for ambiguity reporting
+    bool tie = false;
+
+    // send to the generic selector
+    const TFunction* bestMatch = selectFunction(candidateList, call, convertible, better, tie);
+
+    if (bestMatch == nullptr)
+        error(loc, "no matching overloaded function found", call.getName().c_str(), "");
+    else if (tie)
+        error(loc, "ambiguous best function under implicit type conversion", call.getName().c_str(), "");
+
+    return bestMatch;
+}
+
 // When a declaration includes a type, but not a variable name, it can be
 // to establish defaults.
 void TParseContext::declareTypeDefaults(const TSourceLoc& loc, const TPublicType& publicType)
@@ -5110,15 +5343,15 @@
 // 'publicType' is the type part of the declaration (to the left)
 // 'arraySizes' is the arrayness tagged on the identifier (to the right)
 //
-TIntermNode* TParseContext::declareVariable(const TSourceLoc& loc, TString& identifier, const TPublicType& publicType, TArraySizes* arraySizes, TIntermTyped* initializer)
+TIntermNode* TParseContext::declareVariable(const TSourceLoc& loc, TString& identifier, const TPublicType& publicType,
+    TArraySizes* arraySizes, TIntermTyped* initializer)
 {
-    TType type(publicType);  // shallow copy; 'type' shares the arrayness and structure definition with 'publicType'
-    if (type.isImplicitlySizedArray()) {
-        // Because "int[] a = int[2](...), b = int[3](...)" makes two arrays a and b
-        // of different sizes, for this case sharing the shallow copy of arrayness
-        // with the publicType oversubscribes it, so get a deep copy of the arrayness.
-        type.newArraySizes(*publicType.arraySizes);
-    }
+    // Make a fresh type that combines the characteristics from the individual
+    // identifier syntax and the declaration-type syntax.
+    TType type(publicType);
+    type.transferArraySizes(arraySizes);
+    type.copyArrayInnerSizes(publicType.arraySizes);
+    arrayOfArrayVersionCheck(loc, type.getArraySizes());
 
     if (voidErrorCheck(loc, identifier, type.getBasicType()))
         return nullptr;
@@ -5145,15 +5378,9 @@
     inheritGlobalDefaults(type.getQualifier());
 
     // Declare the variable
-    if (arraySizes || type.isArray()) {
-        // Arrayness is potentially coming both from the type and from the
-        // variable: "int[] a[];" or just one or the other.
-        // Merge it all to the type, so all arrayness is part of the type.
-        arrayDimCheck(loc, &type, arraySizes);
-        arrayDimMerge(type, arraySizes);
-
+    if (type.isArray()) {
         // Check that implicit sizing is only where allowed.
-        arraySizesCheck(loc, type.getQualifier(), &type.getArraySizes(), initializer != nullptr, false);
+        arraySizesCheck(loc, type.getQualifier(), type.getArraySizes(), initializer != nullptr, false);
 
         if (! arrayQualifierError(loc, type.getQualifier()) && ! arrayError(loc, type))
             declareArray(loc, identifier, type, symbol);
@@ -5284,8 +5511,7 @@
     }
 
     // Fix outer arrayness if variable is unsized, getting size from the initializer
-    if (initializer->getType().isExplicitlySizedArray() &&
-        variable->getType().isImplicitlySizedArray())
+    if (initializer->getType().isSizedArray() && variable->getType().isUnsizedArray())
         variable->getWritableType().changeOuterArraySize(initializer->getType().getOuterArraySize());
 
     // Inner arrayness can also get set by an initializer
@@ -5294,8 +5520,10 @@
            variable->getType().getArraySizes()->getNumDims()) {
         // adopt unsized sizes from the initializer's sizes
         for (int d = 1; d < variable->getType().getArraySizes()->getNumDims(); ++d) {
-            if (variable->getType().getArraySizes()->getDimSize(d) == UnsizedArraySize)
-                variable->getWritableType().getArraySizes().setDimSize(d, initializer->getType().getArraySizes()->getDimSize(d));
+            if (variable->getType().getArraySizes()->getDimSize(d) == UnsizedArraySize) {
+                variable->getWritableType().getArraySizes()->setDimSize(d,
+                    initializer->getType().getArraySizes()->getDimSize(d));
+            }
         }
     }
 
@@ -5406,16 +5634,16 @@
         // Later on, initializer execution code will deal with array size logic.
         TType arrayType;
         arrayType.shallowCopy(type);                     // sharing struct stuff is fine
-        arrayType.newArraySizes(*type.getArraySizes());  // but get a fresh copy of the array information, to edit below
+        arrayType.copyArraySizes(*type.getArraySizes());  // but get a fresh copy of the array information, to edit below
 
         // edit array sizes to fill in unsized dimensions
         arrayType.changeOuterArraySize((int)initList->getSequence().size());
         TIntermTyped* firstInit = initList->getSequence()[0]->getAsTyped();
         if (arrayType.isArrayOfArrays() && firstInit->getType().isArray() &&
-            arrayType.getArraySizes().getNumDims() == firstInit->getType().getArraySizes()->getNumDims() + 1) {
-            for (int d = 1; d < arrayType.getArraySizes().getNumDims(); ++d) {
-                if (arrayType.getArraySizes().getDimSize(d) == UnsizedArraySize)
-                    arrayType.getArraySizes().setDimSize(d, firstInit->getType().getArraySizes()->getDimSize(d - 1));
+            arrayType.getArraySizes()->getNumDims() == firstInit->getType().getArraySizes()->getNumDims() + 1) {
+            for (int d = 1; d < arrayType.getArraySizes()->getNumDims(); ++d) {
+                if (arrayType.getArraySizes()->getDimSize(d) == UnsizedArraySize)
+                    arrayType.getArraySizes()->setDimSize(d, firstInit->getType().getArraySizes()->getDimSize(d - 1));
             }
         }
 
@@ -5565,8 +5793,22 @@
 //
 // Returns nullptr for an error or the constructed node.
 //
-TIntermTyped* TParseContext::constructBuiltIn(const TType& type, TOperator op, TIntermTyped* node, const TSourceLoc& loc, bool subset)
+TIntermTyped* TParseContext::constructBuiltIn(const TType& type, TOperator op, TIntermTyped* node, const TSourceLoc& loc,
+    bool subset)
 {
+    // If we are changing a matrix in both domain of basic type and to a non matrix,
+    // do the shape change first (by default, below, basic type is changed before shape).
+    // This avoids requesting a matrix of a new type that is going to be discarded anyway.
+    // TODO: This could be generalized to more type combinations, but that would require
+    // more extensive testing and full algorithm rework. For now, the need to do two changes makes
+    // the recursive call work, and avoids the most aggregious case of creating integer matrices.
+    if (node->getType().isMatrix() && (type.isScalar() || type.isVector()) &&
+            type.isFloatingDomain() != node->getType().isFloatingDomain()) {
+        TType transitionType(node->getBasicType(), glslang::EvqTemporary, type.getVectorSize(), 0, 0, node->isVector());
+        TOperator transitionOp = intermediate.mapTypeToConstructorOp(transitionType);
+        node = constructBuiltIn(transitionType, transitionOp, node, loc, false);
+    }
+
     TIntermTyped* newNode;
     TOperator basicOp;
 
@@ -5606,7 +5848,6 @@
         basicOp = EOpConstructDouble;
         break;
 
-#ifdef AMD_EXTENSIONS
     case EOpConstructF16Vec2:
     case EOpConstructF16Vec3:
     case EOpConstructF16Vec4:
@@ -5622,7 +5863,34 @@
     case EOpConstructFloat16:
         basicOp = EOpConstructFloat16;
         break;
-#endif
+
+    case EOpConstructI8Vec2:
+    case EOpConstructI8Vec3:
+    case EOpConstructI8Vec4:
+    case EOpConstructInt8:
+        basicOp = EOpConstructInt8;
+        break;
+
+    case EOpConstructU8Vec2:
+    case EOpConstructU8Vec3:
+    case EOpConstructU8Vec4:
+    case EOpConstructUint8:
+        basicOp = EOpConstructUint8;
+        break;
+
+    case EOpConstructI16Vec2:
+    case EOpConstructI16Vec3:
+    case EOpConstructI16Vec4:
+    case EOpConstructInt16:
+        basicOp = EOpConstructInt16;
+        break;
+
+    case EOpConstructU16Vec2:
+    case EOpConstructU16Vec3:
+    case EOpConstructU16Vec4:
+    case EOpConstructUint16:
+        basicOp = EOpConstructUint16;
+        break;
 
     case EOpConstructIVec2:
     case EOpConstructIVec3:
@@ -5652,22 +5920,6 @@
         basicOp = EOpConstructUint64;
         break;
 
-#ifdef AMD_EXTENSIONS
-    case EOpConstructI16Vec2:
-    case EOpConstructI16Vec3:
-    case EOpConstructI16Vec4:
-    case EOpConstructInt16:
-        basicOp = EOpConstructInt16;
-        break;
-
-    case EOpConstructU16Vec2:
-    case EOpConstructU16Vec3:
-    case EOpConstructU16Vec4:
-    case EOpConstructUint16:
-        basicOp = EOpConstructUint16;
-        break;
-#endif
-
     case EOpConstructBVec2:
     case EOpConstructBVec3:
     case EOpConstructBVec4:
@@ -5675,6 +5927,11 @@
         basicOp = EOpConstructBool;
         break;
 
+    case EOpConstructNonuniform:
+        node->getWritableType().getQualifier().nonUniform = true;
+        return node;
+        break;
+
     default:
         error(loc, "unsupported construction", "", "");
 
@@ -5719,13 +5976,14 @@
 //
 // Do everything needed to add an interface block.
 //
-void TParseContext::declareBlock(const TSourceLoc& loc, TTypeList& typeList, const TString* instanceName, TArraySizes* arraySizes)
+void TParseContext::declareBlock(const TSourceLoc& loc, TTypeList& typeList, const TString* instanceName,
+    TArraySizes* arraySizes)
 {
     blockStageIoCheck(loc, currentBlockQualifier);
     blockQualifierCheck(loc, currentBlockQualifier, instanceName != nullptr);
-    if (arraySizes) {
+    if (arraySizes != nullptr) {
         arraySizesCheck(loc, currentBlockQualifier, arraySizes, false, false);
-        arrayDimCheck(loc, arraySizes, 0);
+        arrayOfArrayVersionCheck(loc, arraySizes);
         if (arraySizes->getNumDims() > 1)
             requireProfile(loc, ~EEsProfile, "array-of-array of block");
     }
@@ -5742,7 +6000,7 @@
         if ((currentBlockQualifier.storage == EvqUniform || currentBlockQualifier.storage == EvqBuffer) && (memberQualifier.isInterpolation() || memberQualifier.isAuxiliary()))
             error(memberLoc, "member of uniform or buffer block cannot have an auxiliary or interpolation qualifier", memberType.getFieldName().c_str(), "");
         if (memberType.isArray())
-            arraySizesCheck(memberLoc, currentBlockQualifier, &memberType.getArraySizes(), false, member == typeList.size() - 1);
+            arraySizesCheck(memberLoc, currentBlockQualifier, memberType.getArraySizes(), false, member == typeList.size() - 1);
         if (memberQualifier.hasOffset()) {
             if (spvVersion.spv == 0) {
                 requireProfile(memberLoc, ~EEsProfile, "offset on block member");
@@ -5864,8 +6122,8 @@
     //
 
     TType blockType(&typeList, *blockName, currentBlockQualifier);
-    if (arraySizes)
-        blockType.newArraySizes(*arraySizes);
+    if (arraySizes != nullptr)
+        blockType.transferArraySizes(arraySizes);
     else
         ioArrayCheck(loc, blockType, instanceName ? *instanceName : *blockName);
 
@@ -6032,7 +6290,8 @@
                     memberQualifier.layoutLocation = nextLocation;
                     memberQualifier.layoutComponent = TQualifier::layoutComponentEnd;
                 }
-                nextLocation = memberQualifier.layoutLocation + intermediate.computeTypeLocationSize(*typeList[member].type);
+                nextLocation = memberQualifier.layoutLocation + intermediate.computeTypeLocationSize(
+                                    *typeList[member].type, language);
             }
         }
     }
diff --git a/glslang/MachineIndependent/ParseHelper.h b/glslang/MachineIndependent/ParseHelper.h
index 73b9798..21779c7 100644
--- a/glslang/MachineIndependent/ParseHelper.h
+++ b/glslang/MachineIndependent/ParseHelper.h
@@ -44,13 +44,15 @@
 #ifndef _PARSER_HELPER_INCLUDED_
 #define _PARSER_HELPER_INCLUDED_
 
+#include <cstdarg>
+#include <functional>
+
 #include "parseVersions.h"
 #include "../Include/ShHandle.h"
 #include "SymbolTable.h"
 #include "localintermediate.h"
 #include "Scan.h"
-#include <cstdarg>
-#include <functional>
+#include "attribute.h"
 
 namespace glslang {
 
@@ -185,7 +187,7 @@
     TParseContextBase& operator=(TParseContextBase&);
 
     const bool parsingBuiltins;       // true if parsing built-in symbols/functions
-    TVector<TSymbol*> linkageSymbols; // these need to be transferred to 'linkage', after all editing is done
+    TVector<TSymbol*> linkageSymbols; // will be transferred to 'linkage', after all editing is done, order preserving
     TScanContext* scanContext;
     TPpContext* ppContext;
     TBuiltInResource resources;
@@ -307,7 +309,7 @@
     TFunction* handleFunctionDeclarator(const TSourceLoc&, TFunction& function, bool prototype);
     TIntermAggregate* handleFunctionDefinition(const TSourceLoc&, TFunction&);
     TIntermTyped* handleFunctionCall(const TSourceLoc&, TFunction*, TIntermNode*);
-    TIntermTyped* handleBuiltInFunctionCall(TSourceLoc, TIntermNode& arguments, const TFunction& function);
+    TIntermTyped* handleBuiltInFunctionCall(TSourceLoc, TIntermNode* arguments, const TFunction& function);
     void computeBuiltinPrecisions(TIntermTyped&, const TFunction&);
     TIntermNode* handleReturnValue(const TSourceLoc&, TIntermTyped*);
     void checkLocation(const TSourceLoc&, TOperator);
@@ -338,17 +340,15 @@
     bool arrayError(const TSourceLoc&, const TType&);
     void arraySizeRequiredCheck(const TSourceLoc&, const TArraySizes&);
     void structArrayCheck(const TSourceLoc&, const TType& structure);
-    void arraySizesCheck(const TSourceLoc&, const TQualifier&, const TArraySizes*, bool initializer, bool lastMember);
-    void arrayOfArrayVersionCheck(const TSourceLoc&);
-    void arrayDimCheck(const TSourceLoc&, const TArraySizes* sizes1, const TArraySizes* sizes2);
-    void arrayDimCheck(const TSourceLoc&, const TType*, const TArraySizes*);
-    void arrayDimMerge(TType& type, const TArraySizes* sizes);
+    void arraySizesCheck(const TSourceLoc&, const TQualifier&, TArraySizes*, bool initializer, bool lastMember);
+    void arrayOfArrayVersionCheck(const TSourceLoc&, const TArraySizes*);
     bool voidErrorCheck(const TSourceLoc&, const TString&, TBasicType);
     void boolCheck(const TSourceLoc&, const TIntermTyped*);
     void boolCheck(const TSourceLoc&, const TPublicType&);
     void samplerCheck(const TSourceLoc&, const TType&, const TString& identifier, TIntermTyped* initializer);
     void atomicUintCheck(const TSourceLoc&, const TType&, const TString& identifier);
     void transparentOpaqueCheck(const TSourceLoc&, const TType&, const TString& identifier);
+    void memberQualifierCheck(glslang::TPublicType&);
     void globalQualifierFixCheck(const TSourceLoc&, TQualifier&);
     void globalQualifierTypeCheck(const TSourceLoc&, const TQualifier&, const TPublicType&);
     bool structQualifierErrorCheck(const TSourceLoc&, const TPublicType& pType);
@@ -361,7 +361,7 @@
     bool containsFieldWithBasicType(const TType& type ,TBasicType basicType);
     TSymbol* redeclareBuiltinVariable(const TSourceLoc&, const TString&, const TQualifier&, const TShaderQualifiers&);
     void redeclareBuiltinBlock(const TSourceLoc&, TTypeList& typeList, const TString& blockName, const TString* instanceName, TArraySizes* arraySizes);
-    void paramCheckFix(const TSourceLoc&, const TStorageQualifier&, TType& type);
+    void paramCheckFixStorage(const TSourceLoc&, const TStorageQualifier&, TType& type);
     void paramCheckFix(const TSourceLoc&, const TQualifier&, TType& type);
     void nestedBlockCheck(const TSourceLoc&);
     void nestedStructCheck(const TSourceLoc&);
@@ -390,6 +390,7 @@
     const TFunction* findFunctionExact(const TSourceLoc& loc, const TFunction& call, bool& builtIn);
     const TFunction* findFunction120(const TSourceLoc& loc, const TFunction& call, bool& builtIn);
     const TFunction* findFunction400(const TSourceLoc& loc, const TFunction& call, bool& builtIn);
+    const TFunction* findFunctionExplicitTypes(const TSourceLoc& loc, const TFunction& call, bool& builtIn);
     void declareTypeDefaults(const TSourceLoc&, const TPublicType&);
     TIntermNode* declareVariable(const TSourceLoc&, TString& identifier, const TPublicType&, TArraySizes* typeArray = 0, TIntermTyped* initializer = 0);
     TIntermTyped* addConstructor(const TSourceLoc&, TIntermNode*, const TType&);
@@ -408,7 +409,17 @@
     void wrapupSwitchSubsequence(TIntermAggregate* statements, TIntermNode* branchNode);
     TIntermNode* addSwitch(const TSourceLoc&, TIntermTyped* expression, TIntermAggregate* body);
 
-    void updateImplicitArraySize(const TSourceLoc&, TIntermNode*, int index);
+    TAttributeType attributeFromName(const TString& name) const;
+    TAttributes* makeAttributes(const TString& identifier) const;
+    TAttributes* makeAttributes(const TString& identifier, TIntermNode* node) const;
+    TAttributes* mergeAttributes(TAttributes*, TAttributes*) const;
+
+    // Determine selection control from attributes
+    void handleSelectionAttributes(const TAttributes& attributes, TIntermNode*);
+    void handleSwitchAttributes(const TAttributes& attributes, TIntermNode*);
+
+    // Determine loop control from attributes
+    void handleLoopAttributes(const TAttributes& attributes, TIntermNode*);
 
 protected:
     void nonInitConstCheck(const TSourceLoc&, TString& identifier, TType& type);
@@ -416,6 +427,8 @@
     TVariable* makeInternalVariable(const char* name, const TType&) const;
     TVariable* declareNonArray(const TSourceLoc&, const TString& identifier, const TType&);
     void declareArray(const TSourceLoc&, const TString& identifier, const TType&, TSymbol*&);
+    void checkRuntimeSizable(const TSourceLoc&, const TIntermTyped&);
+    bool isRuntimeLength(const TIntermTyped&) const;
     TIntermNode* executeInitializer(const TSourceLoc&, TIntermTyped* initializer, TVariable* variable);
     TIntermTyped* convertInitializerList(const TSourceLoc&, const TType&, TIntermTyped* initializer);
     void finish() override;
diff --git a/glslang/MachineIndependent/PoolAlloc.cpp b/glslang/MachineIndependent/PoolAlloc.cpp
index 4007c38..84c40f4 100644
--- a/glslang/MachineIndependent/PoolAlloc.cpp
+++ b/glslang/MachineIndependent/PoolAlloc.cpp
@@ -40,35 +40,22 @@
 
 namespace glslang {
 
+// Process-wide TLS index
 OS_TLSIndex PoolIndex;
 
-void InitializeMemoryPools()
+// Return the thread-specific current pool.
+TPoolAllocator& GetThreadPoolAllocator()
 {
-    TThreadMemoryPools* pools = static_cast<TThreadMemoryPools*>(OS_GetTLSValue(PoolIndex));
-    if (pools)
-        return;
-
-    TPoolAllocator *threadPoolAllocator = new TPoolAllocator();
-
-    TThreadMemoryPools* threadData = new TThreadMemoryPools();
-
-    threadData->threadPoolAllocator = threadPoolAllocator;
-
-    OS_SetTLSValue(PoolIndex, threadData);
+    return *static_cast<TPoolAllocator*>(OS_GetTLSValue(PoolIndex));
 }
 
-void FreeGlobalPools()
+// Set the thread-specific current pool.
+void SetThreadPoolAllocator(TPoolAllocator* poolAllocator)
 {
-    // Release the allocated memory for this thread.
-    TThreadMemoryPools* globalPools = static_cast<TThreadMemoryPools*>(OS_GetTLSValue(PoolIndex));
-    if (! globalPools)
-        return;
-
-    GetThreadPoolAllocator().popAll();
-    delete &GetThreadPoolAllocator();
-    delete globalPools;
+    OS_SetTLSValue(PoolIndex, poolAllocator);
 }
 
+// Process-wide set up of the TLS pool storage.
 bool InitializePoolIndex()
 {
     // Allocate a TLS index.
@@ -78,26 +65,6 @@
     return true;
 }
 
-void FreePoolIndex()
-{
-    // Release the TLS index.
-    OS_FreeTLSIndex(PoolIndex);
-}
-
-TPoolAllocator& GetThreadPoolAllocator()
-{
-    TThreadMemoryPools* threadData = static_cast<TThreadMemoryPools*>(OS_GetTLSValue(PoolIndex));
-
-    return *threadData->threadPoolAllocator;
-}
-
-void SetThreadPoolAllocator(TPoolAllocator& poolAllocator)
-{
-    TThreadMemoryPools* threadData = static_cast<TThreadMemoryPools*>(OS_GetTLSValue(PoolIndex));
-
-    threadData->threadPoolAllocator = &poolAllocator;
-}
-
 //
 // Implement the functionality of the TPoolAllocator class, which
 // is documented in PoolAlloc.h.
@@ -234,13 +201,16 @@
     currentPageOffset = stack.back().offset;
 
     while (inUseList != page) {
-        // invoke destructor to free allocation list
-        inUseList->~tHeader();
-
         tHeader* nextInUse = inUseList->nextPage;
-        if (inUseList->pageCount > 1)
+        size_t pageCount = inUseList->pageCount;
+
+        // This technically ends the lifetime of the header as C++ object,
+        // but we will still control the memory and reuse it.
+        inUseList->~tHeader(); // currently, just a debug allocation checker
+
+        if (pageCount > 1) {
             delete [] reinterpret_cast<char*>(inUseList);
-        else {
+        } else {
             inUseList->nextPage = freeList;
             freeList = inUseList;
         }
diff --git a/glslang/MachineIndependent/Scan.cpp b/glslang/MachineIndependent/Scan.cpp
index 68d1500..7232bae 100644
--- a/glslang/MachineIndependent/Scan.cpp
+++ b/glslang/MachineIndependent/Scan.cpp
@@ -1,6 +1,7 @@
 //
 // Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
 // Copyright (C) 2013 LunarG, Inc.
+// Copyright (C) 2017 ARM Limited.
 //
 // All rights reserved.
 //
@@ -45,6 +46,7 @@
 #include "../Include/Types.h"
 #include "SymbolTable.h"
 #include "ParseHelper.h"
+#include "attribute.h"
 #include "glslang_tab.cpp.h"
 #include "ScanContext.h"
 #include "Scan.h"
@@ -339,6 +341,7 @@
 
     (*KeywordMap)["const"] =                   CONST;
     (*KeywordMap)["uniform"] =                 UNIFORM;
+    (*KeywordMap)["nonuniformEXT"] =           NONUNIFORM;
     (*KeywordMap)["in"] =                      IN;
     (*KeywordMap)["out"] =                     OUT;
     (*KeywordMap)["inout"] =                   INOUT;
@@ -463,16 +466,34 @@
     (*KeywordMap)["u64vec3"] =                 U64VEC3;
     (*KeywordMap)["u64vec4"] =                 U64VEC4;
 
-#ifdef AMD_EXTENSIONS
+    // GL_KHX_shader_explicit_arithmetic_types
+    (*KeywordMap)["int8_t"] =                  INT8_T;
+    (*KeywordMap)["i8vec2"] =                  I8VEC2;
+    (*KeywordMap)["i8vec3"] =                  I8VEC3;
+    (*KeywordMap)["i8vec4"] =                  I8VEC4;
+    (*KeywordMap)["uint8_t"] =                 UINT8_T;
+    (*KeywordMap)["u8vec2"] =                  U8VEC2;
+    (*KeywordMap)["u8vec3"] =                  U8VEC3;
+    (*KeywordMap)["u8vec4"] =                  U8VEC4;
+
     (*KeywordMap)["int16_t"] =                 INT16_T;
-    (*KeywordMap)["uint16_t"] =                UINT16_T;
     (*KeywordMap)["i16vec2"] =                 I16VEC2;
     (*KeywordMap)["i16vec3"] =                 I16VEC3;
     (*KeywordMap)["i16vec4"] =                 I16VEC4;
+    (*KeywordMap)["uint16_t"] =                UINT16_T;
     (*KeywordMap)["u16vec2"] =                 U16VEC2;
     (*KeywordMap)["u16vec3"] =                 U16VEC3;
     (*KeywordMap)["u16vec4"] =                 U16VEC4;
 
+    (*KeywordMap)["int32_t"] =                 INT32_T;
+    (*KeywordMap)["i32vec2"] =                 I32VEC2;
+    (*KeywordMap)["i32vec3"] =                 I32VEC3;
+    (*KeywordMap)["i32vec4"] =                 I32VEC4;
+    (*KeywordMap)["uint32_t"] =                UINT32_T;
+    (*KeywordMap)["u32vec2"] =                 U32VEC2;
+    (*KeywordMap)["u32vec3"] =                 U32VEC3;
+    (*KeywordMap)["u32vec4"] =                 U32VEC4;
+
     (*KeywordMap)["float16_t"] =               FLOAT16_T;
     (*KeywordMap)["f16vec2"] =                 F16VEC2;
     (*KeywordMap)["f16vec3"] =                 F16VEC3;
@@ -489,7 +510,39 @@
     (*KeywordMap)["f16mat4x2"] =               F16MAT4X2;
     (*KeywordMap)["f16mat4x3"] =               F16MAT4X3;
     (*KeywordMap)["f16mat4x4"] =               F16MAT4X4;
-#endif
+
+    (*KeywordMap)["float32_t"] =               FLOAT32_T;
+    (*KeywordMap)["f32vec2"] =                 F32VEC2;
+    (*KeywordMap)["f32vec3"] =                 F32VEC3;
+    (*KeywordMap)["f32vec4"] =                 F32VEC4;
+    (*KeywordMap)["f32mat2"] =                 F32MAT2;
+    (*KeywordMap)["f32mat3"] =                 F32MAT3;
+    (*KeywordMap)["f32mat4"] =                 F32MAT4;
+    (*KeywordMap)["f32mat2x2"] =               F32MAT2X2;
+    (*KeywordMap)["f32mat2x3"] =               F32MAT2X3;
+    (*KeywordMap)["f32mat2x4"] =               F32MAT2X4;
+    (*KeywordMap)["f32mat3x2"] =               F32MAT3X2;
+    (*KeywordMap)["f32mat3x3"] =               F32MAT3X3;
+    (*KeywordMap)["f32mat3x4"] =               F32MAT3X4;
+    (*KeywordMap)["f32mat4x2"] =               F32MAT4X2;
+    (*KeywordMap)["f32mat4x3"] =               F32MAT4X3;
+    (*KeywordMap)["f32mat4x4"] =               F32MAT4X4;
+    (*KeywordMap)["float64_t"] =               FLOAT64_T;
+    (*KeywordMap)["f64vec2"] =                 F64VEC2;
+    (*KeywordMap)["f64vec3"] =                 F64VEC3;
+    (*KeywordMap)["f64vec4"] =                 F64VEC4;
+    (*KeywordMap)["f64mat2"] =                 F64MAT2;
+    (*KeywordMap)["f64mat3"] =                 F64MAT3;
+    (*KeywordMap)["f64mat4"] =                 F64MAT4;
+    (*KeywordMap)["f64mat2x2"] =               F64MAT2X2;
+    (*KeywordMap)["f64mat2x3"] =               F64MAT2X3;
+    (*KeywordMap)["f64mat2x4"] =               F64MAT2X4;
+    (*KeywordMap)["f64mat3x2"] =               F64MAT3X2;
+    (*KeywordMap)["f64mat3x3"] =               F64MAT3X3;
+    (*KeywordMap)["f64mat3x4"] =               F64MAT3X4;
+    (*KeywordMap)["f64mat4x2"] =               F64MAT4X2;
+    (*KeywordMap)["f64mat4x3"] =               F64MAT4X3;
+    (*KeywordMap)["f64mat4x4"] =               F64MAT4X4;
 
     (*KeywordMap)["sampler2D"] =               SAMPLER2D;
     (*KeywordMap)["samplerCube"] =             SAMPLERCUBE;
@@ -578,6 +631,54 @@
     (*KeywordMap)["usubpassInput"] =           USUBPASSINPUT;
     (*KeywordMap)["usubpassInputMS"] =         USUBPASSINPUTMS;
 
+#ifdef AMD_EXTENSIONS
+    (*KeywordMap)["f16sampler1D"] =                 F16SAMPLER1D;
+    (*KeywordMap)["f16sampler2D"] =                 F16SAMPLER2D;
+    (*KeywordMap)["f16sampler3D"] =                 F16SAMPLER3D;
+    (*KeywordMap)["f16sampler2DRect"] =             F16SAMPLER2DRECT;
+    (*KeywordMap)["f16samplerCube"] =               F16SAMPLERCUBE;
+    (*KeywordMap)["f16sampler1DArray"] =            F16SAMPLER1DARRAY;
+    (*KeywordMap)["f16sampler2DArray"] =            F16SAMPLER2DARRAY;
+    (*KeywordMap)["f16samplerCubeArray"] =          F16SAMPLERCUBEARRAY;
+    (*KeywordMap)["f16samplerBuffer"] =             F16SAMPLERBUFFER;
+    (*KeywordMap)["f16sampler2DMS"] =               F16SAMPLER2DMS;
+    (*KeywordMap)["f16sampler2DMSArray"] =          F16SAMPLER2DMSARRAY;
+    (*KeywordMap)["f16sampler1DShadow"] =           F16SAMPLER1DSHADOW;
+    (*KeywordMap)["f16sampler2DShadow"] =           F16SAMPLER2DSHADOW;
+    (*KeywordMap)["f16sampler2DRectShadow"] =       F16SAMPLER2DRECTSHADOW;
+    (*KeywordMap)["f16samplerCubeShadow"] =         F16SAMPLERCUBESHADOW;
+    (*KeywordMap)["f16sampler1DArrayShadow"] =      F16SAMPLER1DARRAYSHADOW;
+    (*KeywordMap)["f16sampler2DArrayShadow"] =      F16SAMPLER2DARRAYSHADOW;
+    (*KeywordMap)["f16samplerCubeArrayShadow"] =    F16SAMPLERCUBEARRAYSHADOW;
+
+    (*KeywordMap)["f16image1D"] =                   F16IMAGE1D;
+    (*KeywordMap)["f16image2D"] =                   F16IMAGE2D;
+    (*KeywordMap)["f16image3D"] =                   F16IMAGE3D;
+    (*KeywordMap)["f16image2DRect"] =               F16IMAGE2DRECT;
+    (*KeywordMap)["f16imageCube"] =                 F16IMAGECUBE;
+    (*KeywordMap)["f16image1DArray"] =              F16IMAGE1DARRAY;
+    (*KeywordMap)["f16image2DArray"] =              F16IMAGE2DARRAY;
+    (*KeywordMap)["f16imageCubeArray"] =            F16IMAGECUBEARRAY;
+    (*KeywordMap)["f16imageBuffer"] =               F16IMAGEBUFFER;
+    (*KeywordMap)["f16image2DMS"] =                 F16IMAGE2DMS;
+    (*KeywordMap)["f16image2DMSArray"] =            F16IMAGE2DMSARRAY;
+
+    (*KeywordMap)["f16texture1D"] =                 F16TEXTURE1D;
+    (*KeywordMap)["f16texture2D"] =                 F16TEXTURE2D;
+    (*KeywordMap)["f16texture3D"] =                 F16TEXTURE3D;
+    (*KeywordMap)["f16texture2DRect"] =             F16TEXTURE2DRECT;
+    (*KeywordMap)["f16textureCube"] =               F16TEXTURECUBE;
+    (*KeywordMap)["f16texture1DArray"] =            F16TEXTURE1DARRAY;
+    (*KeywordMap)["f16texture2DArray"] =            F16TEXTURE2DARRAY;
+    (*KeywordMap)["f16textureCubeArray"] =          F16TEXTURECUBEARRAY;
+    (*KeywordMap)["f16textureBuffer"] =             F16TEXTUREBUFFER;
+    (*KeywordMap)["f16texture2DMS"] =               F16TEXTURE2DMS;
+    (*KeywordMap)["f16texture2DMSArray"] =          F16TEXTURE2DMSARRAY;
+
+    (*KeywordMap)["f16subpassInput"] =              F16SUBPASSINPUT;
+    (*KeywordMap)["f16subpassInputMS"] =            F16SUBPASSINPUTMS;
+#endif
+
     (*KeywordMap)["noperspective"] =           NOPERSPECTIVE;
     (*KeywordMap)["smooth"] =                  SMOOTH;
     (*KeywordMap)["flat"] =                    FLAT;
@@ -714,19 +815,15 @@
             parseContext.error(loc, "not supported", "::", "");
             break;
 
-        case PpAtomConstInt:           parserToken->sType.lex.i   = ppToken.ival;       return INTCONSTANT;
-        case PpAtomConstUint:          parserToken->sType.lex.i   = ppToken.ival;       return UINTCONSTANT;
-        case PpAtomConstInt64:         parserToken->sType.lex.i64 = ppToken.i64val;     return INT64CONSTANT;
-        case PpAtomConstUint64:        parserToken->sType.lex.i64 = ppToken.i64val;     return UINT64CONSTANT;
-#ifdef AMD_EXTENSIONS
-        case PpAtomConstInt16:         parserToken->sType.lex.i   = ppToken.ival;       return INT16CONSTANT;
-        case PpAtomConstUint16:        parserToken->sType.lex.i   = ppToken.ival;       return UINT16CONSTANT;
-#endif
-        case PpAtomConstFloat:         parserToken->sType.lex.d   = ppToken.dval;       return FLOATCONSTANT;
-        case PpAtomConstDouble:        parserToken->sType.lex.d   = ppToken.dval;       return DOUBLECONSTANT;
-#ifdef AMD_EXTENSIONS
-        case PpAtomConstFloat16:       parserToken->sType.lex.d   = ppToken.dval;       return FLOAT16CONSTANT;
-#endif
+        case PpAtomConstInt:           parserToken->sType.lex.i    = ppToken.ival;       return INTCONSTANT;
+        case PpAtomConstUint:          parserToken->sType.lex.i    = ppToken.ival;       return UINTCONSTANT;
+        case PpAtomConstInt16:         parserToken->sType.lex.i    = ppToken.ival;       return INT16CONSTANT;
+        case PpAtomConstUint16:        parserToken->sType.lex.i    = ppToken.ival;       return UINT16CONSTANT;
+        case PpAtomConstInt64:         parserToken->sType.lex.i64  = ppToken.i64val;     return INT64CONSTANT;
+        case PpAtomConstUint64:        parserToken->sType.lex.i64  = ppToken.i64val;     return UINT64CONSTANT;
+        case PpAtomConstFloat:         parserToken->sType.lex.d    = ppToken.dval;       return FLOATCONSTANT;
+        case PpAtomConstDouble:        parserToken->sType.lex.d    = ppToken.dval;       return DOUBLECONSTANT;
+        case PpAtomConstFloat16:       parserToken->sType.lex.d    = ppToken.dval;       return FLOAT16CONSTANT;
         case PpAtomIdentifier:
         {
             int token = tokenizeIdentifier();
@@ -777,6 +874,12 @@
     case CASE:
         return keyword;
 
+    case NONUNIFORM:
+        if (parseContext.extensionTurnedOn(E_GL_EXT_nonuniform_qualifier))
+            return keyword;
+        else
+            return identifierOrType();
+
     case SWITCH:
     case DEFAULT:
         if ((parseContext.profile == EEsProfile && parseContext.version < 300) ||
@@ -841,7 +944,8 @@
     case VOLATILE:
         if (parseContext.profile == EEsProfile && parseContext.version >= 310)
             return keyword;
-        if (! parseContext.symbolTable.atBuiltInLevel() && (parseContext.profile == EEsProfile || (parseContext.version < 420 && ! parseContext.extensionTurnedOn(E_GL_ARB_shader_image_load_store))))
+        if (! parseContext.symbolTable.atBuiltInLevel() && (parseContext.profile == EEsProfile ||
+            (parseContext.version < 420 && ! parseContext.extensionTurnedOn(E_GL_ARB_shader_image_load_store))))
             reservedWord();
         return keyword;
 
@@ -865,7 +969,7 @@
     case PATCH:
         if (parseContext.symbolTable.atBuiltInLevel() ||
             (parseContext.profile == EEsProfile &&
-             (parseContext.version >= 320 || 
+             (parseContext.version >= 320 ||
               parseContext.extensionsTurnedOn(Num_AEP_tessellation_shader, AEP_tessellation_shader))) ||
             (parseContext.profile != EEsProfile && parseContext.extensionTurnedOn(E_GL_ARB_tessellation_shader)))
             return keyword;
@@ -985,12 +1089,29 @@
     case U64VEC4:
         afterType = true;
         if (parseContext.symbolTable.atBuiltInLevel() ||
-            (parseContext.extensionTurnedOn(E_GL_ARB_gpu_shader_int64) &&
-             parseContext.profile != EEsProfile && parseContext.version >= 450))
+            (parseContext.profile != EEsProfile && parseContext.version >= 450 &&
+             (parseContext.extensionTurnedOn(E_GL_ARB_gpu_shader_int64) ||
+              parseContext.extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types) ||
+              parseContext.extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types_int64))))
             return keyword;
         return identifierOrType();
 
-#ifdef AMD_EXTENSIONS
+    case INT8_T:
+    case UINT8_T:
+    case I8VEC2:
+    case I8VEC3:
+    case I8VEC4:
+    case U8VEC2:
+    case U8VEC3:
+    case U8VEC4:
+        afterType = true;
+        if (parseContext.symbolTable.atBuiltInLevel() ||
+            ((parseContext.extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types) ||
+              parseContext.extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types_int8)) &&
+              parseContext.profile != EEsProfile && parseContext.version >= 450))
+            return keyword;
+        return identifierOrType();
+
     case INT16_T:
     case UINT16_T:
     case I16VEC2:
@@ -1001,10 +1122,77 @@
     case U16VEC4:
         afterType = true;
         if (parseContext.symbolTable.atBuiltInLevel() ||
-            (parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_int16) &&
+            (parseContext.profile != EEsProfile && parseContext.version >= 450 &&
+             (
+#ifdef AMD_EXTENSIONS
+              parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_int16) ||
+#endif
+              parseContext.extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types) ||
+              parseContext.extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types_int16))))
+            return keyword;
+        return identifierOrType();
+    case INT32_T:
+    case UINT32_T:
+    case I32VEC2:
+    case I32VEC3:
+    case I32VEC4:
+    case U32VEC2:
+    case U32VEC3:
+    case U32VEC4:
+        afterType = true;
+        if (parseContext.symbolTable.atBuiltInLevel() ||
+           ((parseContext.extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types) ||
+             parseContext.extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types_int32)) &&
              parseContext.profile != EEsProfile && parseContext.version >= 450))
             return keyword;
         return identifierOrType();
+    case FLOAT32_T:
+    case F32VEC2:
+    case F32VEC3:
+    case F32VEC4:
+    case F32MAT2:
+    case F32MAT3:
+    case F32MAT4:
+    case F32MAT2X2:
+    case F32MAT2X3:
+    case F32MAT2X4:
+    case F32MAT3X2:
+    case F32MAT3X3:
+    case F32MAT3X4:
+    case F32MAT4X2:
+    case F32MAT4X3:
+    case F32MAT4X4:
+        afterType = true;
+        if (parseContext.symbolTable.atBuiltInLevel() ||
+            ((parseContext.extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types) ||
+              parseContext.extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types_float32)) &&
+              parseContext.profile != EEsProfile && parseContext.version >= 450))
+            return keyword;
+        return identifierOrType();
+
+    case FLOAT64_T:
+    case F64VEC2:
+    case F64VEC3:
+    case F64VEC4:
+    case F64MAT2:
+    case F64MAT3:
+    case F64MAT4:
+    case F64MAT2X2:
+    case F64MAT2X3:
+    case F64MAT2X4:
+    case F64MAT3X2:
+    case F64MAT3X3:
+    case F64MAT3X4:
+    case F64MAT4X2:
+    case F64MAT4X3:
+    case F64MAT4X4:
+        afterType = true;
+        if (parseContext.symbolTable.atBuiltInLevel() ||
+            ((parseContext.extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types) ||
+              parseContext.extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types_float64)) &&
+              parseContext.profile != EEsProfile && parseContext.version >= 450))
+            return keyword;
+        return identifierOrType();
 
     case FLOAT16_T:
     case F16VEC2:
@@ -1024,11 +1212,16 @@
     case F16MAT4X4:
         afterType = true;
         if (parseContext.symbolTable.atBuiltInLevel() ||
-            (parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_half_float) &&
-             parseContext.profile != EEsProfile && parseContext.version >= 450))
-            return keyword;
-        return identifierOrType();
+            (parseContext.profile != EEsProfile && parseContext.version >= 450 &&
+             (
+#ifdef AMD_EXTENSIONS
+              parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_half_float) ||
 #endif
+              parseContext.extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types) ||
+              parseContext.extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types_float16))))
+            return keyword;
+
+        return identifierOrType();
 
     case SAMPLERCUBEARRAY:
     case SAMPLERCUBEARRAYSHADOW:
@@ -1115,7 +1308,7 @@
     case SAMPLER3D:
         afterType = true;
         if (parseContext.profile == EEsProfile && parseContext.version < 300) {
-            if (! parseContext.extensionTurnedOn(E_GL_OES_texture_3D))
+            if (!parseContext.extensionTurnedOn(E_GL_OES_texture_3D))
                 reservedWord();
         }
         return keyword;
@@ -1193,7 +1386,7 @@
     case TEXTURE1DARRAY:
     case SAMPLER:
     case SAMPLERSHADOW:
-        if (parseContext.spvVersion.vulkan >= 100)
+        if (parseContext.spvVersion.vulkan > 0)
             return keyword;
         else
             return identifierOrType();
@@ -1204,12 +1397,71 @@
     case ISUBPASSINPUTMS:
     case USUBPASSINPUT:
     case USUBPASSINPUTMS:
-        if (parseContext.spvVersion.vulkan >= 100)
+        if (parseContext.spvVersion.vulkan > 0)
             return keyword;
         else
             return identifierOrType();
 
+#ifdef AMD_EXTENSIONS
+    case F16SAMPLER1D:
+    case F16SAMPLER2D:
+    case F16SAMPLER3D:
+    case F16SAMPLER2DRECT:
+    case F16SAMPLERCUBE:
+    case F16SAMPLER1DARRAY:
+    case F16SAMPLER2DARRAY:
+    case F16SAMPLERCUBEARRAY:
+    case F16SAMPLERBUFFER:
+    case F16SAMPLER2DMS:
+    case F16SAMPLER2DMSARRAY:
+    case F16SAMPLER1DSHADOW:
+    case F16SAMPLER2DSHADOW:
+    case F16SAMPLER1DARRAYSHADOW:
+    case F16SAMPLER2DARRAYSHADOW:
+    case F16SAMPLER2DRECTSHADOW:
+    case F16SAMPLERCUBESHADOW:
+    case F16SAMPLERCUBEARRAYSHADOW:
+
+    case F16IMAGE1D:
+    case F16IMAGE2D:
+    case F16IMAGE3D:
+    case F16IMAGE2DRECT:
+    case F16IMAGECUBE:
+    case F16IMAGE1DARRAY:
+    case F16IMAGE2DARRAY:
+    case F16IMAGECUBEARRAY:
+    case F16IMAGEBUFFER:
+    case F16IMAGE2DMS:
+    case F16IMAGE2DMSARRAY:
+
+    case F16TEXTURE1D:
+    case F16TEXTURE2D:
+    case F16TEXTURE3D:
+    case F16TEXTURE2DRECT:
+    case F16TEXTURECUBE:
+    case F16TEXTURE1DARRAY:
+    case F16TEXTURE2DARRAY:
+    case F16TEXTURECUBEARRAY:
+    case F16TEXTUREBUFFER:
+    case F16TEXTURE2DMS:
+    case F16TEXTURE2DMSARRAY:
+
+    case F16SUBPASSINPUT:
+    case F16SUBPASSINPUTMS:
+        afterType = true;
+        if (parseContext.symbolTable.atBuiltInLevel() ||
+            (parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_half_float_fetch) &&
+             parseContext.profile != EEsProfile && parseContext.version >= 450))
+            return keyword;
+        return identifierOrType();
+#endif
+
     case NOPERSPECTIVE:
+#ifdef NV_EXTENSIONS
+        if (parseContext.profile == EEsProfile && parseContext.version >= 300 &&
+            parseContext.extensionTurnedOn(E_GL_NV_shader_noperspective_interpolation))
+            return keyword;
+#endif
         return es30ReservedFromGLSL(130);
 
     case SMOOTH:
@@ -1403,7 +1655,8 @@
 int TScanContext::firstGenerationImage(bool inEs310)
 {
     if (parseContext.symbolTable.atBuiltInLevel() ||
-        (parseContext.profile != EEsProfile && (parseContext.version >= 420 || parseContext.extensionTurnedOn(E_GL_ARB_shader_image_load_store))) ||
+        (parseContext.profile != EEsProfile && (parseContext.version >= 420 ||
+         parseContext.extensionTurnedOn(E_GL_ARB_shader_image_load_store))) ||
         (inEs310 && parseContext.profile == EEsProfile && parseContext.version >= 310))
         return keyword;
 
diff --git a/glslang/MachineIndependent/ShaderLang.cpp b/glslang/MachineIndependent/ShaderLang.cpp
index 05d2212..4f39f34 100644
--- a/glslang/MachineIndependent/ShaderLang.cpp
+++ b/glslang/MachineIndependent/ShaderLang.cpp
@@ -69,6 +69,10 @@
 
 namespace { // anonymous namespace for file-local functions and symbols
 
+// Total number of successful initializers of glslang: a refcount
+// Shared global; access should be protected by a global mutex/critical section.
+int NumberOfClients = 0;
+
 using namespace glslang;
 
 // Create a language specific version of parseables.
@@ -217,7 +221,7 @@
 TSymbolTable* CommonSymbolTable[VersionCount][SpvVersionCount][ProfileCount][SourceCount][EPcCount] = {};
 TSymbolTable* SharedSymbolTables[VersionCount][SpvVersionCount][ProfileCount][SourceCount][EShLangCount] = {};
 
-TPoolAllocator* PerProcessGPA = 0;
+TPoolAllocator* PerProcessGPA = nullptr;
 
 //
 // Parse and add to the given symbol table the content of the given shader string.
@@ -361,7 +365,7 @@
 // pool allocator intact, so:
 //  - Switch to a new pool for parsing the built-ins
 //  - Do the parsing, which builds the symbol table, using the new pool
-//  - Switch to the process-global pool to save a copy the resulting symbol table
+//  - Switch to the process-global pool to save a copy of the resulting symbol table
 //  - Free up the new pool used to parse the built-ins
 //  - Switch back to the original thread's pool
 //
@@ -388,8 +392,8 @@
 
     // Switch to a new pool
     TPoolAllocator& previousAllocator = GetThreadPoolAllocator();
-    TPoolAllocator* builtInPoolAllocator = new TPoolAllocator();
-    SetThreadPoolAllocator(*builtInPoolAllocator);
+    TPoolAllocator* builtInPoolAllocator = new TPoolAllocator;
+    SetThreadPoolAllocator(builtInPoolAllocator);
 
     // Dynamically allocate the local symbol tables so we can control when they are deallocated WRT when the pool is popped.
     TSymbolTable* commonTable[EPcCount];
@@ -403,7 +407,7 @@
     InitializeSymbolTables(infoSink, commonTable, stageTables, version, profile, spvVersion, source);
 
     // Switch to the process-global pool
-    SetThreadPoolAllocator(*PerProcessGPA);
+    SetThreadPoolAllocator(PerProcessGPA);
 
     // Copy the local symbol tables from the new pool to the global tables using the process-global pool
     for (int precClass = 0; precClass < EPcCount; ++precClass) {
@@ -430,7 +434,7 @@
         delete stageTables[stage];
 
     delete builtInPoolAllocator;
-    SetThreadPoolAllocator(previousAllocator);
+    SetThreadPoolAllocator(&previousAllocator);
 
     glslang::ReleaseGlobalLock();
 }
@@ -574,7 +578,7 @@
     if (spvVersion.spv != 0) {
         switch (profile) {
         case  EEsProfile:
-            if (spvVersion.vulkan >= 100 && version < 310) {
+            if (spvVersion.vulkan > 0 && version < 310) {
                 correct = false;
                 infoSink.info.message(EPrefixError, "#version: ES shaders for Vulkan SPIR-V require version 310 or higher");
                 version = 310;
@@ -589,7 +593,7 @@
             infoSink.info.message(EPrefixError, "#version: compilation for SPIR-V does not support the compatibility profile");
             break;
         default:
-            if (spvVersion.vulkan >= 100 && version < 140) {
+            if (spvVersion.vulkan > 0 && version < 140) {
                 correct = false;
                 infoSink.info.message(EPrefixError, "#version: Desktop shaders for Vulkan SPIR-V require version 140 or higher");
                 version = 140;
@@ -615,9 +619,9 @@
 {
     // Set up environmental defaults, first ignoring 'environment'.
     if (messages & EShMsgSpvRules)
-        spvVersion.spv = 0x00010000;
+        spvVersion.spv = EShTargetSpv_1_0;
     if (messages & EShMsgVulkanRules) {
-        spvVersion.vulkan = 100;
+        spvVersion.vulkan = EShTargetVulkan_1_0;
         spvVersion.vulkanGlsl = 100;
     } else if (spvVersion.spv != 0)
         spvVersion.openGl = 100;
@@ -722,9 +726,6 @@
     const std::string sourceEntryPointName = "",
     const TEnvironment* environment = nullptr)  // optional way of fully setting all versions, overriding the above
 {
-    if (! InitThread())
-        return false;
-
     // This must be undone (.pop()) by the caller, after it finishes consuming the created tree.
     GetThreadPoolAllocator().push();
 
@@ -743,9 +744,9 @@
     const int numPre = 2;
     const int numPost = requireNonempty? 1 : 0;
     const int numTotal = numPre + numStrings + numPost;
-    size_t* lengths = new size_t[numTotal];
-    const char** strings = new const char*[numTotal];
-    const char** names = new const char*[numTotal];
+    std::unique_ptr<size_t[]> lengths(new size_t[numTotal]);
+    std::unique_ptr<const char*[]> strings(new const char*[numTotal]);
+    std::unique_ptr<const char*[]> names(new const char*[numTotal]);
     for (int s = 0; s < numStrings; ++s) {
         strings[s + numPre] = shaderStrings[s];
         if (inputLengths == nullptr || inputLengths[s] < 0)
@@ -767,6 +768,8 @@
     SpvVersion spvVersion;
     EShLanguage stage = compiler->getLanguage();
     TranslateEnvironment(environment, messages, source, stage, spvVersion);
+    if (environment != nullptr && environment->target.hlslFunctionality1)
+        intermediate.setHlslFunctionality1();
 
     // First, without using the preprocessor or parser, find the #version, so we know what
     // symbol tables, processing rules, etc. to set up.  This does not need the extra strings
@@ -813,7 +816,7 @@
     intermediate.setProfile(profile);
     intermediate.setSpv(spvVersion);
     RecordProcesses(intermediate, messages, sourceEntryPointName);
-    if (spvVersion.vulkan >= 100)
+    if (spvVersion.vulkan > 0)
         intermediate.setOriginUpperLeft();
     if ((messages & EShMsgHlslOffsets) || source == EShSourceHlsl)
         intermediate.setHlslOffsets();
@@ -831,25 +834,24 @@
                                                   [stage];
 
     // Dynamically allocate the symbol table so we can control when it is deallocated WRT the pool.
-    TSymbolTable* symbolTableMemory = new TSymbolTable;
-    TSymbolTable& symbolTable = *symbolTableMemory;
+    std::unique_ptr<TSymbolTable> symbolTable(new TSymbolTable);
     if (cachedTable)
-        symbolTable.adoptLevels(*cachedTable);
+        symbolTable->adoptLevels(*cachedTable);
 
     // Add built-in symbols that are potentially context dependent;
     // they get popped again further down.
-    if (! AddContextSpecificSymbols(resources, compiler->infoSink, symbolTable, version, profile, spvVersion,
-                                    stage, source))
+    if (! AddContextSpecificSymbols(resources, compiler->infoSink, *symbolTable, version, profile, spvVersion,
+                                    stage, source)) {
         return false;
+    }
 
     //
     // Now we can process the full shader under proper symbols and rules.
     //
 
-    TParseContextBase* parseContext = CreateParseContext(symbolTable, intermediate, version, profile, source,
-                                                         stage, compiler->infoSink,
-                                                         spvVersion, forwardCompatible, messages, false, sourceEntryPointName);
-
+    std::unique_ptr<TParseContextBase> parseContext(CreateParseContext(*symbolTable, intermediate, version, profile, source,
+                                                    stage, compiler->infoSink,
+                                                    spvVersion, forwardCompatible, messages, false, sourceEntryPointName));
     TPpContext ppContext(*parseContext, names[numPre] ? names[numPre] : "", includer);
 
     // only GLSL (bison triggered, really) needs an externally set scan context
@@ -885,23 +887,14 @@
         lengths[postIndex] = strlen(strings[numStrings + numPre]);
         names[postIndex] = nullptr;
     }
-    TInputScanner fullInput(numStrings + numPre + numPost, strings, lengths, names, numPre, numPost);
+    TInputScanner fullInput(numStrings + numPre + numPost, strings.get(), lengths.get(), names.get(), numPre, numPost);
 
     // Push a new symbol allocation scope that will get used for the shader's globals.
-    symbolTable.push();
+    symbolTable->push();
 
     bool success = processingContext(*parseContext, ppContext, fullInput,
-                                     versionWillBeError, symbolTable,
+                                     versionWillBeError, *symbolTable,
                                      intermediate, optLevel, messages);
-
-    // Clean up the symbol table. The AST is self-sufficient now.
-    delete symbolTableMemory;
-
-    delete parseContext;
-    delete [] lengths;
-    delete [] strings;
-    delete [] names;
-
     return success;
 }
 
@@ -911,7 +904,7 @@
 class SourceLineSynchronizer {
 public:
     SourceLineSynchronizer(const std::function<int()>& lastSourceIndex,
-                           std::stringstream* output)
+                           std::string* output)
       : getLastSourceIndex(lastSourceIndex), output(output), lastSource(-1), lastLine(0) {}
 //    SourceLineSynchronizer(const SourceLineSynchronizer&) = delete;
 //    SourceLineSynchronizer& operator=(const SourceLineSynchronizer&) = delete;
@@ -926,7 +919,7 @@
             // used. We also need to output a newline to separate the output
             // from the previous source string (if there is one).
             if (lastSource != -1 || lastLine != 0)
-                *output << std::endl;
+                *output += '\n';
             lastSource = getLastSourceIndex();
             lastLine = -1;
             return true;
@@ -941,7 +934,7 @@
         syncToMostRecentString();
         const bool newLineStarted = lastLine < tokenLine;
         for (; lastLine < tokenLine; ++lastLine) {
-            if (lastLine > 0) *output << std::endl;
+            if (lastLine > 0) *output += '\n';
         }
         return newLineStarted;
     }
@@ -955,8 +948,8 @@
     // A function for getting the index of the last valid source string we've
     // read tokens from.
     const std::function<int()> getLastSourceIndex;
-    // output stream for newlines.
-    std::stringstream* output;
+    // output string for newlines.
+    std::string* output;
     // lastSource is the source string index (starting from 0) of the last token
     // processed. It is tracked in order for newlines to be inserted when a new
     // source string starts. -1 means we haven't started processing any source
@@ -987,27 +980,33 @@
         parseContext.setScanner(&input);
         ppContext.setInput(input, versionWillBeError);
 
-        std::stringstream outputStream;
+        std::string outputBuffer;
         SourceLineSynchronizer lineSync(
-            std::bind(&TInputScanner::getLastValidSourceIndex, &input), &outputStream);
+            std::bind(&TInputScanner::getLastValidSourceIndex, &input), &outputBuffer);
 
-        parseContext.setExtensionCallback([&lineSync, &outputStream](
+        parseContext.setExtensionCallback([&lineSync, &outputBuffer](
             int line, const char* extension, const char* behavior) {
                 lineSync.syncToLine(line);
-                outputStream << "#extension " << extension << " : " << behavior;
+                outputBuffer += "#extension ";
+                outputBuffer += extension;
+                outputBuffer += " : ";
+                outputBuffer += behavior;
         });
 
-        parseContext.setLineCallback([&lineSync, &outputStream, &parseContext](
+        parseContext.setLineCallback([&lineSync, &outputBuffer, &parseContext](
             int curLineNum, int newLineNum, bool hasSource, int sourceNum, const char* sourceName) {
             // SourceNum is the number of the source-string that is being parsed.
             lineSync.syncToLine(curLineNum);
-            outputStream << "#line " << newLineNum;
+            outputBuffer += "#line ";
+            outputBuffer += std::to_string(newLineNum);
             if (hasSource) {
-                outputStream << " ";
+                outputBuffer += ' ';
                 if (sourceName != nullptr) {
-                    outputStream << "\"" << sourceName << "\"";
+                    outputBuffer += '\"';
+                    outputBuffer += sourceName;
+                    outputBuffer += '\"';
                 } else {
-                    outputStream << sourceNum;
+                    outputBuffer += std::to_string(sourceNum);
                 }
             }
             if (parseContext.lineDirectiveShouldSetNextLine()) {
@@ -1015,33 +1014,36 @@
                 // directive. So the new line number for the current line is
                 newLineNum -= 1;
             }
-            outputStream << std::endl;
+            outputBuffer += '\n';
             // And we are at the next line of the #line directive now.
             lineSync.setLineNum(newLineNum + 1);
         });
 
         parseContext.setVersionCallback(
-            [&lineSync, &outputStream](int line, int version, const char* str) {
+            [&lineSync, &outputBuffer](int line, int version, const char* str) {
                 lineSync.syncToLine(line);
-                outputStream << "#version " << version;
+                outputBuffer += "#version ";
+                outputBuffer += std::to_string(version);
                 if (str) {
-                    outputStream << " " << str;
+                    outputBuffer += ' ';
+                    outputBuffer += str;
                 }
             });
 
-        parseContext.setPragmaCallback([&lineSync, &outputStream](
+        parseContext.setPragmaCallback([&lineSync, &outputBuffer](
             int line, const glslang::TVector<glslang::TString>& ops) {
                 lineSync.syncToLine(line);
-                outputStream << "#pragma ";
+                outputBuffer += "#pragma ";
                 for(size_t i = 0; i < ops.size(); ++i) {
-                    outputStream << ops[i];
+                    outputBuffer += ops[i].c_str();
                 }
         });
 
-        parseContext.setErrorCallback([&lineSync, &outputStream](
+        parseContext.setErrorCallback([&lineSync, &outputBuffer](
             int line, const char* errorMessage) {
                 lineSync.syncToLine(line);
-                outputStream << "#error " << errorMessage;
+                outputBuffer += "#error ";
+                outputBuffer += errorMessage;
         });
 
         int lastToken = EndOfInput; // lastToken records the last token processed.
@@ -1057,7 +1059,7 @@
                 // Don't emit whitespace onto empty lines.
                 // Copy any whitespace characters at the start of a line
                 // from the input to the output.
-                outputStream << std::string(ppToken.loc.column - 1, ' ');
+                outputBuffer += std::string(ppToken.loc.column - 1, ' ');
             }
 
             // Output a space in between tokens, but not at the start of a line,
@@ -1067,13 +1069,13 @@
                 (unNeededSpaceTokens.find((char)token) == std::string::npos) &&
                 (unNeededSpaceTokens.find((char)lastToken) == std::string::npos) &&
                 (noSpaceBeforeTokens.find((char)token) == std::string::npos)) {
-                outputStream << " ";
+                outputBuffer += ' ';
             }
             lastToken = token;
-            outputStream << ppToken.name;
+            outputBuffer += ppToken.name;
         } while (true);
-        outputStream << std::endl;
-        *outputString = outputStream.str();
+        outputBuffer += '\n';
+        *outputString = std::move(outputBuffer);
 
         bool success = true;
         if (parseContext.getNumErrors() > 0) {
@@ -1196,7 +1198,11 @@
     if (! InitProcess())
         return 0;
 
-    if (! PerProcessGPA)
+    glslang::GetGlobalLock();
+    ++NumberOfClients;
+    glslang::ReleaseGlobalLock();
+
+    if (PerProcessGPA == nullptr)
         PerProcessGPA = new TPoolAllocator();
 
     glslang::TScanContext::fillInKeywordMap();
@@ -1262,6 +1268,14 @@
 //
 int __fastcall ShFinalize()
 {
+    glslang::GetGlobalLock();
+    --NumberOfClients;
+    assert(NumberOfClients >= 0);
+    bool finalize = NumberOfClients == 0;
+    glslang::ReleaseGlobalLock();
+    if (! finalize)
+        return 1;
+
     for (int version = 0; version < VersionCount; ++version) {
         for (int spvVersion = 0; spvVersion < SpvVersionCount; ++spvVersion) {
             for (int p = 0; p < ProfileCount; ++p) {
@@ -1288,10 +1302,9 @@
         }
     }
 
-    if (PerProcessGPA) {
-        PerProcessGPA->popAll();
+    if (PerProcessGPA != nullptr) {
         delete PerProcessGPA;
-        PerProcessGPA = 0;
+        PerProcessGPA = nullptr;
     }
 
     glslang::TScanContext::deleteKeywordMap();
@@ -1332,6 +1345,8 @@
     if (compiler == 0)
         return 0;
 
+    SetThreadPoolAllocator(compiler->getPool());
+
     compiler->infoSink.info.erase();
     compiler->infoSink.debug.erase();
 
@@ -1389,6 +1404,8 @@
     TShHandleBase* base = reinterpret_cast<TShHandleBase*>(linkHandle);
     TLinker* linker = static_cast<TLinker*>(base->getAsLinker());
 
+    SetThreadPoolAllocator(linker->getPool());
+
     if (linker == 0)
         return 0;
 
@@ -1423,9 +1440,6 @@
 //
 const char* ShGetInfoLog(const ShHandle handle)
 {
-    if (!InitThread())
-        return 0;
-
     if (handle == 0)
         return 0;
 
@@ -1449,9 +1463,6 @@
 //
 const void* ShGetExecutable(const ShHandle handle)
 {
-    if (!InitThread())
-        return 0;
-
     if (handle == 0)
         return 0;
 
@@ -1474,9 +1485,6 @@
 //
 int ShSetVirtualAttributeBindings(const ShHandle handle, const ShBindingTable* table)
 {
-    if (!InitThread())
-        return 0;
-
     if (handle == 0)
         return 0;
 
@@ -1496,9 +1504,6 @@
 //
 int ShSetFixedAttributeBindings(const ShHandle handle, const ShBindingTable* table)
 {
-    if (!InitThread())
-        return 0;
-
     if (handle == 0)
         return 0;
 
@@ -1517,9 +1522,6 @@
 //
 int ShExcludeAttributes(const ShHandle handle, int *attributes, int count)
 {
-    if (!InitThread())
-        return 0;
-
     if (handle == 0)
         return 0;
 
@@ -1541,9 +1543,6 @@
 //
 int ShGetUniformLocation(const ShHandle handle, const char* name)
 {
-    if (!InitThread())
-        return 0;
-
     if (handle == 0)
         return -1;
 
@@ -1570,14 +1569,17 @@
 
 #include "../Include/revision.h"
 
+#define QUOTE(s) #s
+#define STR(n) QUOTE(n)
+
 const char* GetEsslVersionString()
 {
-    return "OpenGL ES GLSL 3.00 glslang LunarG Khronos." GLSLANG_REVISION " " GLSLANG_DATE;
+    return "OpenGL ES GLSL 3.20 glslang Khronos. " STR(GLSLANG_MINOR_VERSION) "." STR(GLSLANG_PATCH_LEVEL);
 }
 
 const char* GetGlslVersionString()
 {
-    return "4.20 glslang LunarG Khronos." GLSLANG_REVISION " " GLSLANG_DATE;
+    return "4.60 glslang Khronos. " STR(GLSLANG_MINOR_VERSION) "." STR(GLSLANG_PATCH_LEVEL);
 }
 
 int GetKhronosToolId()
@@ -1602,8 +1604,9 @@
 };
 
 TShader::TShader(EShLanguage s)
-    : pool(0), stage(s), lengths(nullptr), stringNames(nullptr), preamble("")
+    : stage(s), lengths(nullptr), stringNames(nullptr), preamble("")
 {
+    pool = new TPoolAllocator;
     infoSink = new TInfoSink;
     compiler = new TDeferredCompiler(stage, *infoSink);
     intermediate = new TIntermediate(s);
@@ -1613,6 +1616,7 @@
     environment.input.dialect = EShClientNone;
     environment.client.client = EShClientNone;
     environment.target.language = EShTargetNone;
+    environment.target.hlslFunctionality1 = false;
 }
 
 TShader::~TShader()
@@ -1667,8 +1671,8 @@
 }
 
 // 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); 
+void TShader::setShiftBindingForSet(TResourceType res, unsigned int base, unsigned int set) {
+    intermediate->setShiftBindingForSet(res, base, set);
 }
 
 // Set binding base for sampler types
@@ -1687,6 +1691,8 @@
 void TShader::setShiftSsboBinding(unsigned int base)    { setShiftBinding(EResSsbo, base); }
 // Enables binding automapping using TIoMapper
 void TShader::setAutoMapBindings(bool map)              { intermediate->setAutoMapBindings(map); }
+// Enables position.Y output negation in vertex shader
+void TShader::setInvertY(bool invert)                   { intermediate->setInvertY(invert); }
 // Fragile: currently within one stage: simple auto-assignment of location
 void TShader::setAutoMapLocations(bool map)             { intermediate->setAutoMapLocations(map); }
 // See comment above TDefaultHlslIoMapper in iomapper.cpp:
@@ -1706,9 +1712,8 @@
 {
     if (! InitThread())
         return false;
+    SetThreadPoolAllocator(pool);
 
-    pool = new TPoolAllocator();
-    SetThreadPoolAllocator(*pool);
     if (! preamble)
         preamble = "";
 
@@ -1730,9 +1735,8 @@
 {
     if (! InitThread())
         return false;
+    SetThreadPoolAllocator(pool);
 
-    pool = new TPoolAllocator();
-    SetThreadPoolAllocator(*pool);
     if (! preamble)
         preamble = "";
 
@@ -1752,8 +1756,9 @@
     return infoSink->debug.c_str();
 }
 
-TProgram::TProgram() : pool(0), reflection(0), ioMapper(nullptr), linked(false)
+TProgram::TProgram() : reflection(0), ioMapper(nullptr), linked(false)
 {
+    pool = new TPoolAllocator;
     infoSink = new TInfoSink;
     for (int s = 0; s < EShLangCount; ++s) {
         intermediate[s] = 0;
@@ -1788,8 +1793,7 @@
 
     bool error = false;
 
-    pool = new TPoolAllocator();
-    SetThreadPoolAllocator(*pool);
+    SetThreadPoolAllocator(pool);
 
     for (int s = 0; s < EShLangCount; ++s) {
         if (! linkStage((EShLanguage)s, messages))
@@ -1906,6 +1910,7 @@
 int TProgram::getUniformBlockSize(int index) const           { return reflection->getUniformBlock(index).size; }
 int TProgram::getUniformIndex(const char* name) const        { return reflection->getIndex(name); }
 int TProgram::getUniformBinding(int index) const             { return reflection->getUniform(index).getBinding(); }
+int TProgram::getUniformBlockBinding(int index) const        { return reflection->getUniformBlock(index).getBinding(); }
 int TProgram::getUniformBlockIndex(int index) const          { return reflection->getUniform(index).index; }
 int TProgram::getUniformBlockCounterIndex(int index) const   { return reflection->getUniformBlock(index).counterIndex; }
 int TProgram::getUniformType(int index) const                { return reflection->getUniform(index).glDefineType; }
diff --git a/glslang/MachineIndependent/SymbolTable.cpp b/glslang/MachineIndependent/SymbolTable.cpp
index 233033e..db46e10 100644
--- a/glslang/MachineIndependent/SymbolTable.cpp
+++ b/glslang/MachineIndependent/SymbolTable.cpp
@@ -1,6 +1,7 @@
 //
 // Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
 // Copyright (C) 2012-2013 LunarG, Inc.
+// Copyright (C) 2017 ARM Limited.
 //
 // All rights reserved.
 //
@@ -60,21 +61,22 @@
     switch (basicType) {
     case EbtFloat:              mangledName += 'f';      break;
     case EbtDouble:             mangledName += 'd';      break;
-#ifdef AMD_EXTENSIONS
     case EbtFloat16:            mangledName += "f16";    break;
-#endif
     case EbtInt:                mangledName += 'i';      break;
     case EbtUint:               mangledName += 'u';      break;
-    case EbtInt64:              mangledName += "i64";    break;
-    case EbtUint64:             mangledName += "u64";    break;
-#ifdef AMD_EXTENSIONS
+    case EbtInt8:               mangledName += "i8";     break;
+    case EbtUint8:              mangledName += "u8";     break;
     case EbtInt16:              mangledName += "i16";    break;
     case EbtUint16:             mangledName += "u16";    break;
-#endif
+    case EbtInt64:              mangledName += "i64";    break;
+    case EbtUint64:             mangledName += "u64";    break;
     case EbtBool:               mangledName += 'b';      break;
     case EbtAtomicUint:         mangledName += "au";     break;
     case EbtSampler:
         switch (sampler.type) {
+#ifdef AMD_EXTENSIONS
+        case EbtFloat16: mangledName += "f16"; break;
+#endif
         case EbtInt:   mangledName += "i"; break;
         case EbtUint:  mangledName += "u"; break;
         default: break; // some compilers want this
diff --git a/glslang/MachineIndependent/Versions.cpp b/glslang/MachineIndependent/Versions.cpp
old mode 100644
new mode 100755
index b1893b3..51b6430
--- a/glslang/MachineIndependent/Versions.cpp
+++ b/glslang/MachineIndependent/Versions.cpp
@@ -1,6 +1,7 @@
 //
 // Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
 // Copyright (C) 2012-2013 LunarG, Inc.
+// Copyright (C) 2017 ARM Limited.
 //
 // All rights reserved.
 //
@@ -185,9 +186,20 @@
     extensionBehavior[E_GL_ARB_post_depth_coverage]          = EBhDisable;
     extensionBehavior[E_GL_ARB_shader_viewport_layer_array]  = EBhDisable;
 
+    extensionBehavior[E_GL_KHR_shader_subgroup_basic]            = EBhDisable;
+    extensionBehavior[E_GL_KHR_shader_subgroup_vote]             = EBhDisable;
+    extensionBehavior[E_GL_KHR_shader_subgroup_arithmetic]       = EBhDisable;
+    extensionBehavior[E_GL_KHR_shader_subgroup_ballot]           = EBhDisable;
+    extensionBehavior[E_GL_KHR_shader_subgroup_shuffle]          = EBhDisable;
+    extensionBehavior[E_GL_KHR_shader_subgroup_shuffle_relative] = EBhDisable;
+    extensionBehavior[E_GL_KHR_shader_subgroup_clustered]        = EBhDisable;
+    extensionBehavior[E_GL_KHR_shader_subgroup_quad]             = EBhDisable;
+
     extensionBehavior[E_GL_EXT_shader_non_constant_global_initializers] = EBhDisable;
     extensionBehavior[E_GL_EXT_shader_image_load_formatted]             = EBhDisable;
     extensionBehavior[E_GL_EXT_post_depth_coverage]                     = EBhDisable;
+    extensionBehavior[E_GL_EXT_control_flow_attributes]                 = EBhDisable;
+    extensionBehavior[E_GL_EXT_nonuniform_qualifier]                    = EBhDisable;
 
     // #line and #include
     extensionBehavior[E_GL_GOOGLE_cpp_style_line_directive]          = EBhDisable;
@@ -203,6 +215,7 @@
     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;
+    extensionBehavior[E_GL_AMD_gpu_shader_half_float_fetch]          = EBhDisable;
 #endif
 
 #ifdef NV_EXTENSIONS
@@ -212,6 +225,9 @@
     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;
+    extensionBehavior[E_GL_NV_conservative_raster_underestimation]   = EBhDisable;
+    extensionBehavior[E_GL_NV_shader_noperspective_interpolation]    = EBhDisable;
+    extensionBehavior[E_GL_NV_shader_subgroup_partitioned]           = EBhDisable;
 #endif
 
     // AEP
@@ -249,6 +265,16 @@
     // OVR extensions
     extensionBehavior[E_GL_OVR_multiview]                = EBhDisable;
     extensionBehavior[E_GL_OVR_multiview2]               = EBhDisable;
+
+    // explicit types
+    extensionBehavior[E_GL_KHX_shader_explicit_arithmetic_types]         = EBhDisable;
+    extensionBehavior[E_GL_KHX_shader_explicit_arithmetic_types_int8]    = EBhDisable;
+    extensionBehavior[E_GL_KHX_shader_explicit_arithmetic_types_int16]   = EBhDisable;
+    extensionBehavior[E_GL_KHX_shader_explicit_arithmetic_types_int32]   = EBhDisable;
+    extensionBehavior[E_GL_KHX_shader_explicit_arithmetic_types_int64]   = EBhDisable;
+    extensionBehavior[E_GL_KHX_shader_explicit_arithmetic_types_float16] = EBhDisable;
+    extensionBehavior[E_GL_KHX_shader_explicit_arithmetic_types_float32] = EBhDisable;
+    extensionBehavior[E_GL_KHX_shader_explicit_arithmetic_types_float64] = EBhDisable;
 }
 
 // Get code that is not part of a shared symbol table, is specific to this shader,
@@ -296,6 +322,13 @@
             "#define GL_OES_texture_cube_map_array 1\n"
             "#define GL_EXT_shader_non_constant_global_initializers 1\n"
             ;
+
+#ifdef NV_EXTENSIONS
+            if (profile == EEsProfile && version >= 300) {
+                preamble += "#define GL_NV_shader_noperspective_interpolation 1\n";
+            }
+#endif
+
     } else {
         preamble =
             "#define GL_FRAGMENT_PRECISION_HIGH 1\n"
@@ -327,6 +360,18 @@
             "#define GL_EXT_shader_non_constant_global_initializers 1\n"
             "#define GL_EXT_shader_image_load_formatted 1\n"
             "#define GL_EXT_post_depth_coverage 1\n"
+            "#define GL_EXT_control_flow_attributes 1\n"
+            "#define GL_EXT_nonuniform_qualifier 1\n"
+
+            // GL_KHR_shader_subgroup
+            "#define GL_KHR_shader_subgroup_basic 1\n"
+            "#define GL_KHR_shader_subgroup_vote 1\n"
+            "#define GL_KHR_shader_subgroup_arithmetic 1\n"
+            "#define GL_KHR_shader_subgroup_ballot 1\n"
+            "#define GL_KHR_shader_subgroup_shuffle 1\n"
+            "#define GL_KHR_shader_subgroup_shuffle_relative 1\n"
+            "#define GL_KHR_shader_subgroup_clustered 1\n"
+            "#define GL_KHR_shader_subgroup_quad 1\n"
 
 #ifdef AMD_EXTENSIONS
             "#define GL_AMD_shader_ballot 1\n"
@@ -338,6 +383,7 @@
             "#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"
+            "#define GL_AMD_gpu_shader_half_float_fetch 1\n"
 #endif
 
 #ifdef NV_EXTENSIONS
@@ -345,7 +391,17 @@
             "#define GL_NV_geometry_shader_passthrough 1\n"
             "#define GL_NV_viewport_array2 1\n"
             "#define GL_NV_shader_atomic_int64 1\n"
+            "#define GL_NV_conservative_raster_underestimation 1\n"
+            "#define GL_NV_shader_subgroup_partitioned 1\n"
 #endif
+            "#define GL_KHX_shader_explicit_arithmetic_types 1\n"
+            "#define GL_KHX_shader_explicit_arithmetic_types_int8 1\n"
+            "#define GL_KHX_shader_explicit_arithmetic_types_int16 1\n"
+            "#define GL_KHX_shader_explicit_arithmetic_types_int32 1\n"
+            "#define GL_KHX_shader_explicit_arithmetic_types_int64 1\n"
+            "#define GL_KHX_shader_explicit_arithmetic_types_float16 1\n"
+            "#define GL_KHX_shader_explicit_arithmetic_types_float32 1\n"
+            "#define GL_KHX_shader_explicit_arithmetic_types_float64 1\n"
             ;
 
         if (version >= 150) {
@@ -568,7 +624,8 @@
 //
 void TParseVersions::requireExtensions(const TSourceLoc& loc, int numExtensions, const char* const extensions[], const char* featureDesc)
 {
-    if (checkExtensionsRequested(loc, numExtensions, extensions, featureDesc)) return;
+    if (checkExtensionsRequested(loc, numExtensions, extensions, featureDesc))
+        return;
 
     // If we get this far, give errors explaining what extensions are needed
     if (numExtensions == 1)
@@ -586,7 +643,8 @@
 //
 void TParseVersions::ppRequireExtensions(const TSourceLoc& loc, int numExtensions, const char* const extensions[], const char* featureDesc)
 {
-    if (checkExtensionsRequested(loc, numExtensions, extensions, featureDesc)) return;
+    if (checkExtensionsRequested(loc, numExtensions, extensions, featureDesc))
+        return;
 
     // If we get this far, give errors explaining what extensions are needed
     if (numExtensions == 1)
@@ -624,7 +682,8 @@
 bool TParseVersions::extensionsTurnedOn(int numExtensions, const char* const extensions[])
 {
     for (int i = 0; i < numExtensions; ++i) {
-        if (extensionTurnedOn(extensions[i])) return true;
+        if (extensionTurnedOn(extensions[i]))
+            return true;
     }
     return false;
 }
@@ -680,6 +739,25 @@
         updateExtensionBehavior(line, "GL_OES_shader_io_blocks", behaviorString);
     else if (strcmp(extension, "GL_GOOGLE_include_directive") == 0)
         updateExtensionBehavior(line, "GL_GOOGLE_cpp_style_line_directive", behaviorString);
+    // subgroup_* to subgroup_basic
+    else if (strcmp(extension, "GL_KHR_shader_subgroup_vote") == 0)
+        updateExtensionBehavior(line, "GL_KHR_shader_subgroup_basic", behaviorString);
+    else if (strcmp(extension, "GL_KHR_shader_subgroup_arithmetic") == 0)
+        updateExtensionBehavior(line, "GL_KHR_shader_subgroup_basic", behaviorString);
+    else if (strcmp(extension, "GL_KHR_shader_subgroup_ballot") == 0)
+        updateExtensionBehavior(line, "GL_KHR_shader_subgroup_basic", behaviorString);
+    else if (strcmp(extension, "GL_KHR_shader_subgroup_shuffle") == 0)
+        updateExtensionBehavior(line, "GL_KHR_shader_subgroup_basic", behaviorString);
+    else if (strcmp(extension, "GL_KHR_shader_subgroup_shuffle_relative") == 0)
+        updateExtensionBehavior(line, "GL_KHR_shader_subgroup_basic", behaviorString);
+    else if (strcmp(extension, "GL_KHR_shader_subgroup_clustered") == 0)
+        updateExtensionBehavior(line, "GL_KHR_shader_subgroup_basic", behaviorString);
+    else if (strcmp(extension, "GL_KHR_shader_subgroup_quad") == 0)
+        updateExtensionBehavior(line, "GL_KHR_shader_subgroup_basic", behaviorString);
+#ifdef NV_EXTENSIONS
+    else if (strcmp(extension, "GL_NV_shader_subgroup_partitioned") == 0)
+        updateExtensionBehavior(line, "GL_KHR_shader_subgroup_basic", behaviorString);
+#endif
 }
 
 void TParseVersions::updateExtensionBehavior(const char* extension, TExtensionBehavior behavior)
@@ -737,23 +815,71 @@
     profileRequires(loc, ECompatibilityProfile, 400, nullptr, op);
 }
 
-#ifdef AMD_EXTENSIONS
-// Call for any operation needing GLSL 16-bit integer data-type support.
-void TParseVersions::int16Check(const TSourceLoc& loc, const char* op, bool builtIn)
+// Call for any operation needing GLSL float16 data-type support.
+void TParseVersions::float16Check(const TSourceLoc& loc, const char* op, bool builtIn)
 {
-    if (! builtIn) {
-        requireExtensions(loc, 1, &E_GL_AMD_gpu_shader_int16, "shader int16");
+    if (!builtIn) {
+#if AMD_EXTENSIONS
+        const char* const extensions[3] = {E_GL_AMD_gpu_shader_half_float,
+                                           E_GL_KHX_shader_explicit_arithmetic_types,
+                                           E_GL_KHX_shader_explicit_arithmetic_types_float16};
+
+#else
+        const char* const extensions[2] = {E_GL_KHX_shader_explicit_arithmetic_types,
+                                           E_GL_KHX_shader_explicit_arithmetic_types_float16};
+#endif
+        requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, "explicit types");
         requireProfile(loc, ECoreProfile | ECompatibilityProfile, op);
         profileRequires(loc, ECoreProfile, 450, nullptr, op);
         profileRequires(loc, ECompatibilityProfile, 450, nullptr, op);
     }
 }
 
-// Call for any operation needing GLSL float16 data-type support.
-void TParseVersions::float16Check(const TSourceLoc& loc, const char* op, bool builtIn)
+// Call for any operation needing GLSL float32 data-type support.
+void TParseVersions::explicitFloat32Check(const TSourceLoc& loc, const char* op, bool builtIn)
+{
+    if (!builtIn) {
+        const char* const extensions[2] = {E_GL_KHX_shader_explicit_arithmetic_types,
+                                           E_GL_KHX_shader_explicit_arithmetic_types_float32};
+        requireExtensions(loc, 2, extensions, "explicit types");
+        requireProfile(loc, ECoreProfile | ECompatibilityProfile, op);
+        profileRequires(loc, ECoreProfile, 450, nullptr, op);
+        profileRequires(loc, ECompatibilityProfile, 450, nullptr, op);
+    }
+}
+
+// Call for any operation needing GLSL float64 data-type support.
+void TParseVersions::explicitFloat64Check(const TSourceLoc& loc, const char* op, bool builtIn)
+{
+    if (!builtIn) {
+        const char* const extensions[2] = {E_GL_KHX_shader_explicit_arithmetic_types,
+                                           E_GL_KHX_shader_explicit_arithmetic_types_float64};
+        requireExtensions(loc, 2, extensions, "explicit types");
+        requireProfile(loc, ECoreProfile | ECompatibilityProfile, op);
+        profileRequires(loc, ECoreProfile, 450, nullptr, op);
+        profileRequires(loc, ECompatibilityProfile, 450, nullptr, op);
+    }
+}
+
+// Call for any operation needing GLSL explicit int8 data-type support.
+void TParseVersions::explicitInt8Check(const TSourceLoc& loc, const char* op, bool builtIn)
 {
     if (! builtIn) {
-        requireExtensions(loc, 1, &E_GL_AMD_gpu_shader_half_float, "shader half float");
+        const char* const extensions[2] = {E_GL_KHX_shader_explicit_arithmetic_types,
+                                           E_GL_KHX_shader_explicit_arithmetic_types_int8};
+        requireExtensions(loc, 2, extensions, "explicit types");
+        requireProfile(loc, ECoreProfile | ECompatibilityProfile, op);
+        profileRequires(loc, ECoreProfile, 450, nullptr, op);
+        profileRequires(loc, ECompatibilityProfile, 450, nullptr, op);
+    }
+}
+
+#ifdef AMD_EXTENSIONS
+// Call for any operation needing GLSL float16 opaque-type support
+void TParseVersions::float16OpaqueCheck(const TSourceLoc& loc, const char* op, bool builtIn)
+{
+    if (! builtIn) {
+        requireExtensions(loc, 1, &E_GL_AMD_gpu_shader_half_float_fetch, op);
         requireProfile(loc, ECoreProfile | ECompatibilityProfile, op);
         profileRequires(loc, ECoreProfile, 450, nullptr, op);
         profileRequires(loc, ECompatibilityProfile, 450, nullptr, op);
@@ -761,11 +887,46 @@
 }
 #endif
 
+// Call for any operation needing GLSL explicit int16 data-type support.
+void TParseVersions::explicitInt16Check(const TSourceLoc& loc, const char* op, bool builtIn)
+{
+    if (! builtIn) {
+#if AMD_EXTENSIONS
+        const char* const extensions[3] = {E_GL_AMD_gpu_shader_int16,
+                                            E_GL_KHX_shader_explicit_arithmetic_types,
+                                            E_GL_KHX_shader_explicit_arithmetic_types_int16};
+#else
+        const char* const extensions[2] = {E_GL_KHX_shader_explicit_arithmetic_types,
+                                            E_GL_KHX_shader_explicit_arithmetic_types_int16};
+#endif
+        requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, "explicit types");
+        requireProfile(loc, ECoreProfile | ECompatibilityProfile, op);
+        profileRequires(loc, ECoreProfile, 450, nullptr, op);
+        profileRequires(loc, ECompatibilityProfile, 450, nullptr, op);
+    }
+}
+
+// Call for any operation needing GLSL explicit int32 data-type support.
+void TParseVersions::explicitInt32Check(const TSourceLoc& loc, const char* op, bool builtIn)
+{
+    if (! builtIn) {
+        const char* const extensions[2] = {E_GL_KHX_shader_explicit_arithmetic_types,
+                                           E_GL_KHX_shader_explicit_arithmetic_types_int32};
+        requireExtensions(loc, 2, extensions, "explicit types");
+        requireProfile(loc, ECoreProfile | ECompatibilityProfile, op);
+        profileRequires(loc, ECoreProfile, 450, nullptr, op);
+        profileRequires(loc, ECompatibilityProfile, 450, nullptr, op);
+    }
+}
+
 // Call for any operation needing GLSL 64-bit integer data-type support.
 void TParseVersions::int64Check(const TSourceLoc& loc, const char* op, bool builtIn)
 {
     if (! builtIn) {
-        requireExtensions(loc, 1, &E_GL_ARB_gpu_shader_int64, "shader int64");
+        const char* const extensions[3] = {E_GL_ARB_gpu_shader_int64,
+                                           E_GL_KHX_shader_explicit_arithmetic_types,
+                                           E_GL_KHX_shader_explicit_arithmetic_types_int64};
+        requireExtensions(loc, 3, extensions, "shader int64");
         requireProfile(loc, ECoreProfile | ECompatibilityProfile, op);
         profileRequires(loc, ECoreProfile, 450, nullptr, op);
         profileRequires(loc, ECompatibilityProfile, 450, nullptr, op);
@@ -782,7 +943,7 @@
 // Call for any operation removed because Vulkan SPIR-V is being generated.
 void TParseVersions::vulkanRemoved(const TSourceLoc& loc, const char* op)
 {
-    if (spvVersion.vulkan >= 100)
+    if (spvVersion.vulkan > 0)
         error(loc, "not allowed when using GLSL for Vulkan", op, "");
 }
 
diff --git a/glslang/MachineIndependent/Versions.h b/glslang/MachineIndependent/Versions.h
old mode 100644
new mode 100755
index bd57103..b297d27
--- a/glslang/MachineIndependent/Versions.h
+++ b/glslang/MachineIndependent/Versions.h
@@ -1,6 +1,7 @@
 //
 // Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
 // Copyright (C) 2012-2013 LunarG, Inc.
+// Copyright (C) 2017 ARM Limited.
 //
 // All rights reserved.
 //
@@ -83,7 +84,7 @@
     SpvVersion() : spv(0), vulkanGlsl(0), vulkan(0), openGl(0) {}
     unsigned int spv; // the version of SPIR-V to target, as defined by "word 1" of the SPIR-V binary header
     int vulkanGlsl;   // the version of GLSL semantics for Vulkan, from GL_KHR_vulkan_glsl, for "#define VULKAN XXX"
-    int vulkan;       // the version of Vulkan, for which SPIR-V execution environment rules to use (100 means 1.0)
+    int vulkan;       // the version of Vulkan, for which SPIR-V execution environment rules to use
     int openGl;       // the version of GLSL semantics for OpenGL, from GL_ARB_gl_spirv, for "#define GL_SPIRV XXX"
 };
 
@@ -139,6 +140,15 @@
 const char* const E_GL_ARB_post_depth_coverage          = "GL_ARB_post_depth_coverage";
 const char* const E_GL_ARB_shader_viewport_layer_array  = "GL_ARB_shader_viewport_layer_array";
 
+const char* const E_GL_KHR_shader_subgroup_basic            = "GL_KHR_shader_subgroup_basic";
+const char* const E_GL_KHR_shader_subgroup_vote             = "GL_KHR_shader_subgroup_vote";
+const char* const E_GL_KHR_shader_subgroup_arithmetic       = "GL_KHR_shader_subgroup_arithmetic";
+const char* const E_GL_KHR_shader_subgroup_ballot           = "GL_KHR_shader_subgroup_ballot";
+const char* const E_GL_KHR_shader_subgroup_shuffle          = "GL_KHR_shader_subgroup_shuffle";
+const char* const E_GL_KHR_shader_subgroup_shuffle_relative = "GL_KHR_shader_subgroup_shuffle_relative";
+const char* const E_GL_KHR_shader_subgroup_clustered        = "GL_KHR_shader_subgroup_clustered";
+const char* const E_GL_KHR_shader_subgroup_quad             = "GL_KHR_shader_subgroup_quad";
+
 const char* const E_GL_EXT_shader_non_constant_global_initializers = "GL_EXT_shader_non_constant_global_initializers";
 const char* const E_GL_EXT_shader_image_load_formatted = "GL_EXT_shader_image_load_formatted";
 
@@ -146,6 +156,8 @@
 const char* const E_GL_EXT_device_group                 = "GL_EXT_device_group";
 const char* const E_GL_EXT_multiview                    = "GL_EXT_multiview";
 const char* const E_GL_EXT_post_depth_coverage          = "GL_EXT_post_depth_coverage";
+const char* const E_GL_EXT_control_flow_attributes      = "GL_EXT_control_flow_attributes";
+const char* const E_GL_EXT_nonuniform_qualifier         = "GL_EXT_nonuniform_qualifier";
 
 // Arrays of extensions for the above viewportEXTs duplications
 
@@ -173,6 +185,7 @@
 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";
+const char* const E_GL_AMD_gpu_shader_half_float_fetch          = "GL_AMD_gpu_shader_half_float_fetch";
 #endif
 
 #ifdef NV_EXTENSIONS
@@ -183,6 +196,9 @@
 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";
+const char* const E_GL_NV_conservative_raster_underestimation   = "GL_NV_conservative_raster_underestimation";
+const char* const E_GL_NV_shader_noperspective_interpolation    = "GL_NV_shader_noperspective_interpolation";
+const char* const E_GL_NV_shader_subgroup_partitioned           = "GL_NV_shader_subgroup_partitioned";
 
 // Arrays of extensions for the above viewportEXTs duplications
 
@@ -218,6 +234,16 @@
 const char* const E_GL_OES_texture_buffer                       = "GL_OES_texture_buffer";
 const char* const E_GL_OES_texture_cube_map_array               = "GL_OES_texture_cube_map_array";
 
+// KHX
+const char* const E_GL_KHX_shader_explicit_arithmetic_types          = "GL_KHX_shader_explicit_arithmetic_types";
+const char* const E_GL_KHX_shader_explicit_arithmetic_types_int8     = "GL_KHX_shader_explicit_arithmetic_types_int8";
+const char* const E_GL_KHX_shader_explicit_arithmetic_types_int16    = "GL_KHX_shader_explicit_arithmetic_types_int16";
+const char* const E_GL_KHX_shader_explicit_arithmetic_types_int32    = "GL_KHX_shader_explicit_arithmetic_types_int32";
+const char* const E_GL_KHX_shader_explicit_arithmetic_types_int64    = "GL_KHX_shader_explicit_arithmetic_types_int64";
+const char* const E_GL_KHX_shader_explicit_arithmetic_types_float16  = "GL_KHX_shader_explicit_arithmetic_types_float16";
+const char* const E_GL_KHX_shader_explicit_arithmetic_types_float32  = "GL_KHX_shader_explicit_arithmetic_types_float32";
+const char* const E_GL_KHX_shader_explicit_arithmetic_types_float64  = "GL_KHX_shader_explicit_arithmetic_types_float64";
+
 // Arrays of extensions for the above AEP duplications
 
 const char* const AEP_geometry_shader[] = { E_GL_EXT_geometry_shader, E_GL_OES_geometry_shader };
diff --git a/glslang/MachineIndependent/attribute.cpp b/glslang/MachineIndependent/attribute.cpp
new file mode 100644
index 0000000..73b665d
--- /dev/null
+++ b/glslang/MachineIndependent/attribute.cpp
@@ -0,0 +1,257 @@
+//
+// Copyright (C) 2017 LunarG, Inc.
+// Copyright (C) 2018 Google, Inc.
+//
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+//
+//    Redistributions of source code must retain the above copyright
+//    notice, this list of conditions and the following disclaimer.
+//
+//    Redistributions in binary form must reproduce the above
+//    copyright notice, this list of conditions and the following
+//    disclaimer in the documentation and/or other materials provided
+//    with the distribution.
+//
+//    Neither the name of Google, Inc., nor the names of its
+//    contributors may be used to endorse or promote products derived
+//    from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+// COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+// POSSIBILITY OF SUCH DAMAGE.
+//
+
+#include "attribute.h"
+#include "../Include/intermediate.h"
+#include "ParseHelper.h"
+
+namespace glslang {
+
+// extract integers out of attribute arguments stored in attribute aggregate
+bool TAttributeArgs::getInt(int& value, int argNum) const 
+{
+    const TConstUnion* intConst = getConstUnion(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 TAttributeArgs::getString(TString& value, int argNum, bool convertToLower) const 
+{
+    const TConstUnion* stringConst = getConstUnion(EbtString, argNum);
+
+    if (stringConst == nullptr)
+        return false;
+
+    value = *stringConst->getSConst();
+
+    // Convenience.
+    if (convertToLower)
+        std::transform(value.begin(), value.end(), value.begin(), ::tolower);
+
+    return true;
+}
+
+// How many arguments were supplied?
+int TAttributeArgs::size() const
+{
+    return args == nullptr ? 0 : (int)args->getSequence().size();
+}
+
+// Helper to get attribute const union.  Returns nullptr on failure.
+const TConstUnion* TAttributeArgs::getConstUnion(TBasicType basicType, int argNum) const
+{
+    if (args == nullptr)
+        return nullptr;
+
+    if (argNum >= (int)args->getSequence().size())
+        return nullptr;
+
+    const TConstUnion* constVal = &args->getSequence()[argNum]->getAsConstantUnion()->getConstArray()[0];
+    if (constVal == nullptr || constVal->getType() != basicType)
+        return nullptr;
+
+    return constVal;
+}
+
+// Implementation of TParseContext parts of attributes
+TAttributeType TParseContext::attributeFromName(const TString& name) const
+{
+    if (name == "branch" || name == "dont_flatten")
+        return EatBranch;
+    else if (name == "flatten")
+        return EatFlatten;
+    else if (name == "unroll")
+        return EatUnroll;
+    else if (name == "loop" || name == "dont_unroll")
+        return EatLoop;
+    else if (name == "dependency_infinite")
+        return EatDependencyInfinite;
+    else if (name == "dependency_length")
+        return EatDependencyLength;
+    else
+        return EatNone;
+}
+
+// Make an initial leaf for the grammar from a no-argument attribute
+TAttributes* TParseContext::makeAttributes(const TString& identifier) const
+{
+    TAttributes *attributes = nullptr;
+    attributes = NewPoolObject(attributes);
+    TAttributeArgs args = { attributeFromName(identifier), nullptr };
+    attributes->push_back(args);
+    return attributes;
+}
+
+// Make an initial leaf for the grammar from a one-argument attribute
+TAttributes* TParseContext::makeAttributes(const TString& identifier, TIntermNode* node) const
+{
+    TAttributes *attributes = nullptr;
+    attributes = NewPoolObject(attributes);
+
+    // for now, node is always a simple single expression, but other code expects
+    // a list, so make it so
+    TIntermAggregate* agg = intermediate.makeAggregate(node);
+    TAttributeArgs args = { attributeFromName(identifier), agg };
+    attributes->push_back(args);
+    return attributes;
+}
+
+// Merge two sets of attributes into a single set.
+// The second argument is destructively consumed.
+TAttributes* TParseContext::mergeAttributes(TAttributes* attr1, TAttributes* attr2) const
+{
+    attr1->splice(attr1->end(), *attr2);
+    return attr1;
+}
+
+//
+// Selection attributes
+//
+void TParseContext::handleSelectionAttributes(const TAttributes& attributes, TIntermNode* node)
+{
+    TIntermSelection* selection = node->getAsSelectionNode();
+    if (selection == nullptr)
+        return;
+
+    for (auto it = attributes.begin(); it != attributes.end(); ++it) {
+        if (it->size() > 0) {
+            warn(node->getLoc(), "attribute with arguments not recognized, skipping", "", "");
+            continue;
+        }
+
+        switch (it->name) {
+        case EatFlatten:
+            selection->setFlatten();
+            break;
+        case EatBranch:
+            selection->setDontFlatten();
+            break;
+        default:
+            warn(node->getLoc(), "attribute does not apply to a selection", "", "");
+            break;
+        }
+    }
+}
+
+//
+// Switch attributes
+//
+void TParseContext::handleSwitchAttributes(const TAttributes& attributes, TIntermNode* node)
+{
+    TIntermSwitch* selection = node->getAsSwitchNode();
+    if (selection == nullptr)
+        return;
+
+    for (auto it = attributes.begin(); it != attributes.end(); ++it) {
+        if (it->size() > 0) {
+            warn(node->getLoc(), "attribute with arguments not recognized, skipping", "", "");
+            continue;
+        }
+
+        switch (it->name) {
+        case EatFlatten:
+            selection->setFlatten();
+            break;
+        case EatBranch:
+            selection->setDontFlatten();
+            break;
+        default:
+            warn(node->getLoc(), "attribute does not apply to a switch", "", "");
+            break;
+        }
+    }
+}
+
+//
+// Loop attributes
+//
+void TParseContext::handleLoopAttributes(const TAttributes& attributes, TIntermNode* node)
+{
+    TIntermLoop* loop = node->getAsLoopNode();
+    if (loop == nullptr) {
+        // the actual loop might be part of a sequence
+        TIntermAggregate* agg = node->getAsAggregate();
+        if (agg == nullptr)
+            return;
+        for (auto it = agg->getSequence().begin(); it != agg->getSequence().end(); ++it) {
+            loop = (*it)->getAsLoopNode();
+            if (loop != nullptr)
+                break;
+        }
+        if (loop == nullptr)
+            return;
+    }
+
+    for (auto it = attributes.begin(); it != attributes.end(); ++it) {
+        if (it->name != EatDependencyLength && it->size() > 0) {
+            warn(node->getLoc(), "attribute with arguments not recognized, skipping", "", "");
+            continue;
+        }
+
+        int value;
+        switch (it->name) {
+        case EatUnroll:
+            loop->setUnroll();
+            break;
+        case EatLoop:
+            loop->setDontUnroll();
+            break;
+        case EatDependencyInfinite:
+            loop->setLoopDependency(TIntermLoop::dependencyInfinite);
+            break;
+        case EatDependencyLength:
+            if (it->size() == 1 && it->getInt(value)) {
+                if (value <= 0)
+                    error(node->getLoc(), "must be positive", "dependency_length", "");
+                loop->setLoopDependency(value);
+            } else
+                warn(node->getLoc(), "expected a single integer argument", "dependency_length", "");
+            break;
+        default:
+            warn(node->getLoc(), "attribute does not apply to a loop", "", "");
+            break;
+        }
+    }
+}
+
+
+} // end namespace glslang
diff --git a/glslang/MachineIndependent/attribute.h b/glslang/MachineIndependent/attribute.h
new file mode 100644
index 0000000..8d0c5bc
--- /dev/null
+++ b/glslang/MachineIndependent/attribute.h
@@ -0,0 +1,102 @@
+//
+// Copyright (C) 2017 LunarG, Inc.
+// Copyright (C) 2018 Google, Inc.
+//
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+//
+//    Redistributions of source code must retain the above copyright
+//    notice, this list of conditions and the following disclaimer.
+//
+//    Redistributions in binary form must reproduce the above
+//    copyright notice, this list of conditions and the following
+//    disclaimer in the documentation and/or other materials provided
+//    with the distribution.
+//
+//    Neither the name of 3Dlabs Inc. Ltd. nor the names of its
+//    contributors may be used to endorse or promote products derived
+//    from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+// COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+// POSSIBILITY OF SUCH DAMAGE.
+//
+
+#ifndef _ATTRIBUTE_INCLUDED_
+#define _ATTRIBUTE_INCLUDED_
+
+#include "../Include/Common.h"
+#include "../Include/ConstantUnion.h"
+
+namespace glslang {
+
+    enum TAttributeType {
+        EatNone,
+        EatAllow_uav_condition,
+        EatBranch,
+        EatCall,
+        EatDomain,
+        EatEarlyDepthStencil,
+        EatFastOpt,
+        EatFlatten,
+        EatForceCase,
+        EatInstance,
+        EatMaxTessFactor,
+        EatNumThreads,
+        EatMaxVertexCount,
+        EatOutputControlPoints,
+        EatOutputTopology,
+        EatPartitioning,
+        EatPatchConstantFunc,
+        EatPatchSize,
+        EatUnroll,
+        EatLoop,
+        EatBinding,
+        EatGlobalBinding,
+        EatLocation,
+        EatInputAttachment,
+        EatBuiltIn,
+        EatPushConstant,
+        EatConstantId,
+        EatDependencyInfinite,
+        EatDependencyLength
+    };
+
+    class TIntermAggregate;
+
+    struct TAttributeArgs {
+        TAttributeType name;
+        const TIntermAggregate* args;
+
+        // Obtain attribute as integer
+        // Return false if it cannot be obtained
+        bool getInt(int& value, int argNum = 0) const;
+
+        // Obtain attribute as string, with optional to-lower transform
+        // Return false if it cannot be obtained
+        bool getString(TString& value, int argNum = 0, bool convertToLower = true) const;
+
+        // How many arguments were provided to the attribute?
+        int size() const;
+
+    protected:
+        const TConstUnion* getConstUnion(TBasicType basicType, int argNum) const;
+    };
+
+    typedef TList<TAttributeArgs> TAttributes;
+
+} // end namespace glslang
+
+#endif // _ATTRIBUTE_INCLUDED_
diff --git a/glslang/MachineIndependent/gl_types.h b/glslang/MachineIndependent/gl_types.h
index ae00ae5..c9fee9e 100644
--- a/glslang/MachineIndependent/gl_types.h
+++ b/glslang/MachineIndependent/gl_types.h
@@ -117,6 +117,40 @@
 #define GL_SAMPLER_CUBE_MAP_ARRAY_ARB     0x900C
 #define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_ARB 0x900D
 
+#ifdef AMD_EXTENSIONS
+#define GL_FLOAT16_SAMPLER_1D_AMD                       0x91CE
+#define GL_FLOAT16_SAMPLER_2D_AMD                       0x91CF
+#define GL_FLOAT16_SAMPLER_3D_AMD                       0x91D0
+#define GL_FLOAT16_SAMPLER_CUBE_AMD                     0x91D1
+#define GL_FLOAT16_SAMPLER_2D_RECT_AMD                  0x91D2
+#define GL_FLOAT16_SAMPLER_1D_ARRAY_AMD                 0x91D3
+#define GL_FLOAT16_SAMPLER_2D_ARRAY_AMD                 0x91D4
+#define GL_FLOAT16_SAMPLER_CUBE_MAP_ARRAY_AMD           0x91D5
+#define GL_FLOAT16_SAMPLER_BUFFER_AMD                   0x91D6
+#define GL_FLOAT16_SAMPLER_2D_MULTISAMPLE_AMD           0x91D7
+#define GL_FLOAT16_SAMPLER_2D_MULTISAMPLE_ARRAY_AMD     0x91D8
+
+#define GL_FLOAT16_SAMPLER_1D_SHADOW_AMD                0x91D9
+#define GL_FLOAT16_SAMPLER_2D_SHADOW_AMD                0x91DA
+#define GL_FLOAT16_SAMPLER_2D_RECT_SHADOW_AMD           0x91DB
+#define GL_FLOAT16_SAMPLER_1D_ARRAY_SHADOW_AMD          0x91DC
+#define GL_FLOAT16_SAMPLER_2D_ARRAY_SHADOW_AMD          0x91DD
+#define GL_FLOAT16_SAMPLER_CUBE_SHADOW_AMD              0x91DE
+#define GL_FLOAT16_SAMPLER_CUBE_MAP_ARRAY_SHADOW_AMD    0x91DF
+
+#define GL_FLOAT16_IMAGE_1D_AMD                         0x91E0
+#define GL_FLOAT16_IMAGE_2D_AMD                         0x91E1
+#define GL_FLOAT16_IMAGE_3D_AMD                         0x91E2
+#define GL_FLOAT16_IMAGE_2D_RECT_AMD                    0x91E3
+#define GL_FLOAT16_IMAGE_CUBE_AMD                       0x91E4
+#define GL_FLOAT16_IMAGE_1D_ARRAY_AMD                   0x91E5
+#define GL_FLOAT16_IMAGE_2D_ARRAY_AMD                   0x91E6
+#define GL_FLOAT16_IMAGE_CUBE_MAP_ARRAY_AMD             0x91E7
+#define GL_FLOAT16_IMAGE_BUFFER_AMD                     0x91E8
+#define GL_FLOAT16_IMAGE_2D_MULTISAMPLE_AMD             0x91E9
+#define GL_FLOAT16_IMAGE_2D_MULTISAMPLE_ARRAY_AMD       0x91EA
+#endif
+
 #define GL_INT_SAMPLER_1D                 0x8DC9
 #define GL_INT_SAMPLER_2D                 0x8DCA
 #define GL_INT_SAMPLER_3D                 0x8DCB
diff --git a/glslang/MachineIndependent/glslang.y b/glslang/MachineIndependent/glslang.y
index a011935..e65483a 100644
--- a/glslang/MachineIndependent/glslang.y
+++ b/glslang/MachineIndependent/glslang.y
@@ -1,6 +1,7 @@
 //
 // Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
 // Copyright (C) 2012-2013 LunarG, Inc.
+// Copyright (C) 2017 ARM Limited.
 //
 // All rights reserved.
 //
@@ -58,6 +59,7 @@
 #include "SymbolTable.h"
 #include "ParseHelper.h"
 #include "../Public/ShaderLang.h"
+#include "attribute.h"
 
 using namespace glslang;
 
@@ -86,6 +88,7 @@
             TIntermNode* intermNode;
             glslang::TIntermNodePair nodePair;
             glslang::TIntermTyped* intermTypedNode;
+            glslang::TAttributes* attributes;
         };
         union {
             glslang::TPublicType type;
@@ -121,15 +124,28 @@
 %expect 1     // One shift reduce conflict because of if | else
 
 %token <lex> ATTRIBUTE VARYING
-%token <lex> CONST BOOL FLOAT DOUBLE INT UINT INT64_T UINT64_T INT16_T UINT16_T FLOAT16_T
+%token <lex> FLOAT16_T FLOAT FLOAT32_T DOUBLE FLOAT64_T
+%token <lex> CONST BOOL INT UINT INT64_T UINT64_T INT32_T UINT32_T INT16_T UINT16_T INT8_T UINT8_T
 %token <lex> BREAK CONTINUE DO ELSE FOR IF DISCARD RETURN SWITCH CASE DEFAULT SUBROUTINE
-%token <lex> BVEC2 BVEC3 BVEC4 IVEC2 IVEC3 IVEC4 I64VEC2 I64VEC3 I64VEC4 UVEC2 UVEC3 UVEC4 U64VEC2 U64VEC3 U64VEC4 VEC2 VEC3 VEC4
+%token <lex> BVEC2 BVEC3 BVEC4
+%token <lex> IVEC2 IVEC3 IVEC4
+%token <lex> UVEC2 UVEC3 UVEC4
+%token <lex> I64VEC2 I64VEC3 I64VEC4
+%token <lex> U64VEC2 U64VEC3 U64VEC4
+%token <lex> I32VEC2 I32VEC3 I32VEC4
+%token <lex> U32VEC2 U32VEC3 U32VEC4
+%token <lex> I16VEC2 I16VEC3 I16VEC4
+%token <lex> U16VEC2 U16VEC3 U16VEC4
+%token <lex> I8VEC2  I8VEC3  I8VEC4
+%token <lex> U8VEC2  U8VEC3  U8VEC4
+%token <lex> VEC2 VEC3 VEC4
 %token <lex> MAT2 MAT3 MAT4 CENTROID IN OUT INOUT
-%token <lex> UNIFORM PATCH SAMPLE BUFFER SHARED
+%token <lex> UNIFORM PATCH SAMPLE BUFFER SHARED NONUNIFORM
 %token <lex> COHERENT VOLATILE RESTRICT READONLY WRITEONLY
 %token <lex> DVEC2 DVEC3 DVEC4 DMAT2 DMAT3 DMAT4
 %token <lex> F16VEC2 F16VEC3 F16VEC4 F16MAT2 F16MAT3 F16MAT4
-%token <lex> I16VEC2 I16VEC3 I16VEC4 U16VEC2 U16VEC3 U16VEC4
+%token <lex> F32VEC2 F32VEC3 F32VEC4 F32MAT2 F32MAT3 F32MAT4
+%token <lex> F64VEC2 F64VEC3 F64VEC4 F64MAT2 F64MAT3 F64MAT4
 %token <lex> NOPERSPECTIVE FLAT SMOOTH LAYOUT __EXPLICITINTERPAMD
 
 %token <lex> MAT2X2 MAT2X3 MAT2X4
@@ -141,6 +157,12 @@
 %token <lex> F16MAT2X2 F16MAT2X3 F16MAT2X4
 %token <lex> F16MAT3X2 F16MAT3X3 F16MAT3X4
 %token <lex> F16MAT4X2 F16MAT4X3 F16MAT4X4
+%token <lex> F32MAT2X2 F32MAT2X3 F32MAT2X4
+%token <lex> F32MAT3X2 F32MAT3X3 F32MAT3X4
+%token <lex> F32MAT4X2 F32MAT4X3 F32MAT4X4
+%token <lex> F64MAT2X2 F64MAT2X3 F64MAT2X4
+%token <lex> F64MAT3X2 F64MAT3X3 F64MAT3X4
+%token <lex> F64MAT4X2 F64MAT4X3 F64MAT4X4
 %token <lex> ATOMIC_UINT
 
 // combined image/sampler
@@ -157,6 +179,12 @@
 %token <lex> SAMPLER2DMSARRAY ISAMPLER2DMSARRAY USAMPLER2DMSARRAY
 %token <lex> SAMPLEREXTERNALOES
 
+%token <lex> F16SAMPLER1D F16SAMPLER2D F16SAMPLER3D F16SAMPLER2DRECT F16SAMPLERCUBE
+%token <lex> F16SAMPLER1DARRAY F16SAMPLER2DARRAY F16SAMPLERCUBEARRAY
+%token <lex> F16SAMPLERBUFFER F16SAMPLER2DMS F16SAMPLER2DMSARRAY
+%token <lex> F16SAMPLER1DSHADOW F16SAMPLER2DSHADOW F16SAMPLER1DARRAYSHADOW F16SAMPLER2DARRAYSHADOW
+%token <lex> F16SAMPLER2DRECTSHADOW F16SAMPLERCUBESHADOW F16SAMPLERCUBEARRAYSHADOW
+
 // pure sampler
 %token <lex> SAMPLER SAMPLERSHADOW
 
@@ -172,8 +200,13 @@
 %token <lex> TEXTURE2DMS ITEXTURE2DMS UTEXTURE2DMS
 %token <lex> TEXTURE2DMSARRAY ITEXTURE2DMSARRAY UTEXTURE2DMSARRAY
 
+%token <lex> F16TEXTURE1D F16TEXTURE2D F16TEXTURE3D F16TEXTURE2DRECT F16TEXTURECUBE
+%token <lex> F16TEXTURE1DARRAY F16TEXTURE2DARRAY F16TEXTURECUBEARRAY
+%token <lex> F16TEXTUREBUFFER F16TEXTURE2DMS F16TEXTURE2DMSARRAY
+
 // input attachments
 %token <lex> SUBPASSINPUT SUBPASSINPUTMS ISUBPASSINPUT ISUBPASSINPUTMS USUBPASSINPUT USUBPASSINPUTMS
+%token <lex> F16SUBPASSINPUT F16SUBPASSINPUTMS
 
 %token <lex> IMAGE1D IIMAGE1D UIMAGE1D IMAGE2D IIMAGE2D
 %token <lex> UIMAGE2D IMAGE3D IIMAGE3D UIMAGE3D
@@ -186,10 +219,14 @@
 %token <lex> IMAGE2DMS IIMAGE2DMS UIMAGE2DMS
 %token <lex> IMAGE2DMSARRAY IIMAGE2DMSARRAY UIMAGE2DMSARRAY
 
+%token <lex> F16IMAGE1D F16IMAGE2D F16IMAGE3D F16IMAGE2DRECT
+%token <lex> F16IMAGECUBE F16IMAGE1DARRAY F16IMAGE2DARRAY F16IMAGECUBEARRAY
+%token <lex> F16IMAGEBUFFER F16IMAGE2DMS F16IMAGE2DMSARRAY
+
 %token <lex> STRUCT VOID WHILE
 
 %token <lex> IDENTIFIER TYPE_NAME
-%token <lex> FLOATCONSTANT DOUBLECONSTANT INTCONSTANT UINTCONSTANT INT64CONSTANT UINT64CONSTANT INT16CONSTANT UINT16CONSTANT BOOLCONSTANT FLOAT16CONSTANT
+%token <lex> FLOATCONSTANT DOUBLECONSTANT INT16CONSTANT UINT16CONSTANT INT32CONSTANT UINT32CONSTANT INTCONSTANT UINTCONSTANT INT64CONSTANT UINT64CONSTANT BOOLCONSTANT FLOAT16CONSTANT
 %token <lex> LEFT_OP RIGHT_OP
 %token <lex> INC_OP DEC_OP LE_OP GE_OP EQ_OP NE_OP
 %token <lex> AND_OP OR_OP XOR_OP MUL_ASSIGN DIV_ASSIGN ADD_ASSIGN
@@ -218,12 +255,12 @@
 %type <interm.intermNode> translation_unit function_definition
 %type <interm.intermNode> statement simple_statement
 %type <interm.intermNode> statement_list switch_statement_list compound_statement
-%type <interm.intermNode> declaration_statement selection_statement expression_statement
-%type <interm.intermNode> switch_statement case_label
+%type <interm.intermNode> declaration_statement selection_statement selection_statement_nonattributed expression_statement
+%type <interm.intermNode> switch_statement switch_statement_nonattributed case_label
 %type <interm.intermNode> declaration external_declaration
 %type <interm.intermNode> for_init_statement compound_statement_no_new_scope
 %type <interm.nodePair> selection_rest_statement for_rest_statement
-%type <interm.intermNode> iteration_statement jump_statement statement_no_new_scope statement_scoped
+%type <interm.intermNode> iteration_statement iteration_statement_nonattributed jump_statement statement_no_new_scope statement_scoped
 %type <interm> single_declaration init_declarator_list
 
 %type <interm> parameter_declaration parameter_declarator parameter_type_specifier
@@ -231,6 +268,7 @@
 %type <interm> array_specifier
 %type <interm.type> precise_qualifier invariant_qualifier interpolation_qualifier storage_qualifier precision_qualifier
 %type <interm.type> layout_qualifier layout_qualifier_id_list layout_qualifier_id
+%type <interm.type> non_uniform_qualifier
 
 %type <interm.type> type_qualifier fully_specified_type type_specifier
 %type <interm.type> single_type_qualifier
@@ -246,6 +284,8 @@
 
 %type <interm.identifierList> identifier_list
 
+%type <interm.attributes> attribute attribute_list single_attribute
+
 %start translation_unit
 %%
 
@@ -259,6 +299,14 @@
     : variable_identifier {
         $$ = $1;
     }
+    | INT32CONSTANT {
+        parseContext.explicitInt32Check($1.loc, "32-bit signed literal");
+        $$ = parseContext.intermediate.addConstantUnion($1.i, $1.loc, true);
+    }
+    | UINT32CONSTANT {
+        parseContext.explicitInt32Check($1.loc, "32-bit signed literal");
+        $$ = parseContext.intermediate.addConstantUnion($1.u, $1.loc, true);
+    }
     | INTCONSTANT {
         $$ = parseContext.intermediate.addConstantUnion($1.i, $1.loc, true);
     }
@@ -275,16 +323,12 @@
         $$ = parseContext.intermediate.addConstantUnion($1.u64, $1.loc, true);
     }
     | INT16CONSTANT {
-#ifdef AMD_EXTENSIONS
-        parseContext.int16Check($1.loc, "16-bit integer literal");
+        parseContext.explicitInt16Check($1.loc, "16-bit integer literal");
         $$ = parseContext.intermediate.addConstantUnion((short)$1.i, $1.loc, true);
-#endif
     }
     | UINT16CONSTANT {
-#ifdef AMD_EXTENSIONS
-        parseContext.int16Check($1.loc, "16-bit unsigned integer literal");
+        parseContext.explicitInt16Check($1.loc, "16-bit unsigned integer literal");
         $$ = parseContext.intermediate.addConstantUnion((unsigned short)$1.u, $1.loc, true);
-#endif
     }
     | FLOATCONSTANT {
         $$ = parseContext.intermediate.addConstantUnion($1.d, EbtFloat, $1.loc, true);
@@ -294,10 +338,8 @@
         $$ = parseContext.intermediate.addConstantUnion($1.d, EbtDouble, $1.loc, true);
     }
     | FLOAT16CONSTANT {
-#ifdef AMD_EXTENSIONS
         parseContext.float16Check($1.loc, "half float literal");
         $$ = parseContext.intermediate.addConstantUnion($1.d, EbtFloat16, $1.loc, true);
-#endif
     }
     | BOOLCONSTANT {
         $$ = parseContext.intermediate.addConstantUnion($1.b, $1.loc, true);
@@ -432,6 +474,11 @@
             $$.function = new TFunction(&empty, TType(EbtVoid), EOpNull);
         }
     }
+    | non_uniform_qualifier {
+        // Constructor
+        $$.intermNode = 0;
+        $$.function = parseContext.handleConstructorCall($1.loc, $1);
+    }
     ;
 
 unary_expression
@@ -893,14 +940,16 @@
             parseContext.profileRequires($1.loc, EEsProfile, 300, 0, "arrayed type");
             parseContext.arraySizeRequiredCheck($1.loc, *$1.arraySizes);
         }
-        parseContext.arrayDimCheck($2.loc, $1.arraySizes, $3.arraySizes);
+        TType* type = new TType($1);
+        type->transferArraySizes($3.arraySizes);
+        type->copyArrayInnerSizes($1.arraySizes);
 
+        parseContext.arrayOfArrayVersionCheck($2.loc, type->getArraySizes());
         parseContext.arraySizeRequiredCheck($3.loc, *$3.arraySizes);
         parseContext.reservedErrorCheck($2.loc, *$2.string);
 
-        $1.arraySizes = $3.arraySizes;
+        TParameter param = { $2.string, type };
 
-        TParameter param = { $2.string, new TType($1)};
         $$.loc = $2.loc;
         $$.param = param;
     }
@@ -925,7 +974,7 @@
         $$ = $1;
 
         parseContext.parameterTypeCheck($1.loc, EvqIn, *$1.param.type);
-        parseContext.paramCheckFix($1.loc, EvqTemporary, *$$.param.type);
+        parseContext.paramCheckFixStorage($1.loc, EvqTemporary, *$$.param.type);
         parseContext.precisionQualifierCheck($$.loc, $$.param.type->getBasicType(), $$.param.type->getQualifier());
     }
     //
@@ -945,7 +994,7 @@
         $$ = $1;
 
         parseContext.parameterTypeCheck($1.loc, EvqIn, *$1.param.type);
-        parseContext.paramCheckFix($1.loc, EvqTemporary, *$$.param.type);
+        parseContext.paramCheckFixStorage($1.loc, EvqTemporary, *$$.param.type);
         parseContext.precisionQualifierCheck($$.loc, $$.param.type->getBasicType(), $$.param.type->getQualifier());
     }
     ;
@@ -1034,7 +1083,7 @@
         }
 
         if ($2.arraySizes && parseContext.arrayQualifierError($2.loc, $1.qualifier))
-            $2.arraySizes = 0;
+            $2.arraySizes = nullptr;
 
         parseContext.checkNoShaderLayouts($2.loc, $1.shaderQualifiers);
         $2.shaderQualifiers.merge($1.shaderQualifiers);
@@ -1076,7 +1125,11 @@
     }
     | NOPERSPECTIVE {
         parseContext.globalCheck($1.loc, "noperspective");
+#ifdef NV_EXTENSIONS
+        parseContext.profileRequires($1.loc, EEsProfile, 0, E_GL_NV_shader_noperspective_interpolation, "noperspective");
+#else
         parseContext.requireProfile($1.loc, ~EEsProfile, "noperspective");
+#endif
         parseContext.profileRequires($1.loc, ENoProfile, 130, 0, "noperspective");
         $$.init($1.loc);
         $$.qualifier.nopersp = true;
@@ -1170,6 +1223,9 @@
         // allow inheritance of storage qualifier from block declaration
         $$ = $1;
     }
+    | non_uniform_qualifier {
+        $$ = $1;
+    }
     ;
 
 storage_qualifier
@@ -1290,6 +1346,13 @@
     }
     ;
 
+non_uniform_qualifier
+    : NONUNIFORM {
+        $$.init($1.loc);
+        $$.qualifier.nonUniform = true;
+    }
+    ;
+
 type_name_list
     : IDENTIFIER {
         // TODO
@@ -1307,7 +1370,7 @@
         $$.qualifier.precision = parseContext.getDefaultPrecision($$);
     }
     | type_specifier_nonarray array_specifier {
-        parseContext.arrayDimCheck($2.loc, $2.arraySizes, 0);
+        parseContext.arrayOfArrayVersionCheck($2.loc, $2.arraySizes);
         $$ = $1;
         $$.qualifier.precision = parseContext.getDefaultPrecision($$);
         $$.arraySizes = $2.arraySizes;
@@ -1356,11 +1419,19 @@
         $$.basicType = EbtDouble;
     }
     | FLOAT16_T {
-#ifdef AMD_EXTENSIONS
-        parseContext.float16Check($1.loc, "half float", parseContext.symbolTable.atBuiltInLevel());
+        parseContext.float16Check($1.loc, "float16_t", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtFloat16;
-#endif
+    }
+    | FLOAT32_T {
+        parseContext.explicitFloat32Check($1.loc, "float32_t", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat;
+    }
+    | FLOAT64_T {
+        parseContext.explicitFloat64Check($1.loc, "float64_t", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtDouble;
     }
     | INT {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -1371,6 +1442,36 @@
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtUint;
     }
+    | INT8_T {
+        parseContext.explicitInt8Check($1.loc, "8-bit signed integer", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtInt8;
+    }
+    | UINT8_T {
+        parseContext.explicitInt8Check($1.loc, "8-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtUint8;
+    }
+    | INT16_T {
+        parseContext.explicitInt16Check($1.loc, "16-bit signed integer", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtInt16;
+    }
+    | UINT16_T {
+        parseContext.explicitInt16Check($1.loc, "16-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtUint16;
+    }
+    | INT32_T {
+        parseContext.explicitInt32Check($1.loc, "32-bit signed integer", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtInt;
+    }
+    | UINT32_T {
+        parseContext.explicitInt32Check($1.loc, "32-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtUint;
+    }
     | INT64_T {
         parseContext.int64Check($1.loc, "64-bit integer", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -1381,20 +1482,6 @@
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtUint64;
     }
-    | INT16_T {
-#ifdef AMD_EXTENSIONS
-        parseContext.int16Check($1.loc, "16-bit integer", parseContext.symbolTable.atBuiltInLevel());
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtInt16;
-#endif
-    }
-    | UINT16_T {
-#ifdef AMD_EXTENSIONS
-        parseContext.int16Check($1.loc, "16-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtUint16;
-#endif
-    }
     | BOOL {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtBool;
@@ -1433,28 +1520,58 @@
         $$.setVector(4);
     }
     | F16VEC2 {
-#ifdef AMD_EXTENSIONS
         parseContext.float16Check($1.loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtFloat16;
         $$.setVector(2);
-#endif
     }
     | F16VEC3 {
-#ifdef AMD_EXTENSIONS
         parseContext.float16Check($1.loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtFloat16;
         $$.setVector(3);
-#endif
     }
     | F16VEC4 {
-#ifdef AMD_EXTENSIONS
         parseContext.float16Check($1.loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtFloat16;
         $$.setVector(4);
-#endif
+    }
+    | F32VEC2 {
+        parseContext.explicitFloat32Check($1.loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat;
+        $$.setVector(2);
+    }
+    | F32VEC3 {
+        parseContext.explicitFloat32Check($1.loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat;
+        $$.setVector(3);
+    }
+    | F32VEC4 {
+        parseContext.explicitFloat32Check($1.loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat;
+        $$.setVector(4);
+    }
+    | F64VEC2 {
+        parseContext.explicitFloat64Check($1.loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtDouble;
+        $$.setVector(2);
+    }
+    | F64VEC3 {
+        parseContext.explicitFloat64Check($1.loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtDouble;
+        $$.setVector(3);
+    }
+    | F64VEC4 {
+        parseContext.explicitFloat64Check($1.loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtDouble;
+        $$.setVector(4);
     }
     | BVEC2 {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -1486,6 +1603,60 @@
         $$.basicType = EbtInt;
         $$.setVector(4);
     }
+    | I8VEC2 {
+       parseContext.explicitInt8Check($1.loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+       $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+       $$.basicType = EbtInt8;
+       $$.setVector(2);
+    }
+    | I8VEC3 {
+       parseContext.explicitInt8Check($1.loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+       $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+       $$.basicType = EbtInt8;
+       $$.setVector(3);
+    }
+    | I8VEC4 {
+       parseContext.explicitInt8Check($1.loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+       $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+       $$.basicType = EbtInt8;
+       $$.setVector(4);
+    }
+    | I16VEC2 {
+       parseContext.explicitInt16Check($1.loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+       $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+       $$.basicType = EbtInt16;
+       $$.setVector(2);
+    }
+    | I16VEC3 {
+       parseContext.explicitInt16Check($1.loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+       $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+       $$.basicType = EbtInt16;
+       $$.setVector(3);
+    }
+    | I16VEC4 {
+       parseContext.explicitInt16Check($1.loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+       $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+       $$.basicType = EbtInt16;
+       $$.setVector(4);
+    }
+    | I32VEC2 {
+        parseContext.explicitInt32Check($1.loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtInt;
+        $$.setVector(2);
+    }
+    | I32VEC3 {
+        parseContext.explicitInt32Check($1.loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtInt;
+        $$.setVector(3);
+    }
+    | I32VEC4 {
+        parseContext.explicitInt32Check($1.loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtInt;
+        $$.setVector(4);
+    }
     | I64VEC2 {
         parseContext.int64Check($1.loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -1504,30 +1675,6 @@
         $$.basicType = EbtInt64;
         $$.setVector(4);
     }
-    | I16VEC2 {
-#ifdef AMD_EXTENSIONS
-        parseContext.int16Check($1.loc, "16-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtInt16;
-        $$.setVector(2);
-#endif
-    }
-    | I16VEC3 {
-#ifdef AMD_EXTENSIONS
-        parseContext.int16Check($1.loc, "16-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtInt16;
-        $$.setVector(3);
-#endif
-    }
-    | I16VEC4 {
-#ifdef AMD_EXTENSIONS
-        parseContext.int16Check($1.loc, "16-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtInt16;
-        $$.setVector(4);
-#endif
-    }
     | UVEC2 {
         parseContext.fullIntegerCheck($1.loc, "unsigned integer vector");
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -1546,6 +1693,60 @@
         $$.basicType = EbtUint;
         $$.setVector(4);
     }
+    | U8VEC2 {
+        parseContext.explicitInt8Check($1.loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtUint8;
+        $$.setVector(2);
+    }
+    | U8VEC3 {
+        parseContext.explicitInt8Check($1.loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtInt8;
+        $$.setVector(3);
+    }
+    | U8VEC4 {
+        parseContext.explicitInt8Check($1.loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtUint8;
+        $$.setVector(4);
+    }
+    | U16VEC2 {
+        parseContext.explicitInt16Check($1.loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtUint16;
+        $$.setVector(2);
+    }
+    | U16VEC3 {
+        parseContext.explicitInt16Check($1.loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtUint16;
+        $$.setVector(3);
+    }
+    | U16VEC4 {
+        parseContext.explicitInt16Check($1.loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtUint16;
+        $$.setVector(4);
+    }
+    | U32VEC2 {
+        parseContext.explicitInt32Check($1.loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtUint;
+        $$.setVector(2);
+    }
+    | U32VEC3 {
+        parseContext.explicitInt32Check($1.loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtUint;
+        $$.setVector(3);
+    }
+    | U32VEC4 {
+        parseContext.explicitInt32Check($1.loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtUint;
+        $$.setVector(4);
+    }
     | U64VEC2 {
         parseContext.int64Check($1.loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -1564,30 +1765,6 @@
         $$.basicType = EbtUint64;
         $$.setVector(4);
     }
-    | U16VEC2 {
-#ifdef AMD_EXTENSIONS
-        parseContext.int16Check($1.loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtUint16;
-        $$.setVector(2);
-#endif
-    }
-    | U16VEC3 {
-#ifdef AMD_EXTENSIONS
-        parseContext.int16Check($1.loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtUint16;
-        $$.setVector(3);
-#endif
-    }
-    | U16VEC4 {
-#ifdef AMD_EXTENSIONS
-        parseContext.int16Check($1.loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtUint16;
-        $$.setVector(4);
-#endif
-    }
     | MAT2 {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtFloat;
@@ -1721,100 +1898,220 @@
         $$.setMatrix(4, 4);
     }
     | F16MAT2 {
-#ifdef AMD_EXTENSIONS
         parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtFloat16;
         $$.setMatrix(2, 2);
-#endif
     }
     | F16MAT3 {
-#ifdef AMD_EXTENSIONS
         parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtFloat16;
         $$.setMatrix(3, 3);
-#endif
     }
     | F16MAT4 {
-#ifdef AMD_EXTENSIONS
         parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtFloat16;
         $$.setMatrix(4, 4);
-#endif
     }
     | F16MAT2X2 {
-#ifdef AMD_EXTENSIONS
         parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtFloat16;
         $$.setMatrix(2, 2);
-#endif
     }
     | F16MAT2X3 {
-#ifdef AMD_EXTENSIONS
         parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtFloat16;
         $$.setMatrix(2, 3);
-#endif
     }
     | F16MAT2X4 {
-#ifdef AMD_EXTENSIONS
         parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtFloat16;
         $$.setMatrix(2, 4);
-#endif
     }
     | F16MAT3X2 {
-#ifdef AMD_EXTENSIONS
         parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtFloat16;
         $$.setMatrix(3, 2);
-#endif
     }
     | F16MAT3X3 {
-#ifdef AMD_EXTENSIONS
         parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtFloat16;
         $$.setMatrix(3, 3);
-#endif
     }
     | F16MAT3X4 {
-#ifdef AMD_EXTENSIONS
         parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtFloat16;
         $$.setMatrix(3, 4);
-#endif
     }
     | F16MAT4X2 {
-#ifdef AMD_EXTENSIONS
         parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtFloat16;
         $$.setMatrix(4, 2);
-#endif
     }
     | F16MAT4X3 {
-#ifdef AMD_EXTENSIONS
         parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtFloat16;
         $$.setMatrix(4, 3);
-#endif
     }
     | F16MAT4X4 {
-#ifdef AMD_EXTENSIONS
         parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtFloat16;
         $$.setMatrix(4, 4);
-#endif
+    }
+    | F32MAT2 {
+        parseContext.explicitFloat32Check($1.loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat;
+        $$.setMatrix(2, 2);
+    }
+    | F32MAT3 {
+        parseContext.explicitFloat32Check($1.loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat;
+        $$.setMatrix(3, 3);
+    }
+    | F32MAT4 {
+        parseContext.explicitFloat32Check($1.loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat;
+        $$.setMatrix(4, 4);
+    }
+    | F32MAT2X2 {
+        parseContext.explicitFloat32Check($1.loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat;
+        $$.setMatrix(2, 2);
+    }
+    | F32MAT2X3 {
+        parseContext.explicitFloat32Check($1.loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat;
+        $$.setMatrix(2, 3);
+    }
+    | F32MAT2X4 {
+        parseContext.explicitFloat32Check($1.loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat;
+        $$.setMatrix(2, 4);
+    }
+    | F32MAT3X2 {
+        parseContext.explicitFloat32Check($1.loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat;
+        $$.setMatrix(3, 2);
+    }
+    | F32MAT3X3 {
+        parseContext.explicitFloat32Check($1.loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat;
+        $$.setMatrix(3, 3);
+    }
+    | F32MAT3X4 {
+        parseContext.explicitFloat32Check($1.loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat;
+        $$.setMatrix(3, 4);
+    }
+    | F32MAT4X2 {
+        parseContext.explicitFloat32Check($1.loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat;
+        $$.setMatrix(4, 2);
+    }
+    | F32MAT4X3 {
+        parseContext.explicitFloat32Check($1.loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat;
+        $$.setMatrix(4, 3);
+    }
+    | F32MAT4X4 {
+        parseContext.explicitFloat32Check($1.loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtFloat;
+        $$.setMatrix(4, 4);
+    }
+    | F64MAT2 {
+        parseContext.explicitFloat64Check($1.loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtDouble;
+        $$.setMatrix(2, 2);
+    }
+    | F64MAT3 {
+        parseContext.explicitFloat64Check($1.loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtDouble;
+        $$.setMatrix(3, 3);
+    }
+    | F64MAT4 {
+        parseContext.explicitFloat64Check($1.loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtDouble;
+        $$.setMatrix(4, 4);
+    }
+    | F64MAT2X2 {
+        parseContext.explicitFloat64Check($1.loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtDouble;
+        $$.setMatrix(2, 2);
+    }
+    | F64MAT2X3 {
+        parseContext.explicitFloat64Check($1.loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtDouble;
+        $$.setMatrix(2, 3);
+    }
+    | F64MAT2X4 {
+        parseContext.explicitFloat64Check($1.loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtDouble;
+        $$.setMatrix(2, 4);
+    }
+    | F64MAT3X2 {
+        parseContext.explicitFloat64Check($1.loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtDouble;
+        $$.setMatrix(3, 2);
+    }
+    | F64MAT3X3 {
+        parseContext.explicitFloat64Check($1.loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtDouble;
+        $$.setMatrix(3, 3);
+    }
+    | F64MAT3X4 {
+        parseContext.explicitFloat64Check($1.loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtDouble;
+        $$.setMatrix(3, 4);
+    }
+    | F64MAT4X2 {
+        parseContext.explicitFloat64Check($1.loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtDouble;
+        $$.setMatrix(4, 2);
+    }
+    | F64MAT4X3 {
+        parseContext.explicitFloat64Check($1.loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtDouble;
+        $$.setMatrix(4, 3);
+    }
+    | F64MAT4X4 {
+        parseContext.explicitFloat64Check($1.loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtDouble;
+        $$.setMatrix(4, 4);
     }
     | ATOMIC_UINT {
         parseContext.vulkanRemoved($1.loc, "atomic counter types");
@@ -1886,6 +2183,110 @@
         $$.basicType = EbtSampler;
         $$.sampler.set(EbtFloat, EsdCube, true, true);
     }
+    | F16SAMPLER1D {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat16, Esd1D);
+#endif
+    }
+    | F16SAMPLER2D {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat16, Esd2D);
+#endif
+    }
+    | F16SAMPLER3D {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat16, Esd3D);
+#endif
+    }
+    | F16SAMPLERCUBE {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat16, EsdCube);
+#endif
+    }
+    | F16SAMPLER1DSHADOW {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat16, Esd1D, false, true);
+#endif
+    }
+    | F16SAMPLER2DSHADOW {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat16, Esd2D, false, true);
+#endif
+    }
+    | F16SAMPLERCUBESHADOW {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat16, EsdCube, false, true);
+#endif
+    }
+    | F16SAMPLER1DARRAY {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat16, Esd1D, true);
+#endif
+    }
+    | F16SAMPLER2DARRAY {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat16, Esd2D, true);
+#endif
+    }
+    | F16SAMPLER1DARRAYSHADOW {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat16, Esd1D, true, true);
+#endif
+    }
+    | F16SAMPLER2DARRAYSHADOW {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat16, Esd2D, true, true);
+#endif
+    }
+    | F16SAMPLERCUBEARRAY {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat16, EsdCube, true);
+#endif
+    }
+    | F16SAMPLERCUBEARRAYSHADOW {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat16, EsdCube, true, true);
+#endif
+    }
     | ISAMPLER1D {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -1966,6 +2367,22 @@
         $$.basicType = EbtSampler;
         $$.sampler.set(EbtFloat, EsdRect, false, true);
     }
+    | F16SAMPLER2DRECT {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat16, EsdRect);
+#endif
+    }
+    | F16SAMPLER2DRECTSHADOW {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat16, EsdRect, false, true);
+#endif
+    }
     | ISAMPLER2DRECT {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -1981,6 +2398,14 @@
         $$.basicType = EbtSampler;
         $$.sampler.set(EbtFloat, EsdBuffer);
     }
+    | F16SAMPLERBUFFER {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat16, EsdBuffer);
+#endif
+    }
     | ISAMPLERBUFFER {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -1996,6 +2421,14 @@
         $$.basicType = EbtSampler;
         $$.sampler.set(EbtFloat, Esd2D, false, false, true);
     }
+    | F16SAMPLER2DMS {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat16, Esd2D, false, false, true);
+#endif
+    }
     | ISAMPLER2DMS {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -2011,6 +2444,14 @@
         $$.basicType = EbtSampler;
         $$.sampler.set(EbtFloat, Esd2D, true, false, true);
     }
+    | F16SAMPLER2DMSARRAY {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat16, Esd2D, true, false, true);
+#endif
+    }
     | ISAMPLER2DMSARRAY {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -2036,36 +2477,92 @@
         $$.basicType = EbtSampler;
         $$.sampler.setTexture(EbtFloat, Esd1D);
     }
+    | F16TEXTURE1D {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtFloat16, Esd1D);
+#endif
+    }
     | TEXTURE2D {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.setTexture(EbtFloat, Esd2D);
     }
+    | F16TEXTURE2D {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtFloat16, Esd2D);
+#endif
+    }
     | TEXTURE3D {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.setTexture(EbtFloat, Esd3D);
     }
+    | F16TEXTURE3D {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtFloat16, Esd3D);
+#endif
+    }
     | TEXTURECUBE {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.setTexture(EbtFloat, EsdCube);
     }
+    | F16TEXTURECUBE {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtFloat16, EsdCube);
+#endif
+    }
     | TEXTURE1DARRAY {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.setTexture(EbtFloat, Esd1D, true);
     }
+    | F16TEXTURE1DARRAY {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtFloat16, Esd1D, true);
+#endif
+    }
     | TEXTURE2DARRAY {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.setTexture(EbtFloat, Esd2D, true);
     }
+    | F16TEXTURE2DARRAY {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtFloat16, Esd2D, true);
+#endif
+    }
     | TEXTURECUBEARRAY {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.setTexture(EbtFloat, EsdCube, true);
     }
+    | F16TEXTURECUBEARRAY {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtFloat16, EsdCube, true);
+#endif
+    }
     | ITEXTURE1D {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -2141,6 +2638,14 @@
         $$.basicType = EbtSampler;
         $$.sampler.setTexture(EbtFloat, EsdRect);
     }
+    | F16TEXTURE2DRECT {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtFloat16, EsdRect);
+#endif
+    }
     | ITEXTURE2DRECT {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -2156,6 +2661,14 @@
         $$.basicType = EbtSampler;
         $$.sampler.setTexture(EbtFloat, EsdBuffer);
     }
+    | F16TEXTUREBUFFER {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtFloat16, EsdBuffer);
+#endif
+    }
     | ITEXTUREBUFFER {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -2171,6 +2684,14 @@
         $$.basicType = EbtSampler;
         $$.sampler.setTexture(EbtFloat, Esd2D, false, false, true);
     }
+    | F16TEXTURE2DMS {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtFloat16, Esd2D, false, false, true);
+#endif
+    }
     | ITEXTURE2DMS {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -2186,6 +2707,14 @@
         $$.basicType = EbtSampler;
         $$.sampler.setTexture(EbtFloat, Esd2D, true, false, true);
     }
+    | F16TEXTURE2DMSARRAY {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtFloat16, Esd2D, true, false, true);
+#endif
+    }
     | ITEXTURE2DMSARRAY {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -2201,6 +2730,14 @@
         $$.basicType = EbtSampler;
         $$.sampler.setImage(EbtFloat, Esd1D);
     }
+    | F16IMAGE1D {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtFloat16, Esd1D);
+#endif
+    }
     | IIMAGE1D {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -2216,6 +2753,14 @@
         $$.basicType = EbtSampler;
         $$.sampler.setImage(EbtFloat, Esd2D);
     }
+    | F16IMAGE2D {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtFloat16, Esd2D);
+#endif
+    }
     | IIMAGE2D {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -2231,6 +2776,14 @@
         $$.basicType = EbtSampler;
         $$.sampler.setImage(EbtFloat, Esd3D);
     }
+    | F16IMAGE3D {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtFloat16, Esd3D);
+#endif
+    }
     | IIMAGE3D {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -2246,6 +2799,14 @@
         $$.basicType = EbtSampler;
         $$.sampler.setImage(EbtFloat, EsdRect);
     }
+    | F16IMAGE2DRECT {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtFloat16, EsdRect);
+#endif
+    }
     | IIMAGE2DRECT {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -2261,6 +2822,14 @@
         $$.basicType = EbtSampler;
         $$.sampler.setImage(EbtFloat, EsdCube);
     }
+    | F16IMAGECUBE {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtFloat16, EsdCube);
+#endif
+    }
     | IIMAGECUBE {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -2276,6 +2845,14 @@
         $$.basicType = EbtSampler;
         $$.sampler.setImage(EbtFloat, EsdBuffer);
     }
+    | F16IMAGEBUFFER {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtFloat16, EsdBuffer);
+#endif
+    }
     | IIMAGEBUFFER {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -2291,6 +2868,14 @@
         $$.basicType = EbtSampler;
         $$.sampler.setImage(EbtFloat, Esd1D, true);
     }
+    | F16IMAGE1DARRAY {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtFloat16, Esd1D, true);
+#endif
+    }
     | IIMAGE1DARRAY {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -2306,6 +2891,14 @@
         $$.basicType = EbtSampler;
         $$.sampler.setImage(EbtFloat, Esd2D, true);
     }
+    | F16IMAGE2DARRAY {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtFloat16, Esd2D, true);
+#endif
+    }
     | IIMAGE2DARRAY {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -2321,6 +2914,14 @@
         $$.basicType = EbtSampler;
         $$.sampler.setImage(EbtFloat, EsdCube, true);
     }
+    | F16IMAGECUBEARRAY {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtFloat16, EsdCube, true);
+#endif
+    }
     | IIMAGECUBEARRAY {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -2336,6 +2937,14 @@
         $$.basicType = EbtSampler;
         $$.sampler.setImage(EbtFloat, Esd2D, false, false, true);
     }
+    | F16IMAGE2DMS {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtFloat16, Esd2D, false, false, true);
+#endif
+    }
     | IIMAGE2DMS {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -2351,6 +2960,14 @@
         $$.basicType = EbtSampler;
         $$.sampler.setImage(EbtFloat, Esd2D, true, false, true);
     }
+    | F16IMAGE2DMSARRAY {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck($1.loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setImage(EbtFloat16, Esd2D, true, false, true);
+#endif
+    }
     | IIMAGE2DMSARRAY {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -2379,6 +2996,24 @@
         $$.basicType = EbtSampler;
         $$.sampler.setSubpass(EbtFloat, true);
     }
+    | F16SUBPASSINPUT {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck($1.loc, "half float subpass input", parseContext.symbolTable.atBuiltInLevel());
+        parseContext.requireStage($1.loc, EShLangFragment, "subpass input");
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setSubpass(EbtFloat16);
+#endif
+    }
+    | F16SUBPASSINPUTMS {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck($1.loc, "half float subpass input", parseContext.symbolTable.atBuiltInLevel());
+        parseContext.requireStage($1.loc, EShLangFragment, "subpass input");
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setSubpass(EbtFloat16, true);
+#endif
+    }
     | ISUBPASSINPUT {
         parseContext.requireStage($1.loc, EShLangFragment, "subpass input");
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -2493,12 +3128,15 @@
         parseContext.precisionQualifierCheck($1.loc, $1.basicType, $1.qualifier);
 
         for (unsigned int i = 0; i < $$->size(); ++i) {
-            parseContext.arrayDimCheck($1.loc, (*$$)[i].type, $1.arraySizes);
-            (*$$)[i].type->mergeType($1);
+            TType type($1);
+            type.setFieldName((*$$)[i].type->getFieldName());
+            type.transferArraySizes((*$$)[i].type->getArraySizes());
+            type.copyArrayInnerSizes($1.arraySizes);
+            parseContext.arrayOfArrayVersionCheck((*$$)[i].loc, type.getArraySizes());
+            (*$$)[i].type->shallowCopy(type);
         }
     }
     | type_qualifier type_specifier struct_declarator_list SEMICOLON {
-        parseContext.globalQualifierFixCheck($1.loc, $1.qualifier);
         if ($2.arraySizes) {
             parseContext.profileRequires($2.loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
             parseContext.profileRequires($2.loc, EEsProfile, 300, 0, "arrayed type");
@@ -2508,14 +3146,18 @@
 
         $$ = $3;
 
-        parseContext.checkNoShaderLayouts($1.loc, $1.shaderQualifiers);
+        parseContext.memberQualifierCheck($1);
         parseContext.voidErrorCheck($2.loc, (*$3)[0].type->getFieldName(), $2.basicType);
         parseContext.mergeQualifiers($2.loc, $2.qualifier, $1.qualifier, true);
         parseContext.precisionQualifierCheck($2.loc, $2.basicType, $2.qualifier);
 
         for (unsigned int i = 0; i < $$->size(); ++i) {
-            parseContext.arrayDimCheck($1.loc, (*$$)[i].type, $2.arraySizes);
-            (*$$)[i].type->mergeType($2);
+            TType type($2);
+            type.setFieldName((*$$)[i].type->getFieldName());
+            type.transferArraySizes((*$$)[i].type->getArraySizes());
+            type.copyArrayInnerSizes($2.arraySizes);
+            parseContext.arrayOfArrayVersionCheck((*$$)[i].loc, type.getArraySizes());
+            (*$$)[i].type->shallowCopy(type);
         }
     }
     ;
@@ -2537,12 +3179,12 @@
         $$.type->setFieldName(*$1.string);
     }
     | IDENTIFIER array_specifier {
-        parseContext.arrayDimCheck($1.loc, $2.arraySizes, 0);
+        parseContext.arrayOfArrayVersionCheck($1.loc, $2.arraySizes);
 
         $$.type = new TType(EbtVoid);
         $$.loc = $1.loc;
         $$.type->setFieldName(*$1.string);
-        $$.type->newArraySizes(*$2.arraySizes);
+        $$.type->transferArraySizes($2.arraySizes);
     }
     ;
 
@@ -2673,6 +3315,15 @@
     ;
 
 selection_statement
+    : selection_statement_nonattributed {
+        $$ = $1;
+    }
+    | attribute selection_statement_nonattributed {
+        parseContext.handleSelectionAttributes(*$1, $2);
+        $$ = $2;
+    }
+
+selection_statement_nonattributed
     : IF LEFT_PAREN expression RIGHT_PAREN selection_rest_statement {
         parseContext.boolCheck($1.loc, $3);
         $$ = parseContext.intermediate.addSelection($3, $5, $1.loc);
@@ -2709,6 +3360,15 @@
     ;
 
 switch_statement
+    : switch_statement_nonattributed {
+        $$ = $1;
+    }
+    | attribute switch_statement_nonattributed {
+        parseContext.handleSwitchAttributes(*$1, $2);
+        $$ = $2;
+    }
+
+switch_statement_nonattributed
     : SWITCH LEFT_PAREN expression RIGHT_PAREN {
         // start new switch sequence on the switch stack
         ++parseContext.controlFlowNestingLevel;
@@ -2762,6 +3422,15 @@
     ;
 
 iteration_statement
+    : iteration_statement_nonattributed {
+        $$ = $1;
+    }
+    | attribute iteration_statement_nonattributed {
+        parseContext.handleLoopAttributes(*$1, $2);
+        $$ = $2;
+    }
+
+iteration_statement_nonattributed
     : WHILE LEFT_PAREN {
         if (! parseContext.limits.whileLoops)
             parseContext.error($1.loc, "while loops not available", "limitation", "");
@@ -2916,8 +3585,30 @@
         // information. This information can be queried from the parse tree
         $$->getAsAggregate()->setOptimize(parseContext.contextPragma.optimize);
         $$->getAsAggregate()->setDebug(parseContext.contextPragma.debug);
-        $$->getAsAggregate()->addToPragmaTable(parseContext.contextPragma.pragmaTable);
+        $$->getAsAggregate()->setPragmaTable(parseContext.contextPragma.pragmaTable);
     }
     ;
 
+attribute
+    : LEFT_BRACKET LEFT_BRACKET attribute_list RIGHT_BRACKET RIGHT_BRACKET {
+        $$ = $3;
+        parseContext.requireExtensions($1.loc, 1, &E_GL_EXT_control_flow_attributes, "attribute");
+    }
+
+attribute_list
+    : single_attribute {
+        $$ = $1;
+    }
+    | attribute_list COMMA single_attribute {
+        $$ = parseContext.mergeAttributes($1, $3);
+    }
+
+single_attribute
+    : IDENTIFIER {
+        $$ = parseContext.makeAttributes(*$1.string);
+    }
+    | IDENTIFIER LEFT_PAREN constant_expression RIGHT_PAREN {
+        $$ = parseContext.makeAttributes(*$1.string, $3);
+    }
+
 %%
diff --git a/glslang/MachineIndependent/glslang_tab.cpp b/glslang/MachineIndependent/glslang_tab.cpp
index fabec4b..38672d6 100644
--- a/glslang/MachineIndependent/glslang_tab.cpp
+++ b/glslang/MachineIndependent/glslang_tab.cpp
@@ -62,7 +62,7 @@
 
 
 /* Copy the first part of user declarations.  */
-#line 41 "MachineIndependent/glslang.y" /* yacc.c:339  */
+#line 42 "MachineIndependent/glslang.y" /* yacc.c:339  */
 
 
 /* Based on:
@@ -83,11 +83,12 @@
 #include "SymbolTable.h"
 #include "ParseHelper.h"
 #include "../Public/ShaderLang.h"
+#include "attribute.h"
 
 using namespace glslang;
 
 
-#line 91 "MachineIndependent/glslang_tab.cpp" /* yacc.c:339  */
+#line 92 "MachineIndependent/glslang_tab.cpp" /* yacc.c:339  */
 
 # ifndef YY_NULL
 #  if defined __cplusplus && 201103L <= __cplusplus
@@ -124,299 +125,392 @@
   {
     ATTRIBUTE = 258,
     VARYING = 259,
-    CONST = 260,
-    BOOL = 261,
-    FLOAT = 262,
+    FLOAT16_T = 260,
+    FLOAT = 261,
+    FLOAT32_T = 262,
     DOUBLE = 263,
-    INT = 264,
-    UINT = 265,
-    INT64_T = 266,
-    UINT64_T = 267,
-    INT16_T = 268,
-    UINT16_T = 269,
-    FLOAT16_T = 270,
-    BREAK = 271,
-    CONTINUE = 272,
-    DO = 273,
-    ELSE = 274,
-    FOR = 275,
-    IF = 276,
-    DISCARD = 277,
-    RETURN = 278,
-    SWITCH = 279,
-    CASE = 280,
-    DEFAULT = 281,
-    SUBROUTINE = 282,
-    BVEC2 = 283,
-    BVEC3 = 284,
-    BVEC4 = 285,
-    IVEC2 = 286,
-    IVEC3 = 287,
-    IVEC4 = 288,
-    I64VEC2 = 289,
-    I64VEC3 = 290,
-    I64VEC4 = 291,
-    UVEC2 = 292,
-    UVEC3 = 293,
-    UVEC4 = 294,
-    U64VEC2 = 295,
-    U64VEC3 = 296,
-    U64VEC4 = 297,
-    VEC2 = 298,
-    VEC3 = 299,
-    VEC4 = 300,
-    MAT2 = 301,
-    MAT3 = 302,
-    MAT4 = 303,
-    CENTROID = 304,
-    IN = 305,
-    OUT = 306,
-    INOUT = 307,
-    UNIFORM = 308,
-    PATCH = 309,
-    SAMPLE = 310,
-    BUFFER = 311,
-    SHARED = 312,
-    COHERENT = 313,
-    VOLATILE = 314,
-    RESTRICT = 315,
-    READONLY = 316,
-    WRITEONLY = 317,
-    DVEC2 = 318,
-    DVEC3 = 319,
-    DVEC4 = 320,
-    DMAT2 = 321,
-    DMAT3 = 322,
-    DMAT4 = 323,
-    F16VEC2 = 324,
-    F16VEC3 = 325,
-    F16VEC4 = 326,
-    F16MAT2 = 327,
-    F16MAT3 = 328,
-    F16MAT4 = 329,
-    I16VEC2 = 330,
-    I16VEC3 = 331,
-    I16VEC4 = 332,
-    U16VEC2 = 333,
-    U16VEC3 = 334,
-    U16VEC4 = 335,
-    NOPERSPECTIVE = 336,
-    FLAT = 337,
-    SMOOTH = 338,
-    LAYOUT = 339,
-    __EXPLICITINTERPAMD = 340,
-    MAT2X2 = 341,
-    MAT2X3 = 342,
-    MAT2X4 = 343,
-    MAT3X2 = 344,
-    MAT3X3 = 345,
-    MAT3X4 = 346,
-    MAT4X2 = 347,
-    MAT4X3 = 348,
-    MAT4X4 = 349,
-    DMAT2X2 = 350,
-    DMAT2X3 = 351,
-    DMAT2X4 = 352,
-    DMAT3X2 = 353,
-    DMAT3X3 = 354,
-    DMAT3X4 = 355,
-    DMAT4X2 = 356,
-    DMAT4X3 = 357,
-    DMAT4X4 = 358,
-    F16MAT2X2 = 359,
-    F16MAT2X3 = 360,
-    F16MAT2X4 = 361,
-    F16MAT3X2 = 362,
-    F16MAT3X3 = 363,
-    F16MAT3X4 = 364,
-    F16MAT4X2 = 365,
-    F16MAT4X3 = 366,
-    F16MAT4X4 = 367,
-    ATOMIC_UINT = 368,
-    SAMPLER1D = 369,
-    SAMPLER2D = 370,
-    SAMPLER3D = 371,
-    SAMPLERCUBE = 372,
-    SAMPLER1DSHADOW = 373,
-    SAMPLER2DSHADOW = 374,
-    SAMPLERCUBESHADOW = 375,
-    SAMPLER1DARRAY = 376,
-    SAMPLER2DARRAY = 377,
-    SAMPLER1DARRAYSHADOW = 378,
-    SAMPLER2DARRAYSHADOW = 379,
-    ISAMPLER1D = 380,
-    ISAMPLER2D = 381,
-    ISAMPLER3D = 382,
-    ISAMPLERCUBE = 383,
-    ISAMPLER1DARRAY = 384,
-    ISAMPLER2DARRAY = 385,
-    USAMPLER1D = 386,
-    USAMPLER2D = 387,
-    USAMPLER3D = 388,
-    USAMPLERCUBE = 389,
-    USAMPLER1DARRAY = 390,
-    USAMPLER2DARRAY = 391,
-    SAMPLER2DRECT = 392,
-    SAMPLER2DRECTSHADOW = 393,
-    ISAMPLER2DRECT = 394,
-    USAMPLER2DRECT = 395,
-    SAMPLERBUFFER = 396,
-    ISAMPLERBUFFER = 397,
-    USAMPLERBUFFER = 398,
-    SAMPLERCUBEARRAY = 399,
-    SAMPLERCUBEARRAYSHADOW = 400,
-    ISAMPLERCUBEARRAY = 401,
-    USAMPLERCUBEARRAY = 402,
-    SAMPLER2DMS = 403,
-    ISAMPLER2DMS = 404,
-    USAMPLER2DMS = 405,
-    SAMPLER2DMSARRAY = 406,
-    ISAMPLER2DMSARRAY = 407,
-    USAMPLER2DMSARRAY = 408,
-    SAMPLEREXTERNALOES = 409,
-    SAMPLER = 410,
-    SAMPLERSHADOW = 411,
-    TEXTURE1D = 412,
-    TEXTURE2D = 413,
-    TEXTURE3D = 414,
-    TEXTURECUBE = 415,
-    TEXTURE1DARRAY = 416,
-    TEXTURE2DARRAY = 417,
-    ITEXTURE1D = 418,
-    ITEXTURE2D = 419,
-    ITEXTURE3D = 420,
-    ITEXTURECUBE = 421,
-    ITEXTURE1DARRAY = 422,
-    ITEXTURE2DARRAY = 423,
-    UTEXTURE1D = 424,
-    UTEXTURE2D = 425,
-    UTEXTURE3D = 426,
-    UTEXTURECUBE = 427,
-    UTEXTURE1DARRAY = 428,
-    UTEXTURE2DARRAY = 429,
-    TEXTURE2DRECT = 430,
-    ITEXTURE2DRECT = 431,
-    UTEXTURE2DRECT = 432,
-    TEXTUREBUFFER = 433,
-    ITEXTUREBUFFER = 434,
-    UTEXTUREBUFFER = 435,
-    TEXTURECUBEARRAY = 436,
-    ITEXTURECUBEARRAY = 437,
-    UTEXTURECUBEARRAY = 438,
-    TEXTURE2DMS = 439,
-    ITEXTURE2DMS = 440,
-    UTEXTURE2DMS = 441,
-    TEXTURE2DMSARRAY = 442,
-    ITEXTURE2DMSARRAY = 443,
-    UTEXTURE2DMSARRAY = 444,
-    SUBPASSINPUT = 445,
-    SUBPASSINPUTMS = 446,
-    ISUBPASSINPUT = 447,
-    ISUBPASSINPUTMS = 448,
-    USUBPASSINPUT = 449,
-    USUBPASSINPUTMS = 450,
-    IMAGE1D = 451,
-    IIMAGE1D = 452,
-    UIMAGE1D = 453,
-    IMAGE2D = 454,
-    IIMAGE2D = 455,
-    UIMAGE2D = 456,
-    IMAGE3D = 457,
-    IIMAGE3D = 458,
-    UIMAGE3D = 459,
-    IMAGE2DRECT = 460,
-    IIMAGE2DRECT = 461,
-    UIMAGE2DRECT = 462,
-    IMAGECUBE = 463,
-    IIMAGECUBE = 464,
-    UIMAGECUBE = 465,
-    IMAGEBUFFER = 466,
-    IIMAGEBUFFER = 467,
-    UIMAGEBUFFER = 468,
-    IMAGE1DARRAY = 469,
-    IIMAGE1DARRAY = 470,
-    UIMAGE1DARRAY = 471,
-    IMAGE2DARRAY = 472,
-    IIMAGE2DARRAY = 473,
-    UIMAGE2DARRAY = 474,
-    IMAGECUBEARRAY = 475,
-    IIMAGECUBEARRAY = 476,
-    UIMAGECUBEARRAY = 477,
-    IMAGE2DMS = 478,
-    IIMAGE2DMS = 479,
-    UIMAGE2DMS = 480,
-    IMAGE2DMSARRAY = 481,
-    IIMAGE2DMSARRAY = 482,
-    UIMAGE2DMSARRAY = 483,
-    STRUCT = 484,
-    VOID = 485,
-    WHILE = 486,
-    IDENTIFIER = 487,
-    TYPE_NAME = 488,
-    FLOATCONSTANT = 489,
-    DOUBLECONSTANT = 490,
-    INTCONSTANT = 491,
-    UINTCONSTANT = 492,
-    INT64CONSTANT = 493,
-    UINT64CONSTANT = 494,
-    INT16CONSTANT = 495,
-    UINT16CONSTANT = 496,
-    BOOLCONSTANT = 497,
-    FLOAT16CONSTANT = 498,
-    LEFT_OP = 499,
-    RIGHT_OP = 500,
-    INC_OP = 501,
-    DEC_OP = 502,
-    LE_OP = 503,
-    GE_OP = 504,
-    EQ_OP = 505,
-    NE_OP = 506,
-    AND_OP = 507,
-    OR_OP = 508,
-    XOR_OP = 509,
-    MUL_ASSIGN = 510,
-    DIV_ASSIGN = 511,
-    ADD_ASSIGN = 512,
-    MOD_ASSIGN = 513,
-    LEFT_ASSIGN = 514,
-    RIGHT_ASSIGN = 515,
-    AND_ASSIGN = 516,
-    XOR_ASSIGN = 517,
-    OR_ASSIGN = 518,
-    SUB_ASSIGN = 519,
-    LEFT_PAREN = 520,
-    RIGHT_PAREN = 521,
-    LEFT_BRACKET = 522,
-    RIGHT_BRACKET = 523,
-    LEFT_BRACE = 524,
-    RIGHT_BRACE = 525,
-    DOT = 526,
-    COMMA = 527,
-    COLON = 528,
-    EQUAL = 529,
-    SEMICOLON = 530,
-    BANG = 531,
-    DASH = 532,
-    TILDE = 533,
-    PLUS = 534,
-    STAR = 535,
-    SLASH = 536,
-    PERCENT = 537,
-    LEFT_ANGLE = 538,
-    RIGHT_ANGLE = 539,
-    VERTICAL_BAR = 540,
-    CARET = 541,
-    AMPERSAND = 542,
-    QUESTION = 543,
-    INVARIANT = 544,
-    PRECISE = 545,
-    HIGH_PRECISION = 546,
-    MEDIUM_PRECISION = 547,
-    LOW_PRECISION = 548,
-    PRECISION = 549,
-    PACKED = 550,
-    RESOURCE = 551,
-    SUPERP = 552
+    FLOAT64_T = 264,
+    CONST = 265,
+    BOOL = 266,
+    INT = 267,
+    UINT = 268,
+    INT64_T = 269,
+    UINT64_T = 270,
+    INT32_T = 271,
+    UINT32_T = 272,
+    INT16_T = 273,
+    UINT16_T = 274,
+    INT8_T = 275,
+    UINT8_T = 276,
+    BREAK = 277,
+    CONTINUE = 278,
+    DO = 279,
+    ELSE = 280,
+    FOR = 281,
+    IF = 282,
+    DISCARD = 283,
+    RETURN = 284,
+    SWITCH = 285,
+    CASE = 286,
+    DEFAULT = 287,
+    SUBROUTINE = 288,
+    BVEC2 = 289,
+    BVEC3 = 290,
+    BVEC4 = 291,
+    IVEC2 = 292,
+    IVEC3 = 293,
+    IVEC4 = 294,
+    UVEC2 = 295,
+    UVEC3 = 296,
+    UVEC4 = 297,
+    I64VEC2 = 298,
+    I64VEC3 = 299,
+    I64VEC4 = 300,
+    U64VEC2 = 301,
+    U64VEC3 = 302,
+    U64VEC4 = 303,
+    I32VEC2 = 304,
+    I32VEC3 = 305,
+    I32VEC4 = 306,
+    U32VEC2 = 307,
+    U32VEC3 = 308,
+    U32VEC4 = 309,
+    I16VEC2 = 310,
+    I16VEC3 = 311,
+    I16VEC4 = 312,
+    U16VEC2 = 313,
+    U16VEC3 = 314,
+    U16VEC4 = 315,
+    I8VEC2 = 316,
+    I8VEC3 = 317,
+    I8VEC4 = 318,
+    U8VEC2 = 319,
+    U8VEC3 = 320,
+    U8VEC4 = 321,
+    VEC2 = 322,
+    VEC3 = 323,
+    VEC4 = 324,
+    MAT2 = 325,
+    MAT3 = 326,
+    MAT4 = 327,
+    CENTROID = 328,
+    IN = 329,
+    OUT = 330,
+    INOUT = 331,
+    UNIFORM = 332,
+    PATCH = 333,
+    SAMPLE = 334,
+    BUFFER = 335,
+    SHARED = 336,
+    NONUNIFORM = 337,
+    COHERENT = 338,
+    VOLATILE = 339,
+    RESTRICT = 340,
+    READONLY = 341,
+    WRITEONLY = 342,
+    DVEC2 = 343,
+    DVEC3 = 344,
+    DVEC4 = 345,
+    DMAT2 = 346,
+    DMAT3 = 347,
+    DMAT4 = 348,
+    F16VEC2 = 349,
+    F16VEC3 = 350,
+    F16VEC4 = 351,
+    F16MAT2 = 352,
+    F16MAT3 = 353,
+    F16MAT4 = 354,
+    F32VEC2 = 355,
+    F32VEC3 = 356,
+    F32VEC4 = 357,
+    F32MAT2 = 358,
+    F32MAT3 = 359,
+    F32MAT4 = 360,
+    F64VEC2 = 361,
+    F64VEC3 = 362,
+    F64VEC4 = 363,
+    F64MAT2 = 364,
+    F64MAT3 = 365,
+    F64MAT4 = 366,
+    NOPERSPECTIVE = 367,
+    FLAT = 368,
+    SMOOTH = 369,
+    LAYOUT = 370,
+    __EXPLICITINTERPAMD = 371,
+    MAT2X2 = 372,
+    MAT2X3 = 373,
+    MAT2X4 = 374,
+    MAT3X2 = 375,
+    MAT3X3 = 376,
+    MAT3X4 = 377,
+    MAT4X2 = 378,
+    MAT4X3 = 379,
+    MAT4X4 = 380,
+    DMAT2X2 = 381,
+    DMAT2X3 = 382,
+    DMAT2X4 = 383,
+    DMAT3X2 = 384,
+    DMAT3X3 = 385,
+    DMAT3X4 = 386,
+    DMAT4X2 = 387,
+    DMAT4X3 = 388,
+    DMAT4X4 = 389,
+    F16MAT2X2 = 390,
+    F16MAT2X3 = 391,
+    F16MAT2X4 = 392,
+    F16MAT3X2 = 393,
+    F16MAT3X3 = 394,
+    F16MAT3X4 = 395,
+    F16MAT4X2 = 396,
+    F16MAT4X3 = 397,
+    F16MAT4X4 = 398,
+    F32MAT2X2 = 399,
+    F32MAT2X3 = 400,
+    F32MAT2X4 = 401,
+    F32MAT3X2 = 402,
+    F32MAT3X3 = 403,
+    F32MAT3X4 = 404,
+    F32MAT4X2 = 405,
+    F32MAT4X3 = 406,
+    F32MAT4X4 = 407,
+    F64MAT2X2 = 408,
+    F64MAT2X3 = 409,
+    F64MAT2X4 = 410,
+    F64MAT3X2 = 411,
+    F64MAT3X3 = 412,
+    F64MAT3X4 = 413,
+    F64MAT4X2 = 414,
+    F64MAT4X3 = 415,
+    F64MAT4X4 = 416,
+    ATOMIC_UINT = 417,
+    SAMPLER1D = 418,
+    SAMPLER2D = 419,
+    SAMPLER3D = 420,
+    SAMPLERCUBE = 421,
+    SAMPLER1DSHADOW = 422,
+    SAMPLER2DSHADOW = 423,
+    SAMPLERCUBESHADOW = 424,
+    SAMPLER1DARRAY = 425,
+    SAMPLER2DARRAY = 426,
+    SAMPLER1DARRAYSHADOW = 427,
+    SAMPLER2DARRAYSHADOW = 428,
+    ISAMPLER1D = 429,
+    ISAMPLER2D = 430,
+    ISAMPLER3D = 431,
+    ISAMPLERCUBE = 432,
+    ISAMPLER1DARRAY = 433,
+    ISAMPLER2DARRAY = 434,
+    USAMPLER1D = 435,
+    USAMPLER2D = 436,
+    USAMPLER3D = 437,
+    USAMPLERCUBE = 438,
+    USAMPLER1DARRAY = 439,
+    USAMPLER2DARRAY = 440,
+    SAMPLER2DRECT = 441,
+    SAMPLER2DRECTSHADOW = 442,
+    ISAMPLER2DRECT = 443,
+    USAMPLER2DRECT = 444,
+    SAMPLERBUFFER = 445,
+    ISAMPLERBUFFER = 446,
+    USAMPLERBUFFER = 447,
+    SAMPLERCUBEARRAY = 448,
+    SAMPLERCUBEARRAYSHADOW = 449,
+    ISAMPLERCUBEARRAY = 450,
+    USAMPLERCUBEARRAY = 451,
+    SAMPLER2DMS = 452,
+    ISAMPLER2DMS = 453,
+    USAMPLER2DMS = 454,
+    SAMPLER2DMSARRAY = 455,
+    ISAMPLER2DMSARRAY = 456,
+    USAMPLER2DMSARRAY = 457,
+    SAMPLEREXTERNALOES = 458,
+    F16SAMPLER1D = 459,
+    F16SAMPLER2D = 460,
+    F16SAMPLER3D = 461,
+    F16SAMPLER2DRECT = 462,
+    F16SAMPLERCUBE = 463,
+    F16SAMPLER1DARRAY = 464,
+    F16SAMPLER2DARRAY = 465,
+    F16SAMPLERCUBEARRAY = 466,
+    F16SAMPLERBUFFER = 467,
+    F16SAMPLER2DMS = 468,
+    F16SAMPLER2DMSARRAY = 469,
+    F16SAMPLER1DSHADOW = 470,
+    F16SAMPLER2DSHADOW = 471,
+    F16SAMPLER1DARRAYSHADOW = 472,
+    F16SAMPLER2DARRAYSHADOW = 473,
+    F16SAMPLER2DRECTSHADOW = 474,
+    F16SAMPLERCUBESHADOW = 475,
+    F16SAMPLERCUBEARRAYSHADOW = 476,
+    SAMPLER = 477,
+    SAMPLERSHADOW = 478,
+    TEXTURE1D = 479,
+    TEXTURE2D = 480,
+    TEXTURE3D = 481,
+    TEXTURECUBE = 482,
+    TEXTURE1DARRAY = 483,
+    TEXTURE2DARRAY = 484,
+    ITEXTURE1D = 485,
+    ITEXTURE2D = 486,
+    ITEXTURE3D = 487,
+    ITEXTURECUBE = 488,
+    ITEXTURE1DARRAY = 489,
+    ITEXTURE2DARRAY = 490,
+    UTEXTURE1D = 491,
+    UTEXTURE2D = 492,
+    UTEXTURE3D = 493,
+    UTEXTURECUBE = 494,
+    UTEXTURE1DARRAY = 495,
+    UTEXTURE2DARRAY = 496,
+    TEXTURE2DRECT = 497,
+    ITEXTURE2DRECT = 498,
+    UTEXTURE2DRECT = 499,
+    TEXTUREBUFFER = 500,
+    ITEXTUREBUFFER = 501,
+    UTEXTUREBUFFER = 502,
+    TEXTURECUBEARRAY = 503,
+    ITEXTURECUBEARRAY = 504,
+    UTEXTURECUBEARRAY = 505,
+    TEXTURE2DMS = 506,
+    ITEXTURE2DMS = 507,
+    UTEXTURE2DMS = 508,
+    TEXTURE2DMSARRAY = 509,
+    ITEXTURE2DMSARRAY = 510,
+    UTEXTURE2DMSARRAY = 511,
+    F16TEXTURE1D = 512,
+    F16TEXTURE2D = 513,
+    F16TEXTURE3D = 514,
+    F16TEXTURE2DRECT = 515,
+    F16TEXTURECUBE = 516,
+    F16TEXTURE1DARRAY = 517,
+    F16TEXTURE2DARRAY = 518,
+    F16TEXTURECUBEARRAY = 519,
+    F16TEXTUREBUFFER = 520,
+    F16TEXTURE2DMS = 521,
+    F16TEXTURE2DMSARRAY = 522,
+    SUBPASSINPUT = 523,
+    SUBPASSINPUTMS = 524,
+    ISUBPASSINPUT = 525,
+    ISUBPASSINPUTMS = 526,
+    USUBPASSINPUT = 527,
+    USUBPASSINPUTMS = 528,
+    F16SUBPASSINPUT = 529,
+    F16SUBPASSINPUTMS = 530,
+    IMAGE1D = 531,
+    IIMAGE1D = 532,
+    UIMAGE1D = 533,
+    IMAGE2D = 534,
+    IIMAGE2D = 535,
+    UIMAGE2D = 536,
+    IMAGE3D = 537,
+    IIMAGE3D = 538,
+    UIMAGE3D = 539,
+    IMAGE2DRECT = 540,
+    IIMAGE2DRECT = 541,
+    UIMAGE2DRECT = 542,
+    IMAGECUBE = 543,
+    IIMAGECUBE = 544,
+    UIMAGECUBE = 545,
+    IMAGEBUFFER = 546,
+    IIMAGEBUFFER = 547,
+    UIMAGEBUFFER = 548,
+    IMAGE1DARRAY = 549,
+    IIMAGE1DARRAY = 550,
+    UIMAGE1DARRAY = 551,
+    IMAGE2DARRAY = 552,
+    IIMAGE2DARRAY = 553,
+    UIMAGE2DARRAY = 554,
+    IMAGECUBEARRAY = 555,
+    IIMAGECUBEARRAY = 556,
+    UIMAGECUBEARRAY = 557,
+    IMAGE2DMS = 558,
+    IIMAGE2DMS = 559,
+    UIMAGE2DMS = 560,
+    IMAGE2DMSARRAY = 561,
+    IIMAGE2DMSARRAY = 562,
+    UIMAGE2DMSARRAY = 563,
+    F16IMAGE1D = 564,
+    F16IMAGE2D = 565,
+    F16IMAGE3D = 566,
+    F16IMAGE2DRECT = 567,
+    F16IMAGECUBE = 568,
+    F16IMAGE1DARRAY = 569,
+    F16IMAGE2DARRAY = 570,
+    F16IMAGECUBEARRAY = 571,
+    F16IMAGEBUFFER = 572,
+    F16IMAGE2DMS = 573,
+    F16IMAGE2DMSARRAY = 574,
+    STRUCT = 575,
+    VOID = 576,
+    WHILE = 577,
+    IDENTIFIER = 578,
+    TYPE_NAME = 579,
+    FLOATCONSTANT = 580,
+    DOUBLECONSTANT = 581,
+    INT16CONSTANT = 582,
+    UINT16CONSTANT = 583,
+    INT32CONSTANT = 584,
+    UINT32CONSTANT = 585,
+    INTCONSTANT = 586,
+    UINTCONSTANT = 587,
+    INT64CONSTANT = 588,
+    UINT64CONSTANT = 589,
+    BOOLCONSTANT = 590,
+    FLOAT16CONSTANT = 591,
+    LEFT_OP = 592,
+    RIGHT_OP = 593,
+    INC_OP = 594,
+    DEC_OP = 595,
+    LE_OP = 596,
+    GE_OP = 597,
+    EQ_OP = 598,
+    NE_OP = 599,
+    AND_OP = 600,
+    OR_OP = 601,
+    XOR_OP = 602,
+    MUL_ASSIGN = 603,
+    DIV_ASSIGN = 604,
+    ADD_ASSIGN = 605,
+    MOD_ASSIGN = 606,
+    LEFT_ASSIGN = 607,
+    RIGHT_ASSIGN = 608,
+    AND_ASSIGN = 609,
+    XOR_ASSIGN = 610,
+    OR_ASSIGN = 611,
+    SUB_ASSIGN = 612,
+    LEFT_PAREN = 613,
+    RIGHT_PAREN = 614,
+    LEFT_BRACKET = 615,
+    RIGHT_BRACKET = 616,
+    LEFT_BRACE = 617,
+    RIGHT_BRACE = 618,
+    DOT = 619,
+    COMMA = 620,
+    COLON = 621,
+    EQUAL = 622,
+    SEMICOLON = 623,
+    BANG = 624,
+    DASH = 625,
+    TILDE = 626,
+    PLUS = 627,
+    STAR = 628,
+    SLASH = 629,
+    PERCENT = 630,
+    LEFT_ANGLE = 631,
+    RIGHT_ANGLE = 632,
+    VERTICAL_BAR = 633,
+    CARET = 634,
+    AMPERSAND = 635,
+    QUESTION = 636,
+    INVARIANT = 637,
+    PRECISE = 638,
+    HIGH_PRECISION = 639,
+    MEDIUM_PRECISION = 640,
+    LOW_PRECISION = 641,
+    PRECISION = 642,
+    PACKED = 643,
+    RESOURCE = 644,
+    SUPERP = 645
   };
 #endif
 
@@ -425,7 +519,7 @@
 typedef union YYSTYPE YYSTYPE;
 union YYSTYPE
 {
-#line 68 "MachineIndependent/glslang.y" /* yacc.c:355  */
+#line 70 "MachineIndependent/glslang.y" /* yacc.c:355  */
 
     struct {
         glslang::TSourceLoc loc;
@@ -447,6 +541,7 @@
             TIntermNode* intermNode;
             glslang::TIntermNodePair nodePair;
             glslang::TIntermTyped* intermTypedNode;
+            glslang::TAttributes* attributes;
         };
         union {
             glslang::TPublicType type;
@@ -459,7 +554,7 @@
         };
     } interm;
 
-#line 463 "MachineIndependent/glslang_tab.cpp" /* yacc.c:355  */
+#line 558 "MachineIndependent/glslang_tab.cpp" /* yacc.c:355  */
 };
 # define YYSTYPE_IS_TRIVIAL 1
 # define YYSTYPE_IS_DECLARED 1
@@ -472,7 +567,7 @@
 #endif /* !YY_YY_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED  */
 
 /* Copy the second part of user declarations.  */
-#line 102 "MachineIndependent/glslang.y" /* yacc.c:358  */
+#line 105 "MachineIndependent/glslang.y" /* yacc.c:358  */
 
 
 /* windows only pragma */
@@ -488,7 +583,7 @@
 extern int yylex(YYSTYPE*, TParseContext&);
 
 
-#line 492 "MachineIndependent/glslang_tab.cpp" /* yacc.c:358  */
+#line 587 "MachineIndependent/glslang_tab.cpp" /* yacc.c:358  */
 
 #ifdef short
 # undef short
@@ -709,23 +804,23 @@
 #endif /* !YYCOPY_NEEDED */
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  274
+#define YYFINAL  366
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   6614
+#define YYLAST   8949
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  298
+#define YYNTOKENS  391
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  100
+#define YYNNTS  107
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  450
+#define YYNRULES  556
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  582
+#define YYNSTATES  697
 
 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
    by yylex, with out-of-bounds checking.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   552
+#define YYMAXUTOK   645
 
 #define YYTRANSLATE(YYX)                                                \
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -789,59 +884,78 @@
      265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
      275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
      285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
-     295,   296,   297
+     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
+     305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
+     315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
+     325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
+     335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
+     345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
+     355,   356,   357,   358,   359,   360,   361,   362,   363,   364,
+     365,   366,   367,   368,   369,   370,   371,   372,   373,   374,
+     375,   376,   377,   378,   379,   380,   381,   382,   383,   384,
+     385,   386,   387,   388,   389,   390
 };
 
 #if YYDEBUG
   /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   253,   253,   259,   262,   265,   269,   273,   277,   283,
-     289,   292,   296,   302,   305,   313,   316,   319,   322,   325,
-     330,   338,   345,   352,   358,   362,   369,   372,   378,   385,
-     395,   403,   408,   438,   444,   448,   452,   472,   473,   474,
-     475,   481,   482,   487,   492,   501,   502,   507,   515,   516,
-     522,   531,   532,   537,   542,   547,   555,   556,   564,   575,
-     576,   585,   586,   595,   596,   605,   606,   614,   615,   623,
-     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,   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
+       0,   293,   293,   299,   302,   306,   310,   313,   317,   321,
+     325,   329,   333,   336,   340,   344,   347,   355,   358,   361,
+     364,   367,   372,   380,   387,   394,   400,   404,   411,   414,
+     420,   427,   437,   445,   450,   477,   485,   491,   495,   499,
+     519,   520,   521,   522,   528,   529,   534,   539,   548,   549,
+     554,   562,   563,   569,   578,   579,   584,   589,   594,   602,
+     603,   611,   622,   623,   632,   633,   642,   643,   652,   653,
+     661,   662,   670,   671,   679,   680,   680,   698,   699,   714,
+     718,   722,   726,   731,   735,   739,   743,   747,   751,   755,
+     762,   765,   776,   783,   788,   793,   801,   805,   809,   813,
+     818,   823,   832,   832,   843,   847,   854,   861,   864,   871,
+     879,   899,   922,   937,   962,   973,   983,   993,  1003,  1012,
+    1015,  1019,  1023,  1028,  1036,  1041,  1046,  1051,  1056,  1065,
+    1076,  1103,  1112,  1119,  1126,  1137,  1149,  1155,  1158,  1165,
+    1169,  1173,  1181,  1190,  1193,  1204,  1207,  1210,  1214,  1218,
+    1222,  1226,  1232,  1236,  1248,  1262,  1267,  1273,  1279,  1286,
+    1292,  1297,  1302,  1307,  1315,  1319,  1323,  1327,  1331,  1335,
+    1341,  1350,  1357,  1360,  1368,  1372,  1381,  1386,  1394,  1398,
+    1408,  1412,  1416,  1421,  1426,  1431,  1436,  1440,  1445,  1450,
+    1455,  1460,  1465,  1470,  1475,  1480,  1485,  1489,  1494,  1499,
+    1504,  1510,  1516,  1522,  1528,  1534,  1540,  1546,  1552,  1558,
+    1564,  1570,  1576,  1581,  1586,  1591,  1596,  1601,  1606,  1612,
+    1618,  1624,  1630,  1636,  1642,  1648,  1654,  1660,  1666,  1672,
+    1678,  1684,  1690,  1696,  1702,  1708,  1714,  1720,  1726,  1732,
+    1738,  1744,  1750,  1756,  1762,  1768,  1773,  1778,  1783,  1788,
+    1793,  1798,  1803,  1808,  1813,  1818,  1823,  1828,  1834,  1840,
+    1846,  1852,  1858,  1864,  1870,  1876,  1882,  1888,  1894,  1900,
+    1906,  1912,  1918,  1924,  1930,  1936,  1942,  1948,  1954,  1960,
+    1966,  1972,  1978,  1984,  1990,  1996,  2002,  2008,  2014,  2020,
+    2026,  2032,  2038,  2044,  2050,  2056,  2062,  2068,  2074,  2080,
+    2086,  2092,  2098,  2104,  2110,  2116,  2121,  2126,  2131,  2136,
+    2141,  2146,  2151,  2156,  2161,  2166,  2171,  2176,  2181,  2186,
+    2194,  2202,  2210,  2218,  2226,  2234,  2242,  2250,  2258,  2266,
+    2274,  2282,  2290,  2295,  2300,  2305,  2310,  2315,  2320,  2325,
+    2330,  2335,  2340,  2345,  2350,  2355,  2360,  2365,  2370,  2378,
+    2386,  2391,  2396,  2401,  2409,  2414,  2419,  2424,  2432,  2437,
+    2442,  2447,  2455,  2460,  2465,  2470,  2475,  2480,  2488,  2493,
+    2501,  2506,  2514,  2519,  2527,  2532,  2540,  2545,  2553,  2558,
+    2566,  2571,  2576,  2581,  2586,  2591,  2596,  2601,  2606,  2611,
+    2616,  2621,  2626,  2631,  2636,  2641,  2649,  2654,  2659,  2664,
+    2672,  2677,  2682,  2687,  2695,  2700,  2705,  2710,  2718,  2723,
+    2728,  2733,  2741,  2746,  2751,  2756,  2764,  2769,  2774,  2779,
+    2787,  2792,  2797,  2802,  2810,  2815,  2820,  2825,  2833,  2838,
+    2843,  2848,  2856,  2861,  2866,  2871,  2879,  2884,  2889,  2894,
+    2902,  2907,  2912,  2917,  2925,  2930,  2935,  2940,  2948,  2953,
+    2958,  2963,  2971,  2976,  2981,  2987,  2993,  2999,  3008,  3017,
+    3023,  3029,  3035,  3041,  3046,  3062,  3067,  3072,  3080,  3080,
+    3091,  3091,  3101,  3104,  3117,  3139,  3166,  3170,  3176,  3181,
+    3192,  3195,  3201,  3210,  3213,  3219,  3223,  3224,  3230,  3231,
+    3232,  3233,  3234,  3235,  3236,  3240,  3241,  3245,  3241,  3257,
+    3258,  3262,  3262,  3269,  3269,  3283,  3286,  3294,  3302,  3313,
+    3314,  3318,  3321,  3327,  3334,  3338,  3346,  3350,  3363,  3366,
+    3372,  3372,  3392,  3395,  3401,  3413,  3425,  3428,  3434,  3434,
+    3449,  3449,  3465,  3465,  3486,  3489,  3495,  3498,  3504,  3508,
+    3515,  3520,  3525,  3532,  3535,  3544,  3548,  3557,  3560,  3563,
+    3571,  3571,  3593,  3599,  3602,  3607,  3610
 };
 #endif
 
@@ -850,25 +964,34 @@
    First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
 static const char *const yytname[] =
 {
-  "$end", "error", "$undefined", "ATTRIBUTE", "VARYING", "CONST", "BOOL",
-  "FLOAT", "DOUBLE", "INT", "UINT", "INT64_T", "UINT64_T", "INT16_T",
-  "UINT16_T", "FLOAT16_T", "BREAK", "CONTINUE", "DO", "ELSE", "FOR", "IF",
-  "DISCARD", "RETURN", "SWITCH", "CASE", "DEFAULT", "SUBROUTINE", "BVEC2",
-  "BVEC3", "BVEC4", "IVEC2", "IVEC3", "IVEC4", "I64VEC2", "I64VEC3",
-  "I64VEC4", "UVEC2", "UVEC3", "UVEC4", "U64VEC2", "U64VEC3", "U64VEC4",
-  "VEC2", "VEC3", "VEC4", "MAT2", "MAT3", "MAT4", "CENTROID", "IN", "OUT",
-  "INOUT", "UNIFORM", "PATCH", "SAMPLE", "BUFFER", "SHARED", "COHERENT",
-  "VOLATILE", "RESTRICT", "READONLY", "WRITEONLY", "DVEC2", "DVEC3",
-  "DVEC4", "DMAT2", "DMAT3", "DMAT4", "F16VEC2", "F16VEC3", "F16VEC4",
-  "F16MAT2", "F16MAT3", "F16MAT4", "I16VEC2", "I16VEC3", "I16VEC4",
-  "U16VEC2", "U16VEC3", "U16VEC4", "NOPERSPECTIVE", "FLAT", "SMOOTH",
-  "LAYOUT", "__EXPLICITINTERPAMD", "MAT2X2", "MAT2X3", "MAT2X4", "MAT3X2",
-  "MAT3X3", "MAT3X4", "MAT4X2", "MAT4X3", "MAT4X4", "DMAT2X2", "DMAT2X3",
-  "DMAT2X4", "DMAT3X2", "DMAT3X3", "DMAT3X4", "DMAT4X2", "DMAT4X3",
-  "DMAT4X4", "F16MAT2X2", "F16MAT2X3", "F16MAT2X4", "F16MAT3X2",
-  "F16MAT3X3", "F16MAT3X4", "F16MAT4X2", "F16MAT4X3", "F16MAT4X4",
-  "ATOMIC_UINT", "SAMPLER1D", "SAMPLER2D", "SAMPLER3D", "SAMPLERCUBE",
-  "SAMPLER1DSHADOW", "SAMPLER2DSHADOW", "SAMPLERCUBESHADOW",
+  "$end", "error", "$undefined", "ATTRIBUTE", "VARYING", "FLOAT16_T",
+  "FLOAT", "FLOAT32_T", "DOUBLE", "FLOAT64_T", "CONST", "BOOL", "INT",
+  "UINT", "INT64_T", "UINT64_T", "INT32_T", "UINT32_T", "INT16_T",
+  "UINT16_T", "INT8_T", "UINT8_T", "BREAK", "CONTINUE", "DO", "ELSE",
+  "FOR", "IF", "DISCARD", "RETURN", "SWITCH", "CASE", "DEFAULT",
+  "SUBROUTINE", "BVEC2", "BVEC3", "BVEC4", "IVEC2", "IVEC3", "IVEC4",
+  "UVEC2", "UVEC3", "UVEC4", "I64VEC2", "I64VEC3", "I64VEC4", "U64VEC2",
+  "U64VEC3", "U64VEC4", "I32VEC2", "I32VEC3", "I32VEC4", "U32VEC2",
+  "U32VEC3", "U32VEC4", "I16VEC2", "I16VEC3", "I16VEC4", "U16VEC2",
+  "U16VEC3", "U16VEC4", "I8VEC2", "I8VEC3", "I8VEC4", "U8VEC2", "U8VEC3",
+  "U8VEC4", "VEC2", "VEC3", "VEC4", "MAT2", "MAT3", "MAT4", "CENTROID",
+  "IN", "OUT", "INOUT", "UNIFORM", "PATCH", "SAMPLE", "BUFFER", "SHARED",
+  "NONUNIFORM", "COHERENT", "VOLATILE", "RESTRICT", "READONLY",
+  "WRITEONLY", "DVEC2", "DVEC3", "DVEC4", "DMAT2", "DMAT3", "DMAT4",
+  "F16VEC2", "F16VEC3", "F16VEC4", "F16MAT2", "F16MAT3", "F16MAT4",
+  "F32VEC2", "F32VEC3", "F32VEC4", "F32MAT2", "F32MAT3", "F32MAT4",
+  "F64VEC2", "F64VEC3", "F64VEC4", "F64MAT2", "F64MAT3", "F64MAT4",
+  "NOPERSPECTIVE", "FLAT", "SMOOTH", "LAYOUT", "__EXPLICITINTERPAMD",
+  "MAT2X2", "MAT2X3", "MAT2X4", "MAT3X2", "MAT3X3", "MAT3X4", "MAT4X2",
+  "MAT4X3", "MAT4X4", "DMAT2X2", "DMAT2X3", "DMAT2X4", "DMAT3X2",
+  "DMAT3X3", "DMAT3X4", "DMAT4X2", "DMAT4X3", "DMAT4X4", "F16MAT2X2",
+  "F16MAT2X3", "F16MAT2X4", "F16MAT3X2", "F16MAT3X3", "F16MAT3X4",
+  "F16MAT4X2", "F16MAT4X3", "F16MAT4X4", "F32MAT2X2", "F32MAT2X3",
+  "F32MAT2X4", "F32MAT3X2", "F32MAT3X3", "F32MAT3X4", "F32MAT4X2",
+  "F32MAT4X3", "F32MAT4X4", "F64MAT2X2", "F64MAT2X3", "F64MAT2X4",
+  "F64MAT3X2", "F64MAT3X3", "F64MAT3X4", "F64MAT4X2", "F64MAT4X3",
+  "F64MAT4X4", "ATOMIC_UINT", "SAMPLER1D", "SAMPLER2D", "SAMPLER3D",
+  "SAMPLERCUBE", "SAMPLER1DSHADOW", "SAMPLER2DSHADOW", "SAMPLERCUBESHADOW",
   "SAMPLER1DARRAY", "SAMPLER2DARRAY", "SAMPLER1DARRAYSHADOW",
   "SAMPLER2DARRAYSHADOW", "ISAMPLER1D", "ISAMPLER2D", "ISAMPLER3D",
   "ISAMPLERCUBE", "ISAMPLER1DARRAY", "ISAMPLER2DARRAY", "USAMPLER1D",
@@ -878,27 +1001,41 @@
   "USAMPLERBUFFER", "SAMPLERCUBEARRAY", "SAMPLERCUBEARRAYSHADOW",
   "ISAMPLERCUBEARRAY", "USAMPLERCUBEARRAY", "SAMPLER2DMS", "ISAMPLER2DMS",
   "USAMPLER2DMS", "SAMPLER2DMSARRAY", "ISAMPLER2DMSARRAY",
-  "USAMPLER2DMSARRAY", "SAMPLEREXTERNALOES", "SAMPLER", "SAMPLERSHADOW",
-  "TEXTURE1D", "TEXTURE2D", "TEXTURE3D", "TEXTURECUBE", "TEXTURE1DARRAY",
-  "TEXTURE2DARRAY", "ITEXTURE1D", "ITEXTURE2D", "ITEXTURE3D",
-  "ITEXTURECUBE", "ITEXTURE1DARRAY", "ITEXTURE2DARRAY", "UTEXTURE1D",
-  "UTEXTURE2D", "UTEXTURE3D", "UTEXTURECUBE", "UTEXTURE1DARRAY",
-  "UTEXTURE2DARRAY", "TEXTURE2DRECT", "ITEXTURE2DRECT", "UTEXTURE2DRECT",
-  "TEXTUREBUFFER", "ITEXTUREBUFFER", "UTEXTUREBUFFER", "TEXTURECUBEARRAY",
-  "ITEXTURECUBEARRAY", "UTEXTURECUBEARRAY", "TEXTURE2DMS", "ITEXTURE2DMS",
-  "UTEXTURE2DMS", "TEXTURE2DMSARRAY", "ITEXTURE2DMSARRAY",
-  "UTEXTURE2DMSARRAY", "SUBPASSINPUT", "SUBPASSINPUTMS", "ISUBPASSINPUT",
-  "ISUBPASSINPUTMS", "USUBPASSINPUT", "USUBPASSINPUTMS", "IMAGE1D",
-  "IIMAGE1D", "UIMAGE1D", "IMAGE2D", "IIMAGE2D", "UIMAGE2D", "IMAGE3D",
-  "IIMAGE3D", "UIMAGE3D", "IMAGE2DRECT", "IIMAGE2DRECT", "UIMAGE2DRECT",
-  "IMAGECUBE", "IIMAGECUBE", "UIMAGECUBE", "IMAGEBUFFER", "IIMAGEBUFFER",
-  "UIMAGEBUFFER", "IMAGE1DARRAY", "IIMAGE1DARRAY", "UIMAGE1DARRAY",
-  "IMAGE2DARRAY", "IIMAGE2DARRAY", "UIMAGE2DARRAY", "IMAGECUBEARRAY",
-  "IIMAGECUBEARRAY", "UIMAGECUBEARRAY", "IMAGE2DMS", "IIMAGE2DMS",
-  "UIMAGE2DMS", "IMAGE2DMSARRAY", "IIMAGE2DMSARRAY", "UIMAGE2DMSARRAY",
-  "STRUCT", "VOID", "WHILE", "IDENTIFIER", "TYPE_NAME", "FLOATCONSTANT",
-  "DOUBLECONSTANT", "INTCONSTANT", "UINTCONSTANT", "INT64CONSTANT",
-  "UINT64CONSTANT", "INT16CONSTANT", "UINT16CONSTANT", "BOOLCONSTANT",
+  "USAMPLER2DMSARRAY", "SAMPLEREXTERNALOES", "F16SAMPLER1D",
+  "F16SAMPLER2D", "F16SAMPLER3D", "F16SAMPLER2DRECT", "F16SAMPLERCUBE",
+  "F16SAMPLER1DARRAY", "F16SAMPLER2DARRAY", "F16SAMPLERCUBEARRAY",
+  "F16SAMPLERBUFFER", "F16SAMPLER2DMS", "F16SAMPLER2DMSARRAY",
+  "F16SAMPLER1DSHADOW", "F16SAMPLER2DSHADOW", "F16SAMPLER1DARRAYSHADOW",
+  "F16SAMPLER2DARRAYSHADOW", "F16SAMPLER2DRECTSHADOW",
+  "F16SAMPLERCUBESHADOW", "F16SAMPLERCUBEARRAYSHADOW", "SAMPLER",
+  "SAMPLERSHADOW", "TEXTURE1D", "TEXTURE2D", "TEXTURE3D", "TEXTURECUBE",
+  "TEXTURE1DARRAY", "TEXTURE2DARRAY", "ITEXTURE1D", "ITEXTURE2D",
+  "ITEXTURE3D", "ITEXTURECUBE", "ITEXTURE1DARRAY", "ITEXTURE2DARRAY",
+  "UTEXTURE1D", "UTEXTURE2D", "UTEXTURE3D", "UTEXTURECUBE",
+  "UTEXTURE1DARRAY", "UTEXTURE2DARRAY", "TEXTURE2DRECT", "ITEXTURE2DRECT",
+  "UTEXTURE2DRECT", "TEXTUREBUFFER", "ITEXTUREBUFFER", "UTEXTUREBUFFER",
+  "TEXTURECUBEARRAY", "ITEXTURECUBEARRAY", "UTEXTURECUBEARRAY",
+  "TEXTURE2DMS", "ITEXTURE2DMS", "UTEXTURE2DMS", "TEXTURE2DMSARRAY",
+  "ITEXTURE2DMSARRAY", "UTEXTURE2DMSARRAY", "F16TEXTURE1D", "F16TEXTURE2D",
+  "F16TEXTURE3D", "F16TEXTURE2DRECT", "F16TEXTURECUBE",
+  "F16TEXTURE1DARRAY", "F16TEXTURE2DARRAY", "F16TEXTURECUBEARRAY",
+  "F16TEXTUREBUFFER", "F16TEXTURE2DMS", "F16TEXTURE2DMSARRAY",
+  "SUBPASSINPUT", "SUBPASSINPUTMS", "ISUBPASSINPUT", "ISUBPASSINPUTMS",
+  "USUBPASSINPUT", "USUBPASSINPUTMS", "F16SUBPASSINPUT",
+  "F16SUBPASSINPUTMS", "IMAGE1D", "IIMAGE1D", "UIMAGE1D", "IMAGE2D",
+  "IIMAGE2D", "UIMAGE2D", "IMAGE3D", "IIMAGE3D", "UIMAGE3D", "IMAGE2DRECT",
+  "IIMAGE2DRECT", "UIMAGE2DRECT", "IMAGECUBE", "IIMAGECUBE", "UIMAGECUBE",
+  "IMAGEBUFFER", "IIMAGEBUFFER", "UIMAGEBUFFER", "IMAGE1DARRAY",
+  "IIMAGE1DARRAY", "UIMAGE1DARRAY", "IMAGE2DARRAY", "IIMAGE2DARRAY",
+  "UIMAGE2DARRAY", "IMAGECUBEARRAY", "IIMAGECUBEARRAY", "UIMAGECUBEARRAY",
+  "IMAGE2DMS", "IIMAGE2DMS", "UIMAGE2DMS", "IMAGE2DMSARRAY",
+  "IIMAGE2DMSARRAY", "UIMAGE2DMSARRAY", "F16IMAGE1D", "F16IMAGE2D",
+  "F16IMAGE3D", "F16IMAGE2DRECT", "F16IMAGECUBE", "F16IMAGE1DARRAY",
+  "F16IMAGE2DARRAY", "F16IMAGECUBEARRAY", "F16IMAGEBUFFER", "F16IMAGE2DMS",
+  "F16IMAGE2DMSARRAY", "STRUCT", "VOID", "WHILE", "IDENTIFIER",
+  "TYPE_NAME", "FLOATCONSTANT", "DOUBLECONSTANT", "INT16CONSTANT",
+  "UINT16CONSTANT", "INT32CONSTANT", "UINT32CONSTANT", "INTCONSTANT",
+  "UINTCONSTANT", "INT64CONSTANT", "UINT64CONSTANT", "BOOLCONSTANT",
   "FLOAT16CONSTANT", "LEFT_OP", "RIGHT_OP", "INC_OP", "DEC_OP", "LE_OP",
   "GE_OP", "EQ_OP", "NE_OP", "AND_OP", "OR_OP", "XOR_OP", "MUL_ASSIGN",
   "DIV_ASSIGN", "ADD_ASSIGN", "MOD_ASSIGN", "LEFT_ASSIGN", "RIGHT_ASSIGN",
@@ -928,20 +1065,24 @@
   "fully_specified_type", "invariant_qualifier", "interpolation_qualifier",
   "layout_qualifier", "layout_qualifier_id_list", "layout_qualifier_id",
   "precise_qualifier", "type_qualifier", "single_type_qualifier",
-  "storage_qualifier", "type_name_list", "type_specifier",
-  "array_specifier", "type_specifier_nonarray", "precision_qualifier",
-  "struct_specifier", "$@3", "$@4", "struct_declaration_list",
-  "struct_declaration", "struct_declarator_list", "struct_declarator",
-  "initializer", "initializer_list", "declaration_statement", "statement",
+  "storage_qualifier", "non_uniform_qualifier", "type_name_list",
+  "type_specifier", "array_specifier", "type_specifier_nonarray",
+  "precision_qualifier", "struct_specifier", "$@3", "$@4",
+  "struct_declaration_list", "struct_declaration",
+  "struct_declarator_list", "struct_declarator", "initializer",
+  "initializer_list", "declaration_statement", "statement",
   "simple_statement", "compound_statement", "$@5", "$@6",
   "statement_no_new_scope", "statement_scoped", "$@7", "$@8",
   "compound_statement_no_new_scope", "statement_list",
   "expression_statement", "selection_statement",
-  "selection_rest_statement", "condition", "switch_statement", "$@9",
-  "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_NULL
+  "selection_statement_nonattributed", "selection_rest_statement",
+  "condition", "switch_statement", "switch_statement_nonattributed", "$@9",
+  "switch_statement_list", "case_label", "iteration_statement",
+  "iteration_statement_nonattributed", "$@10", "$@11", "$@12",
+  "for_init_statement", "conditionopt", "for_rest_statement",
+  "jump_statement", "translation_unit", "external_declaration",
+  "function_definition", "$@13", "attribute", "attribute_list",
+  "single_attribute", YY_NULL
 };
 #endif
 
@@ -979,16 +1120,26 @@
      515,   516,   517,   518,   519,   520,   521,   522,   523,   524,
      525,   526,   527,   528,   529,   530,   531,   532,   533,   534,
      535,   536,   537,   538,   539,   540,   541,   542,   543,   544,
-     545,   546,   547,   548,   549,   550,   551,   552
+     545,   546,   547,   548,   549,   550,   551,   552,   553,   554,
+     555,   556,   557,   558,   559,   560,   561,   562,   563,   564,
+     565,   566,   567,   568,   569,   570,   571,   572,   573,   574,
+     575,   576,   577,   578,   579,   580,   581,   582,   583,   584,
+     585,   586,   587,   588,   589,   590,   591,   592,   593,   594,
+     595,   596,   597,   598,   599,   600,   601,   602,   603,   604,
+     605,   606,   607,   608,   609,   610,   611,   612,   613,   614,
+     615,   616,   617,   618,   619,   620,   621,   622,   623,   624,
+     625,   626,   627,   628,   629,   630,   631,   632,   633,   634,
+     635,   636,   637,   638,   639,   640,   641,   642,   643,   644,
+     645
 };
 # endif
 
-#define YYPACT_NINF -525
+#define YYPACT_NINF -634
 
 #define yypact_value_is_default(Yystate) \
-  (!!((Yystate) == (-525)))
+  (!!((Yystate) == (-634)))
 
-#define YYTABLE_NINF -407
+#define YYTABLE_NINF -502
 
 #define yytable_value_is_error(Yytable_value) \
   0
@@ -997,65 +1148,76 @@
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-    2619,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,
-    -525,  -525,  -525,  -525,  -243,  -525,  -525,  -525,  -525,  -525,
-    -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,
-    -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,
-    -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,
-    -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,
-    -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,
-    -525,  -228,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,
-    -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,
-    -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,
-    -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,
-    -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,
-    -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,
-    -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,
-    -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,
-    -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,
-    -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,
-    -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,
-    -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,
-    -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,
-    -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,
-    -525,  -525,  -525,  -525,  -525,  -525,  -215,  -525,  -525,  -525,
-    -525,  -525,  -525,  -525,  -525,  -157,  -525,  -216,  -218,  -205,
-    -141,  4260,  -165,  -525,   -94,  -525,  -525,  -525,  -525,  3183,
-    -525,  -525,  -525,  -117,  -525,  -525,   575,  -525,  -525,   -80,
-     -48,  -114,  -525,  6381,  -242,  -525,  -525,  -113,  -525,  4260,
-    -525,  -525,  -525,  4260,   -75,   -74,  -525,  -235,  -190,  -525,
-    -525,  -525,  4765,  -108,  -525,  -525,  -525,  -186,  -525,  -112,
-    -178,  -525,  -525,  4260,  -115,  -525,  -226,   867,  -525,  -525,
-    -525,  -525,  -117,  -229,  -525,  5039,  -224,  -525,   -71,  -525,
-    -158,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,
-    -525,  -525,  5861,  5861,  5861,  -525,  -525,  -525,  -525,  -525,
-    -525,  -525,  -223,  -525,  -525,  -525,  -102,  -177,  6121,  -100,
-    -525,  5861,  -204,  -171,  -132,  -221,  -199,  -124,  -120,  -111,
-     -84,   -83,  -233,   -98,  -525,  5313,  -525,   -60,  5861,  -525,
-     -48,  4260,  4260,   -59,  3456,  -525,  -525,  -525,   -99,   -97,
-    -525,   -90,   -88,   -96,  5587,   -85,  5861,   -92,   -79,   -81,
-    -525,  -525,  -191,  -525,  -525,  -153,  -525,  -218,   -78,  -525,
-    -525,  -525,  -525,  1159,  -525,  -525,  -525,  -525,  -525,  -525,
-    -108,  5039,  -193,  5039,  -525,  -525,  5039,  4260,  -525,   -47,
-    -525,  -525,  -525,  -176,  -525,  -525,  5861,   -42,  -525,  -525,
-    5861,   -73,  -525,  -525,  -525,  5861,  5861,  5861,  5861,  5861,
-    5861,  5861,  5861,  5861,  5861,  5861,  5861,  5861,  5861,  5861,
-    5861,  5861,  5861,  5861,  -525,  -525,  -525,   -76,  -525,  -525,
-    -525,  -525,  3724,   -59,  -117,  -152,  -525,  -525,  -525,  -525,
-    -525,  1451,  -525,  5861,  -525,  -525,  -143,  5861,  -180,  -525,
-    -525,  -525,  1451,  -525,  -525,  -525,  -525,  -525,  -525,  -525,
-    -525,  -525,  -525,  -525,  5861,  5861,  -525,  -525,  -525,  -525,
-    5039,  -525,  -133,  -525,  3992,  -525,  -525,   -72,   -77,  -525,
-    -525,  -525,  -525,  -525,  -204,  -204,  -171,  -171,  -132,  -132,
-    -132,  -132,  -221,  -221,  -199,  -124,  -120,  -111,   -84,   -83,
-    5861,  -525,  -525,  -142,  -108,   -59,  -525,   -37,  2327,  -175,
-    -525,  -163,  -525,  2892,  1451,  -525,  -525,  -525,  -525,  4491,
-    -525,  -525,  -129,  -525,  -525,   -68,  -525,  -525,  2892,   -70,
-    -525,   -77,   -32,  4260,   -63,   -66,  -525,  -525,  5861,  5861,
-    -525,   -69,   -61,   188,   -58,  2035,  -525,   -56,   -57,  1743,
-    -525,  -525,  -161,  5861,  1743,   -70,  -525,  -525,  1451,  5039,
-    -525,  -525,  -525,   -67,   -77,  -525,  -525,  1451,   -54,  -525,
-    -525,  -525
+    3391,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
+    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
+    -311,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
+    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
+    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
+    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
+    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
+    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
+    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
+    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
+    -634,  -634,  -295,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
+    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
+    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
+    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
+    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
+    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
+    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
+    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
+    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
+    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
+    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
+    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
+    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
+    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
+    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
+    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
+    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
+    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
+    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
+    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
+    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -301,  -634,  -634,
+    -634,  -634,  -634,  -634,  -634,  -634,  -241,  -634,  -302,  -342,
+    -290,  -254,  5696,  -300,  -634,  -210,  -634,  -634,  -634,  -634,
+    4160,  -634,  -634,  -634,  -634,  -219,  -634,  -634,   696,  -634,
+    -634,  -189,   -69,  -207,  -634,  8625,  -320,  -634,  -634,  -203,
+    -634,  5696,  -634,  -634,  -634,  5696,  -155,  -154,  -634,  -324,
+    -288,  -634,  -634,  -634,  6417,  -190,  -634,  -634,  -634,  -292,
+    -634,  -196,  -287,  -634,  -634,  5696,  -195,  -634,  -306,  1081,
+    -634,  -634,  -634,  -634,  -219,  -325,  -634,  6785,  -310,  -634,
+    -151,  -634,  -277,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
+    -634,  -634,  -634,  -634,  -634,  -634,  7889,  7889,  7889,  -634,
+    -634,  -634,  -634,  -634,  -634,  -634,  -309,  -634,  -634,  -634,
+    -185,  -283,  8257,  -183,  -634,  7889,  -227,  -263,  -299,  -318,
+    -194,  -204,  -202,  -200,  -165,  -166,  -321,  -179,  -634,  -634,
+    7153,  -634,  -140,  7889,  -634,   -69,  5696,  5696,  -139,  4544,
+    -634,  -634,  -634,  -182,  -180,  -634,  -173,  -169,  -178,  7521,
+    -164,  7889,  -174,  -163,  -167,  -162,  -634,  -634,  -252,  -634,
+    -634,  -237,  -634,  -342,  -161,  -158,  -634,  -634,  -634,  -634,
+    1466,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
+     -19,  -190,  6785,  -296,  6785,  -634,  -634,  6785,  5696,  -634,
+    -127,  -634,  -634,  -634,  -278,  -634,  -634,  7889,  -121,  -634,
+    -634,  7889,  -156,  -634,  -634,  -634,  7889,  7889,  7889,  7889,
+    7889,  7889,  7889,  7889,  7889,  7889,  7889,  7889,  7889,  7889,
+    7889,  7889,  7889,  7889,  7889,  -634,  -634,  -634,  -157,  -634,
+    -634,  -634,  -634,  4928,  -139,  -219,  -236,  -634,  -634,  -634,
+    -634,  -634,  1851,  -634,  7889,  -634,  -634,  -230,  7889,  -213,
+    -634,  -634,  -118,  -634,  1851,  -634,  -634,  -634,  -634,  -634,
+    -634,  -634,  -634,  -634,  -634,  -634,  7889,  7889,  -634,  -634,
+    -634,  -634,  -634,  -634,  -634,  6785,  -634,  -270,  -634,  5312,
+    -634,  -634,  -153,  -150,  -634,  -634,  -634,  -634,  -634,  -227,
+    -227,  -263,  -263,  -299,  -299,  -299,  -299,  -318,  -318,  -194,
+    -204,  -202,  -200,  -165,  -166,  7889,  -634,  -634,  -226,  -190,
+    -139,  -634,  -113,  3006,  -275,  -634,  -253,  -634,  3776,  -148,
+    -282,  -634,  1851,  -634,  -634,  -634,  -634,  6049,  -634,  -634,
+    -208,  -634,  -634,  -147,  -634,  -634,  3776,  -146,  -634,  -150,
+    -111,  5696,  -145,  7889,  -144,  -118,  -143,  -634,  -634,  7889,
+    7889,  -634,  -149,  -141,   196,  -136,  2621,  -634,  -116,  -120,
+    2236,  -137,  -634,  -634,  -634,  -634,  -239,  7889,  2236,  -146,
+    -634,  -634,  1851,  6785,  -634,  -634,  -634,  -634,  -119,  -150,
+    -634,  -634,  1851,  -112,  -634,  -634,  -634
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -1063,95 +1225,108 @@
      means the default is an error.  */
 static const yytype_uint16 yydefact[] =
 {
-       0,   149,   150,   148,   185,   176,   177,   179,   180,   181,
-     182,   183,   184,   178,   165,   195,   196,   197,   198,   199,
-     200,   201,   202,   203,   207,   208,   209,   210,   211,   212,
-     186,   187,   188,   216,   217,   218,   154,   152,   153,   151,
-     157,   155,   156,   158,   159,   160,   161,   162,   163,   164,
-     189,   190,   191,   228,   229,   230,   192,   193,   194,   240,
-     241,   242,   204,   205,   206,   213,   214,   215,   131,   130,
-     129,     0,   132,   219,   220,   221,   222,   223,   224,   225,
-     226,   227,   231,   232,   233,   234,   235,   236,   237,   238,
-     239,   243,   244,   245,   246,   247,   248,   249,   250,   251,
-     252,   253,   254,   255,   256,   257,   258,   259,   260,   261,
-     262,   263,   266,   267,   268,   269,   270,   271,   273,   274,
-     275,   276,   277,   278,   280,   281,   282,   283,   284,   285,
-     286,   264,   265,   272,   279,   287,   288,   289,   290,   291,
-     292,   361,   293,   294,   295,   296,   297,   298,   299,   300,
-     302,   303,   304,   305,   306,   307,   309,   310,   311,   312,
-     313,   314,   316,   317,   318,   319,   320,   321,   301,   308,
-     315,   322,   323,   324,   325,   326,   327,   362,   363,   364,
-     365,   366,   367,   328,   329,   330,   331,   332,   333,   334,
-     335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
-     345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
-     355,   356,   357,   358,   359,   360,     0,   175,   369,   448,
-     128,   139,   370,   371,   372,     0,   447,     0,   449,     0,
-     105,   104,     0,   116,   121,   146,   145,   143,   147,     0,
-     140,   142,   126,   169,   144,   368,     0,   444,   446,     0,
-       0,     0,   375,     0,     0,    93,    90,     0,   103,     0,
-     112,   106,   114,     0,   115,     0,    91,   122,     0,    96,
-     141,   127,     0,   170,     1,   445,   167,     0,   138,   136,
-       0,   134,   373,     0,     0,    94,     0,     0,   450,   107,
-     111,   113,   109,   117,   108,     0,   123,    99,     0,    97,
-       0,     2,    10,    11,     4,     5,     6,     7,     8,     9,
-      13,    12,     0,     0,     0,   171,    39,    38,    40,    37,
-       3,    15,    33,    17,    22,    23,     0,     0,    27,     0,
-      41,     0,    45,    48,    51,    56,    59,    61,    63,    65,
-      67,    69,    71,     0,    31,     0,   166,     0,     0,   133,
-       0,     0,     0,     0,     0,   377,    92,    95,     0,     0,
-     429,     0,     0,     0,     0,     0,     0,     0,     0,   401,
-     410,   414,    41,    74,    87,     0,   390,     0,   126,   393,
-     412,   392,   391,     0,   394,   395,   396,   397,   398,   399,
-     110,     0,   118,     0,   385,   125,     0,     0,   101,     0,
-      98,    34,    35,     0,    19,    20,     0,     0,    25,    24,
-       0,   175,    28,    30,    36,     0,     0,     0,     0,     0,
+       0,   153,   154,   183,   181,   184,   182,   185,   152,   196,
+     186,   187,   194,   195,   192,   193,   190,   191,   188,   189,
+     169,   212,   213,   214,   215,   216,   217,   230,   231,   232,
+     227,   228,   229,   242,   243,   244,   224,   225,   226,   239,
+     240,   241,   221,   222,   223,   236,   237,   238,   218,   219,
+     220,   233,   234,   235,   197,   198,   199,   245,   246,   247,
+     158,   156,   157,   155,   161,   159,   160,   162,   163,   171,
+     164,   165,   166,   167,   168,   200,   201,   202,   257,   258,
+     259,   203,   204,   205,   269,   270,   271,   206,   207,   208,
+     281,   282,   283,   209,   210,   211,   293,   294,   295,   134,
+     133,   132,     0,   135,   248,   249,   250,   251,   252,   253,
+     254,   255,   256,   260,   261,   262,   263,   264,   265,   266,
+     267,   268,   272,   273,   274,   275,   276,   277,   278,   279,
+     280,   284,   285,   286,   287,   288,   289,   290,   291,   292,
+     296,   297,   298,   299,   300,   301,   302,   303,   304,   305,
+     306,   307,   308,   309,   310,   311,   312,   313,   314,   315,
+     316,   332,   333,   334,   335,   336,   337,   339,   340,   341,
+     342,   343,   344,   346,   347,   350,   351,   352,   354,   355,
+     317,   318,   338,   345,   356,   358,   359,   360,   362,   363,
+     454,   319,   320,   321,   348,   322,   326,   327,   330,   353,
+     357,   361,   323,   324,   328,   329,   349,   325,   331,   364,
+     365,   366,   368,   370,   372,   374,   376,   380,   381,   382,
+     383,   384,   385,   387,   388,   389,   390,   391,   392,   394,
+     396,   397,   398,   400,   401,   378,   386,   393,   402,   404,
+     405,   406,   408,   409,   367,   369,   371,   395,   373,   375,
+     377,   379,   399,   403,   407,   455,   456,   459,   460,   461,
+     462,   457,   458,   410,   412,   413,   414,   416,   417,   418,
+     420,   421,   422,   424,   425,   426,   428,   429,   430,   432,
+     433,   434,   436,   437,   438,   440,   441,   442,   444,   445,
+     446,   448,   449,   450,   452,   453,   411,   415,   419,   423,
+     427,   435,   439,   443,   431,   447,   451,     0,   180,   464,
+     549,   131,   142,   465,   466,   467,     0,   548,     0,   550,
+       0,   108,   107,     0,   119,   124,   149,   148,   146,   150,
+       0,   143,   145,   151,   129,   174,   147,   463,     0,   545,
+     547,     0,     0,     0,   470,     0,     0,    96,    93,     0,
+     106,     0,   115,   109,   117,     0,   118,     0,    94,   125,
+       0,    99,   144,   130,     0,   175,     1,   546,   172,     0,
+     141,   139,     0,   137,   468,     0,     0,    97,     0,     0,
+     551,   110,   114,   116,   112,   120,   111,     0,   126,   102,
+       0,   100,     0,     2,    12,    13,    10,    11,     4,     5,
+       6,     7,     8,     9,    15,    14,     0,     0,     0,   176,
+      42,    41,    43,    40,     3,    17,    36,    19,    24,    25,
+       0,     0,    29,     0,    44,     0,    48,    51,    54,    59,
+      62,    64,    66,    68,    70,    72,    74,     0,    35,    33,
+       0,   170,     0,     0,   136,     0,     0,     0,     0,     0,
+     472,    95,    98,     0,     0,   530,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   496,   505,   509,    44,    77,
+      90,     0,   485,     0,   151,   129,   488,   507,   487,   486,
+       0,   489,   490,   511,   491,   518,   492,   493,   526,   494,
+       0,   113,     0,   121,     0,   480,   128,     0,     0,   104,
+       0,   101,    37,    38,     0,    21,    22,     0,     0,    27,
+      26,     0,   180,    30,    32,    39,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    72,   172,   173,     0,   168,    89,
-     137,   135,     0,     0,   383,     0,   381,   376,   378,   440,
-     439,     0,   431,     0,   443,   441,     0,     0,     0,   426,
-     427,   400,     0,    77,    78,    80,    79,    82,    83,    84,
-      85,    86,    81,    76,     0,     0,   415,   411,   413,   120,
-       0,   388,     0,   124,     0,   102,    14,     0,    21,    18,
-      29,    42,    43,    44,    47,    46,    49,    50,    54,    55,
-      52,    53,    57,    58,    60,    62,    64,    66,    68,    70,
-       0,   174,   374,     0,   384,     0,   379,     0,     0,     0,
-     442,     0,   425,     0,   402,    75,    88,   119,   386,     0,
-     100,    16,     0,   380,   382,     0,   434,   433,   436,   408,
-     421,   419,     0,     0,     0,     0,   387,   389,     0,     0,
-     435,     0,     0,   418,     0,     0,   416,     0,     0,     0,
-     403,    73,     0,   437,     0,   408,   407,   409,   423,     0,
-     405,   428,   404,     0,   438,   432,   417,   424,     0,   420,
-     430,   422
+       0,     0,     0,     0,     0,    75,   177,   178,     0,   173,
+      92,   140,   138,     0,     0,   478,     0,   476,   471,   473,
+     541,   540,     0,   532,     0,   544,   542,     0,     0,     0,
+     525,   528,     0,   495,     0,    80,    81,    83,    82,    85,
+      86,    87,    88,    89,    84,    79,     0,     0,   510,   506,
+     508,   512,   519,   527,   123,     0,   483,     0,   127,     0,
+     105,    16,     0,    23,    20,    31,    45,    46,    47,    50,
+      49,    52,    53,    57,    58,    55,    56,    60,    61,    63,
+      65,    67,    69,    71,    73,     0,   179,   469,     0,   479,
+       0,   474,     0,     0,     0,   543,     0,   524,     0,   555,
+       0,   553,   497,    78,    91,   122,   481,     0,   103,    18,
+       0,   475,   477,     0,   535,   534,   537,   503,   520,   516,
+       0,     0,     0,     0,     0,     0,     0,   482,   484,     0,
+       0,   536,     0,     0,   515,     0,     0,   513,     0,     0,
+       0,     0,   552,   554,   498,    76,     0,   538,     0,   503,
+     502,   504,   522,     0,   500,   529,   499,   556,     0,   539,
+     533,   514,   523,     0,   517,   531,   521
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,  -525,
-    -525,  -525,  -103,  -525,  -278,  -274,  -297,  -273,  -214,  -211,
-    -210,  -212,  -209,  -208,  -525,  -261,  -525,  -292,  -525,  -308,
-    -525,     4,  -525,  -525,  -525,     5,  -525,  -525,  -525,   -41,
-     -38,   -39,  -525,  -525,  -504,  -525,  -525,  -525,  -525,  -123,
-    -525,  -230,  -237,  -525,  -525,     0,  -246,  -525,     1,  -525,
-    -525,  -525,  -337,  -342,  -207,  -286,  -378,  -525,  -285,  -376,
-    -524,  -322,  -525,  -525,  -330,  -327,  -525,  -525,   -22,  -452,
-    -275,  -525,  -525,  -298,  -525,  -525,  -525,  -525,  -525,  -525,
-    -525,  -525,  -525,  -525,  -525,  -525,  -525,    -2,  -525,  -525
+    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
+    -634,  -634,  -289,  -634,  -358,  -355,  -401,  -364,  -279,  -307,
+    -276,  -280,  -273,  -281,  -634,  -354,  -634,  -378,  -634,  -367,
+    -397,     1,  -634,  -634,  -634,     2,  -634,  -634,  -634,   -98,
+     -93,   -92,  -634,  -634,  -600,  -634,  -634,  -634,  -634,  -181,
+    -634,  -319,  -326,  -634,     6,  -634,     0,  -332,  -634,   -54,
+    -634,  -634,  -634,  -428,  -433,  -272,  -353,  -477,  -634,  -357,
+    -467,  -633,  -400,  -634,  -634,  -410,  -408,  -634,  -634,   -80,
+    -545,  -350,  -634,  -216,  -634,  -371,  -634,  -214,  -634,  -634,
+    -634,  -634,  -212,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
+    -634,   -61,  -634,  -634,  -634,  -634,  -375
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,   320,   321,   322,   487,   323,   324,   325,   326,   327,
-     328,   329,   372,   331,   332,   333,   334,   335,   336,   337,
-     338,   339,   340,   341,   342,   373,   510,   374,   474,   375,
-     440,   376,   227,   397,   300,   377,   229,   230,   231,   260,
-     261,   262,   232,   233,   234,   235,   236,   237,   280,   281,
-     238,   239,   240,   241,   277,   344,   273,   243,   244,   245,
-     351,   283,   354,   355,   445,   446,   395,   482,   379,   380,
-     381,   382,   462,   545,   571,   553,   554,   555,   572,   383,
-     384,   385,   556,   544,   386,   557,   578,   387,   388,   523,
-     451,   518,   538,   551,   552,   389,   246,   247,   248,   257
+      -1,   414,   415,   416,   592,   417,   418,   419,   420,   421,
+     422,   423,   468,   425,   426,   427,   428,   429,   430,   431,
+     432,   433,   434,   435,   436,   469,   615,   470,   576,   471,
+     541,   472,   318,   498,   392,   473,   320,   321,   322,   352,
+     353,   354,   323,   324,   325,   326,   327,   328,   372,   373,
+     329,   330,   331,   332,   438,   369,   439,   365,   335,   336,
+     337,   446,   375,   449,   450,   546,   547,   496,   587,   476,
+     477,   478,   479,   564,   656,   685,   664,   665,   666,   686,
+     480,   481,   482,   483,   667,   652,   484,   485,   668,   693,
+     486,   487,   488,   628,   552,   623,   646,   662,   663,   489,
+     338,   339,   340,   349,   490,   630,   631
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -1159,790 +1334,79 @@
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-     242,   263,   270,   394,   226,   228,   403,   478,   286,   278,
-     524,   343,   448,   479,   442,   481,   254,   251,   483,   542,
-     433,   296,   249,   404,   405,   272,   270,   422,   423,   263,
-     294,   567,   272,   285,   542,   570,   412,   250,   272,   295,
-     570,   345,   -32,   345,   406,   391,   390,   392,   407,   357,
-     396,   426,   427,   352,   252,   434,   456,   256,   458,   255,
-     484,   258,   424,   425,   463,   464,   465,   466,   467,   468,
-     469,   470,   471,   472,   345,   517,   415,   416,   417,   297,
-     346,   480,   298,   473,   437,   299,   347,   439,   349,   409,
-     486,   539,   475,   522,   350,   410,   475,   475,   488,   394,
-     448,   394,   527,   540,   394,   573,   418,   265,   419,   475,
-     266,   475,   420,   421,   399,   270,   577,   400,   490,   475,
-     515,   352,   476,   516,   352,   498,   499,   500,   501,   475,
-     515,   259,   520,   533,   222,   223,   224,   528,   267,   529,
-     494,   495,   448,   475,   548,   519,   496,   497,   478,   521,
-     272,   547,   276,   502,   503,   282,   287,   292,   293,   345,
-     356,   398,   348,   428,   408,   413,   429,   352,   431,   330,
-     435,   432,   438,   444,   430,   452,   449,   453,   450,   454,
-     457,   459,   525,   526,   279,   485,   460,   -31,   394,   461,
-     489,   579,   511,   -26,   535,   475,   531,   549,   514,  -406,
-     558,   478,   532,   559,   560,   564,   563,   565,   580,   401,
-     402,   369,   352,   568,   504,   541,   581,   569,   505,   507,
-     506,   289,   290,   508,   291,   509,   253,   441,   414,   534,
-     541,   264,   566,   536,   575,   288,   513,   394,   576,   271,
-     550,   562,   330,   537,   275,   330,   242,     0,     0,     0,
-     226,   228,     0,   284,   352,   574,   561,     0,     0,   264,
-       0,     0,     0,   264,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   394,     0,     0,
-       0,     0,     0,   353,     0,     0,     0,   378,     0,     0,
-       0,     0,     0,   543,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   270,     0,   543,     0,
-       0,     0,   491,   492,   493,   330,   330,   330,   330,   330,
-     330,   330,   330,   330,   330,   330,   330,   330,   330,   330,
-     330,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   353,   443,     0,   353,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   378,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   353,     0,     0,
+     334,   317,   319,   355,   362,   455,   333,   456,   457,   495,
+     437,   460,   370,   580,   378,   584,   549,   586,   543,   632,
+     588,   346,   343,   523,   524,   534,   348,   388,   650,   362,
+     505,   506,   355,   681,   386,   364,   364,   684,   521,   522,
+     364,   504,   492,   387,   513,   684,   650,   341,   377,   -34,
+     440,   507,   491,   493,   440,   508,   447,   497,   525,   526,
+     535,   344,   452,   342,   440,   357,   347,   441,   358,   350,
+     589,   585,   444,   442,   389,   424,   510,   390,   445,   654,
+     391,   591,   511,   655,   647,   622,   538,   577,   500,   540,
+     577,   501,   557,   636,   559,   637,   565,   566,   567,   568,
+     569,   570,   571,   572,   573,   574,   648,   519,   635,   520,
+     549,   351,   577,   359,   495,   575,   495,   502,   503,   495,
+     688,   362,   603,   604,   605,   606,   577,   447,   577,   620,
+     447,   578,   621,   595,   368,   577,   515,   692,   625,   620,
+     593,   364,   641,   313,   314,   315,   516,   517,   518,   527,
+     528,   424,   577,   627,   424,   374,   549,   577,   659,   379,
+     658,   599,   600,   607,   608,   580,   601,   602,   384,   385,
+     440,   443,   499,   451,   509,   514,   529,   530,   531,   447,
+     532,   533,   536,   539,   545,   553,   550,   624,   551,   554,
+     555,   626,   560,   562,   558,   561,   590,   -35,   633,   634,
+     -33,   563,   594,   -28,   616,   629,   694,   495,   639,   643,
+     653,   660,   669,   619,   670,   577,  -501,   672,   678,   677,
+     674,   679,   687,   610,   447,   580,   465,   596,   597,   598,
+     424,   424,   424,   424,   424,   424,   424,   424,   424,   424,
+     424,   424,   424,   424,   424,   424,   682,   683,   640,   695,
+     609,   696,   612,   614,   371,   611,   671,   382,   381,   495,
+     613,   649,   345,   383,   542,   680,   644,   642,   690,   380,
+     447,   691,   618,   645,   581,   661,   582,   367,   583,   649,
+     673,   675,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   676,     0,     0,     0,     0,     0,   540,
+       0,     0,     0,   463,     0,   495,     0,     0,     0,   651,
+     689,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   356,     0,     0,   362,     0,   651,   333,     0,
+     363,     0,     0,     0,     0,     0,   333,     0,   334,   317,
+     319,     0,     0,     0,   333,   376,     0,     0,     0,     0,
+       0,   356,     0,     0,     0,   356,     0,   333,     0,     0,
+       0,   333,     0,     0,   424,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   448,     0,     0,     0,   475,
+       0,   333,     0,     0,     0,   474,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   353,     0,     0,     0,     0,     0,     0,     0,
-       0,   378,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   378,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   353,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   448,   544,     0,   448,
+       0,     0,   333,   333,     0,   333,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   378,     0,
-       0,     0,     0,   378,   378,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   378,     0,
-       0,     0,     0,   271,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   378,     0,     0,     0,   378,
-       0,     0,     0,     0,   378,     0,     0,     0,   378,     0,
-       0,     0,     0,     0,     0,   274,     0,   378,     1,     2,
-       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
-      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
-      92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
-     102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
-     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
-     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
-     132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
-     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
-     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
-     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
-     172,   173,   174,   175,   176,   177,   178,   179,   180,   181,
-     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
-     192,   193,   194,   195,   196,   197,   198,   199,   200,   201,
-     202,   203,   204,   205,   206,   207,   208,   209,   210,   211,
-     212,   213,   214,   215,   216,   217,     0,     0,   218,     0,
+     475,     0,     0,     0,     0,     0,   474,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   448,     0,
+       0,     0,     0,     0,   333,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     219,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   220,   221,   222,   223,   224,   225,
-       1,     2,     3,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,   358,   359,   360,     0,   361,   362,   363,
-     364,   365,   366,   367,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
-      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
-      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
-     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
-     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
-     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
-     130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
-     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
-     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
-     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
-     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
-     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
-     190,   191,   192,   193,   194,   195,   196,   197,   198,   199,
-     200,   201,   202,   203,   204,   205,   206,   207,   208,   209,
-     210,   211,   212,   213,   214,   215,   216,   217,   368,   301,
-     218,   302,   303,   304,   305,   306,   307,   308,   309,   310,
-     311,     0,     0,   312,   313,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   314,     0,     0,     0,   369,   370,     0,     0,
-       0,     0,   371,   316,   317,   318,   319,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   220,   221,   222,   223,
-     224,   225,     1,     2,     3,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,   358,   359,   360,     0,   361,
-     362,   363,   364,   365,   366,   367,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
-      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
-      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
-     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
-     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
-     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
-     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
-     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
-     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
-     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
-     198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
-     208,   209,   210,   211,   212,   213,   214,   215,   216,   217,
-     368,   301,   218,   302,   303,   304,   305,   306,   307,   308,
-     309,   310,   311,     0,     0,   312,   313,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   314,     0,     0,     0,   369,   477,
-       0,     0,     0,     0,   371,   316,   317,   318,   319,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   220,   221,
-     222,   223,   224,   225,     1,     2,     3,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,   358,   359,   360,
-       0,   361,   362,   363,   364,   365,   366,   367,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
-      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
-      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
-     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
-     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
-     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
-     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
-     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
-     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
-     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
-     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
-     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
-     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
-     206,   207,   208,   209,   210,   211,   212,   213,   214,   215,
-     216,   217,   368,   301,   218,   302,   303,   304,   305,   306,
-     307,   308,   309,   310,   311,     0,     0,   312,   313,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   314,     0,     0,     0,
-     369,     0,     0,     0,     0,     0,   371,   316,   317,   318,
-     319,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     220,   221,   222,   223,   224,   225,     1,     2,     3,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,   358,
-     359,   360,     0,   361,   362,   363,   364,   365,   366,   367,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
-      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
-      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
-      94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
-     104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
-     114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
-     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
-     134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
-     144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
-     154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
-     164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
-     174,   175,   176,   177,   178,   179,   180,   181,   182,   183,
-     184,   185,   186,   187,   188,   189,   190,   191,   192,   193,
-     194,   195,   196,   197,   198,   199,   200,   201,   202,   203,
-     204,   205,   206,   207,   208,   209,   210,   211,   212,   213,
-     214,   215,   216,   217,   368,   301,   218,   302,   303,   304,
-     305,   306,   307,   308,   309,   310,   311,     0,     0,   312,
-     313,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   314,     0,
-       0,     0,   287,     0,     0,     0,     0,     0,   371,   316,
-     317,   318,   319,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   220,   221,   222,   223,   224,   225,     1,     2,
-       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,   358,   359,   360,     0,   361,   362,   363,   364,   365,
-     366,   367,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
-      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
-      92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
-     102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
-     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
-     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
-     132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
-     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
-     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
-     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
-     172,   173,   174,   175,   176,   177,   178,   179,   180,   181,
-     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
-     192,   193,   194,   195,   196,   197,   198,   199,   200,   201,
-     202,   203,   204,   205,   206,   207,   208,   209,   210,   211,
-     212,   213,   214,   215,   216,   217,   368,   301,   218,   302,
-     303,   304,   305,   306,   307,   308,   309,   310,   311,     0,
-       0,   312,   313,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     314,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     371,   316,   317,   318,   319,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   220,   221,   222,   223,   224,   225,
-       1,     2,     3,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
-      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
-      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
-     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
-     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
-     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
-     130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
-     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
-     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
-     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
-     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
-     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
-     190,   191,   192,   193,   194,   195,   196,   197,   198,   199,
-     200,   201,   202,   203,   204,   205,   206,   207,   208,   209,
-     210,   211,   212,   213,   214,   215,   216,   217,     0,   301,
-     218,   302,   303,   304,   305,   306,   307,   308,   309,   310,
-     311,     0,     0,   312,   313,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   314,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   371,   316,   317,   318,   319,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   220,   221,   222,   223,
-     224,   225,     1,     2,     3,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
-      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
-      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
-     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
-     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
-     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
-     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
-     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
-     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
-     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
-     198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
-     208,   209,   210,   211,   212,   213,   214,   215,   216,   217,
-       0,     0,   218,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   448,     0,     0,     0,     0,     0,   333,
+       0,     0,   475,     0,     0,     0,     0,     0,   474,     0,
+       0,     0,     0,     0,   475,     0,     0,     0,     0,     0,
+     474,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   448,
+       0,     0,     0,     0,     0,   333,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   219,     1,     2,     3,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,   220,   221,
-     222,   223,   224,   225,     0,     0,     0,     0,     0,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
-      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
-     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
-     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
-     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
-     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
-     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
-     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
-     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
-     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
-     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
-     195,   196,   197,   198,   199,   200,   201,   202,   203,   204,
-     205,   206,   207,   208,   209,   210,   211,   212,   213,   214,
-     215,   216,   217,     0,   301,   218,   302,   303,   304,   305,
-     306,   307,   308,   309,   310,   311,     0,     0,   312,   313,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   314,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   316,   317,
-     318,   319,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   220,   221,   222,   223,   224,     1,     2,     3,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
-      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
-      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
-      94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
-     104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
-     114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
-     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
-     134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
-     144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
-     154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
-     164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
-     174,   175,   176,   177,   178,   179,   180,   181,   182,   183,
-     184,   185,   186,   187,   188,   189,   190,   191,   192,   193,
-     194,   195,   196,   197,   198,   199,   200,   201,   202,   203,
-     204,   205,   206,   207,   208,   209,   210,   211,   212,   213,
-     214,   215,   216,   217,     0,   268,   218,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   269,     1,
+       0,     0,     0,   475,     0,     0,     0,     0,   475,   474,
+       0,     0,   475,     0,   474,     0,     0,     0,   474,     0,
+       0,     0,     0,     0,     0,     0,   475,     0,     0,     0,
+       0,   363,   474,     0,     0,     0,     0,   333,     0,     0,
+       0,     0,     0,     0,     0,     0,   475,     0,     0,     0,
+     475,     0,   474,     0,     0,     0,   474,     0,   475,     0,
+       0,     0,   475,     0,   474,     0,     0,     0,   474,     0,
+       0,     0,   475,     0,     0,     0,   366,     0,   474,     1,
        2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,   220,   221,   222,   223,   224,     0,     0,     0,
-       0,     0,     0,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
-      91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
-     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
-     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
-     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
-     131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
-     141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
-     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
-     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
-     171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
-     181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
-     201,   202,   203,   204,   205,   206,   207,   208,   209,   210,
-     211,   212,   213,   214,   215,   216,   217,     0,     0,   218,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   447,     1,     2,     3,
-       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-       0,     0,     0,     0,     0,   220,   221,   222,   223,   224,
-       0,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
-      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
-      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
-      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
-     103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
-     113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
-     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
-     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
-     143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
-     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
-     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
-     173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
-     183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
-     193,   194,   195,   196,   197,   198,   199,   200,   201,   202,
-     203,   204,   205,   206,   207,   208,   209,   210,   211,   212,
-     213,   214,   215,   216,   217,     0,     0,   218,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   512,     1,     2,     3,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,     0,     0,
-       0,     0,     0,   220,   221,   222,   223,   224,     0,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
-      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
-     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
-     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
-     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
-     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
-     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
-     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
-     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
-     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
-     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
-     195,   196,   197,   198,   199,   200,   201,   202,   203,   204,
-     205,   206,   207,   208,   209,   210,   211,   212,   213,   214,
-     215,   216,   217,     0,     0,   218,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   530,     1,     2,     3,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,     0,     0,     0,     0,
-       0,   220,   221,   222,   223,   224,     0,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
-      87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
-      97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
-     107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
-     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
-     127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
-     137,   138,   139,   140,   141,   142,   143,   144,   145,   146,
-     147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
-     157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
-     167,   168,   169,   170,   171,   172,   173,   174,   175,   176,
-     177,   178,   179,   180,   181,   182,   183,   184,   185,   186,
-     187,   188,   189,   190,   191,   192,   193,   194,   195,   196,
-     197,   198,   199,   200,   201,   202,   203,   204,   205,   206,
-     207,   208,   209,   210,   211,   212,   213,   214,   215,   216,
-     217,     0,     0,   218,     0,     0,     0,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   220,
-     221,   222,   223,   224,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,     0,     0,     0,     0,     0,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
-      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
-      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
-     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
-     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
-     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
-     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
-     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
-     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
-     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
-     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
-     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
-     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
-     206,   207,   208,   209,   210,   211,   212,   213,   214,   215,
-     216,   217,     0,   301,   218,   302,   303,   304,   305,   306,
-     307,   308,   309,   310,   311,     0,     0,   312,   313,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   314,     0,     0,     0,
-     393,   546,     0,     0,     0,     0,     0,   316,   317,   318,
-     319,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    35,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    50,    51,
-      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-      62,    63,    64,    65,    66,    67,     0,     0,     0,     0,
-       0,    73,    74,    75,    76,    77,    78,    79,    80,    81,
-      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
-      92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
-     102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
-     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
-     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
-     132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
-     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
-     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
-     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
-     172,   173,   174,   175,   176,   177,   178,   179,   180,   181,
-     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
-     192,   193,   194,   195,   196,   197,   198,   199,   200,   201,
-     202,   203,   204,   205,   206,   207,   208,   209,   210,   211,
-     212,   213,   214,   215,   216,   217,     0,   301,   218,   302,
-     303,   304,   305,   306,   307,   308,   309,   310,   311,     0,
-       0,   312,   313,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     314,     0,     0,   315,     0,     0,     0,     0,     0,     0,
-       0,   316,   317,   318,   319,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-       0,     0,     0,     0,     0,    73,    74,    75,    76,    77,
-      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
-      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
-      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
-     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
-     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
-     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
-     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
-     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
-     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
-     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
-     198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
-     208,   209,   210,   211,   212,   213,   214,   215,   216,   217,
-       0,   301,   218,   302,   303,   304,   305,   306,   307,   308,
-     309,   310,   311,     0,     0,   312,   313,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   314,     0,     0,     0,   393,     0,
-       0,     0,     0,     0,     0,   316,   317,   318,   319,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-      34,    35,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    50,    51,    52,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,     0,     0,     0,     0,     0,    73,
-      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
-      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
-      94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
-     104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
-     114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
-     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
-     134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
-     144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
-     154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
-     164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
-     174,   175,   176,   177,   178,   179,   180,   181,   182,   183,
-     184,   185,   186,   187,   188,   189,   190,   191,   192,   193,
-     194,   195,   196,   197,   198,   199,   200,   201,   202,   203,
-     204,   205,   206,   207,   208,   209,   210,   211,   212,   213,
-     214,   215,   216,   217,     0,   301,   218,   302,   303,   304,
-     305,   306,   307,   308,   309,   310,   311,     0,     0,   312,
-     313,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   314,     0,
-       0,   436,     0,     0,     0,     0,     0,     0,     0,   316,
-     317,   318,   319,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    35,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,     0,     0,
-       0,     0,     0,    73,    74,    75,    76,    77,    78,    79,
-      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
-      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
-     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
-     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
-     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
-     130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
-     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
-     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
-     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
-     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
-     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
-     190,   191,   192,   193,   194,   195,   196,   197,   198,   199,
-     200,   201,   202,   203,   204,   205,   206,   207,   208,   209,
-     210,   211,   212,   213,   214,   215,   216,   217,     0,   301,
-     218,   302,   303,   304,   305,   306,   307,   308,   309,   310,
-     311,     0,     0,   312,   313,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   314,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   455,   316,   317,   318,   319,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,     0,     0,     0,     0,     0,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
-      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
-      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
-     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
-     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
-     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
-     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
-     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
-     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
-     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
-     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
-     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
-     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
-     206,   207,   208,   209,   210,   211,   212,   213,   214,   215,
-     216,   217,     0,   301,   218,   302,   303,   304,   305,   306,
-     307,   308,   309,   310,   311,     0,     0,   312,   313,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   314,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,   316,   317,   318,
-     319,     0,     0,     0,     0,     0,     0,     0,     0,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,     0,     0,     0,     0,     0,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
-      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
-      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
-     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
-     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
-     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
-     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
-     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
-     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
-     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
-     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
-     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
-     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
-     206,   207,   208,   209,   210,   211,   212,   213,   214,   215,
-     216,   411,     0,   301,   218,   302,   303,   304,   305,   306,
-     307,   308,   309,   310,   311,     0,     0,   312,   313,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   314,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,   316,   317,   318,
-     319,     0,     0,     0,     0,     0,     0,     0,     0,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,     0,     0,     0,     0,     0,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
-      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
-      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
-     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
-     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
-     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
-     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
-     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
-     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
-     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
-     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
-     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
-     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
-     206,   207,   208,   209,   210,   211,   212,   213,   214,   215,
-     216,   217,     0,     0,   218
-};
-
-static const yytype_int16 yycheck[] =
-{
-       0,   231,   239,   295,     0,     0,   314,   383,   254,    57,
-     462,   272,   354,   391,   351,   393,   232,   232,   396,   523,
-     253,   267,   265,   246,   247,   267,   263,   248,   249,   259,
-     265,   555,   267,   275,   538,   559,   328,   265,   267,   274,
-     564,   267,   265,   267,   267,   274,   292,   293,   271,   275,
-     274,   250,   251,   283,   269,   288,   364,   275,   366,   275,
-     397,   266,   283,   284,   255,   256,   257,   258,   259,   260,
-     261,   262,   263,   264,   267,   451,   280,   281,   282,   269,
-     266,   274,   272,   274,   345,   275,   272,   348,   266,   266,
-     266,   266,   272,   273,   272,   272,   272,   272,   406,   391,
-     442,   393,   480,   266,   396,   266,   277,   272,   279,   272,
-     275,   272,   244,   245,   272,   352,   568,   275,   410,   272,
-     272,   351,   275,   275,   354,   422,   423,   424,   425,   272,
-     272,   272,   275,   275,   291,   292,   293,   270,   232,   272,
-     418,   419,   484,   272,   273,   453,   420,   421,   524,   457,
-     267,   529,   232,   426,   427,   269,   269,   232,   232,   267,
-     275,   232,   274,   287,   266,   265,   286,   397,   252,   272,
-     268,   254,   232,   232,   285,   265,   275,   265,   275,   275,
-     265,   273,   474,   475,   232,   232,   265,   265,   480,   270,
-     232,   569,   268,   266,   231,   272,   268,   265,   444,   269,
-     232,   577,   510,   266,   270,   266,   275,    19,   275,   312,
-     313,   269,   442,   269,   428,   523,   270,   274,   429,   431,
-     430,   259,   263,   432,   263,   433,   225,   350,   331,   515,
-     538,   231,   554,   518,   564,   257,   443,   529,   565,   239,
-     538,   549,   345,   518,   246,   348,   246,    -1,    -1,    -1,
-     246,   246,    -1,   253,   484,   563,   548,    -1,    -1,   259,
-      -1,    -1,    -1,   263,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   569,    -1,    -1,
-      -1,    -1,    -1,   283,    -1,    -1,    -1,   287,    -1,    -1,
-      -1,    -1,    -1,   523,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   543,    -1,   538,    -1,
-      -1,    -1,   415,   416,   417,   418,   419,   420,   421,   422,
-     423,   424,   425,   426,   427,   428,   429,   430,   431,   432,
-     433,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   351,   352,    -1,   354,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   383,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   397,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   442,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   451,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   462,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   484,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   518,    -1,
-      -1,    -1,    -1,   523,   524,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   538,    -1,
-      -1,    -1,    -1,   543,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   555,    -1,    -1,    -1,   559,
-      -1,    -1,    -1,    -1,   564,    -1,    -1,    -1,   568,    -1,
-      -1,    -1,    -1,    -1,    -1,     0,    -1,   577,     3,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
-      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
-     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
-     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
-     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
-     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
-     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
-     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
-     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
-     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
-     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
-     195,   196,   197,   198,   199,   200,   201,   202,   203,   204,
-     205,   206,   207,   208,   209,   210,   211,   212,   213,   214,
-     215,   216,   217,   218,   219,   220,   221,   222,   223,   224,
-     225,   226,   227,   228,   229,   230,    -1,    -1,   233,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     275,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   289,   290,   291,   292,   293,   294,
-       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    -1,    20,    21,    22,
-      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
-      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
-      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
-      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
-     103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
-     113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
-     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
-     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
-     143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
-     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
-     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
-     173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
-     183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
-     193,   194,   195,   196,   197,   198,   199,   200,   201,   202,
-     203,   204,   205,   206,   207,   208,   209,   210,   211,   212,
-     213,   214,   215,   216,   217,   218,   219,   220,   221,   222,
-     223,   224,   225,   226,   227,   228,   229,   230,   231,   232,
-     233,   234,   235,   236,   237,   238,   239,   240,   241,   242,
-     243,    -1,    -1,   246,   247,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   265,    -1,    -1,    -1,   269,   270,    -1,    -1,
-      -1,    -1,   275,   276,   277,   278,   279,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   289,   290,   291,   292,
-     293,   294,     3,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    -1,    20,
+      12,    13,    14,    15,    16,    17,    18,    19,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    20,
       21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
       31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
       41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
@@ -1965,43 +1429,331 @@
      211,   212,   213,   214,   215,   216,   217,   218,   219,   220,
      221,   222,   223,   224,   225,   226,   227,   228,   229,   230,
      231,   232,   233,   234,   235,   236,   237,   238,   239,   240,
-     241,   242,   243,    -1,    -1,   246,   247,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   265,    -1,    -1,    -1,   269,   270,
-      -1,    -1,    -1,    -1,   275,   276,   277,   278,   279,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   289,   290,
-     291,   292,   293,   294,     3,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      -1,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-      79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
-      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
-      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
-     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
-     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
-     129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
-     139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
-     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
-     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
-     169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
-     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
-     189,   190,   191,   192,   193,   194,   195,   196,   197,   198,
-     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
-     209,   210,   211,   212,   213,   214,   215,   216,   217,   218,
-     219,   220,   221,   222,   223,   224,   225,   226,   227,   228,
-     229,   230,   231,   232,   233,   234,   235,   236,   237,   238,
-     239,   240,   241,   242,   243,    -1,    -1,   246,   247,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   265,    -1,    -1,    -1,
-     269,    -1,    -1,    -1,    -1,    -1,   275,   276,   277,   278,
-     279,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     289,   290,   291,   292,   293,   294,     3,     4,     5,     6,
+     241,   242,   243,   244,   245,   246,   247,   248,   249,   250,
+     251,   252,   253,   254,   255,   256,   257,   258,   259,   260,
+     261,   262,   263,   264,   265,   266,   267,   268,   269,   270,
+     271,   272,   273,   274,   275,   276,   277,   278,   279,   280,
+     281,   282,   283,   284,   285,   286,   287,   288,   289,   290,
+     291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
+     301,   302,   303,   304,   305,   306,   307,   308,     0,     0,
+     309,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   310,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   311,   312,
+     313,   314,   315,   316,     1,     2,     3,     4,     5,     6,
        7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    -1,    20,    21,    22,    23,    24,    25,    26,
+      17,    18,    19,   453,   454,   455,     0,   456,   457,   458,
+     459,   460,   461,   462,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
+      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
+      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
+      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
+     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
+     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
+     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
+     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
+     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
+     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
+     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
+     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
+     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
+     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
+     206,   207,   208,   209,   210,   211,   212,   213,   214,   215,
+     216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
+     226,   227,   228,   229,   230,   231,   232,   233,   234,   235,
+     236,   237,   238,   239,   240,   241,   242,   243,   244,   245,
+     246,   247,   248,   249,   250,   251,   252,   253,   254,   255,
+     256,   257,   258,   259,   260,   261,   262,   263,   264,   265,
+     266,   267,   268,   269,   270,   271,   272,   273,   274,   275,
+     276,   277,   278,   279,   280,   281,   282,   283,   284,   285,
+     286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
+     296,   297,   298,   299,   300,   301,   302,   303,   304,   305,
+     306,   307,   308,   463,   393,   309,   394,   395,   396,   397,
+     398,   399,   400,   401,   402,   403,   404,   405,     0,     0,
+     406,   407,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   408,
+       0,   464,     0,   465,   466,     0,     0,     0,     0,   467,
+     410,   411,   412,   413,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   311,   312,   313,   314,   315,   316,     1,
+       2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,   453,   454,
+     455,     0,   456,   457,   458,   459,   460,   461,   462,    20,
+      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
+      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
+      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
+      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
+      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
+      91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
+     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
+     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
+     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
+     131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
+     141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
+     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
+     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
+     171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
+     181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
+     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
+     201,   202,   203,   204,   205,   206,   207,   208,   209,   210,
+     211,   212,   213,   214,   215,   216,   217,   218,   219,   220,
+     221,   222,   223,   224,   225,   226,   227,   228,   229,   230,
+     231,   232,   233,   234,   235,   236,   237,   238,   239,   240,
+     241,   242,   243,   244,   245,   246,   247,   248,   249,   250,
+     251,   252,   253,   254,   255,   256,   257,   258,   259,   260,
+     261,   262,   263,   264,   265,   266,   267,   268,   269,   270,
+     271,   272,   273,   274,   275,   276,   277,   278,   279,   280,
+     281,   282,   283,   284,   285,   286,   287,   288,   289,   290,
+     291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
+     301,   302,   303,   304,   305,   306,   307,   308,   463,   393,
+     309,   394,   395,   396,   397,   398,   399,   400,   401,   402,
+     403,   404,   405,     0,     0,   406,   407,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   408,     0,   464,     0,   465,   579,
+       0,     0,     0,     0,   467,   410,   411,   412,   413,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   311,   312,
+     313,   314,   315,   316,     1,     2,     3,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,   453,   454,   455,     0,   456,   457,   458,
+     459,   460,   461,   462,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
+      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
+      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
+      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
+     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
+     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
+     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
+     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
+     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
+     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
+     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
+     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
+     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
+     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
+     206,   207,   208,   209,   210,   211,   212,   213,   214,   215,
+     216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
+     226,   227,   228,   229,   230,   231,   232,   233,   234,   235,
+     236,   237,   238,   239,   240,   241,   242,   243,   244,   245,
+     246,   247,   248,   249,   250,   251,   252,   253,   254,   255,
+     256,   257,   258,   259,   260,   261,   262,   263,   264,   265,
+     266,   267,   268,   269,   270,   271,   272,   273,   274,   275,
+     276,   277,   278,   279,   280,   281,   282,   283,   284,   285,
+     286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
+     296,   297,   298,   299,   300,   301,   302,   303,   304,   305,
+     306,   307,   308,   463,   393,   309,   394,   395,   396,   397,
+     398,   399,   400,   401,   402,   403,   404,   405,     0,     0,
+     406,   407,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   408,
+       0,   464,     0,   465,     0,     0,     0,     0,     0,   467,
+     410,   411,   412,   413,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   311,   312,   313,   314,   315,   316,     1,
+       2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,   453,   454,
+     455,     0,   456,   457,   458,   459,   460,   461,   462,    20,
+      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
+      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
+      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
+      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
+      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
+      91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
+     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
+     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
+     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
+     131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
+     141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
+     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
+     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
+     171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
+     181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
+     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
+     201,   202,   203,   204,   205,   206,   207,   208,   209,   210,
+     211,   212,   213,   214,   215,   216,   217,   218,   219,   220,
+     221,   222,   223,   224,   225,   226,   227,   228,   229,   230,
+     231,   232,   233,   234,   235,   236,   237,   238,   239,   240,
+     241,   242,   243,   244,   245,   246,   247,   248,   249,   250,
+     251,   252,   253,   254,   255,   256,   257,   258,   259,   260,
+     261,   262,   263,   264,   265,   266,   267,   268,   269,   270,
+     271,   272,   273,   274,   275,   276,   277,   278,   279,   280,
+     281,   282,   283,   284,   285,   286,   287,   288,   289,   290,
+     291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
+     301,   302,   303,   304,   305,   306,   307,   308,   463,   393,
+     309,   394,   395,   396,   397,   398,   399,   400,   401,   402,
+     403,   404,   405,     0,     0,   406,   407,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   408,     0,   464,     0,   379,     0,
+       0,     0,     0,     0,   467,   410,   411,   412,   413,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   311,   312,
+     313,   314,   315,   316,     1,     2,     3,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,   453,   454,   455,     0,   456,   457,   458,
+     459,   460,   461,   462,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
+      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
+      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
+      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
+     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
+     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
+     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
+     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
+     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
+     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
+     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
+     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
+     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
+     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
+     206,   207,   208,   209,   210,   211,   212,   213,   214,   215,
+     216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
+     226,   227,   228,   229,   230,   231,   232,   233,   234,   235,
+     236,   237,   238,   239,   240,   241,   242,   243,   244,   245,
+     246,   247,   248,   249,   250,   251,   252,   253,   254,   255,
+     256,   257,   258,   259,   260,   261,   262,   263,   264,   265,
+     266,   267,   268,   269,   270,   271,   272,   273,   274,   275,
+     276,   277,   278,   279,   280,   281,   282,   283,   284,   285,
+     286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
+     296,   297,   298,   299,   300,   301,   302,   303,   304,   305,
+     306,   307,   308,   463,   393,   309,   394,   395,   396,   397,
+     398,   399,   400,   401,   402,   403,   404,   405,     0,     0,
+     406,   407,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   408,
+       0,   464,     0,     0,     0,     0,     0,     0,     0,   467,
+     410,   411,   412,   413,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   311,   312,   313,   314,   315,   316,     1,
+       2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    20,
+      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
+      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
+      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
+      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
+      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
+      91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
+     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
+     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
+     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
+     131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
+     141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
+     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
+     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
+     171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
+     181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
+     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
+     201,   202,   203,   204,   205,   206,   207,   208,   209,   210,
+     211,   212,   213,   214,   215,   216,   217,   218,   219,   220,
+     221,   222,   223,   224,   225,   226,   227,   228,   229,   230,
+     231,   232,   233,   234,   235,   236,   237,   238,   239,   240,
+     241,   242,   243,   244,   245,   246,   247,   248,   249,   250,
+     251,   252,   253,   254,   255,   256,   257,   258,   259,   260,
+     261,   262,   263,   264,   265,   266,   267,   268,   269,   270,
+     271,   272,   273,   274,   275,   276,   277,   278,   279,   280,
+     281,   282,   283,   284,   285,   286,   287,   288,   289,   290,
+     291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
+     301,   302,   303,   304,   305,   306,   307,   308,     0,   393,
+     309,   394,   395,   396,   397,   398,   399,   400,   401,   402,
+     403,   404,   405,     0,     0,   406,   407,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   408,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   467,   410,   411,   412,   413,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   311,   312,
+     313,   314,   315,   316,     1,     2,     3,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
+      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
+      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
+      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
+     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
+     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
+     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
+     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
+     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
+     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
+     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
+     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
+     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
+     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
+     206,   207,   208,   209,   210,   211,   212,   213,   214,   215,
+     216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
+     226,   227,   228,   229,   230,   231,   232,   233,   234,   235,
+     236,   237,   238,   239,   240,   241,   242,   243,   244,   245,
+     246,   247,   248,   249,   250,   251,   252,   253,   254,   255,
+     256,   257,   258,   259,   260,   261,   262,   263,   264,   265,
+     266,   267,   268,   269,   270,   271,   272,   273,   274,   275,
+     276,   277,   278,   279,   280,   281,   282,   283,   284,   285,
+     286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
+     296,   297,   298,   299,   300,   301,   302,   303,   304,   305,
+     306,   307,   308,     0,     0,   309,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   310,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   311,   312,   313,   314,   315,   316,     1,
+       2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    20,
+      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
+      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
+      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
+      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
+      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
+      91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
+     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
+     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
+     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
+     131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
+     141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
+     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
+     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
+     171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
+     181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
+     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
+     201,   202,   203,   204,   205,   206,   207,   208,   209,   210,
+     211,   212,   213,   214,   215,   216,   217,   218,   219,   220,
+     221,   222,   223,   224,   225,   226,   227,   228,   229,   230,
+     231,   232,   233,   234,   235,   236,   237,   238,   239,   240,
+     241,   242,   243,   244,   245,   246,   247,   248,   249,   250,
+     251,   252,   253,   254,   255,   256,   257,   258,   259,   260,
+     261,   262,   263,   264,   265,   266,   267,   268,   269,   270,
+     271,   272,   273,   274,   275,   276,   277,   278,   279,   280,
+     281,   282,   283,   284,   285,   286,   287,   288,   289,   290,
+     291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
+     301,   302,   303,   304,   305,   306,   307,   308,     0,   393,
+     309,   394,   395,   396,   397,   398,   399,   400,   401,   402,
+     403,   404,   405,     0,     0,   406,   407,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   408,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   410,   411,   412,   413,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   311,   312,
+     313,   314,   315,     1,     2,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    20,    21,    22,    23,    24,    25,    26,
       27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
       37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
       47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
@@ -2023,14 +1775,100 @@
      207,   208,   209,   210,   211,   212,   213,   214,   215,   216,
      217,   218,   219,   220,   221,   222,   223,   224,   225,   226,
      227,   228,   229,   230,   231,   232,   233,   234,   235,   236,
-     237,   238,   239,   240,   241,   242,   243,    -1,    -1,   246,
-     247,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   265,    -1,
-      -1,    -1,   269,    -1,    -1,    -1,    -1,    -1,   275,   276,
-     277,   278,   279,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   289,   290,   291,   292,   293,   294,     3,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    -1,    20,    21,    22,    23,    24,
+     237,   238,   239,   240,   241,   242,   243,   244,   245,   246,
+     247,   248,   249,   250,   251,   252,   253,   254,   255,   256,
+     257,   258,   259,   260,   261,   262,   263,   264,   265,   266,
+     267,   268,   269,   270,   271,   272,   273,   274,   275,   276,
+     277,   278,   279,   280,   281,   282,   283,   284,   285,   286,
+     287,   288,   289,   290,   291,   292,   293,   294,   295,   296,
+     297,   298,   299,   300,   301,   302,   303,   304,   305,   306,
+     307,   308,     0,   360,   309,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   361,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   311,   312,   313,   314,   315,     1,     2,     3,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
+      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
+      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
+      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
+     103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
+     113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
+     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
+     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
+     143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
+     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
+     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
+     173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
+     183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
+     193,   194,   195,   196,   197,   198,   199,   200,   201,   202,
+     203,   204,   205,   206,   207,   208,   209,   210,   211,   212,
+     213,   214,   215,   216,   217,   218,   219,   220,   221,   222,
+     223,   224,   225,   226,   227,   228,   229,   230,   231,   232,
+     233,   234,   235,   236,   237,   238,   239,   240,   241,   242,
+     243,   244,   245,   246,   247,   248,   249,   250,   251,   252,
+     253,   254,   255,   256,   257,   258,   259,   260,   261,   262,
+     263,   264,   265,   266,   267,   268,   269,   270,   271,   272,
+     273,   274,   275,   276,   277,   278,   279,   280,   281,   282,
+     283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
+     293,   294,   295,   296,   297,   298,   299,   300,   301,   302,
+     303,   304,   305,   306,   307,   308,     0,     0,   309,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   548,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   311,   312,   313,   314,
+     315,     1,     2,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    20,    21,    22,    23,    24,    25,    26,    27,    28,
+      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
+      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
+      79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
+      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
+      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
+     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
+     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
+     129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
+     139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
+     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
+     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
+     169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
+     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
+     189,   190,   191,   192,   193,   194,   195,   196,   197,   198,
+     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
+     209,   210,   211,   212,   213,   214,   215,   216,   217,   218,
+     219,   220,   221,   222,   223,   224,   225,   226,   227,   228,
+     229,   230,   231,   232,   233,   234,   235,   236,   237,   238,
+     239,   240,   241,   242,   243,   244,   245,   246,   247,   248,
+     249,   250,   251,   252,   253,   254,   255,   256,   257,   258,
+     259,   260,   261,   262,   263,   264,   265,   266,   267,   268,
+     269,   270,   271,   272,   273,   274,   275,   276,   277,   278,
+     279,   280,   281,   282,   283,   284,   285,   286,   287,   288,
+     289,   290,   291,   292,   293,   294,   295,   296,   297,   298,
+     299,   300,   301,   302,   303,   304,   305,   306,   307,   308,
+       0,     0,   309,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   617,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     311,   312,   313,   314,   315,     1,     2,     3,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    20,    21,    22,    23,    24,
       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
       35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
@@ -2052,44 +1890,24 @@
      205,   206,   207,   208,   209,   210,   211,   212,   213,   214,
      215,   216,   217,   218,   219,   220,   221,   222,   223,   224,
      225,   226,   227,   228,   229,   230,   231,   232,   233,   234,
-     235,   236,   237,   238,   239,   240,   241,   242,   243,    -1,
-      -1,   246,   247,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     265,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     275,   276,   277,   278,   279,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   289,   290,   291,   292,   293,   294,
-       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
-      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
-      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
-      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
-     103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
-     113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
-     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
-     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
-     143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
-     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
-     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
-     173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
-     183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
-     193,   194,   195,   196,   197,   198,   199,   200,   201,   202,
-     203,   204,   205,   206,   207,   208,   209,   210,   211,   212,
-     213,   214,   215,   216,   217,   218,   219,   220,   221,   222,
-     223,   224,   225,   226,   227,   228,   229,   230,    -1,   232,
-     233,   234,   235,   236,   237,   238,   239,   240,   241,   242,
-     243,    -1,    -1,   246,   247,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   265,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   275,   276,   277,   278,   279,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   289,   290,   291,   292,
-     293,   294,     3,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    27,    28,    29,    30,
+     235,   236,   237,   238,   239,   240,   241,   242,   243,   244,
+     245,   246,   247,   248,   249,   250,   251,   252,   253,   254,
+     255,   256,   257,   258,   259,   260,   261,   262,   263,   264,
+     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
+     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
+     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
+     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
+     305,   306,   307,   308,     0,     0,   309,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   638,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   311,   312,   313,   314,   315,     1,
+       2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    20,
+      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
       31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
       41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
       51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
@@ -2110,21 +1928,29 @@
      201,   202,   203,   204,   205,   206,   207,   208,   209,   210,
      211,   212,   213,   214,   215,   216,   217,   218,   219,   220,
      221,   222,   223,   224,   225,   226,   227,   228,   229,   230,
-      -1,    -1,   233,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   275,     3,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,   289,   290,
-     291,   292,   293,   294,    -1,    -1,    -1,    -1,    -1,    27,
+     231,   232,   233,   234,   235,   236,   237,   238,   239,   240,
+     241,   242,   243,   244,   245,   246,   247,   248,   249,   250,
+     251,   252,   253,   254,   255,   256,   257,   258,   259,   260,
+     261,   262,   263,   264,   265,   266,   267,   268,   269,   270,
+     271,   272,   273,   274,   275,   276,   277,   278,   279,   280,
+     281,   282,   283,   284,   285,   286,   287,   288,   289,   290,
+     291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
+     301,   302,   303,   304,   305,   306,   307,   308,     0,     0,
+     309,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     3,     4,     5,     6,     7,     0,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,     0,     0,     0,     0,     0,     0,     0,   311,   312,
+     313,   314,   315,    21,    22,    23,    24,    25,    26,    27,
       28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
       38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
       48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
+      58,    59,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    69,     0,     0,     0,     0,     0,    75,    76,    77,
       78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
       88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
-      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
+      98,     0,     0,     0,     0,     0,   104,   105,   106,   107,
      108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
      118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
      128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
@@ -2137,43 +1963,349 @@
      198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
      208,   209,   210,   211,   212,   213,   214,   215,   216,   217,
      218,   219,   220,   221,   222,   223,   224,   225,   226,   227,
-     228,   229,   230,    -1,   232,   233,   234,   235,   236,   237,
-     238,   239,   240,   241,   242,   243,    -1,    -1,   246,   247,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   265,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   276,   277,
-     278,   279,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   289,   290,   291,   292,   293,     3,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
-      87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
-      97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
-     107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
-     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
-     127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
-     137,   138,   139,   140,   141,   142,   143,   144,   145,   146,
-     147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
-     157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
-     167,   168,   169,   170,   171,   172,   173,   174,   175,   176,
-     177,   178,   179,   180,   181,   182,   183,   184,   185,   186,
-     187,   188,   189,   190,   191,   192,   193,   194,   195,   196,
-     197,   198,   199,   200,   201,   202,   203,   204,   205,   206,
-     207,   208,   209,   210,   211,   212,   213,   214,   215,   216,
-     217,   218,   219,   220,   221,   222,   223,   224,   225,   226,
-     227,   228,   229,   230,    -1,   232,   233,    -1,    -1,    -1,
+     228,   229,   230,   231,   232,   233,   234,   235,   236,   237,
+     238,   239,   240,   241,   242,   243,   244,   245,   246,   247,
+     248,   249,   250,   251,   252,   253,   254,   255,   256,   257,
+     258,   259,   260,   261,   262,   263,   264,   265,   266,   267,
+     268,   269,   270,   271,   272,   273,   274,   275,   276,   277,
+     278,   279,   280,   281,   282,   283,   284,   285,   286,   287,
+     288,   289,   290,   291,   292,   293,   294,   295,   296,   297,
+     298,   299,   300,   301,   302,   303,   304,   305,   306,   307,
+     308,     0,   393,   309,   394,   395,   396,   397,   398,   399,
+     400,   401,   402,   403,   404,   405,     0,     0,   406,   407,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   408,     0,     0,
+       0,   494,   657,     0,     0,     0,     0,     0,   410,   411,
+     412,   413,     3,     4,     5,     6,     7,     0,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    69,
+       0,     0,     0,     0,     0,    75,    76,    77,    78,    79,
+      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
+      90,    91,    92,    93,    94,    95,    96,    97,    98,     0,
+       0,     0,     0,     0,   104,   105,   106,   107,   108,   109,
+     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
+     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
+     130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
+     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
+     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
+     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
+     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
+     190,   191,   192,   193,   194,   195,   196,   197,   198,   199,
+     200,   201,   202,   203,   204,   205,   206,   207,   208,   209,
+     210,   211,   212,   213,   214,   215,   216,   217,   218,   219,
+     220,   221,   222,   223,   224,   225,   226,   227,   228,   229,
+     230,   231,   232,   233,   234,   235,   236,   237,   238,   239,
+     240,   241,   242,   243,   244,   245,   246,   247,   248,   249,
+     250,   251,   252,   253,   254,   255,   256,   257,   258,   259,
+     260,   261,   262,   263,   264,   265,   266,   267,   268,   269,
+     270,   271,   272,   273,   274,   275,   276,   277,   278,   279,
+     280,   281,   282,   283,   284,   285,   286,   287,   288,   289,
+     290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
+     300,   301,   302,   303,   304,   305,   306,   307,   308,     0,
+     393,   309,   394,   395,   396,   397,   398,   399,   400,   401,
+     402,   403,   404,   405,     0,     0,   406,   407,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   408,     0,     0,   409,     0,
+       0,     0,     0,     0,     0,     0,   410,   411,   412,   413,
+       3,     4,     5,     6,     7,     0,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    21,
+      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,    56,    57,    58,    59,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    69,     0,     0,
+       0,     0,     0,    75,    76,    77,    78,    79,    80,    81,
+      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
+      92,    93,    94,    95,    96,    97,    98,     0,     0,     0,
+       0,     0,   104,   105,   106,   107,   108,   109,   110,   111,
+     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
+     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
+     132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
+     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
+     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
+     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
+     172,   173,   174,   175,   176,   177,   178,   179,   180,   181,
+     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
+     192,   193,   194,   195,   196,   197,   198,   199,   200,   201,
+     202,   203,   204,   205,   206,   207,   208,   209,   210,   211,
+     212,   213,   214,   215,   216,   217,   218,   219,   220,   221,
+     222,   223,   224,   225,   226,   227,   228,   229,   230,   231,
+     232,   233,   234,   235,   236,   237,   238,   239,   240,   241,
+     242,   243,   244,   245,   246,   247,   248,   249,   250,   251,
+     252,   253,   254,   255,   256,   257,   258,   259,   260,   261,
+     262,   263,   264,   265,   266,   267,   268,   269,   270,   271,
+     272,   273,   274,   275,   276,   277,   278,   279,   280,   281,
+     282,   283,   284,   285,   286,   287,   288,   289,   290,   291,
+     292,   293,   294,   295,   296,   297,   298,   299,   300,   301,
+     302,   303,   304,   305,   306,   307,   308,     0,   393,   309,
+     394,   395,   396,   397,   398,   399,   400,   401,   402,   403,
+     404,   405,     0,     0,   406,   407,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   408,     0,     0,     0,   494,     0,     0,
+       0,     0,     0,     0,   410,   411,   412,   413,     3,     4,
+       5,     6,     7,     0,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    21,    22,    23,
+      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    69,     0,     0,     0,     0,
+       0,    75,    76,    77,    78,    79,    80,    81,    82,    83,
+      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
+      94,    95,    96,    97,    98,     0,     0,     0,     0,     0,
+     104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
+     114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
+     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
+     134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
+     144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
+     154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
+     164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
+     174,   175,   176,   177,   178,   179,   180,   181,   182,   183,
+     184,   185,   186,   187,   188,   189,   190,   191,   192,   193,
+     194,   195,   196,   197,   198,   199,   200,   201,   202,   203,
+     204,   205,   206,   207,   208,   209,   210,   211,   212,   213,
+     214,   215,   216,   217,   218,   219,   220,   221,   222,   223,
+     224,   225,   226,   227,   228,   229,   230,   231,   232,   233,
+     234,   235,   236,   237,   238,   239,   240,   241,   242,   243,
+     244,   245,   246,   247,   248,   249,   250,   251,   252,   253,
+     254,   255,   256,   257,   258,   259,   260,   261,   262,   263,
+     264,   265,   266,   267,   268,   269,   270,   271,   272,   273,
+     274,   275,   276,   277,   278,   279,   280,   281,   282,   283,
+     284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
+     294,   295,   296,   297,   298,   299,   300,   301,   302,   303,
+     304,   305,   306,   307,   308,     0,   393,   309,   394,   395,
+     396,   397,   398,   399,   400,   401,   402,   403,   404,   405,
+       0,     0,   406,   407,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   408,     0,     0,   537,     0,     0,     0,     0,     0,
+       0,     0,   410,   411,   412,   413,     3,     4,     5,     6,
+       7,     0,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    69,     0,     0,     0,     0,     0,    75,
+      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
+      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
+      96,    97,    98,     0,     0,     0,     0,     0,   104,   105,
+     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
+     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
+     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
+     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
+     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
+     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
+     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
+     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
+     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
+     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
+     206,   207,   208,   209,   210,   211,   212,   213,   214,   215,
+     216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
+     226,   227,   228,   229,   230,   231,   232,   233,   234,   235,
+     236,   237,   238,   239,   240,   241,   242,   243,   244,   245,
+     246,   247,   248,   249,   250,   251,   252,   253,   254,   255,
+     256,   257,   258,   259,   260,   261,   262,   263,   264,   265,
+     266,   267,   268,   269,   270,   271,   272,   273,   274,   275,
+     276,   277,   278,   279,   280,   281,   282,   283,   284,   285,
+     286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
+     296,   297,   298,   299,   300,   301,   302,   303,   304,   305,
+     306,   307,   308,     0,   393,   309,   394,   395,   396,   397,
+     398,   399,   400,   401,   402,   403,   404,   405,     0,     0,
+     406,   407,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   408,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   556,
+     410,   411,   412,   413,     3,     4,     5,     6,     7,     0,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    69,     0,     0,     0,     0,     0,    75,    76,    77,
+      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
+      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
+      98,     0,     0,     0,     0,     0,   104,   105,   106,   107,
+     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
+     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
+     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
+     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
+     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
+     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
+     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
+     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
+     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
+     198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
+     208,   209,   210,   211,   212,   213,   214,   215,   216,   217,
+     218,   219,   220,   221,   222,   223,   224,   225,   226,   227,
+     228,   229,   230,   231,   232,   233,   234,   235,   236,   237,
+     238,   239,   240,   241,   242,   243,   244,   245,   246,   247,
+     248,   249,   250,   251,   252,   253,   254,   255,   256,   257,
+     258,   259,   260,   261,   262,   263,   264,   265,   266,   267,
+     268,   269,   270,   271,   272,   273,   274,   275,   276,   277,
+     278,   279,   280,   281,   282,   283,   284,   285,   286,   287,
+     288,   289,   290,   291,   292,   293,   294,   295,   296,   297,
+     298,   299,   300,   301,   302,   303,   304,   305,   306,   307,
+     308,     0,   393,   309,   394,   395,   396,   397,   398,   399,
+     400,   401,   402,   403,   404,   405,     0,     0,   406,   407,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   408,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   410,   411,
+     412,   413,     3,     4,     5,     6,     7,     0,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    69,
+       0,     0,     0,     0,     0,    75,    76,    77,    78,    79,
+      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
+      90,    91,    92,    93,    94,    95,    96,    97,    98,     0,
+       0,     0,     0,     0,   104,   105,   106,   107,   108,   109,
+     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
+     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
+     130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
+     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
+     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
+     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
+     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
+     190,   191,   192,   193,   194,   195,   196,   197,   198,   199,
+     200,   201,   202,   203,   204,   205,   206,   207,   208,   209,
+     210,   211,   212,   213,   214,   215,   216,   217,   218,   219,
+     220,   221,   222,   223,   224,   225,   226,   227,   228,   229,
+     230,   231,   232,   233,   234,   235,   236,   237,   238,   239,
+     240,   241,   242,   243,   244,   245,   246,   247,   248,   249,
+     250,   251,   252,   253,   254,   255,   256,   257,   258,   259,
+     260,   261,   262,   263,   264,   265,   266,   267,   268,   269,
+     270,   271,   272,   273,   274,   275,   276,   277,   278,   279,
+     280,   281,   282,   283,   284,   285,   286,   287,   288,   289,
+     290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
+     300,   301,   302,   303,   304,   305,   306,   307,   512,     0,
+     393,   309,   394,   395,   396,   397,   398,   399,   400,   401,
+     402,   403,   404,   405,     0,     0,   406,   407,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   408,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   410,   411,   412,   413,
+       3,     4,     5,     6,     7,     0,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    21,
+      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,    56,    57,    58,    59,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    75,    76,    77,    78,    79,    80,    81,
+      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
+      92,    93,    94,    95,    96,    97,    98,     0,     0,     0,
+       0,     0,   104,   105,   106,   107,   108,   109,   110,   111,
+     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
+     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
+     132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
+     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
+     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
+     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
+     172,   173,   174,   175,   176,   177,   178,   179,   180,   181,
+     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
+     192,   193,   194,   195,   196,   197,   198,   199,   200,   201,
+     202,   203,   204,   205,   206,   207,   208,   209,   210,   211,
+     212,   213,   214,   215,   216,   217,   218,   219,   220,   221,
+     222,   223,   224,   225,   226,   227,   228,   229,   230,   231,
+     232,   233,   234,   235,   236,   237,   238,   239,   240,   241,
+     242,   243,   244,   245,   246,   247,   248,   249,   250,   251,
+     252,   253,   254,   255,   256,   257,   258,   259,   260,   261,
+     262,   263,   264,   265,   266,   267,   268,   269,   270,   271,
+     272,   273,   274,   275,   276,   277,   278,   279,   280,   281,
+     282,   283,   284,   285,   286,   287,   288,   289,   290,   291,
+     292,   293,   294,   295,   296,   297,   298,   299,   300,   301,
+     302,   303,   304,   305,   306,   307,   308,     0,     0,   309
+};
+
+static const yytype_int16 yycheck[] =
+{
+       0,     0,     0,   322,   330,    24,     0,    26,    27,   387,
+     364,    30,    81,   480,   346,   492,   449,   494,   446,   564,
+     497,   323,   323,   341,   342,   346,   368,   359,   628,   355,
+     339,   340,   351,   666,   358,   360,   360,   670,   337,   338,
+     360,   408,   367,   367,   422,   678,   646,   358,   368,   358,
+     360,   360,   384,   385,   360,   364,   375,   367,   376,   377,
+     381,   362,   368,   358,   360,   365,   368,   359,   368,   359,
+     498,   367,   359,   365,   362,   364,   359,   365,   365,   361,
+     368,   359,   365,   365,   359,   552,   440,   365,   365,   443,
+     365,   368,   459,   363,   461,   365,   348,   349,   350,   351,
+     352,   353,   354,   355,   356,   357,   359,   370,   585,   372,
+     543,   365,   365,   323,   492,   367,   494,   406,   407,   497,
+     359,   447,   523,   524,   525,   526,   365,   446,   365,   365,
+     449,   368,   368,   511,   323,   365,   425,   682,   368,   365,
+     507,   360,   368,   384,   385,   386,   373,   374,   375,   343,
+     344,   440,   365,   366,   443,   362,   589,   365,   366,   362,
+     637,   519,   520,   527,   528,   632,   521,   522,   323,   323,
+     360,   367,   323,   368,   359,   358,   380,   379,   378,   498,
+     345,   347,   361,   323,   323,   358,   368,   554,   368,   358,
+     368,   558,   366,   360,   358,   358,   323,   358,   576,   577,
+     358,   363,   323,   359,   361,   323,   683,   585,   361,   322,
+     358,   358,   323,   545,   359,   365,   362,   361,   359,   368,
+     363,    25,   359,   530,   543,   692,   362,   516,   517,   518,
+     519,   520,   521,   522,   523,   524,   525,   526,   527,   528,
+     529,   530,   531,   532,   533,   534,   362,   367,   615,   368,
+     529,   363,   532,   534,   323,   531,   653,   355,   351,   637,
+     533,   628,   316,   355,   445,   665,   623,   620,   678,   349,
+     589,   679,   544,   623,   490,   646,   490,   338,   490,   646,
+     655,   659,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   660,    -1,    -1,    -1,    -1,    -1,   653,
+      -1,    -1,    -1,   322,    -1,   683,    -1,    -1,    -1,   628,
+     677,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   322,    -1,    -1,   651,    -1,   646,   322,    -1,
+     330,    -1,    -1,    -1,    -1,    -1,   330,    -1,   338,   338,
+     338,    -1,    -1,    -1,   338,   345,    -1,    -1,    -1,    -1,
+      -1,   351,    -1,    -1,    -1,   355,    -1,   351,    -1,    -1,
+      -1,   355,    -1,    -1,   653,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   375,    -1,    -1,    -1,   379,
+      -1,   375,    -1,    -1,    -1,   379,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   275,     3,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   446,   447,    -1,   449,
+      -1,    -1,   446,   447,    -1,   449,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     480,    -1,    -1,    -1,    -1,    -1,   480,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   498,    -1,
+      -1,    -1,    -1,    -1,   498,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   543,    -1,    -1,    -1,    -1,    -1,   543,
+      -1,    -1,   552,    -1,    -1,    -1,    -1,    -1,   552,    -1,
+      -1,    -1,    -1,    -1,   564,    -1,    -1,    -1,    -1,    -1,
+     564,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   589,
+      -1,    -1,    -1,    -1,    -1,   589,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   623,    -1,    -1,    -1,    -1,   628,   623,
+      -1,    -1,   632,    -1,   628,    -1,    -1,    -1,   632,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   646,    -1,    -1,    -1,
+      -1,   651,   646,    -1,    -1,    -1,    -1,   651,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   666,    -1,    -1,    -1,
+     670,    -1,   666,    -1,    -1,    -1,   670,    -1,   678,    -1,
+      -1,    -1,   682,    -1,   678,    -1,    -1,    -1,   682,    -1,
+      -1,    -1,   692,    -1,    -1,    -1,     0,    -1,   692,     3,
        4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-      14,    15,   289,   290,   291,   292,   293,    -1,    -1,    -1,
-      -1,    -1,    -1,    27,    28,    29,    30,    31,    32,    33,
+      14,    15,    16,    17,    18,    19,    20,    21,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    33,
       34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
       44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
       54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
@@ -2193,68 +2325,334 @@
      194,   195,   196,   197,   198,   199,   200,   201,   202,   203,
      204,   205,   206,   207,   208,   209,   210,   211,   212,   213,
      214,   215,   216,   217,   218,   219,   220,   221,   222,   223,
-     224,   225,   226,   227,   228,   229,   230,    -1,    -1,   233,
+     224,   225,   226,   227,   228,   229,   230,   231,   232,   233,
+     234,   235,   236,   237,   238,   239,   240,   241,   242,   243,
+     244,   245,   246,   247,   248,   249,   250,   251,   252,   253,
+     254,   255,   256,   257,   258,   259,   260,   261,   262,   263,
+     264,   265,   266,   267,   268,   269,   270,   271,   272,   273,
+     274,   275,   276,   277,   278,   279,   280,   281,   282,   283,
+     284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
+     294,   295,   296,   297,   298,   299,   300,   301,   302,   303,
+     304,   305,   306,   307,   308,   309,   310,   311,   312,   313,
+     314,   315,   316,   317,   318,   319,   320,   321,    -1,    -1,
+     324,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   270,     3,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-      -1,    -1,    -1,    -1,    -1,   289,   290,   291,   292,   293,
-      -1,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
-      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
-      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
-     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
-     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
-     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
-     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
-     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
-     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
-     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
-     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
-     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
-     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
-     206,   207,   208,   209,   210,   211,   212,   213,   214,   215,
-     216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
-     226,   227,   228,   229,   230,    -1,    -1,   233,    -1,    -1,
+      -1,    -1,    -1,    -1,   368,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   382,   383,
+     384,   385,   386,   387,     3,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    -1,    26,    27,    28,
+      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
+      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
+      79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
+      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
+      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
+     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
+     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
+     129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
+     139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
+     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
+     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
+     169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
+     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
+     189,   190,   191,   192,   193,   194,   195,   196,   197,   198,
+     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
+     209,   210,   211,   212,   213,   214,   215,   216,   217,   218,
+     219,   220,   221,   222,   223,   224,   225,   226,   227,   228,
+     229,   230,   231,   232,   233,   234,   235,   236,   237,   238,
+     239,   240,   241,   242,   243,   244,   245,   246,   247,   248,
+     249,   250,   251,   252,   253,   254,   255,   256,   257,   258,
+     259,   260,   261,   262,   263,   264,   265,   266,   267,   268,
+     269,   270,   271,   272,   273,   274,   275,   276,   277,   278,
+     279,   280,   281,   282,   283,   284,   285,   286,   287,   288,
+     289,   290,   291,   292,   293,   294,   295,   296,   297,   298,
+     299,   300,   301,   302,   303,   304,   305,   306,   307,   308,
+     309,   310,   311,   312,   313,   314,   315,   316,   317,   318,
+     319,   320,   321,   322,   323,   324,   325,   326,   327,   328,
+     329,   330,   331,   332,   333,   334,   335,   336,    -1,    -1,
+     339,   340,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   358,
+      -1,   360,    -1,   362,   363,    -1,    -1,    -1,    -1,   368,
+     369,   370,   371,   372,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   382,   383,   384,   385,   386,   387,     3,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    -1,    26,    27,    28,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
+      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
+      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
+      94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
+     104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
+     114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
+     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
+     134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
+     144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
+     154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
+     164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
+     174,   175,   176,   177,   178,   179,   180,   181,   182,   183,
+     184,   185,   186,   187,   188,   189,   190,   191,   192,   193,
+     194,   195,   196,   197,   198,   199,   200,   201,   202,   203,
+     204,   205,   206,   207,   208,   209,   210,   211,   212,   213,
+     214,   215,   216,   217,   218,   219,   220,   221,   222,   223,
+     224,   225,   226,   227,   228,   229,   230,   231,   232,   233,
+     234,   235,   236,   237,   238,   239,   240,   241,   242,   243,
+     244,   245,   246,   247,   248,   249,   250,   251,   252,   253,
+     254,   255,   256,   257,   258,   259,   260,   261,   262,   263,
+     264,   265,   266,   267,   268,   269,   270,   271,   272,   273,
+     274,   275,   276,   277,   278,   279,   280,   281,   282,   283,
+     284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
+     294,   295,   296,   297,   298,   299,   300,   301,   302,   303,
+     304,   305,   306,   307,   308,   309,   310,   311,   312,   313,
+     314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
+     324,   325,   326,   327,   328,   329,   330,   331,   332,   333,
+     334,   335,   336,    -1,    -1,   339,   340,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   358,    -1,   360,    -1,   362,   363,
+      -1,    -1,    -1,    -1,   368,   369,   370,   371,   372,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   382,   383,
+     384,   385,   386,   387,     3,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    -1,    26,    27,    28,
+      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
+      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
+      79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
+      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
+      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
+     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
+     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
+     129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
+     139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
+     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
+     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
+     169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
+     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
+     189,   190,   191,   192,   193,   194,   195,   196,   197,   198,
+     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
+     209,   210,   211,   212,   213,   214,   215,   216,   217,   218,
+     219,   220,   221,   222,   223,   224,   225,   226,   227,   228,
+     229,   230,   231,   232,   233,   234,   235,   236,   237,   238,
+     239,   240,   241,   242,   243,   244,   245,   246,   247,   248,
+     249,   250,   251,   252,   253,   254,   255,   256,   257,   258,
+     259,   260,   261,   262,   263,   264,   265,   266,   267,   268,
+     269,   270,   271,   272,   273,   274,   275,   276,   277,   278,
+     279,   280,   281,   282,   283,   284,   285,   286,   287,   288,
+     289,   290,   291,   292,   293,   294,   295,   296,   297,   298,
+     299,   300,   301,   302,   303,   304,   305,   306,   307,   308,
+     309,   310,   311,   312,   313,   314,   315,   316,   317,   318,
+     319,   320,   321,   322,   323,   324,   325,   326,   327,   328,
+     329,   330,   331,   332,   333,   334,   335,   336,    -1,    -1,
+     339,   340,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   358,
+      -1,   360,    -1,   362,    -1,    -1,    -1,    -1,    -1,   368,
+     369,   370,   371,   372,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   382,   383,   384,   385,   386,   387,     3,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    -1,    26,    27,    28,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
+      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
+      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
+      94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
+     104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
+     114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
+     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
+     134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
+     144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
+     154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
+     164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
+     174,   175,   176,   177,   178,   179,   180,   181,   182,   183,
+     184,   185,   186,   187,   188,   189,   190,   191,   192,   193,
+     194,   195,   196,   197,   198,   199,   200,   201,   202,   203,
+     204,   205,   206,   207,   208,   209,   210,   211,   212,   213,
+     214,   215,   216,   217,   218,   219,   220,   221,   222,   223,
+     224,   225,   226,   227,   228,   229,   230,   231,   232,   233,
+     234,   235,   236,   237,   238,   239,   240,   241,   242,   243,
+     244,   245,   246,   247,   248,   249,   250,   251,   252,   253,
+     254,   255,   256,   257,   258,   259,   260,   261,   262,   263,
+     264,   265,   266,   267,   268,   269,   270,   271,   272,   273,
+     274,   275,   276,   277,   278,   279,   280,   281,   282,   283,
+     284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
+     294,   295,   296,   297,   298,   299,   300,   301,   302,   303,
+     304,   305,   306,   307,   308,   309,   310,   311,   312,   313,
+     314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
+     324,   325,   326,   327,   328,   329,   330,   331,   332,   333,
+     334,   335,   336,    -1,    -1,   339,   340,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   358,    -1,   360,    -1,   362,    -1,
+      -1,    -1,    -1,    -1,   368,   369,   370,   371,   372,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   382,   383,
+     384,   385,   386,   387,     3,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    -1,    26,    27,    28,
+      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
+      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
+      79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
+      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
+      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
+     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
+     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
+     129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
+     139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
+     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
+     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
+     169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
+     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
+     189,   190,   191,   192,   193,   194,   195,   196,   197,   198,
+     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
+     209,   210,   211,   212,   213,   214,   215,   216,   217,   218,
+     219,   220,   221,   222,   223,   224,   225,   226,   227,   228,
+     229,   230,   231,   232,   233,   234,   235,   236,   237,   238,
+     239,   240,   241,   242,   243,   244,   245,   246,   247,   248,
+     249,   250,   251,   252,   253,   254,   255,   256,   257,   258,
+     259,   260,   261,   262,   263,   264,   265,   266,   267,   268,
+     269,   270,   271,   272,   273,   274,   275,   276,   277,   278,
+     279,   280,   281,   282,   283,   284,   285,   286,   287,   288,
+     289,   290,   291,   292,   293,   294,   295,   296,   297,   298,
+     299,   300,   301,   302,   303,   304,   305,   306,   307,   308,
+     309,   310,   311,   312,   313,   314,   315,   316,   317,   318,
+     319,   320,   321,   322,   323,   324,   325,   326,   327,   328,
+     329,   330,   331,   332,   333,   334,   335,   336,    -1,    -1,
+     339,   340,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   358,
+      -1,   360,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   368,
+     369,   370,   371,   372,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   382,   383,   384,   385,   386,   387,     3,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
+      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
+      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
+      94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
+     104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
+     114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
+     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
+     134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
+     144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
+     154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
+     164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
+     174,   175,   176,   177,   178,   179,   180,   181,   182,   183,
+     184,   185,   186,   187,   188,   189,   190,   191,   192,   193,
+     194,   195,   196,   197,   198,   199,   200,   201,   202,   203,
+     204,   205,   206,   207,   208,   209,   210,   211,   212,   213,
+     214,   215,   216,   217,   218,   219,   220,   221,   222,   223,
+     224,   225,   226,   227,   228,   229,   230,   231,   232,   233,
+     234,   235,   236,   237,   238,   239,   240,   241,   242,   243,
+     244,   245,   246,   247,   248,   249,   250,   251,   252,   253,
+     254,   255,   256,   257,   258,   259,   260,   261,   262,   263,
+     264,   265,   266,   267,   268,   269,   270,   271,   272,   273,
+     274,   275,   276,   277,   278,   279,   280,   281,   282,   283,
+     284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
+     294,   295,   296,   297,   298,   299,   300,   301,   302,   303,
+     304,   305,   306,   307,   308,   309,   310,   311,   312,   313,
+     314,   315,   316,   317,   318,   319,   320,   321,    -1,   323,
+     324,   325,   326,   327,   328,   329,   330,   331,   332,   333,
+     334,   335,   336,    -1,    -1,   339,   340,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   358,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   368,   369,   370,   371,   372,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   382,   383,
+     384,   385,   386,   387,     3,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    33,    34,    35,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
+      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
+      79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
+      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
+      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
+     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
+     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
+     129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
+     139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
+     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
+     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
+     169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
+     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
+     189,   190,   191,   192,   193,   194,   195,   196,   197,   198,
+     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
+     209,   210,   211,   212,   213,   214,   215,   216,   217,   218,
+     219,   220,   221,   222,   223,   224,   225,   226,   227,   228,
+     229,   230,   231,   232,   233,   234,   235,   236,   237,   238,
+     239,   240,   241,   242,   243,   244,   245,   246,   247,   248,
+     249,   250,   251,   252,   253,   254,   255,   256,   257,   258,
+     259,   260,   261,   262,   263,   264,   265,   266,   267,   268,
+     269,   270,   271,   272,   273,   274,   275,   276,   277,   278,
+     279,   280,   281,   282,   283,   284,   285,   286,   287,   288,
+     289,   290,   291,   292,   293,   294,   295,   296,   297,   298,
+     299,   300,   301,   302,   303,   304,   305,   306,   307,   308,
+     309,   310,   311,   312,   313,   314,   315,   316,   317,   318,
+     319,   320,   321,    -1,    -1,   324,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   270,     3,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    -1,    -1,
-      -1,    -1,    -1,   289,   290,   291,   292,   293,    -1,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
-      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
-      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
-     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
-     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
-     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
-     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
-     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
-     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
-     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
-     198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
-     208,   209,   210,   211,   212,   213,   214,   215,   216,   217,
-     218,   219,   220,   221,   222,   223,   224,   225,   226,   227,
-     228,   229,   230,    -1,    -1,   233,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   368,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   382,   383,   384,   385,   386,   387,     3,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
+      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
+      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
+      94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
+     104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
+     114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
+     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
+     134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
+     144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
+     154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
+     164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
+     174,   175,   176,   177,   178,   179,   180,   181,   182,   183,
+     184,   185,   186,   187,   188,   189,   190,   191,   192,   193,
+     194,   195,   196,   197,   198,   199,   200,   201,   202,   203,
+     204,   205,   206,   207,   208,   209,   210,   211,   212,   213,
+     214,   215,   216,   217,   218,   219,   220,   221,   222,   223,
+     224,   225,   226,   227,   228,   229,   230,   231,   232,   233,
+     234,   235,   236,   237,   238,   239,   240,   241,   242,   243,
+     244,   245,   246,   247,   248,   249,   250,   251,   252,   253,
+     254,   255,   256,   257,   258,   259,   260,   261,   262,   263,
+     264,   265,   266,   267,   268,   269,   270,   271,   272,   273,
+     274,   275,   276,   277,   278,   279,   280,   281,   282,   283,
+     284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
+     294,   295,   296,   297,   298,   299,   300,   301,   302,   303,
+     304,   305,   306,   307,   308,   309,   310,   311,   312,   313,
+     314,   315,   316,   317,   318,   319,   320,   321,    -1,   323,
+     324,   325,   326,   327,   328,   329,   330,   331,   332,   333,
+     334,   335,   336,    -1,    -1,   339,   340,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   270,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    -1,    -1,    -1,    -1,
-      -1,   289,   290,   291,   292,   293,    -1,    27,    28,    29,
-      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      -1,    -1,    -1,    -1,   358,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   369,   370,   371,   372,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   382,   383,
+     384,   385,   386,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    33,    34,    35,    36,    37,    38,    39,
       40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
       50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
       60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
@@ -2274,73 +2672,184 @@
      200,   201,   202,   203,   204,   205,   206,   207,   208,   209,
      210,   211,   212,   213,   214,   215,   216,   217,   218,   219,
      220,   221,   222,   223,   224,   225,   226,   227,   228,   229,
-     230,    -1,    -1,   233,    -1,    -1,    -1,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   289,
-     290,   291,   292,   293,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-      79,    80,    -1,    -1,    -1,    -1,    -1,    86,    87,    88,
-      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
-      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
-     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
-     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
-     129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
-     139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
-     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
-     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
-     169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
-     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
-     189,   190,   191,   192,   193,   194,   195,   196,   197,   198,
-     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
-     209,   210,   211,   212,   213,   214,   215,   216,   217,   218,
-     219,   220,   221,   222,   223,   224,   225,   226,   227,   228,
-     229,   230,    -1,   232,   233,   234,   235,   236,   237,   238,
-     239,   240,   241,   242,   243,    -1,    -1,   246,   247,    -1,
+     230,   231,   232,   233,   234,   235,   236,   237,   238,   239,
+     240,   241,   242,   243,   244,   245,   246,   247,   248,   249,
+     250,   251,   252,   253,   254,   255,   256,   257,   258,   259,
+     260,   261,   262,   263,   264,   265,   266,   267,   268,   269,
+     270,   271,   272,   273,   274,   275,   276,   277,   278,   279,
+     280,   281,   282,   283,   284,   285,   286,   287,   288,   289,
+     290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
+     300,   301,   302,   303,   304,   305,   306,   307,   308,   309,
+     310,   311,   312,   313,   314,   315,   316,   317,   318,   319,
+     320,   321,    -1,   323,   324,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   265,    -1,    -1,    -1,
-     269,   270,    -1,    -1,    -1,    -1,    -1,   276,   277,   278,
-     279,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    -1,    -1,    -1,    -1,
-      -1,    86,    87,    88,    89,    90,    91,    92,    93,    94,
-      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
-     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
-     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
-     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
-     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
-     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
-     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
-     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
-     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
-     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
-     195,   196,   197,   198,   199,   200,   201,   202,   203,   204,
-     205,   206,   207,   208,   209,   210,   211,   212,   213,   214,
-     215,   216,   217,   218,   219,   220,   221,   222,   223,   224,
-     225,   226,   227,   228,   229,   230,    -1,   232,   233,   234,
-     235,   236,   237,   238,   239,   240,   241,   242,   243,    -1,
-      -1,   246,   247,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     265,    -1,    -1,   268,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   276,   277,   278,   279,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    28,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    47,    48,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      -1,    -1,    -1,    -1,    -1,    86,    87,    88,    89,    90,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   368,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   382,   383,   384,   385,   386,     3,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    33,    34,    35,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
+      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
+      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
+      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
+     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
+     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
+     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
+     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
+     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
+     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
+     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
+     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
+     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
+     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
+     206,   207,   208,   209,   210,   211,   212,   213,   214,   215,
+     216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
+     226,   227,   228,   229,   230,   231,   232,   233,   234,   235,
+     236,   237,   238,   239,   240,   241,   242,   243,   244,   245,
+     246,   247,   248,   249,   250,   251,   252,   253,   254,   255,
+     256,   257,   258,   259,   260,   261,   262,   263,   264,   265,
+     266,   267,   268,   269,   270,   271,   272,   273,   274,   275,
+     276,   277,   278,   279,   280,   281,   282,   283,   284,   285,
+     286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
+     296,   297,   298,   299,   300,   301,   302,   303,   304,   305,
+     306,   307,   308,   309,   310,   311,   312,   313,   314,   315,
+     316,   317,   318,   319,   320,   321,    -1,    -1,   324,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   363,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   382,   383,   384,   385,
+     386,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
+      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
+      92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
+     102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
+     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
+     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
+     132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
+     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
+     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
+     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
+     172,   173,   174,   175,   176,   177,   178,   179,   180,   181,
+     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
+     192,   193,   194,   195,   196,   197,   198,   199,   200,   201,
+     202,   203,   204,   205,   206,   207,   208,   209,   210,   211,
+     212,   213,   214,   215,   216,   217,   218,   219,   220,   221,
+     222,   223,   224,   225,   226,   227,   228,   229,   230,   231,
+     232,   233,   234,   235,   236,   237,   238,   239,   240,   241,
+     242,   243,   244,   245,   246,   247,   248,   249,   250,   251,
+     252,   253,   254,   255,   256,   257,   258,   259,   260,   261,
+     262,   263,   264,   265,   266,   267,   268,   269,   270,   271,
+     272,   273,   274,   275,   276,   277,   278,   279,   280,   281,
+     282,   283,   284,   285,   286,   287,   288,   289,   290,   291,
+     292,   293,   294,   295,   296,   297,   298,   299,   300,   301,
+     302,   303,   304,   305,   306,   307,   308,   309,   310,   311,
+     312,   313,   314,   315,   316,   317,   318,   319,   320,   321,
+      -1,    -1,   324,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   363,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     382,   383,   384,   385,   386,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
+      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
+      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
+      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
+     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
+     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
+     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
+     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
+     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
+     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
+     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
+     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
+     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
+     198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
+     208,   209,   210,   211,   212,   213,   214,   215,   216,   217,
+     218,   219,   220,   221,   222,   223,   224,   225,   226,   227,
+     228,   229,   230,   231,   232,   233,   234,   235,   236,   237,
+     238,   239,   240,   241,   242,   243,   244,   245,   246,   247,
+     248,   249,   250,   251,   252,   253,   254,   255,   256,   257,
+     258,   259,   260,   261,   262,   263,   264,   265,   266,   267,
+     268,   269,   270,   271,   272,   273,   274,   275,   276,   277,
+     278,   279,   280,   281,   282,   283,   284,   285,   286,   287,
+     288,   289,   290,   291,   292,   293,   294,   295,   296,   297,
+     298,   299,   300,   301,   302,   303,   304,   305,   306,   307,
+     308,   309,   310,   311,   312,   313,   314,   315,   316,   317,
+     318,   319,   320,   321,    -1,    -1,   324,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   363,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   382,   383,   384,   385,   386,     3,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
+      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
+      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
+      94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
+     104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
+     114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
+     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
+     134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
+     144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
+     154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
+     164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
+     174,   175,   176,   177,   178,   179,   180,   181,   182,   183,
+     184,   185,   186,   187,   188,   189,   190,   191,   192,   193,
+     194,   195,   196,   197,   198,   199,   200,   201,   202,   203,
+     204,   205,   206,   207,   208,   209,   210,   211,   212,   213,
+     214,   215,   216,   217,   218,   219,   220,   221,   222,   223,
+     224,   225,   226,   227,   228,   229,   230,   231,   232,   233,
+     234,   235,   236,   237,   238,   239,   240,   241,   242,   243,
+     244,   245,   246,   247,   248,   249,   250,   251,   252,   253,
+     254,   255,   256,   257,   258,   259,   260,   261,   262,   263,
+     264,   265,   266,   267,   268,   269,   270,   271,   272,   273,
+     274,   275,   276,   277,   278,   279,   280,   281,   282,   283,
+     284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
+     294,   295,   296,   297,   298,   299,   300,   301,   302,   303,
+     304,   305,   306,   307,   308,   309,   310,   311,   312,   313,
+     314,   315,   316,   317,   318,   319,   320,   321,    -1,    -1,
+     324,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,     5,     6,     7,     8,     9,    -1,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   382,   383,
+     384,   385,   386,    34,    35,    36,    37,    38,    39,    40,
+      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
+      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+      71,    72,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    82,    -1,    -1,    -1,    -1,    -1,    88,    89,    90,
       91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
      101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
-     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
+     111,    -1,    -1,    -1,    -1,    -1,   117,   118,   119,   120,
      121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
      131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
      141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
@@ -2352,22 +2861,105 @@
      201,   202,   203,   204,   205,   206,   207,   208,   209,   210,
      211,   212,   213,   214,   215,   216,   217,   218,   219,   220,
      221,   222,   223,   224,   225,   226,   227,   228,   229,   230,
-      -1,   232,   233,   234,   235,   236,   237,   238,   239,   240,
-     241,   242,   243,    -1,    -1,   246,   247,    -1,    -1,    -1,
+     231,   232,   233,   234,   235,   236,   237,   238,   239,   240,
+     241,   242,   243,   244,   245,   246,   247,   248,   249,   250,
+     251,   252,   253,   254,   255,   256,   257,   258,   259,   260,
+     261,   262,   263,   264,   265,   266,   267,   268,   269,   270,
+     271,   272,   273,   274,   275,   276,   277,   278,   279,   280,
+     281,   282,   283,   284,   285,   286,   287,   288,   289,   290,
+     291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
+     301,   302,   303,   304,   305,   306,   307,   308,   309,   310,
+     311,   312,   313,   314,   315,   316,   317,   318,   319,   320,
+     321,    -1,   323,   324,   325,   326,   327,   328,   329,   330,
+     331,   332,   333,   334,   335,   336,    -1,    -1,   339,   340,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   265,    -1,    -1,    -1,   269,    -1,
-      -1,    -1,    -1,    -1,    -1,   276,   277,   278,   279,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   358,    -1,    -1,
+      -1,   362,   363,    -1,    -1,    -1,    -1,    -1,   369,   370,
+     371,   372,     5,     6,     7,     8,     9,    -1,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    28,    29,    30,    31,    32,    33,    34,    35,    36,
+      -1,    34,    35,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    82,
+      -1,    -1,    -1,    -1,    -1,    88,    89,    90,    91,    92,
+      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
+     103,   104,   105,   106,   107,   108,   109,   110,   111,    -1,
+      -1,    -1,    -1,    -1,   117,   118,   119,   120,   121,   122,
+     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
+     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
+     143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
+     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
+     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
+     173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
+     183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
+     193,   194,   195,   196,   197,   198,   199,   200,   201,   202,
+     203,   204,   205,   206,   207,   208,   209,   210,   211,   212,
+     213,   214,   215,   216,   217,   218,   219,   220,   221,   222,
+     223,   224,   225,   226,   227,   228,   229,   230,   231,   232,
+     233,   234,   235,   236,   237,   238,   239,   240,   241,   242,
+     243,   244,   245,   246,   247,   248,   249,   250,   251,   252,
+     253,   254,   255,   256,   257,   258,   259,   260,   261,   262,
+     263,   264,   265,   266,   267,   268,   269,   270,   271,   272,
+     273,   274,   275,   276,   277,   278,   279,   280,   281,   282,
+     283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
+     293,   294,   295,   296,   297,   298,   299,   300,   301,   302,
+     303,   304,   305,   306,   307,   308,   309,   310,   311,   312,
+     313,   314,   315,   316,   317,   318,   319,   320,   321,    -1,
+     323,   324,   325,   326,   327,   328,   329,   330,   331,   332,
+     333,   334,   335,   336,    -1,    -1,   339,   340,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   358,    -1,    -1,   361,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   369,   370,   371,   372,
+       5,     6,     7,     8,     9,    -1,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    34,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,    72,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    82,    -1,    -1,
+      -1,    -1,    -1,    88,    89,    90,    91,    92,    93,    94,
+      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
+     105,   106,   107,   108,   109,   110,   111,    -1,    -1,    -1,
+      -1,    -1,   117,   118,   119,   120,   121,   122,   123,   124,
+     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
+     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
+     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
+     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
+     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
+     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
+     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
+     195,   196,   197,   198,   199,   200,   201,   202,   203,   204,
+     205,   206,   207,   208,   209,   210,   211,   212,   213,   214,
+     215,   216,   217,   218,   219,   220,   221,   222,   223,   224,
+     225,   226,   227,   228,   229,   230,   231,   232,   233,   234,
+     235,   236,   237,   238,   239,   240,   241,   242,   243,   244,
+     245,   246,   247,   248,   249,   250,   251,   252,   253,   254,
+     255,   256,   257,   258,   259,   260,   261,   262,   263,   264,
+     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
+     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
+     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
+     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
+     305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
+     315,   316,   317,   318,   319,   320,   321,    -1,   323,   324,
+     325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
+     335,   336,    -1,    -1,   339,   340,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   358,    -1,    -1,    -1,   362,    -1,    -1,
+      -1,    -1,    -1,    -1,   369,   370,   371,   372,     5,     6,
+       7,     8,     9,    -1,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    34,    35,    36,
       37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    78,    79,    80,    -1,    -1,    -1,    -1,    -1,    86,
-      87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
+      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
+      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,    71,    72,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    82,    -1,    -1,    -1,    -1,
+      -1,    88,    89,    90,    91,    92,    93,    94,    95,    96,
       97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
-     107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
+     107,   108,   109,   110,   111,    -1,    -1,    -1,    -1,    -1,
      117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
      127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
      137,   138,   139,   140,   141,   142,   143,   144,   145,   146,
@@ -2379,23 +2971,106 @@
      197,   198,   199,   200,   201,   202,   203,   204,   205,   206,
      207,   208,   209,   210,   211,   212,   213,   214,   215,   216,
      217,   218,   219,   220,   221,   222,   223,   224,   225,   226,
-     227,   228,   229,   230,    -1,   232,   233,   234,   235,   236,
-     237,   238,   239,   240,   241,   242,   243,    -1,    -1,   246,
-     247,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   265,    -1,
-      -1,   268,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   276,
-     277,   278,   279,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    28,    29,    30,    31,    32,
-      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    -1,    -1,    -1,    -1,
+     227,   228,   229,   230,   231,   232,   233,   234,   235,   236,
+     237,   238,   239,   240,   241,   242,   243,   244,   245,   246,
+     247,   248,   249,   250,   251,   252,   253,   254,   255,   256,
+     257,   258,   259,   260,   261,   262,   263,   264,   265,   266,
+     267,   268,   269,   270,   271,   272,   273,   274,   275,   276,
+     277,   278,   279,   280,   281,   282,   283,   284,   285,   286,
+     287,   288,   289,   290,   291,   292,   293,   294,   295,   296,
+     297,   298,   299,   300,   301,   302,   303,   304,   305,   306,
+     307,   308,   309,   310,   311,   312,   313,   314,   315,   316,
+     317,   318,   319,   320,   321,    -1,   323,   324,   325,   326,
+     327,   328,   329,   330,   331,   332,   333,   334,   335,   336,
+      -1,    -1,   339,   340,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   358,    -1,    -1,   361,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   369,   370,   371,   372,     5,     6,     7,     8,
+       9,    -1,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    34,    35,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
+      69,    70,    71,    72,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    82,    -1,    -1,    -1,    -1,    -1,    88,
+      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
+      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
+     109,   110,   111,    -1,    -1,    -1,    -1,    -1,   117,   118,
+     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
+     129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
+     139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
+     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
+     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
+     169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
+     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
+     189,   190,   191,   192,   193,   194,   195,   196,   197,   198,
+     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
+     209,   210,   211,   212,   213,   214,   215,   216,   217,   218,
+     219,   220,   221,   222,   223,   224,   225,   226,   227,   228,
+     229,   230,   231,   232,   233,   234,   235,   236,   237,   238,
+     239,   240,   241,   242,   243,   244,   245,   246,   247,   248,
+     249,   250,   251,   252,   253,   254,   255,   256,   257,   258,
+     259,   260,   261,   262,   263,   264,   265,   266,   267,   268,
+     269,   270,   271,   272,   273,   274,   275,   276,   277,   278,
+     279,   280,   281,   282,   283,   284,   285,   286,   287,   288,
+     289,   290,   291,   292,   293,   294,   295,   296,   297,   298,
+     299,   300,   301,   302,   303,   304,   305,   306,   307,   308,
+     309,   310,   311,   312,   313,   314,   315,   316,   317,   318,
+     319,   320,   321,    -1,   323,   324,   325,   326,   327,   328,
+     329,   330,   331,   332,   333,   334,   335,   336,    -1,    -1,
+     339,   340,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   358,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   368,
+     369,   370,   371,   372,     5,     6,     7,     8,     9,    -1,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    34,    35,    36,    37,    38,    39,    40,
+      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
+      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+      71,    72,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    82,    -1,    -1,    -1,    -1,    -1,    88,    89,    90,
+      91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
+     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
+     111,    -1,    -1,    -1,    -1,    -1,   117,   118,   119,   120,
+     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
+     131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
+     141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
+     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
+     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
+     171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
+     181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
+     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
+     201,   202,   203,   204,   205,   206,   207,   208,   209,   210,
+     211,   212,   213,   214,   215,   216,   217,   218,   219,   220,
+     221,   222,   223,   224,   225,   226,   227,   228,   229,   230,
+     231,   232,   233,   234,   235,   236,   237,   238,   239,   240,
+     241,   242,   243,   244,   245,   246,   247,   248,   249,   250,
+     251,   252,   253,   254,   255,   256,   257,   258,   259,   260,
+     261,   262,   263,   264,   265,   266,   267,   268,   269,   270,
+     271,   272,   273,   274,   275,   276,   277,   278,   279,   280,
+     281,   282,   283,   284,   285,   286,   287,   288,   289,   290,
+     291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
+     301,   302,   303,   304,   305,   306,   307,   308,   309,   310,
+     311,   312,   313,   314,   315,   316,   317,   318,   319,   320,
+     321,    -1,   323,   324,   325,   326,   327,   328,   329,   330,
+     331,   332,   333,   334,   335,   336,    -1,    -1,   339,   340,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   358,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   369,   370,
+     371,   372,     5,     6,     7,     8,     9,    -1,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    34,    35,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
       63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
-      73,    74,    75,    76,    77,    78,    79,    80,    -1,    -1,
-      -1,    -1,    -1,    86,    87,    88,    89,    90,    91,    92,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    82,
+      -1,    -1,    -1,    -1,    -1,    88,    89,    90,    91,    92,
       93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
-     103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
-     113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
+     103,   104,   105,   106,   107,   108,   109,   110,   111,    -1,
+      -1,    -1,    -1,    -1,   117,   118,   119,   120,   121,   122,
      123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
      133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
      143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
@@ -2406,87 +3081,53 @@
      193,   194,   195,   196,   197,   198,   199,   200,   201,   202,
      203,   204,   205,   206,   207,   208,   209,   210,   211,   212,
      213,   214,   215,   216,   217,   218,   219,   220,   221,   222,
-     223,   224,   225,   226,   227,   228,   229,   230,    -1,   232,
+     223,   224,   225,   226,   227,   228,   229,   230,   231,   232,
      233,   234,   235,   236,   237,   238,   239,   240,   241,   242,
-     243,    -1,    -1,   246,   247,    -1,    -1,    -1,    -1,    -1,
+     243,   244,   245,   246,   247,   248,   249,   250,   251,   252,
+     253,   254,   255,   256,   257,   258,   259,   260,   261,   262,
+     263,   264,   265,   266,   267,   268,   269,   270,   271,   272,
+     273,   274,   275,   276,   277,   278,   279,   280,   281,   282,
+     283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
+     293,   294,   295,   296,   297,   298,   299,   300,   301,   302,
+     303,   304,   305,   306,   307,   308,   309,   310,   311,   312,
+     313,   314,   315,   316,   317,   318,   319,   320,   321,    -1,
+     323,   324,   325,   326,   327,   328,   329,   330,   331,   332,
+     333,   334,   335,   336,    -1,    -1,   339,   340,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   265,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   275,   276,   277,   278,   279,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+      -1,    -1,    -1,    -1,    -1,   358,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   369,   370,   371,   372,
+       5,     6,     7,     8,     9,    -1,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    34,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,    72,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-      79,    80,    -1,    -1,    -1,    -1,    -1,    86,    87,    88,
-      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
-      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
-     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
-     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
-     129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
-     139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
-     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
-     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
-     169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
-     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
-     189,   190,   191,   192,   193,   194,   195,   196,   197,   198,
-     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
-     209,   210,   211,   212,   213,   214,   215,   216,   217,   218,
-     219,   220,   221,   222,   223,   224,   225,   226,   227,   228,
-     229,   230,    -1,   232,   233,   234,   235,   236,   237,   238,
-     239,   240,   241,   242,   243,    -1,    -1,   246,   247,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   265,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,   276,   277,   278,
-     279,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-      79,    80,    -1,    -1,    -1,    -1,    -1,    86,    87,    88,
-      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
-      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
-     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
-     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
-     129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
-     139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
-     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
-     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
-     169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
-     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
-     189,   190,   191,   192,   193,   194,   195,   196,   197,   198,
-     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
-     209,   210,   211,   212,   213,   214,   215,   216,   217,   218,
-     219,   220,   221,   222,   223,   224,   225,   226,   227,   228,
-     229,   230,    -1,   232,   233,   234,   235,   236,   237,   238,
-     239,   240,   241,   242,   243,    -1,    -1,   246,   247,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   265,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,   276,   277,   278,
-     279,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-      79,    80,    -1,    -1,    -1,    -1,    -1,    86,    87,    88,
-      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
-      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
-     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
-     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
-     129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
-     139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
-     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
-     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
-     169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
-     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
-     189,   190,   191,   192,   193,   194,   195,   196,   197,   198,
-     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
-     209,   210,   211,   212,   213,   214,   215,   216,   217,   218,
-     219,   220,   221,   222,   223,   224,   225,   226,   227,   228,
-     229,   230,    -1,    -1,   233
+      -1,    -1,    -1,    88,    89,    90,    91,    92,    93,    94,
+      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
+     105,   106,   107,   108,   109,   110,   111,    -1,    -1,    -1,
+      -1,    -1,   117,   118,   119,   120,   121,   122,   123,   124,
+     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
+     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
+     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
+     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
+     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
+     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
+     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
+     195,   196,   197,   198,   199,   200,   201,   202,   203,   204,
+     205,   206,   207,   208,   209,   210,   211,   212,   213,   214,
+     215,   216,   217,   218,   219,   220,   221,   222,   223,   224,
+     225,   226,   227,   228,   229,   230,   231,   232,   233,   234,
+     235,   236,   237,   238,   239,   240,   241,   242,   243,   244,
+     245,   246,   247,   248,   249,   250,   251,   252,   253,   254,
+     255,   256,   257,   258,   259,   260,   261,   262,   263,   264,
+     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
+     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
+     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
+     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
+     305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
+     315,   316,   317,   318,   319,   320,   321,    -1,    -1,   324
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -2494,7 +3135,7 @@
 static const yytype_uint16 yystos[] =
 {
        0,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    27,    28,    29,    30,    31,    32,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
       33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
       43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
       53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
@@ -2514,118 +3155,139 @@
      193,   194,   195,   196,   197,   198,   199,   200,   201,   202,
      203,   204,   205,   206,   207,   208,   209,   210,   211,   212,
      213,   214,   215,   216,   217,   218,   219,   220,   221,   222,
-     223,   224,   225,   226,   227,   228,   229,   230,   233,   275,
-     289,   290,   291,   292,   293,   294,   329,   330,   333,   334,
-     335,   336,   340,   341,   342,   343,   344,   345,   348,   349,
-     350,   351,   353,   355,   356,   357,   394,   395,   396,   265,
-     265,   232,   269,   356,   232,   275,   275,   397,   266,   272,
-     337,   338,   339,   349,   353,   272,   275,   232,   232,   275,
-     350,   353,   267,   354,     0,   395,   232,   352,    57,   232,
-     346,   347,   269,   359,   353,   275,   354,   269,   376,   338,
-     337,   339,   232,   232,   265,   274,   354,   269,   272,   275,
-     332,   232,   234,   235,   236,   237,   238,   239,   240,   241,
-     242,   243,   246,   247,   265,   268,   276,   277,   278,   279,
-     299,   300,   301,   303,   304,   305,   306,   307,   308,   309,
-     310,   311,   312,   313,   314,   315,   316,   317,   318,   319,
-     320,   321,   322,   323,   353,   267,   266,   272,   274,   266,
-     272,   358,   349,   353,   360,   361,   275,   275,    16,    17,
-      18,    20,    21,    22,    23,    24,    25,    26,   231,   269,
-     270,   275,   310,   323,   325,   327,   329,   333,   353,   366,
-     367,   368,   369,   377,   378,   379,   382,   385,   386,   393,
-     354,   274,   354,   269,   325,   364,   274,   331,   232,   272,
-     275,   310,   310,   327,   246,   247,   267,   271,   266,   266,
-     272,   230,   325,   265,   310,   280,   281,   282,   277,   279,
-     244,   245,   248,   249,   283,   284,   250,   251,   287,   286,
-     285,   252,   254,   253,   288,   268,   268,   323,   232,   323,
-     328,   347,   360,   353,   232,   362,   363,   270,   361,   275,
-     275,   388,   265,   265,   275,   275,   327,   265,   327,   273,
-     265,   270,   370,   255,   256,   257,   258,   259,   260,   261,
-     262,   263,   264,   274,   326,   272,   275,   270,   367,   364,
-     274,   364,   365,   364,   360,   232,   266,   302,   327,   232,
-     325,   310,   310,   310,   312,   312,   313,   313,   314,   314,
-     314,   314,   315,   315,   316,   317,   318,   319,   320,   321,
-     324,   268,   270,   362,   354,   272,   275,   367,   389,   327,
-     275,   327,   273,   387,   377,   325,   325,   364,   270,   272,
-     270,   268,   327,   275,   363,   231,   366,   378,   390,   266,
-     266,   327,   342,   349,   381,   371,   270,   364,   273,   265,
-     381,   391,   392,   373,   374,   375,   380,   383,   232,   266,
-     270,   325,   327,   275,   266,    19,   369,   368,   269,   274,
-     368,   372,   376,   266,   327,   372,   373,   377,   384,   364,
-     275,   270
+     223,   224,   225,   226,   227,   228,   229,   230,   231,   232,
+     233,   234,   235,   236,   237,   238,   239,   240,   241,   242,
+     243,   244,   245,   246,   247,   248,   249,   250,   251,   252,
+     253,   254,   255,   256,   257,   258,   259,   260,   261,   262,
+     263,   264,   265,   266,   267,   268,   269,   270,   271,   272,
+     273,   274,   275,   276,   277,   278,   279,   280,   281,   282,
+     283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
+     293,   294,   295,   296,   297,   298,   299,   300,   301,   302,
+     303,   304,   305,   306,   307,   308,   309,   310,   311,   312,
+     313,   314,   315,   316,   317,   318,   319,   320,   321,   324,
+     368,   382,   383,   384,   385,   386,   387,   422,   423,   426,
+     427,   428,   429,   433,   434,   435,   436,   437,   438,   441,
+     442,   443,   444,   445,   447,   449,   450,   451,   491,   492,
+     493,   358,   358,   323,   362,   450,   323,   368,   368,   494,
+     359,   365,   430,   431,   432,   442,   447,   365,   368,   323,
+     323,   368,   443,   447,   360,   448,     0,   492,   323,   446,
+      81,   323,   439,   440,   362,   453,   447,   368,   448,   362,
+     470,   431,   430,   432,   323,   323,   358,   367,   448,   362,
+     365,   368,   425,   323,   325,   326,   327,   328,   329,   330,
+     331,   332,   333,   334,   335,   336,   339,   340,   358,   361,
+     369,   370,   371,   372,   392,   393,   394,   396,   397,   398,
+     399,   400,   401,   402,   403,   404,   405,   406,   407,   408,
+     409,   410,   411,   412,   413,   414,   415,   416,   445,   447,
+     360,   359,   365,   367,   359,   365,   452,   442,   447,   454,
+     455,   368,   368,    22,    23,    24,    26,    27,    28,    29,
+      30,    31,    32,   322,   360,   362,   363,   368,   403,   416,
+     418,   420,   422,   426,   445,   447,   460,   461,   462,   463,
+     471,   472,   473,   474,   477,   478,   481,   482,   483,   490,
+     495,   448,   367,   448,   362,   418,   458,   367,   424,   323,
+     365,   368,   403,   403,   420,   339,   340,   360,   364,   359,
+     359,   365,   321,   418,   358,   403,   373,   374,   375,   370,
+     372,   337,   338,   341,   342,   376,   377,   343,   344,   380,
+     379,   378,   345,   347,   346,   381,   361,   361,   416,   323,
+     416,   421,   440,   454,   447,   323,   456,   457,   363,   455,
+     368,   368,   485,   358,   358,   368,   368,   420,   358,   420,
+     366,   358,   360,   363,   464,   348,   349,   350,   351,   352,
+     353,   354,   355,   356,   357,   367,   419,   365,   368,   363,
+     461,   474,   478,   483,   458,   367,   458,   459,   458,   454,
+     323,   359,   395,   420,   323,   418,   403,   403,   403,   405,
+     405,   406,   406,   407,   407,   407,   407,   408,   408,   409,
+     410,   411,   412,   413,   414,   417,   361,   363,   456,   448,
+     365,   368,   461,   486,   420,   368,   420,   366,   484,   323,
+     496,   497,   471,   418,   418,   458,   363,   365,   363,   361,
+     420,   368,   457,   322,   460,   472,   487,   359,   359,   420,
+     435,   442,   476,   358,   361,   365,   465,   363,   458,   366,
+     358,   476,   488,   489,   467,   468,   469,   475,   479,   323,
+     359,   421,   361,   497,   363,   418,   420,   368,   359,    25,
+     463,   462,   362,   367,   462,   466,   470,   359,   359,   420,
+     466,   467,   471,   480,   458,   368,   363
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint16 yyr1[] =
 {
-       0,   298,   299,   300,   300,   300,   300,   300,   300,   300,
-     300,   300,   300,   300,   300,   301,   301,   301,   301,   301,
-     301,   302,   303,   304,   305,   305,   306,   306,   307,   307,
-     308,   309,   309,   310,   310,   310,   310,   311,   311,   311,
-     311,   312,   312,   312,   312,   313,   313,   313,   314,   314,
-     314,   315,   315,   315,   315,   315,   316,   316,   316,   317,
-     317,   318,   318,   319,   319,   320,   320,   321,   321,   322,
-     322,   323,   324,   323,   325,   325,   326,   326,   326,   326,
-     326,   326,   326,   326,   326,   326,   326,   327,   327,   328,
-     329,   329,   329,   329,   329,   329,   329,   329,   329,   331,
-     330,   332,   332,   333,   334,   334,   335,   335,   336,   337,
-     337,   338,   338,   338,   338,   339,   340,   340,   340,   340,
-     340,   341,   341,   341,   341,   341,   342,   342,   343,   344,
-     344,   344,   344,   345,   346,   346,   347,   347,   347,   348,
-     349,   349,   350,   350,   350,   350,   350,   350,   351,   351,
-     351,   351,   351,   351,   351,   351,   351,   351,   351,   351,
-     351,   351,   351,   351,   351,   351,   351,   352,   352,   353,
-     353,   354,   354,   354,   354,   355,   355,   355,   355,   355,
-     355,   355,   355,   355,   355,   355,   355,   355,   355,   355,
-     355,   355,   355,   355,   355,   355,   355,   355,   355,   355,
-     355,   355,   355,   355,   355,   355,   355,   355,   355,   355,
-     355,   355,   355,   355,   355,   355,   355,   355,   355,   355,
-     355,   355,   355,   355,   355,   355,   355,   355,   355,   355,
-     355,   355,   355,   355,   355,   355,   355,   355,   355,   355,
-     355,   355,   355,   355,   355,   355,   355,   355,   355,   355,
-     355,   355,   355,   355,   355,   355,   355,   355,   355,   355,
-     355,   355,   355,   355,   355,   355,   355,   355,   355,   355,
-     355,   355,   355,   355,   355,   355,   355,   355,   355,   355,
-     355,   355,   355,   355,   355,   355,   355,   355,   355,   355,
-     355,   355,   355,   355,   355,   355,   355,   355,   355,   355,
-     355,   355,   355,   355,   355,   355,   355,   355,   355,   355,
-     355,   355,   355,   355,   355,   355,   355,   355,   355,   355,
-     355,   355,   355,   355,   355,   355,   355,   355,   355,   355,
-     355,   355,   355,   355,   355,   355,   355,   355,   355,   355,
-     355,   355,   355,   355,   355,   355,   355,   355,   355,   355,
-     355,   355,   355,   355,   355,   355,   355,   355,   355,   355,
-     355,   355,   355,   355,   355,   355,   355,   355,   355,   355,
-     356,   356,   356,   358,   357,   359,   357,   360,   360,   361,
-     361,   362,   362,   363,   363,   364,   364,   364,   365,   365,
-     366,   367,   367,   368,   368,   368,   368,   368,   368,   368,
-     369,   370,   371,   369,   372,   372,   374,   373,   375,   373,
-     376,   376,   377,   377,   378,   378,   379,   380,   380,   381,
-     381,   383,   382,   384,   384,   385,   385,   387,   386,   388,
-     386,   389,   386,   390,   390,   391,   391,   392,   392,   393,
-     393,   393,   393,   393,   394,   394,   395,   395,   395,   397,
-     396
+       0,   391,   392,   393,   393,   393,   393,   393,   393,   393,
+     393,   393,   393,   393,   393,   393,   393,   394,   394,   394,
+     394,   394,   394,   395,   396,   397,   398,   398,   399,   399,
+     400,   400,   401,   402,   402,   402,   403,   403,   403,   403,
+     404,   404,   404,   404,   405,   405,   405,   405,   406,   406,
+     406,   407,   407,   407,   408,   408,   408,   408,   408,   409,
+     409,   409,   410,   410,   411,   411,   412,   412,   413,   413,
+     414,   414,   415,   415,   416,   417,   416,   418,   418,   419,
+     419,   419,   419,   419,   419,   419,   419,   419,   419,   419,
+     420,   420,   421,   422,   422,   422,   422,   422,   422,   422,
+     422,   422,   424,   423,   425,   425,   426,   427,   427,   428,
+     428,   429,   430,   430,   431,   431,   431,   431,   432,   433,
+     433,   433,   433,   433,   434,   434,   434,   434,   434,   435,
+     435,   436,   437,   437,   437,   437,   438,   439,   439,   440,
+     440,   440,   441,   442,   442,   443,   443,   443,   443,   443,
+     443,   443,   444,   444,   444,   444,   444,   444,   444,   444,
+     444,   444,   444,   444,   444,   444,   444,   444,   444,   444,
+     444,   445,   446,   446,   447,   447,   448,   448,   448,   448,
+     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
+     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
+     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
+     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
+     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
+     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
+     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
+     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
+     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
+     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
+     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
+     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
+     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
+     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
+     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
+     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
+     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
+     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
+     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
+     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
+     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
+     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
+     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
+     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
+     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
+     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
+     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
+     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
+     449,   449,   449,   449,   449,   450,   450,   450,   452,   451,
+     453,   451,   454,   454,   455,   455,   456,   456,   457,   457,
+     458,   458,   458,   459,   459,   460,   461,   461,   462,   462,
+     462,   462,   462,   462,   462,   463,   464,   465,   463,   466,
+     466,   468,   467,   469,   467,   470,   470,   471,   471,   472,
+     472,   473,   473,   474,   475,   475,   476,   476,   477,   477,
+     479,   478,   480,   480,   481,   481,   482,   482,   484,   483,
+     485,   483,   486,   483,   487,   487,   488,   488,   489,   489,
+     490,   490,   490,   490,   490,   491,   491,   492,   492,   492,
+     494,   493,   495,   496,   496,   497,   497
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
 static const yytype_uint8 yyr2[] =
 {
        0,     2,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     3,     1,     4,     1,     3,     2,
-       2,     1,     1,     1,     2,     2,     2,     1,     2,     3,
-       2,     1,     1,     1,     2,     2,     2,     1,     1,     1,
-       1,     1,     3,     3,     3,     1,     3,     3,     1,     3,
-       3,     1,     3,     3,     3,     3,     1,     3,     3,     1,
-       3,     1,     3,     1,     3,     1,     3,     1,     3,     1,
-       3,     1,     0,     6,     1,     3,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     3,     1,
-       2,     2,     4,     2,     3,     4,     2,     3,     4,     0,
-       6,     2,     3,     2,     1,     1,     2,     3,     3,     2,
-       3,     2,     1,     2,     1,     1,     1,     3,     4,     6,
-       5,     1,     2,     3,     5,     4,     1,     2,     1,     1,
-       1,     1,     1,     4,     1,     3,     1,     3,     1,     1,
-       1,     2,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     3,     1,     4,     1,
+       3,     2,     2,     1,     1,     1,     2,     2,     2,     1,
+       2,     3,     2,     1,     1,     1,     1,     2,     2,     2,
+       1,     1,     1,     1,     1,     3,     3,     3,     1,     3,
+       3,     1,     3,     3,     1,     3,     3,     3,     3,     1,
+       3,     3,     1,     3,     1,     3,     1,     3,     1,     3,
+       1,     3,     1,     3,     1,     0,     6,     1,     3,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     4,     1,     3,     1,
-       2,     2,     3,     3,     4,     1,     1,     1,     1,     1,
+       1,     3,     1,     2,     2,     4,     2,     3,     4,     2,
+       3,     4,     0,     6,     2,     3,     2,     1,     1,     2,
+       3,     3,     2,     3,     2,     1,     2,     1,     1,     1,
+       3,     4,     6,     5,     1,     2,     3,     5,     4,     1,
+       2,     1,     1,     1,     1,     1,     4,     1,     3,     1,
+       3,     1,     1,     1,     2,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       4,     1,     1,     3,     1,     2,     2,     3,     3,     4,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
@@ -2645,15 +3307,25 @@
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     0,     6,     0,     5,     1,     2,     3,
-       4,     1,     3,     1,     2,     1,     3,     4,     1,     3,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       2,     0,     0,     5,     1,     1,     0,     2,     0,     2,
-       2,     3,     1,     2,     1,     2,     5,     3,     1,     1,
-       4,     0,     8,     0,     1,     3,     2,     0,     6,     0,
-       8,     0,     7,     1,     1,     1,     0,     2,     3,     2,
-       2,     2,     3,     2,     1,     2,     1,     1,     1,     0,
-       3
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     0,     6,
+       0,     5,     1,     2,     3,     4,     1,     3,     1,     2,
+       1,     3,     4,     1,     3,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     2,     0,     0,     5,     1,
+       1,     0,     2,     0,     2,     2,     3,     1,     2,     1,
+       2,     1,     2,     5,     3,     1,     1,     4,     1,     2,
+       0,     8,     0,     1,     3,     2,     1,     2,     0,     6,
+       0,     8,     0,     7,     1,     1,     1,     0,     2,     3,
+       2,     2,     2,     3,     2,     1,     2,     1,     1,     1,
+       0,     3,     5,     1,     3,     1,     4
 };
 
 
@@ -3336,238 +4008,250 @@
   switch (yyn)
     {
         case 2:
-#line 253 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 293 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleVariable((yyvsp[0].lex).loc, (yyvsp[0].lex).symbol, (yyvsp[0].lex).string);
     }
-#line 3344 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4016 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 3:
-#line 259 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 299 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 3352 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4024 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 4:
-#line 262 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 302 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
+        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
     }
-#line 3360 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4033 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 5:
-#line 265 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 306 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed literal");
+        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
+    }
+#line 4042 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 6:
+#line 310 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
+    }
+#line 4050 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 7:
+#line 313 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
     }
-#line 3369 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4059 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 6:
-#line 269 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 8:
+#line 317 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         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 3378 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4068 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 7:
-#line 273 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 9:
+#line 321 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         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 3387 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 8:
-#line 277 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-#ifdef AMD_EXTENSIONS
-        parseContext.int16Check((yyvsp[0].lex).loc, "16-bit integer literal");
-        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((short)(yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
-#endif
-    }
-#line 3398 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 9:
-#line 283 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-#ifdef AMD_EXTENSIONS
-        parseContext.int16Check((yyvsp[0].lex).loc, "16-bit unsigned integer literal");
-        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((unsigned short)(yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
-#endif
-    }
-#line 3409 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4077 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 10:
-#line 289 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 325 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat, (yyvsp[0].lex).loc, true);
+        parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit integer literal");
+        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((short)(yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
     }
-#line 3417 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4086 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 11:
-#line 292 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 329 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit unsigned integer literal");
+        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((unsigned short)(yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
+    }
+#line 4095 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 12:
+#line 333 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat, (yyvsp[0].lex).loc, true);
+    }
+#line 4103 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 13:
+#line 336 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         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 3426 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 12:
-#line 296 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-#ifdef AMD_EXTENSIONS
-        parseContext.float16Check((yyvsp[0].lex).loc, "half float literal");
-        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat16, (yyvsp[0].lex).loc, true);
-#endif
-    }
-#line 3437 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 13:
-#line 302 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true);
-    }
-#line 3445 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4112 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 14:
-#line 305 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 340 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.float16Check((yyvsp[0].lex).loc, "half float literal");
+        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat16, (yyvsp[0].lex).loc, true);
+    }
+#line 4121 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 15:
+#line 344 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true);
+    }
+#line 4129 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 16:
+#line 347 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = (yyvsp[-1].interm.intermTypedNode);
         if ((yyval.interm.intermTypedNode)->getAsConstantUnion())
             (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression();
     }
-#line 3455 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 15:
-#line 313 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
-    }
-#line 3463 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 16:
-#line 316 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.intermTypedNode) = parseContext.handleBracketDereference((yyvsp[-2].lex).loc, (yyvsp[-3].interm.intermTypedNode), (yyvsp[-1].interm.intermTypedNode));
-    }
-#line 3471 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4139 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 17:
-#line 319 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 355 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 3479 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4147 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 18:
-#line 322 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 358 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-        (yyval.interm.intermTypedNode) = parseContext.handleDotDereference((yyvsp[0].lex).loc, (yyvsp[-2].interm.intermTypedNode), *(yyvsp[0].lex).string);
+        (yyval.interm.intermTypedNode) = parseContext.handleBracketDereference((yyvsp[-2].lex).loc, (yyvsp[-3].interm.intermTypedNode), (yyvsp[-1].interm.intermTypedNode));
     }
-#line 3487 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4155 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 19:
-#line 325 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 361 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
+    }
+#line 4163 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 20:
+#line 364 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.intermTypedNode) = parseContext.handleDotDereference((yyvsp[0].lex).loc, (yyvsp[-2].interm.intermTypedNode), *(yyvsp[0].lex).string);
+    }
+#line 4171 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 21:
+#line 367 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.variableCheck((yyvsp[-1].interm.intermTypedNode));
         parseContext.lValueErrorCheck((yyvsp[0].lex).loc, "++", (yyvsp[-1].interm.intermTypedNode));
         (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[0].lex).loc, "++", EOpPostIncrement, (yyvsp[-1].interm.intermTypedNode));
     }
-#line 3497 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4181 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 20:
-#line 330 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 22:
+#line 372 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.variableCheck((yyvsp[-1].interm.intermTypedNode));
         parseContext.lValueErrorCheck((yyvsp[0].lex).loc, "--", (yyvsp[-1].interm.intermTypedNode));
         (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[0].lex).loc, "--", EOpPostDecrement, (yyvsp[-1].interm.intermTypedNode));
     }
-#line 3507 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4191 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 21:
-#line 338 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 23:
+#line 380 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.integerCheck((yyvsp[0].interm.intermTypedNode), "[]");
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 3516 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4200 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 22:
-#line 345 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 24:
+#line 387 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleFunctionCall((yyvsp[0].interm).loc, (yyvsp[0].interm).function, (yyvsp[0].interm).intermNode);
         delete (yyvsp[0].interm).function;
     }
-#line 3525 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 23:
-#line 352 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm) = (yyvsp[0].interm);
-    }
-#line 3533 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 24:
-#line 358 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm) = (yyvsp[-1].interm);
-        (yyval.interm).loc = (yyvsp[0].lex).loc;
-    }
-#line 3542 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4209 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 25:
-#line 362 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 394 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm) = (yyvsp[0].interm);
+    }
+#line 4217 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 26:
+#line 400 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[-1].interm);
         (yyval.interm).loc = (yyvsp[0].lex).loc;
     }
-#line 3551 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 26:
-#line 369 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm) = (yyvsp[-1].interm);
-    }
-#line 3559 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4226 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 27:
-#line 372 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 404 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-        (yyval.interm) = (yyvsp[0].interm);
+        (yyval.interm) = (yyvsp[-1].interm);
+        (yyval.interm).loc = (yyvsp[0].lex).loc;
     }
-#line 3567 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4235 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 28:
-#line 378 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 411 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm) = (yyvsp[-1].interm);
+    }
+#line 4243 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 29:
+#line 414 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm) = (yyvsp[0].interm);
+    }
+#line 4251 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 30:
+#line 420 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         TParameter param = { 0, new TType };
         param.type->shallowCopy((yyvsp[0].interm.intermTypedNode)->getType());
@@ -3575,11 +4259,11 @@
         (yyval.interm).function = (yyvsp[-1].interm).function;
         (yyval.interm).intermNode = (yyvsp[0].interm.intermTypedNode);
     }
-#line 3579 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4263 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 29:
-#line 385 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 31:
+#line 427 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         TParameter param = { 0, new TType };
         param.type->shallowCopy((yyvsp[0].interm.intermTypedNode)->getType());
@@ -3587,29 +4271,29 @@
         (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 3591 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4275 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 30:
-#line 395 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 32:
+#line 437 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[-1].interm);
     }
-#line 3599 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4283 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 31:
-#line 403 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 33:
+#line 445 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         // Constructor
         (yyval.interm).intermNode = 0;
         (yyval.interm).function = parseContext.handleConstructorCall((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type));
     }
-#line 3609 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4293 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 32:
-#line 408 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 34:
+#line 450 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         //
         // Should be a method or subroutine call, but we haven't recognized the arguments yet.
@@ -3637,40 +4321,50 @@
             (yyval.interm).function = new TFunction(&empty, TType(EbtVoid), EOpNull);
         }
     }
-#line 3641 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4325 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 33:
-#line 438 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 35:
+#line 477 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        // Constructor
+        (yyval.interm).intermNode = 0;
+        (yyval.interm).function = parseContext.handleConstructorCall((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type));
+    }
+#line 4335 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 36:
+#line 485 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.variableCheck((yyvsp[0].interm.intermTypedNode));
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
         if (TIntermMethod* method = (yyvsp[0].interm.intermTypedNode)->getAsMethodNode())
             parseContext.error((yyvsp[0].interm.intermTypedNode)->getLoc(), "incomplete method syntax", method->getMethodName().c_str(), "");
     }
-#line 3652 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4346 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 34:
-#line 444 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 37:
+#line 491 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         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 3661 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4355 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 35:
-#line 448 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 38:
+#line 495 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         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 3670 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4364 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 36:
-#line 452 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 39:
+#line 499 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[-1].interm).op != EOpNull) {
             char errorOp[2] = {0, 0};
@@ -3687,179 +4381,179 @@
                 (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression();
         }
     }
-#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 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 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 3709 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4385 "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 3716 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 519 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNull; }
+#line 4391 "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 3722 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 520 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNegative; }
+#line 4397 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 42:
-#line 482 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 521 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLogicalNot; }
+#line 4403 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 43:
+#line 522 "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 4410 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 44:
+#line 528 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 4416 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 45:
+#line 529 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "*", EOpMul, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 3732 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4426 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 43:
-#line 487 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 46:
+#line 534 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "/", EOpDiv, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 3742 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4436 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 44:
-#line 492 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 47:
+#line 539 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "%");
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "%", EOpMod, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 3753 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4447 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 45:
-#line 501 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 48:
+#line 548 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 3759 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4453 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 46:
-#line 502 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 49:
+#line 549 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "+", EOpAdd, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 3769 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4463 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 47:
-#line 507 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 50:
+#line 554 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "-", EOpSub, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 3779 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4473 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 48:
-#line 515 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 51:
+#line 562 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 3785 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4479 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 49:
-#line 516 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 52:
+#line 563 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bit shift left");
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "<<", EOpLeftShift, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 3796 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4490 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 50:
-#line 522 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 53:
+#line 569 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bit shift right");
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, ">>", EOpRightShift, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 3807 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4501 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 51:
-#line 531 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 54:
+#line 578 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 3813 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4507 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 52:
-#line 532 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 55:
+#line 579 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "<", EOpLessThan, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 3823 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4517 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 53:
-#line 537 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 56:
+#line 584 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, ">", EOpGreaterThan, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 3833 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4527 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 54:
-#line 542 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 57:
+#line 589 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "<=", EOpLessThanEqual, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 3843 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4537 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 55:
-#line 547 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 58:
+#line 594 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, ">=", EOpGreaterThanEqual, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 3853 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4547 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 56:
-#line 555 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 59:
+#line 602 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 3859 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4553 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 57:
-#line 556 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 60:
+#line 603 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.arrayObjectCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "array comparison");
         parseContext.opaqueCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "==");
@@ -3868,11 +4562,11 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 3872 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4566 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 58:
-#line 564 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 61:
+#line 611 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.arrayObjectCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "array comparison");
         parseContext.opaqueCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "!=");
@@ -3881,124 +4575,124 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 3885 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4579 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 59:
-#line 575 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 62:
+#line 622 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 3891 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4585 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 60:
-#line 576 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 63:
+#line 623 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bitwise and");
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "&", EOpAnd, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 3902 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4596 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 61:
-#line 585 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 64:
+#line 632 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 3908 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4602 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 62:
-#line 586 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 65:
+#line 633 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bitwise exclusive or");
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "^", EOpExclusiveOr, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 3919 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4613 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 63:
-#line 595 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 66:
+#line 642 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 3925 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4619 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 64:
-#line 596 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 67:
+#line 643 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bitwise inclusive or");
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "|", EOpInclusiveOr, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 3936 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4630 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 65:
-#line 605 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 68:
+#line 652 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 3942 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4636 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 66:
-#line 606 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 69:
+#line 653 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "&&", EOpLogicalAnd, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 3952 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4646 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 67:
-#line 614 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 70:
+#line 661 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 3958 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4652 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 68:
-#line 615 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 71:
+#line 662 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "^^", EOpLogicalXor, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 3968 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4662 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 69:
-#line 623 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 72:
+#line 670 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 3974 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4668 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 70:
-#line 624 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 73:
+#line 671 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "||", EOpLogicalOr, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 3984 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4678 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 71:
-#line 632 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 74:
+#line 679 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 3990 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4684 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 72:
-#line 633 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 75:
+#line 680 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         ++parseContext.controlFlowNestingLevel;
     }
-#line 3998 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4692 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 73:
-#line 636 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 76:
+#line 683 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         --parseContext.controlFlowNestingLevel;
         parseContext.boolCheck((yyvsp[-4].lex).loc, (yyvsp[-5].interm.intermTypedNode));
@@ -4011,17 +4705,17 @@
             (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
         }
     }
-#line 4015 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4709 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 74:
-#line 651 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 77:
+#line 698 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4021 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4715 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 75:
-#line 652 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 78:
+#line 699 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.arrayObjectCheck((yyvsp[-1].interm).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "array assignment");
         parseContext.opaqueCheck((yyvsp[-1].interm).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "=");
@@ -4034,119 +4728,119 @@
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
         }
     }
-#line 4038 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4732 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 76:
-#line 667 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 79:
+#line 714 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpAssign;
     }
-#line 4047 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4741 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 77:
-#line 671 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 80:
+#line 718 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpMulAssign;
     }
-#line 4056 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4750 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 78:
-#line 675 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 81:
+#line 722 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpDivAssign;
     }
-#line 4065 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4759 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 79:
-#line 679 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 82:
+#line 726 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "%=");
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpModAssign;
     }
-#line 4075 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4769 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 80:
-#line 684 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 83:
+#line 731 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpAddAssign;
     }
-#line 4084 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4778 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 81:
-#line 688 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 84:
+#line 735 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpSubAssign;
     }
-#line 4093 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4787 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 82:
-#line 692 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 85:
+#line 739 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bit-shift left assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLeftShiftAssign;
     }
-#line 4102 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4796 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 83:
-#line 696 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 86:
+#line 743 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bit-shift right assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpRightShiftAssign;
     }
-#line 4111 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4805 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 84:
-#line 700 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 87:
+#line 747 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-and assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpAndAssign;
     }
-#line 4120 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4814 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 85:
-#line 704 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 88:
+#line 751 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-xor assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpExclusiveOrAssign;
     }
-#line 4129 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4823 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 86:
-#line 708 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 89:
+#line 755 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-or assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpInclusiveOrAssign;
     }
-#line 4138 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4832 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 87:
-#line 715 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 90:
+#line 762 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 4146 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4840 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 88:
-#line 718 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 91:
+#line 765 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.samplerConstructorLocationCheck((yyvsp[-1].lex).loc, ",", (yyvsp[0].interm.intermTypedNode));
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addComma((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode), (yyvsp[-1].lex).loc);
@@ -4155,40 +4849,40 @@
             (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
         }
     }
-#line 4159 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4853 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 89:
-#line 729 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 92:
+#line 776 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.constantValueCheck((yyvsp[0].interm.intermTypedNode), "");
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 4168 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4862 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 90:
-#line 736 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 93:
+#line 783 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.handleFunctionDeclarator((yyvsp[-1].interm).loc, *(yyvsp[-1].interm).function, true /* prototype */);
         (yyval.interm.intermNode) = 0;
         // TODO: 4.0 functionality: subroutines: make the identifier a user type for this signature
     }
-#line 4178 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4872 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 91:
-#line 741 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 94:
+#line 788 "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 4188 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4882 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 92:
-#line 746 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 95:
+#line 793 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.profileRequires((yyvsp[-3].lex).loc, ENoProfile, 130, 0, "precision statement");
 
@@ -4197,75 +4891,75 @@
         parseContext.setDefaultPrecision((yyvsp[-3].lex).loc, (yyvsp[-1].interm.type), (yyvsp[-2].interm.type).qualifier.precision);
         (yyval.interm.intermNode) = 0;
     }
-#line 4201 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4895 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 93:
-#line 754 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 96:
+#line 801 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.declareBlock((yyvsp[-1].interm).loc, *(yyvsp[-1].interm).typeList);
         (yyval.interm.intermNode) = 0;
     }
-#line 4210 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4904 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 94:
-#line 758 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 97:
+#line 805 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.declareBlock((yyvsp[-2].interm).loc, *(yyvsp[-2].interm).typeList, (yyvsp[-1].lex).string);
         (yyval.interm.intermNode) = 0;
     }
-#line 4219 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4913 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 95:
-#line 762 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 98:
+#line 809 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.declareBlock((yyvsp[-3].interm).loc, *(yyvsp[-3].interm).typeList, (yyvsp[-2].lex).string, (yyvsp[-1].interm).arraySizes);
         (yyval.interm.intermNode) = 0;
     }
-#line 4228 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4922 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 96:
-#line 766 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 99:
+#line 813 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalQualifierFixCheck((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier);
         parseContext.updateStandaloneQualifierDefaults((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type));
         (yyval.interm.intermNode) = 0;
     }
-#line 4238 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4932 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 97:
-#line 771 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 100:
+#line 818 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.checkNoShaderLayouts((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).shaderQualifiers);
         parseContext.addQualifierToExisting((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).qualifier, *(yyvsp[-1].lex).string);
         (yyval.interm.intermNode) = 0;
     }
-#line 4248 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4942 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 98:
-#line 776 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 101:
+#line 823 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.checkNoShaderLayouts((yyvsp[-3].interm.type).loc, (yyvsp[-3].interm.type).shaderQualifiers);
         (yyvsp[-1].interm.identifierList)->push_back((yyvsp[-2].lex).string);
         parseContext.addQualifierToExisting((yyvsp[-3].interm.type).loc, (yyvsp[-3].interm.type).qualifier, *(yyvsp[-1].interm.identifierList));
         (yyval.interm.intermNode) = 0;
     }
-#line 4259 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4953 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 99:
-#line 785 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 102:
+#line 832 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { parseContext.nestedBlockCheck((yyvsp[-2].interm.type).loc); }
-#line 4265 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4959 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 100:
-#line 785 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 103:
+#line 832 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         --parseContext.structNestingLevel;
         parseContext.blockName = (yyvsp[-4].lex).string;
@@ -4275,54 +4969,54 @@
         (yyval.interm).loc = (yyvsp[-5].interm.type).loc;
         (yyval.interm).typeList = (yyvsp[-1].interm.typeList);
     }
-#line 4279 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4973 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 101:
-#line 796 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 104:
+#line 843 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.identifierList) = new TIdentifierList;
         (yyval.interm.identifierList)->push_back((yyvsp[0].lex).string);
     }
-#line 4288 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4982 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 102:
-#line 800 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 105:
+#line 847 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.identifierList) = (yyvsp[-2].interm.identifierList);
         (yyval.interm.identifierList)->push_back((yyvsp[0].lex).string);
     }
-#line 4297 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4991 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 103:
-#line 807 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 106:
+#line 854 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).function = (yyvsp[-1].interm.function);
         (yyval.interm).loc = (yyvsp[0].lex).loc;
     }
-#line 4306 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5000 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 104:
-#line 814 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 107:
+#line 861 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.function) = (yyvsp[0].interm.function);
     }
-#line 4314 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5008 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 105:
-#line 817 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 108:
+#line 864 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.function) = (yyvsp[0].interm.function);
     }
-#line 4322 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5016 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 106:
-#line 824 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 109:
+#line 871 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         // Add the parameter
         (yyval.interm.function) = (yyvsp[-1].interm.function);
@@ -4331,11 +5025,11 @@
         else
             delete (yyvsp[0].interm).param.type;
     }
-#line 4335 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5029 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 107:
-#line 832 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 110:
+#line 879 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         //
         // Only first parameter of one-parameter functions can be void
@@ -4353,11 +5047,11 @@
             (yyvsp[-2].interm.function)->addParameter((yyvsp[0].interm).param);
         }
     }
-#line 4357 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5051 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 108:
-#line 852 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 111:
+#line 899 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[-2].interm.type).qualifier.storage != EvqGlobal && (yyvsp[-2].interm.type).qualifier.storage != EvqTemporary) {
             parseContext.error((yyvsp[-1].lex).loc, "no qualifiers allowed for function return",
@@ -4377,11 +5071,11 @@
         function = new TFunction((yyvsp[-1].lex).string, type);
         (yyval.interm.function) = function;
     }
-#line 4381 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5075 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 109:
-#line 875 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 112:
+#line 922 "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");
@@ -4397,33 +5091,35 @@
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).param = param;
     }
-#line 4401 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5095 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 110:
-#line 890 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 113:
+#line 937 "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");
             parseContext.profileRequires((yyvsp[-2].interm.type).loc, EEsProfile, 300, 0, "arrayed type");
             parseContext.arraySizeRequiredCheck((yyvsp[-2].interm.type).loc, *(yyvsp[-2].interm.type).arraySizes);
         }
-        parseContext.arrayDimCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.type).arraySizes, (yyvsp[0].interm).arraySizes);
+        TType* type = new TType((yyvsp[-2].interm.type));
+        type->transferArraySizes((yyvsp[0].interm).arraySizes);
+        type->copyArrayInnerSizes((yyvsp[-2].interm.type).arraySizes);
 
+        parseContext.arrayOfArrayVersionCheck((yyvsp[-1].lex).loc, type->getArraySizes());
         parseContext.arraySizeRequiredCheck((yyvsp[0].interm).loc, *(yyvsp[0].interm).arraySizes);
         parseContext.reservedErrorCheck((yyvsp[-1].lex).loc, *(yyvsp[-1].lex).string);
 
-        (yyvsp[-2].interm.type).arraySizes = (yyvsp[0].interm).arraySizes;
+        TParameter param = { (yyvsp[-1].lex).string, type };
 
-        TParameter param = { (yyvsp[-1].lex).string, new TType((yyvsp[-2].interm.type))};
         (yyval.interm).loc = (yyvsp[-1].lex).loc;
         (yyval.interm).param = param;
     }
-#line 4423 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5119 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 111:
-#line 913 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 114:
+#line 962 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[0].interm);
         if ((yyvsp[-1].interm.type).qualifier.precision != EpqNone)
@@ -4435,23 +5131,23 @@
         parseContext.paramCheckFix((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, *(yyval.interm).param.type);
 
     }
-#line 4439 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5135 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 112:
-#line 924 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 115:
+#line 973 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[0].interm);
 
         parseContext.parameterTypeCheck((yyvsp[0].interm).loc, EvqIn, *(yyvsp[0].interm).param.type);
-        parseContext.paramCheckFix((yyvsp[0].interm).loc, EvqTemporary, *(yyval.interm).param.type);
+        parseContext.paramCheckFixStorage((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 4451 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5147 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 113:
-#line 934 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 116:
+#line 983 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[0].interm);
         if ((yyvsp[-1].interm.type).qualifier.precision != EpqNone)
@@ -4462,130 +5158,130 @@
         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 4466 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5162 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 114:
-#line 944 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 117:
+#line 993 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[0].interm);
 
         parseContext.parameterTypeCheck((yyvsp[0].interm).loc, EvqIn, *(yyvsp[0].interm).param.type);
-        parseContext.paramCheckFix((yyvsp[0].interm).loc, EvqTemporary, *(yyval.interm).param.type);
+        parseContext.paramCheckFixStorage((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 4478 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5174 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 115:
-#line 954 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 118:
+#line 1003 "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 4489 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5185 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 116:
-#line 963 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 119:
+#line 1012 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[0].interm);
     }
-#line 4497 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5193 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 117:
-#line 966 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 120:
+#line 1015 "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 4506 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5202 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 118:
-#line 970 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 121:
+#line 1019 "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 4515 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5211 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 119:
-#line 974 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 122:
+#line 1023 "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 4525 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5221 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 120:
-#line 979 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 123:
+#line 1028 "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 4535 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5231 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 121:
-#line 987 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 124:
+#line 1036 "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 4545 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5241 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 122:
-#line 992 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 125:
+#line 1041 "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 4555 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5251 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 123:
-#line 997 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 126:
+#line 1046 "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 4565 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5261 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 124:
-#line 1002 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 127:
+#line 1051 "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 4575 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5271 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 125:
-#line 1007 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 128:
+#line 1056 "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 4585 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5281 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 126:
-#line 1016 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 129:
+#line 1065 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[0].interm.type);
 
@@ -4597,11 +5293,11 @@
 
         parseContext.precisionQualifierCheck((yyval.interm.type).loc, (yyval.interm.type).basicType, (yyval.interm.type).qualifier);
     }
-#line 4601 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5297 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 127:
-#line 1027 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 130:
+#line 1076 "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));
@@ -4612,7 +5308,7 @@
         }
 
         if ((yyvsp[0].interm.type).arraySizes && parseContext.arrayQualifierError((yyvsp[0].interm.type).loc, (yyvsp[-1].interm.type).qualifier))
-            (yyvsp[0].interm.type).arraySizes = 0;
+            (yyvsp[0].interm.type).arraySizes = nullptr;
 
         parseContext.checkNoShaderLayouts((yyvsp[0].interm.type).loc, (yyvsp[-1].interm.type).shaderQualifiers);
         (yyvsp[0].interm.type).shaderQualifiers.merge((yyvsp[-1].interm.type).shaderQualifiers);
@@ -4626,22 +5322,22 @@
              (parseContext.language == EShLangFragment && (yyval.interm.type).qualifier.storage == EvqVaryingIn)))
             (yyval.interm.type).qualifier.smooth = true;
     }
-#line 4630 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5326 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 128:
-#line 1054 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 131:
+#line 1103 "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 4641 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5337 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 129:
-#line 1063 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 132:
+#line 1112 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "smooth");
         parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "smooth");
@@ -4649,11 +5345,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.smooth = true;
     }
-#line 4653 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5349 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 130:
-#line 1070 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 133:
+#line 1119 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "flat");
         parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "flat");
@@ -4661,23 +5357,27 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.flat = true;
     }
-#line 4665 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5361 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 131:
-#line 1077 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 134:
+#line 1126 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "noperspective");
+#ifdef NV_EXTENSIONS
+        parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 0, E_GL_NV_shader_noperspective_interpolation, "noperspective");
+#else
         parseContext.requireProfile((yyvsp[0].lex).loc, ~EEsProfile, "noperspective");
+#endif
         parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "noperspective");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.nopersp = true;
     }
-#line 4677 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5377 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 132:
-#line 1084 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 135:
+#line 1137 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.globalCheck((yyvsp[0].lex).loc, "__explicitInterpAMD");
@@ -4687,84 +5387,84 @@
         (yyval.interm.type).qualifier.explicitInterp = true;
 #endif
     }
-#line 4691 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5391 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 133:
-#line 1096 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 136:
+#line 1149 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[-1].interm.type);
     }
-#line 4699 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5399 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 134:
-#line 1102 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 137:
+#line 1155 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 4707 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5407 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 135:
-#line 1105 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 138:
+#line 1158 "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 4717 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5417 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 136:
-#line 1112 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 139:
+#line 1165 "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 4726 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5426 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 137:
-#line 1116 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 140:
+#line 1169 "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 4735 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5435 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 138:
-#line 1120 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 141:
+#line 1173 "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 4745 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5445 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 139:
-#line 1128 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 142:
+#line 1181 "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 4756 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5456 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 140:
-#line 1137 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 143:
+#line 1190 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 4764 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5464 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 141:
-#line 1140 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 144:
+#line 1193 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[-1].interm.type);
         if ((yyval.interm.type).basicType == EbtVoid)
@@ -4773,72 +5473,80 @@
         (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 4777 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5477 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 142:
-#line 1151 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 145:
+#line 1204 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 4785 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5485 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 143:
-#line 1154 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 146:
+#line 1207 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 4793 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5493 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 144:
-#line 1157 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 147:
+#line 1210 "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 4802 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 145:
-#line 1161 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        // allow inheritance of storage qualifier from block declaration
-        (yyval.interm.type) = (yyvsp[0].interm.type);
-    }
-#line 4811 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 146:
-#line 1165 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        // allow inheritance of storage qualifier from block declaration
-        (yyval.interm.type) = (yyvsp[0].interm.type);
-    }
-#line 4820 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 147:
-#line 1169 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        // allow inheritance of storage qualifier from block declaration
-        (yyval.interm.type) = (yyvsp[0].interm.type);
-    }
-#line 4829 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5502 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 148:
-#line 1176 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1214 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        // allow inheritance of storage qualifier from block declaration
+        (yyval.interm.type) = (yyvsp[0].interm.type);
+    }
+#line 5511 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 149:
+#line 1218 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        // allow inheritance of storage qualifier from block declaration
+        (yyval.interm.type) = (yyvsp[0].interm.type);
+    }
+#line 5520 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 150:
+#line 1222 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        // allow inheritance of storage qualifier from block declaration
+        (yyval.interm.type) = (yyvsp[0].interm.type);
+    }
+#line 5529 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 151:
+#line 1226 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type) = (yyvsp[0].interm.type);
+    }
+#line 5537 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 152:
+#line 1232 "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 4838 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5546 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 149:
-#line 1180 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 153:
+#line 1236 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangVertex, "attribute");
         parseContext.checkDeprecated((yyvsp[0].lex).loc, ECoreProfile, 130, "attribute");
@@ -4851,11 +5559,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqVaryingIn;
     }
-#line 4855 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5563 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 150:
-#line 1192 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 154:
+#line 1248 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.checkDeprecated((yyvsp[0].lex).loc, ENoProfile, 130, "varying");
         parseContext.checkDeprecated((yyvsp[0].lex).loc, ECoreProfile, 130, "varying");
@@ -4870,43 +5578,43 @@
         else
             (yyval.interm.type).qualifier.storage = EvqVaryingIn;
     }
-#line 4874 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5582 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 151:
-#line 1206 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 155:
+#line 1262 "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 4884 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5592 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 152:
-#line 1211 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 156:
+#line 1267 "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 4895 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5603 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 153:
-#line 1217 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 157:
+#line 1273 "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 4906 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5614 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 154:
-#line 1223 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 158:
+#line 1279 "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");
@@ -4914,52 +5622,52 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.centroid = true;
     }
-#line 4918 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5626 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 155:
-#line 1230 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 159:
+#line 1286 "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 4929 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5637 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 156:
-#line 1236 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 160:
+#line 1292 "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 4939 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5647 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 157:
-#line 1241 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 161:
+#line 1297 "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 4949 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5657 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 158:
-#line 1246 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 162:
+#line 1302 "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 4959 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5667 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 159:
-#line 1251 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 163:
+#line 1307 "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");
@@ -4968,126 +5676,135 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqShared;
     }
-#line 4972 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5680 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 160:
-#line 1259 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 164:
+#line 1315 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.coherent = true;
     }
-#line 4981 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5689 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 161:
-#line 1263 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 165:
+#line 1319 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.volatil = true;
     }
-#line 4990 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5698 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 162:
-#line 1267 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 166:
+#line 1323 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.restrict = true;
     }
-#line 4999 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5707 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 163:
-#line 1271 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 167:
+#line 1327 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.readonly = true;
     }
-#line 5008 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5716 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 164:
-#line 1275 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 168:
+#line 1331 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.writeonly = true;
     }
-#line 5017 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5725 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 165:
-#line 1279 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 169:
+#line 1335 "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 5028 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5736 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 166:
-#line 1285 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 170:
+#line 1341 "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 5039 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5747 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 167:
-#line 1294 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 171:
+#line 1350 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc);
+        (yyval.interm.type).qualifier.nonUniform = true;
+    }
+#line 5756 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 172:
+#line 1357 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         // TODO
     }
-#line 5047 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5764 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 168:
-#line 1297 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 173:
+#line 1360 "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 5057 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5774 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 169:
-#line 1305 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 174:
+#line 1368 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[0].interm.type);
         (yyval.interm.type).qualifier.precision = parseContext.getDefaultPrecision((yyval.interm.type));
     }
-#line 5066 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5783 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 170:
-#line 1309 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 175:
+#line 1372 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-        parseContext.arrayDimCheck((yyvsp[0].interm).loc, (yyvsp[0].interm).arraySizes, 0);
+        parseContext.arrayOfArrayVersionCheck((yyvsp[0].interm).loc, (yyvsp[0].interm).arraySizes);
         (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 5077 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5794 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 171:
-#line 1318 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 176:
+#line 1381 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).loc = (yyvsp[-1].lex).loc;
         (yyval.interm).arraySizes = new TArraySizes;
         (yyval.interm).arraySizes->addInnerSize();
     }
-#line 5087 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5804 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 172:
-#line 1323 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 177:
+#line 1386 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).loc = (yyvsp[-2].lex).loc;
         (yyval.interm).arraySizes = new TArraySizes;
@@ -5096,20 +5813,20 @@
         parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size);
         (yyval.interm).arraySizes->addInnerSize(size);
     }
-#line 5100 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5817 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 173:
-#line 1331 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 178:
+#line 1394 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[-2].interm);
         (yyval.interm).arraySizes->addInnerSize();
     }
-#line 5109 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5826 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 174:
-#line 1335 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 179:
+#line 1398 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[-3].interm);
 
@@ -5117,2047 +5834,3069 @@
         parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size);
         (yyval.interm).arraySizes->addInnerSize(size);
     }
-#line 5121 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5838 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 175:
-#line 1345 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 180:
+#line 1408 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtVoid;
     }
-#line 5130 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5847 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 176:
-#line 1349 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 181:
+#line 1412 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
     }
-#line 5139 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5856 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 177:
-#line 1353 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 182:
+#line 1416 "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 5149 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5866 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 178:
-#line 1358 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 183:
+#line 1421 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-#ifdef AMD_EXTENSIONS
-        parseContext.float16Check((yyvsp[0].lex).loc, "half float", parseContext.symbolTable.atBuiltInLevel());
+        parseContext.float16Check((yyvsp[0].lex).loc, "float16_t", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
-#endif
     }
-#line 5161 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5876 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 179:
-#line 1365 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 184:
+#line 1426 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+    }
+#line 5886 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 185:
+#line 1431 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtDouble;
+    }
+#line 5896 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 186:
+#line 1436 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
     }
-#line 5170 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5905 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 180:
-#line 1369 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 187:
+#line 1440 "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 5180 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5915 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 181:
-#line 1374 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 188:
+#line 1445 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitInt8Check((yyvsp[0].lex).loc, "8-bit signed integer", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtInt8;
+    }
+#line 5925 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 189:
+#line 1450 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitInt8Check((yyvsp[0].lex).loc, "8-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtUint8;
+    }
+#line 5935 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 190:
+#line 1455 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit signed integer", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtInt16;
+    }
+#line 5945 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 191:
+#line 1460 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtUint16;
+    }
+#line 5955 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 192:
+#line 1465 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtInt;
+    }
+#line 5965 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 193:
+#line 1470 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtUint;
+    }
+#line 5975 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 194:
+#line 1475 "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 5190 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5985 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 182:
-#line 1379 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 195:
+#line 1480 "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 5200 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 183:
-#line 1384 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-#ifdef AMD_EXTENSIONS
-        parseContext.int16Check((yyvsp[0].lex).loc, "16-bit integer", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtInt16;
-#endif
-    }
-#line 5212 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 184:
-#line 1391 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-#ifdef AMD_EXTENSIONS
-        parseContext.int16Check((yyvsp[0].lex).loc, "16-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtUint16;
-#endif
-    }
-#line 5224 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 185:
-#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 5233 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 186:
-#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(2);
-    }
-#line 5243 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  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 5263 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 189:
-#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 5274 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 190:
-#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 5285 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 191:
-#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 5296 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 192:
-#line 1435 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-#ifdef AMD_EXTENSIONS
-        parseContext.float16Check((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat16;
-        (yyval.interm.type).setVector(2);
-#endif
-    }
-#line 5309 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 193:
-#line 1443 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-#ifdef AMD_EXTENSIONS
-        parseContext.float16Check((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat16;
-        (yyval.interm.type).setVector(3);
-#endif
-    }
-#line 5322 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 194:
-#line 1451 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-#ifdef AMD_EXTENSIONS
-        parseContext.float16Check((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat16;
-        (yyval.interm.type).setVector(4);
-#endif
-    }
-#line 5335 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 195:
-#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  */
+#line 5995 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 196:
-#line 1464 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1485 "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 5355 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6004 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 197:
-#line 1469 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1489 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtBool;
-        (yyval.interm.type).setVector(4);
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setVector(2);
     }
-#line 5365 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6014 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 198:
-#line 1474 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1494 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtInt;
-        (yyval.interm.type).setVector(2);
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setVector(3);
     }
-#line 5375 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6024 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 199:
-#line 1479 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1499 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtInt;
-        (yyval.interm.type).setVector(3);
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setVector(4);
     }
-#line 5385 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6034 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 200:
-#line 1484 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1504 "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 = EbtInt;
-        (yyval.interm.type).setVector(4);
+        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).setVector(2);
     }
-#line 5395 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6045 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 201:
-#line 1489 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1510 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
+        parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtInt64;
-        (yyval.interm.type).setVector(2);
+        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).setVector(3);
     }
-#line 5406 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6056 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 202:
-#line 1495 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1516 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
+        parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtInt64;
-        (yyval.interm.type).setVector(3);
+        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).setVector(4);
     }
-#line 5417 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6067 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 203:
-#line 1501 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1522 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
+        parseContext.float16Check((yyvsp[0].lex).loc, "half float 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);
+        (yyval.interm.type).basicType = EbtFloat16;
+        (yyval.interm.type).setVector(2);
     }
-#line 5428 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6078 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 204:
-#line 1507 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1528 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-#ifdef AMD_EXTENSIONS
-        parseContext.int16Check((yyvsp[0].lex).loc, "16-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
+        parseContext.float16Check((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtInt16;
-        (yyval.interm.type).setVector(2);
-#endif
+        (yyval.interm.type).basicType = EbtFloat16;
+        (yyval.interm.type).setVector(3);
     }
-#line 5441 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6089 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 205:
-#line 1515 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1534 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-#ifdef AMD_EXTENSIONS
-        parseContext.int16Check((yyvsp[0].lex).loc, "16-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
+        parseContext.float16Check((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtInt16;
-        (yyval.interm.type).setVector(3);
-#endif
-    }
-#line 5454 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 206:
-#line 1523 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-#ifdef AMD_EXTENSIONS
-        parseContext.int16Check((yyvsp[0].lex).loc, "16-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtInt16;
+        (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setVector(4);
-#endif
-    }
-#line 5467 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 207:
-#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 5478 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 208:
-#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 5489 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 209:
-#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 5500 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 210:
-#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 5511 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 211:
-#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 5522 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 212:
-#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 5533 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 213:
-#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());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtUint16;
-        (yyval.interm.type).setVector(2);
-#endif
-    }
-#line 5546 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 214:
-#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());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtUint16;
-        (yyval.interm.type).setVector(3);
-#endif
-    }
-#line 5559 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 215:
-#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());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtUint16;
-        (yyval.interm.type).setVector(4);
-#endif
-    }
-#line 5572 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 216:
-#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(2, 2);
-    }
-#line 5582 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  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(3, 3);
-    }
-#line 5592 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  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(4, 4);
-    }
-#line 5602 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  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, 2);
-    }
-#line 5612 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  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, 3);
-    }
-#line 5622 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  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(2, 4);
-    }
-#line 5632 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  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, 2);
-    }
-#line 5642 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  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, 3);
-    }
-#line 5652 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  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(3, 4);
-    }
-#line 5662 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  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 5682 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 227:
-#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 5692 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 228:
-#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 5703 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 229:
-#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 5714 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 230:
-#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 5725 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 231:
-#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 5736 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 232:
-#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 5747 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 233:
-#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 5758 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 234:
-#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 5769 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 235:
-#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 5780 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 236:
-#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 5791 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 237:
-#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 5802 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 238:
-#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 5813 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 239:
-#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 5824 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 240:
-#line 1723 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-#ifdef AMD_EXTENSIONS
-        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat16;
-        (yyval.interm.type).setMatrix(2, 2);
-#endif
-    }
-#line 5837 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 241:
-#line 1731 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-#ifdef AMD_EXTENSIONS
-        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat16;
-        (yyval.interm.type).setMatrix(3, 3);
-#endif
-    }
-#line 5850 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 242:
-#line 1739 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-#ifdef AMD_EXTENSIONS
-        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat16;
-        (yyval.interm.type).setMatrix(4, 4);
-#endif
-    }
-#line 5863 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 243:
-#line 1747 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-#ifdef AMD_EXTENSIONS
-        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat16;
-        (yyval.interm.type).setMatrix(2, 2);
-#endif
-    }
-#line 5876 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 244:
-#line 1755 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-#ifdef AMD_EXTENSIONS
-        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat16;
-        (yyval.interm.type).setMatrix(2, 3);
-#endif
-    }
-#line 5889 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 245:
-#line 1763 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-#ifdef AMD_EXTENSIONS
-        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat16;
-        (yyval.interm.type).setMatrix(2, 4);
-#endif
-    }
-#line 5902 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 246:
-#line 1771 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-#ifdef AMD_EXTENSIONS
-        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat16;
-        (yyval.interm.type).setMatrix(3, 2);
-#endif
-    }
-#line 5915 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 247:
-#line 1779 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-#ifdef AMD_EXTENSIONS
-        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat16;
-        (yyval.interm.type).setMatrix(3, 3);
-#endif
-    }
-#line 5928 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 248:
-#line 1787 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-#ifdef AMD_EXTENSIONS
-        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat16;
-        (yyval.interm.type).setMatrix(3, 4);
-#endif
-    }
-#line 5941 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 249:
-#line 1795 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-#ifdef AMD_EXTENSIONS
-        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat16;
-        (yyval.interm.type).setMatrix(4, 2);
-#endif
-    }
-#line 5954 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 250:
-#line 1803 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-#ifdef AMD_EXTENSIONS
-        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat16;
-        (yyval.interm.type).setMatrix(4, 3);
-#endif
-    }
-#line 5967 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 251:
-#line 1811 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-#ifdef AMD_EXTENSIONS
-        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat16;
-        (yyval.interm.type).setMatrix(4, 4);
-#endif
-    }
-#line 5980 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 252:
-#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 5990 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 253:
-#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 6000 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 254:
-#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 6010 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 255:
-#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 6020 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 256:
-#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 6030 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 257:
-#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 6040 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 258:
-#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 6050 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 259:
-#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 6060 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 260:
-#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 6070 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 261:
-#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 6080 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 262:
-#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 6090 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 263:
-#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 6100 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 264:
-#line 1879 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 206:
+#line 1540 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setVector(2);
+    }
+#line 6111 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 207:
+#line 1546 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setVector(3);
+    }
+#line 6122 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 208:
+#line 1552 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setVector(4);
+    }
+#line 6133 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 209:
+#line 1558 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).setVector(2);
+    }
+#line 6144 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 210:
+#line 1564 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).setVector(3);
+    }
+#line 6155 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 211:
+#line 1570 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).setVector(4);
+    }
+#line 6166 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 212:
+#line 1576 "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);
+        (yyval.interm.type).basicType = EbtBool;
+        (yyval.interm.type).setVector(2);
     }
-#line 6110 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6176 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 213:
+#line 1581 "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 6186 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 214:
+#line 1586 "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 6196 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 215:
+#line 1591 "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 6206 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 216:
+#line 1596 "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 6216 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 217:
+#line 1601 "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 6226 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 218:
+#line 1606 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+       parseContext.explicitInt8Check((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+       (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+       (yyval.interm.type).basicType = EbtInt8;
+       (yyval.interm.type).setVector(2);
+    }
+#line 6237 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 219:
+#line 1612 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+       parseContext.explicitInt8Check((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+       (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+       (yyval.interm.type).basicType = EbtInt8;
+       (yyval.interm.type).setVector(3);
+    }
+#line 6248 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 220:
+#line 1618 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+       parseContext.explicitInt8Check((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+       (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+       (yyval.interm.type).basicType = EbtInt8;
+       (yyval.interm.type).setVector(4);
+    }
+#line 6259 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 221:
+#line 1624 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+       parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+       (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+       (yyval.interm.type).basicType = EbtInt16;
+       (yyval.interm.type).setVector(2);
+    }
+#line 6270 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 222:
+#line 1630 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+       parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+       (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+       (yyval.interm.type).basicType = EbtInt16;
+       (yyval.interm.type).setVector(3);
+    }
+#line 6281 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 223:
+#line 1636 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+       parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+       (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+       (yyval.interm.type).basicType = EbtInt16;
+       (yyval.interm.type).setVector(4);
+    }
+#line 6292 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 224:
+#line 1642 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtInt;
+        (yyval.interm.type).setVector(2);
+    }
+#line 6303 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 225:
+#line 1648 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtInt;
+        (yyval.interm.type).setVector(3);
+    }
+#line 6314 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 226:
+#line 1654 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtInt;
+        (yyval.interm.type).setVector(4);
+    }
+#line 6325 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 227:
+#line 1660 "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 6336 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 228:
+#line 1666 "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 6347 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 229:
+#line 1672 "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 6358 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 230:
+#line 1678 "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 6369 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 231:
+#line 1684 "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 6380 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 232:
+#line 1690 "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 6391 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 233:
+#line 1696 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitInt8Check((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtUint8;
+        (yyval.interm.type).setVector(2);
+    }
+#line 6402 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 234:
+#line 1702 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitInt8Check((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtInt8;
+        (yyval.interm.type).setVector(3);
+    }
+#line 6413 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 235:
+#line 1708 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitInt8Check((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtUint8;
+        (yyval.interm.type).setVector(4);
+    }
+#line 6424 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 236:
+#line 1714 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtUint16;
+        (yyval.interm.type).setVector(2);
+    }
+#line 6435 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 237:
+#line 1720 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtUint16;
+        (yyval.interm.type).setVector(3);
+    }
+#line 6446 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 238:
+#line 1726 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtUint16;
+        (yyval.interm.type).setVector(4);
+    }
+#line 6457 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 239:
+#line 1732 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtUint;
+        (yyval.interm.type).setVector(2);
+    }
+#line 6468 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 240:
+#line 1738 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtUint;
+        (yyval.interm.type).setVector(3);
+    }
+#line 6479 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 241:
+#line 1744 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtUint;
+        (yyval.interm.type).setVector(4);
+    }
+#line 6490 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 242:
+#line 1750 "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 6501 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 243:
+#line 1756 "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 6512 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 244:
+#line 1762 "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 6523 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 245:
+#line 1768 "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 6533 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 246:
+#line 1773 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(3, 3);
+    }
+#line 6543 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 247:
+#line 1778 "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 6553 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 248:
+#line 1783 "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 6563 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 249:
+#line 1788 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(2, 3);
+    }
+#line 6573 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 250:
+#line 1793 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(2, 4);
+    }
+#line 6583 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 251:
+#line 1798 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(3, 2);
+    }
+#line 6593 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 252:
+#line 1803 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(3, 3);
+    }
+#line 6603 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 253:
+#line 1808 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(3, 4);
+    }
+#line 6613 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 254:
+#line 1813 "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 6623 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 255:
+#line 1818 "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 6633 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 256:
+#line 1823 "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 6643 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 257:
+#line 1828 "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 6654 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 258:
+#line 1834 "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 6665 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 259:
+#line 1840 "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 6676 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 260:
+#line 1846 "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 6687 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 261:
+#line 1852 "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 6698 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 262:
+#line 1858 "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 6709 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 263:
+#line 1864 "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 6720 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 264:
+#line 1870 "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 6731 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 265:
-#line 1884 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1876 "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 = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtFloat, EsdCube, true, true);
+        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).setMatrix(3, 4);
     }
-#line 6120 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6742 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 266:
-#line 1889 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1882 "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 = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtInt, Esd1D);
+        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).setMatrix(4, 2);
     }
-#line 6130 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6753 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 267:
-#line 1894 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1888 "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 = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtInt, Esd2D);
+        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).setMatrix(4, 3);
     }
-#line 6140 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6764 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 268:
-#line 1899 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1894 "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 = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtInt, Esd3D);
+        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).setMatrix(4, 4);
     }
-#line 6150 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6775 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 269:
-#line 1904 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1900 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
+        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtInt, EsdCube);
+        (yyval.interm.type).basicType = EbtFloat16;
+        (yyval.interm.type).setMatrix(2, 2);
     }
-#line 6160 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6786 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 270:
-#line 1909 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1906 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
+        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtInt, Esd1D, true);
+        (yyval.interm.type).basicType = EbtFloat16;
+        (yyval.interm.type).setMatrix(3, 3);
     }
-#line 6170 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6797 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 271:
-#line 1914 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1912 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
+        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtInt, Esd2D, true);
+        (yyval.interm.type).basicType = EbtFloat16;
+        (yyval.interm.type).setMatrix(4, 4);
     }
-#line 6180 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6808 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 272:
-#line 1919 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1918 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
+        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtInt, EsdCube, true);
+        (yyval.interm.type).basicType = EbtFloat16;
+        (yyval.interm.type).setMatrix(2, 2);
     }
-#line 6190 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6819 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 273:
 #line 1924 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
+        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat16;
+        (yyval.interm.type).setMatrix(2, 3);
+    }
+#line 6830 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 274:
+#line 1930 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat16;
+        (yyval.interm.type).setMatrix(2, 4);
+    }
+#line 6841 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 275:
+#line 1936 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat16;
+        (yyval.interm.type).setMatrix(3, 2);
+    }
+#line 6852 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 276:
+#line 1942 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat16;
+        (yyval.interm.type).setMatrix(3, 3);
+    }
+#line 6863 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 277:
+#line 1948 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat16;
+        (yyval.interm.type).setMatrix(3, 4);
+    }
+#line 6874 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 278:
+#line 1954 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat16;
+        (yyval.interm.type).setMatrix(4, 2);
+    }
+#line 6885 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 279:
+#line 1960 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat16;
+        (yyval.interm.type).setMatrix(4, 3);
+    }
+#line 6896 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 280:
+#line 1966 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat16;
+        (yyval.interm.type).setMatrix(4, 4);
+    }
+#line 6907 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 281:
+#line 1972 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(2, 2);
+    }
+#line 6918 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 282:
+#line 1978 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(3, 3);
+    }
+#line 6929 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 283:
+#line 1984 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(4, 4);
+    }
+#line 6940 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 284:
+#line 1990 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(2, 2);
+    }
+#line 6951 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 285:
+#line 1996 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(2, 3);
+    }
+#line 6962 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 286:
+#line 2002 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(2, 4);
+    }
+#line 6973 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 287:
+#line 2008 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(3, 2);
+    }
+#line 6984 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 288:
+#line 2014 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(3, 3);
+    }
+#line 6995 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 289:
+#line 2020 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(3, 4);
+    }
+#line 7006 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 290:
+#line 2026 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(4, 2);
+    }
+#line 7017 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 291:
+#line 2032 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(4, 3);
+    }
+#line 7028 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 292:
+#line 2038 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(4, 4);
+    }
+#line 7039 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 293:
+#line 2044 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).setMatrix(2, 2);
+    }
+#line 7050 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 294:
+#line 2050 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).setMatrix(3, 3);
+    }
+#line 7061 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 295:
+#line 2056 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).setMatrix(4, 4);
+    }
+#line 7072 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 296:
+#line 2062 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).setMatrix(2, 2);
+    }
+#line 7083 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 297:
+#line 2068 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).setMatrix(2, 3);
+    }
+#line 7094 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 298:
+#line 2074 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).setMatrix(2, 4);
+    }
+#line 7105 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 299:
+#line 2080 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).setMatrix(3, 2);
+    }
+#line 7116 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 300:
+#line 2086 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).setMatrix(3, 3);
+    }
+#line 7127 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 301:
+#line 2092 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).setMatrix(3, 4);
+    }
+#line 7138 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 302:
+#line 2098 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).setMatrix(4, 2);
+    }
+#line 7149 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 303:
+#line 2104 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).setMatrix(4, 3);
+    }
+#line 7160 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 304:
+#line 2110 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).setMatrix(4, 4);
+    }
+#line 7171 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 305:
+#line 2116 "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 7181 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 306:
+#line 2121 "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 7191 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 307:
+#line 2126 "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 7201 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 308:
+#line 2131 "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 7211 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 309:
+#line 2136 "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 7221 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 310:
+#line 2141 "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 7231 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 311:
+#line 2146 "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 7241 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 312:
+#line 2151 "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 7251 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 313:
+#line 2156 "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 7261 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 314:
+#line 2161 "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 7271 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 315:
+#line 2166 "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 7281 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 316:
+#line 2171 "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 7291 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 317:
+#line 2176 "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 7301 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 318:
+#line 2181 "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 7311 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 319:
+#line 2186 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.set(EbtFloat16, Esd1D);
+#endif
+    }
+#line 7324 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 320:
+#line 2194 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.set(EbtFloat16, Esd2D);
+#endif
+    }
+#line 7337 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 321:
+#line 2202 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.set(EbtFloat16, Esd3D);
+#endif
+    }
+#line 7350 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 322:
+#line 2210 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.set(EbtFloat16, EsdCube);
+#endif
+    }
+#line 7363 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 323:
+#line 2218 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.set(EbtFloat16, Esd1D, false, true);
+#endif
+    }
+#line 7376 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 324:
+#line 2226 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, false, true);
+#endif
+    }
+#line 7389 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 325:
+#line 2234 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.set(EbtFloat16, EsdCube, false, true);
+#endif
+    }
+#line 7402 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 326:
+#line 2242 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.set(EbtFloat16, Esd1D, true);
+#endif
+    }
+#line 7415 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 327:
+#line 2250 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, true);
+#endif
+    }
+#line 7428 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 328:
+#line 2258 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.set(EbtFloat16, Esd1D, true, true);
+#endif
+    }
+#line 7441 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 329:
+#line 2266 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, true, true);
+#endif
+    }
+#line 7454 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 330:
+#line 2274 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.set(EbtFloat16, EsdCube, true);
+#endif
+    }
+#line 7467 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 331:
+#line 2282 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.set(EbtFloat16, EsdCube, true, true);
+#endif
+    }
+#line 7480 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 332:
+#line 2290 "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 7490 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 333:
+#line 2295 "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 7500 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 334:
+#line 2300 "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 7510 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 335:
+#line 2305 "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 7520 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 336:
+#line 2310 "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 7530 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 337:
+#line 2315 "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 7540 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 338:
+#line 2320 "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 7550 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 339:
+#line 2325 "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 6200 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7560 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 274:
-#line 1929 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 340:
+#line 2330 "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 6210 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7570 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 275:
-#line 1934 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 341:
+#line 2335 "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 6220 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7580 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 276:
-#line 1939 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 342:
+#line 2340 "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 6230 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7590 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 277:
-#line 1944 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 343:
+#line 2345 "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 6240 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7600 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 278:
-#line 1949 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 344:
+#line 2350 "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 6250 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7610 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 279:
-#line 1954 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 345:
+#line 2355 "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 6260 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7620 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 280:
-#line 1959 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 346:
+#line 2360 "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 6270 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7630 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 281:
-#line 1964 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 347:
+#line 2365 "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 6280 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7640 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 282:
-#line 1969 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 348:
+#line 2370 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.set(EbtFloat16, EsdRect);
+#endif
+    }
+#line 7653 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 349:
+#line 2378 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.set(EbtFloat16, EsdRect, false, true);
+#endif
+    }
+#line 7666 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 350:
+#line 2386 "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 6290 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7676 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 283:
-#line 1974 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 351:
+#line 2391 "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 6300 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7686 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 284:
-#line 1979 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 352:
+#line 2396 "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 6310 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7696 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 285:
-#line 1984 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 353:
+#line 2401 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.set(EbtFloat16, EsdBuffer);
+#endif
+    }
+#line 7709 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 354:
+#line 2409 "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 6320 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7719 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 286:
-#line 1989 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 355:
+#line 2414 "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 6330 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7729 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 287:
-#line 1994 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 356:
+#line 2419 "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 6340 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7739 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 288:
-#line 1999 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 357:
+#line 2424 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, false, false, true);
+#endif
+    }
+#line 7752 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 358:
+#line 2432 "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 6350 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7762 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 289:
-#line 2004 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 359:
+#line 2437 "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 6360 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7772 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 290:
-#line 2009 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 360:
+#line 2442 "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 6370 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7782 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 291:
-#line 2014 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 361:
+#line 2447 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, true, false, true);
+#endif
+    }
+#line 7795 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 362:
+#line 2455 "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 6380 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7805 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 292:
-#line 2019 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 363:
+#line 2460 "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 6390 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7815 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 293:
-#line 2024 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 364:
+#line 2465 "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 6400 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7825 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 294:
-#line 2029 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 365:
+#line 2470 "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 6410 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7835 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 295:
-#line 2034 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 366:
+#line 2475 "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 6420 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7845 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 296:
-#line 2039 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 367:
+#line 2480 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd1D);
+#endif
+    }
+#line 7858 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 368:
+#line 2488 "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 6430 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7868 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 297:
-#line 2044 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 369:
+#line 2493 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D);
+#endif
+    }
+#line 7881 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 370:
+#line 2501 "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 6440 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7891 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 298:
-#line 2049 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 371:
+#line 2506 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd3D);
+#endif
+    }
+#line 7904 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 372:
+#line 2514 "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 6450 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7914 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 299:
-#line 2054 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 373:
+#line 2519 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdCube);
+#endif
+    }
+#line 7927 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 374:
+#line 2527 "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 6460 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7937 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 300:
-#line 2059 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 375:
+#line 2532 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd1D, true);
+#endif
+    }
+#line 7950 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 376:
+#line 2540 "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 6470 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7960 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 301:
-#line 2064 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 377:
+#line 2545 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D, true);
+#endif
+    }
+#line 7973 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 378:
+#line 2553 "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 6480 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7983 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 302:
-#line 2069 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 379:
+#line 2558 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdCube, true);
+#endif
+    }
+#line 7996 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 380:
+#line 2566 "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 6490 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8006 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 303:
-#line 2074 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 381:
+#line 2571 "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 6500 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8016 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 304:
-#line 2079 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 382:
+#line 2576 "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 6510 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8026 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 305:
-#line 2084 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 383:
+#line 2581 "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 6520 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8036 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 306:
-#line 2089 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 384:
+#line 2586 "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 6530 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8046 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 307:
-#line 2094 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 385:
+#line 2591 "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 6540 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8056 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 308:
-#line 2099 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 386:
+#line 2596 "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 6550 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8066 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 309:
-#line 2104 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 387:
+#line 2601 "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 6560 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8076 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 310:
-#line 2109 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 388:
+#line 2606 "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 6570 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8086 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 311:
-#line 2114 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 389:
+#line 2611 "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 6580 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8096 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 312:
-#line 2119 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 390:
+#line 2616 "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 6590 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8106 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 313:
-#line 2124 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 391:
+#line 2621 "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 6600 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8116 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 314:
-#line 2129 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 392:
+#line 2626 "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 6610 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8126 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 315:
-#line 2134 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 393:
+#line 2631 "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 6620 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8136 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 316:
-#line 2139 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 394:
+#line 2636 "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 6630 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8146 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 317:
-#line 2144 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 395:
+#line 2641 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdRect);
+#endif
+    }
+#line 8159 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 396:
+#line 2649 "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 6640 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8169 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 318:
-#line 2149 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 397:
+#line 2654 "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 6650 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8179 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 319:
-#line 2154 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 398:
+#line 2659 "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 6660 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8189 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 320:
-#line 2159 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 399:
+#line 2664 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdBuffer);
+#endif
+    }
+#line 8202 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 400:
+#line 2672 "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 6670 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8212 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 321:
-#line 2164 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 401:
+#line 2677 "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 6680 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8222 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 322:
-#line 2169 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 402:
+#line 2682 "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 6690 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8232 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 323:
-#line 2174 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 403:
+#line 2687 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D, false, false, true);
+#endif
+    }
+#line 8245 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 404:
+#line 2695 "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 6700 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8255 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 324:
-#line 2179 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 405:
+#line 2700 "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 6710 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8265 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 325:
-#line 2184 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 406:
+#line 2705 "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 6720 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8275 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 326:
-#line 2189 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 407:
+#line 2710 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D, true, false, true);
+#endif
+    }
+#line 8288 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 408:
+#line 2718 "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 6730 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8298 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 327:
-#line 2194 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 409:
+#line 2723 "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 6740 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8308 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 328:
-#line 2199 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 410:
+#line 2728 "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 6750 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8318 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 329:
-#line 2204 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 411:
+#line 2733 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setImage(EbtFloat16, Esd1D);
+#endif
+    }
+#line 8331 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 412:
+#line 2741 "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 6760 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8341 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 330:
-#line 2209 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 413:
+#line 2746 "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 6770 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8351 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 331:
-#line 2214 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 414:
+#line 2751 "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 6780 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8361 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 332:
-#line 2219 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 415:
+#line 2756 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D);
+#endif
+    }
+#line 8374 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 416:
+#line 2764 "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 6790 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8384 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 333:
-#line 2224 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 417:
+#line 2769 "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 6800 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8394 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 334:
-#line 2229 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 418:
+#line 2774 "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 6810 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8404 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 335:
-#line 2234 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 419:
+#line 2779 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setImage(EbtFloat16, Esd3D);
+#endif
+    }
+#line 8417 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 420:
+#line 2787 "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 6820 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8427 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 336:
-#line 2239 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 421:
+#line 2792 "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 6830 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8437 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 337:
-#line 2244 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 422:
+#line 2797 "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 6840 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8447 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 338:
-#line 2249 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 423:
+#line 2802 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setImage(EbtFloat16, EsdRect);
+#endif
+    }
+#line 8460 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 424:
+#line 2810 "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 6850 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8470 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 339:
-#line 2254 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 425:
+#line 2815 "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 6860 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8480 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 340:
-#line 2259 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 426:
+#line 2820 "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 6870 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8490 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 341:
-#line 2264 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 427:
+#line 2825 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setImage(EbtFloat16, EsdCube);
+#endif
+    }
+#line 8503 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 428:
+#line 2833 "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 6880 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8513 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 342:
-#line 2269 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 429:
+#line 2838 "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 6890 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8523 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 343:
-#line 2274 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 430:
+#line 2843 "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 6900 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8533 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 344:
-#line 2279 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 431:
+#line 2848 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setImage(EbtFloat16, EsdBuffer);
+#endif
+    }
+#line 8546 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 432:
+#line 2856 "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 6910 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8556 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 345:
-#line 2284 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 433:
+#line 2861 "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 6920 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8566 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 346:
-#line 2289 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 434:
+#line 2866 "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 6930 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8576 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 347:
-#line 2294 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 435:
+#line 2871 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setImage(EbtFloat16, Esd1D, true);
+#endif
+    }
+#line 8589 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 436:
+#line 2879 "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 6940 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8599 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 348:
-#line 2299 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 437:
+#line 2884 "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 6950 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8609 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 349:
-#line 2304 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 438:
+#line 2889 "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 6960 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8619 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 350:
-#line 2309 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 439:
+#line 2894 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D, true);
+#endif
+    }
+#line 8632 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 440:
+#line 2902 "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 6970 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8642 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 351:
-#line 2314 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 441:
+#line 2907 "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 6980 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8652 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 352:
-#line 2319 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 442:
+#line 2912 "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 6990 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8662 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 353:
-#line 2324 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 443:
+#line 2917 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setImage(EbtFloat16, EsdCube, true);
+#endif
+    }
+#line 8675 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 444:
+#line 2925 "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 7000 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8685 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 354:
-#line 2329 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 445:
+#line 2930 "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 7010 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8695 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 355:
-#line 2334 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 446:
+#line 2935 "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 7020 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8705 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 356:
-#line 2339 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 447:
+#line 2940 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D, false, false, true);
+#endif
+    }
+#line 8718 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 448:
+#line 2948 "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 7030 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8728 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 357:
-#line 2344 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 449:
+#line 2953 "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 7040 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8738 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 358:
-#line 2349 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 450:
+#line 2958 "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 7050 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8748 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 359:
-#line 2354 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 451:
+#line 2963 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D, true, false, true);
+#endif
+    }
+#line 8761 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 452:
+#line 2971 "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 7060 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8771 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 360:
-#line 2359 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 453:
+#line 2976 "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 7070 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8781 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 361:
-#line 2364 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 454:
+#line 2981 "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 7081 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8792 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 362:
-#line 2370 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 455:
+#line 2987 "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 7092 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8803 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 363:
-#line 2376 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 456:
+#line 2993 "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 7103 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8814 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 364:
-#line 2382 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 457:
+#line 2999 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float subpass input", parseContext.symbolTable.atBuiltInLevel());
+        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(EbtFloat16);
+#endif
+    }
+#line 8828 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 458:
+#line 3008 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+#ifdef AMD_EXTENSIONS
+        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float subpass input", parseContext.symbolTable.atBuiltInLevel());
+        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(EbtFloat16, true);
+#endif
+    }
+#line 8842 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 459:
+#line 3017 "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 7114 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8853 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 365:
-#line 2388 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 460:
+#line 3023 "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 7125 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8864 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 366:
-#line 2394 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 461:
+#line 3029 "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 7136 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8875 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 367:
-#line 2400 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 462:
+#line 3035 "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 7147 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8886 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 368:
-#line 2406 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 463:
+#line 3041 "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 7157 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8896 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 369:
-#line 2411 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 464:
+#line 3046 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         //
         // This is for user defined type names.  The lexical phase looked up the
@@ -7171,47 +8910,47 @@
         } else
             parseContext.error((yyvsp[0].lex).loc, "expected type name", (yyvsp[0].lex).string->c_str(), "");
     }
-#line 7175 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8914 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 370:
-#line 2427 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 465:
+#line 3062 "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 7185 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8924 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 371:
-#line 2432 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 466:
+#line 3067 "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 7195 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8934 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 372:
-#line 2437 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 467:
+#line 3072 "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 7205 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8944 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 373:
-#line 2445 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 468:
+#line 3080 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { parseContext.nestedStructCheck((yyvsp[-2].lex).loc); }
-#line 7211 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8950 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 374:
-#line 2445 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 469:
+#line 3080 "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);
@@ -7223,17 +8962,17 @@
         (yyval.interm.type).userDef = structure;
         --parseContext.structNestingLevel;
     }
-#line 7227 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8966 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 375:
-#line 2456 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 470:
+#line 3091 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { parseContext.nestedStructCheck((yyvsp[-1].lex).loc); }
-#line 7233 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8972 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 376:
-#line 2456 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 471:
+#line 3091 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         TType* structure = new TType((yyvsp[-1].interm.typeList), TString(""));
         (yyval.interm.type).init((yyvsp[-4].lex).loc);
@@ -7241,19 +8980,19 @@
         (yyval.interm.type).userDef = structure;
         --parseContext.structNestingLevel;
     }
-#line 7245 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8984 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 377:
-#line 2466 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 472:
+#line 3101 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.typeList) = (yyvsp[0].interm.typeList);
     }
-#line 7253 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8992 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 378:
-#line 2469 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 473:
+#line 3104 "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) {
@@ -7264,11 +9003,11 @@
             (yyval.interm.typeList)->push_back((*(yyvsp[0].interm.typeList))[i]);
         }
     }
-#line 7268 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9007 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 379:
-#line 2482 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 474:
+#line 3117 "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");
@@ -7283,17 +9022,20 @@
         parseContext.precisionQualifierCheck((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).basicType, (yyvsp[-2].interm.type).qualifier);
 
         for (unsigned int i = 0; i < (yyval.interm.typeList)->size(); ++i) {
-            parseContext.arrayDimCheck((yyvsp[-2].interm.type).loc, (*(yyval.interm.typeList))[i].type, (yyvsp[-2].interm.type).arraySizes);
-            (*(yyval.interm.typeList))[i].type->mergeType((yyvsp[-2].interm.type));
+            TType type((yyvsp[-2].interm.type));
+            type.setFieldName((*(yyval.interm.typeList))[i].type->getFieldName());
+            type.transferArraySizes((*(yyval.interm.typeList))[i].type->getArraySizes());
+            type.copyArrayInnerSizes((yyvsp[-2].interm.type).arraySizes);
+            parseContext.arrayOfArrayVersionCheck((*(yyval.interm.typeList))[i].loc, type.getArraySizes());
+            (*(yyval.interm.typeList))[i].type->shallowCopy(type);
         }
     }
-#line 7291 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9034 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 380:
-#line 2500 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 475:
+#line 3139 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-        parseContext.globalQualifierFixCheck((yyvsp[-3].interm.type).loc, (yyvsp[-3].interm.type).qualifier);
         if ((yyvsp[-2].interm.type).arraySizes) {
             parseContext.profileRequires((yyvsp[-2].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
             parseContext.profileRequires((yyvsp[-2].interm.type).loc, EEsProfile, 300, 0, "arrayed type");
@@ -7303,269 +9045,273 @@
 
         (yyval.interm.typeList) = (yyvsp[-1].interm.typeList);
 
-        parseContext.checkNoShaderLayouts((yyvsp[-3].interm.type).loc, (yyvsp[-3].interm.type).shaderQualifiers);
+        parseContext.memberQualifierCheck((yyvsp[-3].interm.type));
         parseContext.voidErrorCheck((yyvsp[-2].interm.type).loc, (*(yyvsp[-1].interm.typeList))[0].type->getFieldName(), (yyvsp[-2].interm.type).basicType);
         parseContext.mergeQualifiers((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).qualifier, (yyvsp[-3].interm.type).qualifier, true);
         parseContext.precisionQualifierCheck((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).basicType, (yyvsp[-2].interm.type).qualifier);
 
         for (unsigned int i = 0; i < (yyval.interm.typeList)->size(); ++i) {
-            parseContext.arrayDimCheck((yyvsp[-3].interm.type).loc, (*(yyval.interm.typeList))[i].type, (yyvsp[-2].interm.type).arraySizes);
-            (*(yyval.interm.typeList))[i].type->mergeType((yyvsp[-2].interm.type));
+            TType type((yyvsp[-2].interm.type));
+            type.setFieldName((*(yyval.interm.typeList))[i].type->getFieldName());
+            type.transferArraySizes((*(yyval.interm.typeList))[i].type->getArraySizes());
+            type.copyArrayInnerSizes((yyvsp[-2].interm.type).arraySizes);
+            parseContext.arrayOfArrayVersionCheck((*(yyval.interm.typeList))[i].loc, type.getArraySizes());
+            (*(yyval.interm.typeList))[i].type->shallowCopy(type);
         }
     }
-#line 7317 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9063 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 381:
-#line 2524 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 476:
+#line 3166 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.typeList) = new TTypeList;
         (yyval.interm.typeList)->push_back((yyvsp[0].interm.typeLine));
     }
-#line 7326 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9072 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 382:
-#line 2528 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 477:
+#line 3170 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.typeList)->push_back((yyvsp[0].interm.typeLine));
     }
-#line 7334 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9080 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 383:
-#line 2534 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 478:
+#line 3176 "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 7344 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9090 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 384:
-#line 2539 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 479:
+#line 3181 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-        parseContext.arrayDimCheck((yyvsp[-1].lex).loc, (yyvsp[0].interm).arraySizes, 0);
+        parseContext.arrayOfArrayVersionCheck((yyvsp[-1].lex).loc, (yyvsp[0].interm).arraySizes);
 
         (yyval.interm.typeLine).type = new TType(EbtVoid);
         (yyval.interm.typeLine).loc = (yyvsp[-1].lex).loc;
         (yyval.interm.typeLine).type->setFieldName(*(yyvsp[-1].lex).string);
-        (yyval.interm.typeLine).type->newArraySizes(*(yyvsp[0].interm).arraySizes);
+        (yyval.interm.typeLine).type->transferArraySizes((yyvsp[0].interm).arraySizes);
     }
-#line 7357 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9103 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 385:
-#line 2550 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 480:
+#line 3192 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 7365 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9111 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 386:
-#line 2553 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 481:
+#line 3195 "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 7376 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9122 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 387:
-#line 2559 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 482:
+#line 3201 "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 7387 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9133 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 388:
-#line 2568 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 483:
+#line 3210 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate(0, (yyvsp[0].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)->getLoc());
     }
-#line 7395 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9141 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 389:
-#line 2571 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 484:
+#line 3213 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
     }
-#line 7403 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9149 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 390:
-#line 2577 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 485:
+#line 3219 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 7409 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9155 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 391:
-#line 2581 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 486:
+#line 3223 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 7415 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9161 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 392:
-#line 2582 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 487:
+#line 3224 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 7421 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9167 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 393:
-#line 2588 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 488:
+#line 3230 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 7427 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9173 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 394:
-#line 2589 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 489:
+#line 3231 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 7433 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9179 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 395:
-#line 2590 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 490:
+#line 3232 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 7439 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9185 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 396:
-#line 2591 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 491:
+#line 3233 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 7445 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9191 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 397:
-#line 2592 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 492:
+#line 3234 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 7451 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9197 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 398:
-#line 2593 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 493:
+#line 3235 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 7457 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9203 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 399:
-#line 2594 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 494:
+#line 3236 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 7463 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9209 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 400:
-#line 2598 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 495:
+#line 3240 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = 0; }
-#line 7469 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9215 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 401:
-#line 2599 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 496:
+#line 3241 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.symbolTable.push();
         ++parseContext.statementNestingLevel;
     }
-#line 7478 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9224 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 402:
-#line 2603 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 497:
+#line 3245 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
         --parseContext.statementNestingLevel;
     }
-#line 7487 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9233 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 403:
-#line 2607 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 498:
+#line 3249 "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 7497 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9243 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 404:
-#line 2615 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 499:
+#line 3257 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 7503 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9249 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 405:
-#line 2616 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 500:
+#line 3258 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 7509 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9255 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 406:
-#line 2620 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 501:
+#line 3262 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         ++parseContext.controlFlowNestingLevel;
     }
-#line 7517 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9263 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 407:
-#line 2623 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 502:
+#line 3265 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         --parseContext.controlFlowNestingLevel;
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 7526 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9272 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 408:
-#line 2627 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 503:
+#line 3269 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.symbolTable.push();
         ++parseContext.statementNestingLevel;
         ++parseContext.controlFlowNestingLevel;
     }
-#line 7536 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9282 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 409:
-#line 2632 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 504:
+#line 3274 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 7547 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9293 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 410:
-#line 2641 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 505:
+#line 3283 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = 0;
     }
-#line 7555 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9301 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 411:
-#line 2644 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 506:
+#line 3286 "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 7565 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9311 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 412:
-#line 2652 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 507:
+#line 3294 "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 ||
@@ -7574,11 +9320,11 @@
             (yyval.interm.intermNode) = 0;  // start a fresh subsequence for what's after this case
         }
     }
-#line 7578 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9324 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 413:
-#line 2660 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 508:
+#line 3302 "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)) {
@@ -7587,59 +9333,76 @@
         } else
             (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-1].interm.intermNode), (yyvsp[0].interm.intermNode));
     }
-#line 7591 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9337 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 414:
-#line 2671 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 509:
+#line 3313 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = 0; }
-#line 7597 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9343 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 415:
-#line 2672 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 510:
+#line 3314 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = static_cast<TIntermNode*>((yyvsp[-1].interm.intermTypedNode)); }
-#line 7603 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9349 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 416:
-#line 2676 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 511:
+#line 3318 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
+    }
+#line 9357 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 512:
+#line 3321 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.handleSelectionAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode));
+        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
+    }
+#line 9366 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 513:
+#line 3327 "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 7612 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9375 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 417:
-#line 2683 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 514:
+#line 3334 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermNode);
         (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermNode);
     }
-#line 7621 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9384 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 418:
-#line 2687 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 515:
+#line 3338 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.nodePair).node1 = (yyvsp[0].interm.intermNode);
         (yyval.interm.nodePair).node2 = 0;
     }
-#line 7630 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9393 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 419:
-#line 2695 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 516:
+#line 3346 "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 7639 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9402 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 420:
-#line 2699 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 517:
+#line 3350 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.boolCheck((yyvsp[-2].lex).loc, (yyvsp[-3].interm.type));
 
@@ -7650,11 +9413,28 @@
         else
             (yyval.interm.intermTypedNode) = 0;
     }
-#line 7654 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9417 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 421:
-#line 2712 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 518:
+#line 3363 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
+    }
+#line 9425 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 519:
+#line 3366 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.handleSwitchAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode));
+        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
+    }
+#line 9434 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 520:
+#line 3372 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         // start new switch sequence on the switch stack
         ++parseContext.controlFlowNestingLevel;
@@ -7663,11 +9443,11 @@
         parseContext.switchLevel.push_back(parseContext.statementNestingLevel);
         parseContext.symbolTable.push();
     }
-#line 7667 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9447 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 422:
-#line 2720 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 521:
+#line 3380 "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();
@@ -7677,27 +9457,27 @@
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
     }
-#line 7681 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9461 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 423:
-#line 2732 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 522:
+#line 3392 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = 0;
     }
-#line 7689 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9469 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 424:
-#line 2735 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 523:
+#line 3395 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 7697 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9477 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 425:
-#line 2741 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 524:
+#line 3401 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = 0;
         if (parseContext.switchLevel.size() == 0)
@@ -7710,11 +9490,11 @@
             (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpCase, (yyvsp[-1].interm.intermTypedNode), (yyvsp[-2].lex).loc);
         }
     }
-#line 7714 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9494 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 426:
-#line 2753 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 525:
+#line 3413 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = 0;
         if (parseContext.switchLevel.size() == 0)
@@ -7724,11 +9504,28 @@
         else
             (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpDefault, (yyvsp[-1].lex).loc);
     }
-#line 7728 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9508 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 427:
-#line 2765 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 526:
+#line 3425 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
+    }
+#line 9516 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 527:
+#line 3428 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.handleLoopAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode));
+        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
+    }
+#line 9525 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 528:
+#line 3434 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if (! parseContext.limits.whileLoops)
             parseContext.error((yyvsp[-1].lex).loc, "while loops not available", "limitation", "");
@@ -7737,11 +9534,11 @@
         ++parseContext.statementNestingLevel;
         ++parseContext.controlFlowNestingLevel;
     }
-#line 7741 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9538 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 428:
-#line 2773 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 529:
+#line 3442 "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);
@@ -7749,21 +9546,21 @@
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
     }
-#line 7753 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9550 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 429:
-#line 2780 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 530:
+#line 3449 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         ++parseContext.loopNestingLevel;
         ++parseContext.statementNestingLevel;
         ++parseContext.controlFlowNestingLevel;
     }
-#line 7763 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9560 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 430:
-#line 2785 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 531:
+#line 3454 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if (! parseContext.limits.whileLoops)
             parseContext.error((yyvsp[-7].lex).loc, "do-while loops not available", "limitation", "");
@@ -7775,22 +9572,22 @@
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
     }
-#line 7779 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9576 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 431:
-#line 2796 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 532:
+#line 3465 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.symbolTable.push();
         ++parseContext.loopNestingLevel;
         ++parseContext.statementNestingLevel;
         ++parseContext.controlFlowNestingLevel;
     }
-#line 7790 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9587 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 432:
-#line 2802 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 533:
+#line 3471 "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);
@@ -7803,81 +9600,81 @@
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
     }
-#line 7807 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9604 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 433:
-#line 2817 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 534:
+#line 3486 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 7815 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9612 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 434:
-#line 2820 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 535:
+#line 3489 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 7823 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9620 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 435:
-#line 2826 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 536:
+#line 3495 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 7831 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9628 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 436:
-#line 2829 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 537:
+#line 3498 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = 0;
     }
-#line 7839 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9636 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 437:
-#line 2835 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 538:
+#line 3504 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.nodePair).node1 = (yyvsp[-1].interm.intermTypedNode);
         (yyval.interm.nodePair).node2 = 0;
     }
-#line 7848 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9645 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 438:
-#line 2839 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 539:
+#line 3508 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermTypedNode);
         (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermTypedNode);
     }
-#line 7857 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9654 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 439:
-#line 2846 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 540:
+#line 3515 "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 7867 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9664 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 440:
-#line 2851 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 541:
+#line 3520 "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 7877 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9674 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 441:
-#line 2856 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 542:
+#line 3525 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpReturn, (yyvsp[-1].lex).loc);
         if (parseContext.currentFunctionType->getBasicType() != EbtVoid)
@@ -7885,83 +9682,83 @@
         if (parseContext.inMain)
             parseContext.postEntryPointReturn = true;
     }
-#line 7889 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9686 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 442:
-#line 2863 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 543:
+#line 3532 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = parseContext.handleReturnValue((yyvsp[-2].lex).loc, (yyvsp[-1].interm.intermTypedNode));
     }
-#line 7897 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9694 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 443:
-#line 2866 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 544:
+#line 3535 "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 7906 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9703 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 444:
-#line 2875 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 545:
+#line 3544 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
         parseContext.intermediate.setTreeRoot((yyval.interm.intermNode));
     }
-#line 7915 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9712 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 445:
-#line 2879 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 546:
+#line 3548 "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 7926 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9723 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 446:
-#line 2888 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 547:
+#line 3557 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 7934 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9731 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 447:
-#line 2891 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 548:
+#line 3560 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 7942 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9739 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 448:
-#line 2894 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 549:
+#line 3563 "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 7952 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9749 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 449:
-#line 2902 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 550:
+#line 3571 "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 7961 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9758 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 450:
-#line 2906 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 551:
+#line 3575 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         //   May be best done as post process phase on intermediate code
         if (parseContext.currentFunctionType->getBasicType() != EbtVoid && ! parseContext.functionReturnsValue)
@@ -7975,13 +9772,54 @@
         // information. This information can be queried from the parse tree
         (yyval.interm.intermNode)->getAsAggregate()->setOptimize(parseContext.contextPragma.optimize);
         (yyval.interm.intermNode)->getAsAggregate()->setDebug(parseContext.contextPragma.debug);
-        (yyval.interm.intermNode)->getAsAggregate()->addToPragmaTable(parseContext.contextPragma.pragmaTable);
+        (yyval.interm.intermNode)->getAsAggregate()->setPragmaTable(parseContext.contextPragma.pragmaTable);
     }
-#line 7981 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9778 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 552:
+#line 3593 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.attributes) = (yyvsp[-2].interm.attributes);
+        parseContext.requireExtensions((yyvsp[-4].lex).loc, 1, &E_GL_EXT_control_flow_attributes, "attribute");
+    }
+#line 9787 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 553:
+#line 3599 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.attributes) = (yyvsp[0].interm.attributes);
+    }
+#line 9795 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 554:
+#line 3602 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.attributes) = parseContext.mergeAttributes((yyvsp[-2].interm.attributes), (yyvsp[0].interm.attributes));
+    }
+#line 9803 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 555:
+#line 3607 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.attributes) = parseContext.makeAttributes(*(yyvsp[0].lex).string);
+    }
+#line 9811 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 556:
+#line 3610 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.attributes) = parseContext.makeAttributes(*(yyvsp[-3].lex).string, (yyvsp[-1].interm.intermTypedNode));
+    }
+#line 9819 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
 
-#line 7985 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9823 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
       default: break;
     }
   /* User semantic actions sometimes alter yychar, and that requires
@@ -8209,5 +10047,5 @@
 #endif
   return yyresult;
 }
-#line 2923 "MachineIndependent/glslang.y" /* yacc.c:1906  */
+#line 3614 "MachineIndependent/glslang.y" /* yacc.c:1906  */
 
diff --git a/glslang/MachineIndependent/glslang_tab.cpp.h b/glslang/MachineIndependent/glslang_tab.cpp.h
index b2e0063..7cfb797 100644
--- a/glslang/MachineIndependent/glslang_tab.cpp.h
+++ b/glslang/MachineIndependent/glslang_tab.cpp.h
@@ -47,299 +47,392 @@
   {
     ATTRIBUTE = 258,
     VARYING = 259,
-    CONST = 260,
-    BOOL = 261,
-    FLOAT = 262,
+    FLOAT16_T = 260,
+    FLOAT = 261,
+    FLOAT32_T = 262,
     DOUBLE = 263,
-    INT = 264,
-    UINT = 265,
-    INT64_T = 266,
-    UINT64_T = 267,
-    INT16_T = 268,
-    UINT16_T = 269,
-    FLOAT16_T = 270,
-    BREAK = 271,
-    CONTINUE = 272,
-    DO = 273,
-    ELSE = 274,
-    FOR = 275,
-    IF = 276,
-    DISCARD = 277,
-    RETURN = 278,
-    SWITCH = 279,
-    CASE = 280,
-    DEFAULT = 281,
-    SUBROUTINE = 282,
-    BVEC2 = 283,
-    BVEC3 = 284,
-    BVEC4 = 285,
-    IVEC2 = 286,
-    IVEC3 = 287,
-    IVEC4 = 288,
-    I64VEC2 = 289,
-    I64VEC3 = 290,
-    I64VEC4 = 291,
-    UVEC2 = 292,
-    UVEC3 = 293,
-    UVEC4 = 294,
-    U64VEC2 = 295,
-    U64VEC3 = 296,
-    U64VEC4 = 297,
-    VEC2 = 298,
-    VEC3 = 299,
-    VEC4 = 300,
-    MAT2 = 301,
-    MAT3 = 302,
-    MAT4 = 303,
-    CENTROID = 304,
-    IN = 305,
-    OUT = 306,
-    INOUT = 307,
-    UNIFORM = 308,
-    PATCH = 309,
-    SAMPLE = 310,
-    BUFFER = 311,
-    SHARED = 312,
-    COHERENT = 313,
-    VOLATILE = 314,
-    RESTRICT = 315,
-    READONLY = 316,
-    WRITEONLY = 317,
-    DVEC2 = 318,
-    DVEC3 = 319,
-    DVEC4 = 320,
-    DMAT2 = 321,
-    DMAT3 = 322,
-    DMAT4 = 323,
-    F16VEC2 = 324,
-    F16VEC3 = 325,
-    F16VEC4 = 326,
-    F16MAT2 = 327,
-    F16MAT3 = 328,
-    F16MAT4 = 329,
-    I16VEC2 = 330,
-    I16VEC3 = 331,
-    I16VEC4 = 332,
-    U16VEC2 = 333,
-    U16VEC3 = 334,
-    U16VEC4 = 335,
-    NOPERSPECTIVE = 336,
-    FLAT = 337,
-    SMOOTH = 338,
-    LAYOUT = 339,
-    __EXPLICITINTERPAMD = 340,
-    MAT2X2 = 341,
-    MAT2X3 = 342,
-    MAT2X4 = 343,
-    MAT3X2 = 344,
-    MAT3X3 = 345,
-    MAT3X4 = 346,
-    MAT4X2 = 347,
-    MAT4X3 = 348,
-    MAT4X4 = 349,
-    DMAT2X2 = 350,
-    DMAT2X3 = 351,
-    DMAT2X4 = 352,
-    DMAT3X2 = 353,
-    DMAT3X3 = 354,
-    DMAT3X4 = 355,
-    DMAT4X2 = 356,
-    DMAT4X3 = 357,
-    DMAT4X4 = 358,
-    F16MAT2X2 = 359,
-    F16MAT2X3 = 360,
-    F16MAT2X4 = 361,
-    F16MAT3X2 = 362,
-    F16MAT3X3 = 363,
-    F16MAT3X4 = 364,
-    F16MAT4X2 = 365,
-    F16MAT4X3 = 366,
-    F16MAT4X4 = 367,
-    ATOMIC_UINT = 368,
-    SAMPLER1D = 369,
-    SAMPLER2D = 370,
-    SAMPLER3D = 371,
-    SAMPLERCUBE = 372,
-    SAMPLER1DSHADOW = 373,
-    SAMPLER2DSHADOW = 374,
-    SAMPLERCUBESHADOW = 375,
-    SAMPLER1DARRAY = 376,
-    SAMPLER2DARRAY = 377,
-    SAMPLER1DARRAYSHADOW = 378,
-    SAMPLER2DARRAYSHADOW = 379,
-    ISAMPLER1D = 380,
-    ISAMPLER2D = 381,
-    ISAMPLER3D = 382,
-    ISAMPLERCUBE = 383,
-    ISAMPLER1DARRAY = 384,
-    ISAMPLER2DARRAY = 385,
-    USAMPLER1D = 386,
-    USAMPLER2D = 387,
-    USAMPLER3D = 388,
-    USAMPLERCUBE = 389,
-    USAMPLER1DARRAY = 390,
-    USAMPLER2DARRAY = 391,
-    SAMPLER2DRECT = 392,
-    SAMPLER2DRECTSHADOW = 393,
-    ISAMPLER2DRECT = 394,
-    USAMPLER2DRECT = 395,
-    SAMPLERBUFFER = 396,
-    ISAMPLERBUFFER = 397,
-    USAMPLERBUFFER = 398,
-    SAMPLERCUBEARRAY = 399,
-    SAMPLERCUBEARRAYSHADOW = 400,
-    ISAMPLERCUBEARRAY = 401,
-    USAMPLERCUBEARRAY = 402,
-    SAMPLER2DMS = 403,
-    ISAMPLER2DMS = 404,
-    USAMPLER2DMS = 405,
-    SAMPLER2DMSARRAY = 406,
-    ISAMPLER2DMSARRAY = 407,
-    USAMPLER2DMSARRAY = 408,
-    SAMPLEREXTERNALOES = 409,
-    SAMPLER = 410,
-    SAMPLERSHADOW = 411,
-    TEXTURE1D = 412,
-    TEXTURE2D = 413,
-    TEXTURE3D = 414,
-    TEXTURECUBE = 415,
-    TEXTURE1DARRAY = 416,
-    TEXTURE2DARRAY = 417,
-    ITEXTURE1D = 418,
-    ITEXTURE2D = 419,
-    ITEXTURE3D = 420,
-    ITEXTURECUBE = 421,
-    ITEXTURE1DARRAY = 422,
-    ITEXTURE2DARRAY = 423,
-    UTEXTURE1D = 424,
-    UTEXTURE2D = 425,
-    UTEXTURE3D = 426,
-    UTEXTURECUBE = 427,
-    UTEXTURE1DARRAY = 428,
-    UTEXTURE2DARRAY = 429,
-    TEXTURE2DRECT = 430,
-    ITEXTURE2DRECT = 431,
-    UTEXTURE2DRECT = 432,
-    TEXTUREBUFFER = 433,
-    ITEXTUREBUFFER = 434,
-    UTEXTUREBUFFER = 435,
-    TEXTURECUBEARRAY = 436,
-    ITEXTURECUBEARRAY = 437,
-    UTEXTURECUBEARRAY = 438,
-    TEXTURE2DMS = 439,
-    ITEXTURE2DMS = 440,
-    UTEXTURE2DMS = 441,
-    TEXTURE2DMSARRAY = 442,
-    ITEXTURE2DMSARRAY = 443,
-    UTEXTURE2DMSARRAY = 444,
-    SUBPASSINPUT = 445,
-    SUBPASSINPUTMS = 446,
-    ISUBPASSINPUT = 447,
-    ISUBPASSINPUTMS = 448,
-    USUBPASSINPUT = 449,
-    USUBPASSINPUTMS = 450,
-    IMAGE1D = 451,
-    IIMAGE1D = 452,
-    UIMAGE1D = 453,
-    IMAGE2D = 454,
-    IIMAGE2D = 455,
-    UIMAGE2D = 456,
-    IMAGE3D = 457,
-    IIMAGE3D = 458,
-    UIMAGE3D = 459,
-    IMAGE2DRECT = 460,
-    IIMAGE2DRECT = 461,
-    UIMAGE2DRECT = 462,
-    IMAGECUBE = 463,
-    IIMAGECUBE = 464,
-    UIMAGECUBE = 465,
-    IMAGEBUFFER = 466,
-    IIMAGEBUFFER = 467,
-    UIMAGEBUFFER = 468,
-    IMAGE1DARRAY = 469,
-    IIMAGE1DARRAY = 470,
-    UIMAGE1DARRAY = 471,
-    IMAGE2DARRAY = 472,
-    IIMAGE2DARRAY = 473,
-    UIMAGE2DARRAY = 474,
-    IMAGECUBEARRAY = 475,
-    IIMAGECUBEARRAY = 476,
-    UIMAGECUBEARRAY = 477,
-    IMAGE2DMS = 478,
-    IIMAGE2DMS = 479,
-    UIMAGE2DMS = 480,
-    IMAGE2DMSARRAY = 481,
-    IIMAGE2DMSARRAY = 482,
-    UIMAGE2DMSARRAY = 483,
-    STRUCT = 484,
-    VOID = 485,
-    WHILE = 486,
-    IDENTIFIER = 487,
-    TYPE_NAME = 488,
-    FLOATCONSTANT = 489,
-    DOUBLECONSTANT = 490,
-    INTCONSTANT = 491,
-    UINTCONSTANT = 492,
-    INT64CONSTANT = 493,
-    UINT64CONSTANT = 494,
-    INT16CONSTANT = 495,
-    UINT16CONSTANT = 496,
-    BOOLCONSTANT = 497,
-    FLOAT16CONSTANT = 498,
-    LEFT_OP = 499,
-    RIGHT_OP = 500,
-    INC_OP = 501,
-    DEC_OP = 502,
-    LE_OP = 503,
-    GE_OP = 504,
-    EQ_OP = 505,
-    NE_OP = 506,
-    AND_OP = 507,
-    OR_OP = 508,
-    XOR_OP = 509,
-    MUL_ASSIGN = 510,
-    DIV_ASSIGN = 511,
-    ADD_ASSIGN = 512,
-    MOD_ASSIGN = 513,
-    LEFT_ASSIGN = 514,
-    RIGHT_ASSIGN = 515,
-    AND_ASSIGN = 516,
-    XOR_ASSIGN = 517,
-    OR_ASSIGN = 518,
-    SUB_ASSIGN = 519,
-    LEFT_PAREN = 520,
-    RIGHT_PAREN = 521,
-    LEFT_BRACKET = 522,
-    RIGHT_BRACKET = 523,
-    LEFT_BRACE = 524,
-    RIGHT_BRACE = 525,
-    DOT = 526,
-    COMMA = 527,
-    COLON = 528,
-    EQUAL = 529,
-    SEMICOLON = 530,
-    BANG = 531,
-    DASH = 532,
-    TILDE = 533,
-    PLUS = 534,
-    STAR = 535,
-    SLASH = 536,
-    PERCENT = 537,
-    LEFT_ANGLE = 538,
-    RIGHT_ANGLE = 539,
-    VERTICAL_BAR = 540,
-    CARET = 541,
-    AMPERSAND = 542,
-    QUESTION = 543,
-    INVARIANT = 544,
-    PRECISE = 545,
-    HIGH_PRECISION = 546,
-    MEDIUM_PRECISION = 547,
-    LOW_PRECISION = 548,
-    PRECISION = 549,
-    PACKED = 550,
-    RESOURCE = 551,
-    SUPERP = 552
+    FLOAT64_T = 264,
+    CONST = 265,
+    BOOL = 266,
+    INT = 267,
+    UINT = 268,
+    INT64_T = 269,
+    UINT64_T = 270,
+    INT32_T = 271,
+    UINT32_T = 272,
+    INT16_T = 273,
+    UINT16_T = 274,
+    INT8_T = 275,
+    UINT8_T = 276,
+    BREAK = 277,
+    CONTINUE = 278,
+    DO = 279,
+    ELSE = 280,
+    FOR = 281,
+    IF = 282,
+    DISCARD = 283,
+    RETURN = 284,
+    SWITCH = 285,
+    CASE = 286,
+    DEFAULT = 287,
+    SUBROUTINE = 288,
+    BVEC2 = 289,
+    BVEC3 = 290,
+    BVEC4 = 291,
+    IVEC2 = 292,
+    IVEC3 = 293,
+    IVEC4 = 294,
+    UVEC2 = 295,
+    UVEC3 = 296,
+    UVEC4 = 297,
+    I64VEC2 = 298,
+    I64VEC3 = 299,
+    I64VEC4 = 300,
+    U64VEC2 = 301,
+    U64VEC3 = 302,
+    U64VEC4 = 303,
+    I32VEC2 = 304,
+    I32VEC3 = 305,
+    I32VEC4 = 306,
+    U32VEC2 = 307,
+    U32VEC3 = 308,
+    U32VEC4 = 309,
+    I16VEC2 = 310,
+    I16VEC3 = 311,
+    I16VEC4 = 312,
+    U16VEC2 = 313,
+    U16VEC3 = 314,
+    U16VEC4 = 315,
+    I8VEC2 = 316,
+    I8VEC3 = 317,
+    I8VEC4 = 318,
+    U8VEC2 = 319,
+    U8VEC3 = 320,
+    U8VEC4 = 321,
+    VEC2 = 322,
+    VEC3 = 323,
+    VEC4 = 324,
+    MAT2 = 325,
+    MAT3 = 326,
+    MAT4 = 327,
+    CENTROID = 328,
+    IN = 329,
+    OUT = 330,
+    INOUT = 331,
+    UNIFORM = 332,
+    PATCH = 333,
+    SAMPLE = 334,
+    BUFFER = 335,
+    SHARED = 336,
+    NONUNIFORM = 337,
+    COHERENT = 338,
+    VOLATILE = 339,
+    RESTRICT = 340,
+    READONLY = 341,
+    WRITEONLY = 342,
+    DVEC2 = 343,
+    DVEC3 = 344,
+    DVEC4 = 345,
+    DMAT2 = 346,
+    DMAT3 = 347,
+    DMAT4 = 348,
+    F16VEC2 = 349,
+    F16VEC3 = 350,
+    F16VEC4 = 351,
+    F16MAT2 = 352,
+    F16MAT3 = 353,
+    F16MAT4 = 354,
+    F32VEC2 = 355,
+    F32VEC3 = 356,
+    F32VEC4 = 357,
+    F32MAT2 = 358,
+    F32MAT3 = 359,
+    F32MAT4 = 360,
+    F64VEC2 = 361,
+    F64VEC3 = 362,
+    F64VEC4 = 363,
+    F64MAT2 = 364,
+    F64MAT3 = 365,
+    F64MAT4 = 366,
+    NOPERSPECTIVE = 367,
+    FLAT = 368,
+    SMOOTH = 369,
+    LAYOUT = 370,
+    __EXPLICITINTERPAMD = 371,
+    MAT2X2 = 372,
+    MAT2X3 = 373,
+    MAT2X4 = 374,
+    MAT3X2 = 375,
+    MAT3X3 = 376,
+    MAT3X4 = 377,
+    MAT4X2 = 378,
+    MAT4X3 = 379,
+    MAT4X4 = 380,
+    DMAT2X2 = 381,
+    DMAT2X3 = 382,
+    DMAT2X4 = 383,
+    DMAT3X2 = 384,
+    DMAT3X3 = 385,
+    DMAT3X4 = 386,
+    DMAT4X2 = 387,
+    DMAT4X3 = 388,
+    DMAT4X4 = 389,
+    F16MAT2X2 = 390,
+    F16MAT2X3 = 391,
+    F16MAT2X4 = 392,
+    F16MAT3X2 = 393,
+    F16MAT3X3 = 394,
+    F16MAT3X4 = 395,
+    F16MAT4X2 = 396,
+    F16MAT4X3 = 397,
+    F16MAT4X4 = 398,
+    F32MAT2X2 = 399,
+    F32MAT2X3 = 400,
+    F32MAT2X4 = 401,
+    F32MAT3X2 = 402,
+    F32MAT3X3 = 403,
+    F32MAT3X4 = 404,
+    F32MAT4X2 = 405,
+    F32MAT4X3 = 406,
+    F32MAT4X4 = 407,
+    F64MAT2X2 = 408,
+    F64MAT2X3 = 409,
+    F64MAT2X4 = 410,
+    F64MAT3X2 = 411,
+    F64MAT3X3 = 412,
+    F64MAT3X4 = 413,
+    F64MAT4X2 = 414,
+    F64MAT4X3 = 415,
+    F64MAT4X4 = 416,
+    ATOMIC_UINT = 417,
+    SAMPLER1D = 418,
+    SAMPLER2D = 419,
+    SAMPLER3D = 420,
+    SAMPLERCUBE = 421,
+    SAMPLER1DSHADOW = 422,
+    SAMPLER2DSHADOW = 423,
+    SAMPLERCUBESHADOW = 424,
+    SAMPLER1DARRAY = 425,
+    SAMPLER2DARRAY = 426,
+    SAMPLER1DARRAYSHADOW = 427,
+    SAMPLER2DARRAYSHADOW = 428,
+    ISAMPLER1D = 429,
+    ISAMPLER2D = 430,
+    ISAMPLER3D = 431,
+    ISAMPLERCUBE = 432,
+    ISAMPLER1DARRAY = 433,
+    ISAMPLER2DARRAY = 434,
+    USAMPLER1D = 435,
+    USAMPLER2D = 436,
+    USAMPLER3D = 437,
+    USAMPLERCUBE = 438,
+    USAMPLER1DARRAY = 439,
+    USAMPLER2DARRAY = 440,
+    SAMPLER2DRECT = 441,
+    SAMPLER2DRECTSHADOW = 442,
+    ISAMPLER2DRECT = 443,
+    USAMPLER2DRECT = 444,
+    SAMPLERBUFFER = 445,
+    ISAMPLERBUFFER = 446,
+    USAMPLERBUFFER = 447,
+    SAMPLERCUBEARRAY = 448,
+    SAMPLERCUBEARRAYSHADOW = 449,
+    ISAMPLERCUBEARRAY = 450,
+    USAMPLERCUBEARRAY = 451,
+    SAMPLER2DMS = 452,
+    ISAMPLER2DMS = 453,
+    USAMPLER2DMS = 454,
+    SAMPLER2DMSARRAY = 455,
+    ISAMPLER2DMSARRAY = 456,
+    USAMPLER2DMSARRAY = 457,
+    SAMPLEREXTERNALOES = 458,
+    F16SAMPLER1D = 459,
+    F16SAMPLER2D = 460,
+    F16SAMPLER3D = 461,
+    F16SAMPLER2DRECT = 462,
+    F16SAMPLERCUBE = 463,
+    F16SAMPLER1DARRAY = 464,
+    F16SAMPLER2DARRAY = 465,
+    F16SAMPLERCUBEARRAY = 466,
+    F16SAMPLERBUFFER = 467,
+    F16SAMPLER2DMS = 468,
+    F16SAMPLER2DMSARRAY = 469,
+    F16SAMPLER1DSHADOW = 470,
+    F16SAMPLER2DSHADOW = 471,
+    F16SAMPLER1DARRAYSHADOW = 472,
+    F16SAMPLER2DARRAYSHADOW = 473,
+    F16SAMPLER2DRECTSHADOW = 474,
+    F16SAMPLERCUBESHADOW = 475,
+    F16SAMPLERCUBEARRAYSHADOW = 476,
+    SAMPLER = 477,
+    SAMPLERSHADOW = 478,
+    TEXTURE1D = 479,
+    TEXTURE2D = 480,
+    TEXTURE3D = 481,
+    TEXTURECUBE = 482,
+    TEXTURE1DARRAY = 483,
+    TEXTURE2DARRAY = 484,
+    ITEXTURE1D = 485,
+    ITEXTURE2D = 486,
+    ITEXTURE3D = 487,
+    ITEXTURECUBE = 488,
+    ITEXTURE1DARRAY = 489,
+    ITEXTURE2DARRAY = 490,
+    UTEXTURE1D = 491,
+    UTEXTURE2D = 492,
+    UTEXTURE3D = 493,
+    UTEXTURECUBE = 494,
+    UTEXTURE1DARRAY = 495,
+    UTEXTURE2DARRAY = 496,
+    TEXTURE2DRECT = 497,
+    ITEXTURE2DRECT = 498,
+    UTEXTURE2DRECT = 499,
+    TEXTUREBUFFER = 500,
+    ITEXTUREBUFFER = 501,
+    UTEXTUREBUFFER = 502,
+    TEXTURECUBEARRAY = 503,
+    ITEXTURECUBEARRAY = 504,
+    UTEXTURECUBEARRAY = 505,
+    TEXTURE2DMS = 506,
+    ITEXTURE2DMS = 507,
+    UTEXTURE2DMS = 508,
+    TEXTURE2DMSARRAY = 509,
+    ITEXTURE2DMSARRAY = 510,
+    UTEXTURE2DMSARRAY = 511,
+    F16TEXTURE1D = 512,
+    F16TEXTURE2D = 513,
+    F16TEXTURE3D = 514,
+    F16TEXTURE2DRECT = 515,
+    F16TEXTURECUBE = 516,
+    F16TEXTURE1DARRAY = 517,
+    F16TEXTURE2DARRAY = 518,
+    F16TEXTURECUBEARRAY = 519,
+    F16TEXTUREBUFFER = 520,
+    F16TEXTURE2DMS = 521,
+    F16TEXTURE2DMSARRAY = 522,
+    SUBPASSINPUT = 523,
+    SUBPASSINPUTMS = 524,
+    ISUBPASSINPUT = 525,
+    ISUBPASSINPUTMS = 526,
+    USUBPASSINPUT = 527,
+    USUBPASSINPUTMS = 528,
+    F16SUBPASSINPUT = 529,
+    F16SUBPASSINPUTMS = 530,
+    IMAGE1D = 531,
+    IIMAGE1D = 532,
+    UIMAGE1D = 533,
+    IMAGE2D = 534,
+    IIMAGE2D = 535,
+    UIMAGE2D = 536,
+    IMAGE3D = 537,
+    IIMAGE3D = 538,
+    UIMAGE3D = 539,
+    IMAGE2DRECT = 540,
+    IIMAGE2DRECT = 541,
+    UIMAGE2DRECT = 542,
+    IMAGECUBE = 543,
+    IIMAGECUBE = 544,
+    UIMAGECUBE = 545,
+    IMAGEBUFFER = 546,
+    IIMAGEBUFFER = 547,
+    UIMAGEBUFFER = 548,
+    IMAGE1DARRAY = 549,
+    IIMAGE1DARRAY = 550,
+    UIMAGE1DARRAY = 551,
+    IMAGE2DARRAY = 552,
+    IIMAGE2DARRAY = 553,
+    UIMAGE2DARRAY = 554,
+    IMAGECUBEARRAY = 555,
+    IIMAGECUBEARRAY = 556,
+    UIMAGECUBEARRAY = 557,
+    IMAGE2DMS = 558,
+    IIMAGE2DMS = 559,
+    UIMAGE2DMS = 560,
+    IMAGE2DMSARRAY = 561,
+    IIMAGE2DMSARRAY = 562,
+    UIMAGE2DMSARRAY = 563,
+    F16IMAGE1D = 564,
+    F16IMAGE2D = 565,
+    F16IMAGE3D = 566,
+    F16IMAGE2DRECT = 567,
+    F16IMAGECUBE = 568,
+    F16IMAGE1DARRAY = 569,
+    F16IMAGE2DARRAY = 570,
+    F16IMAGECUBEARRAY = 571,
+    F16IMAGEBUFFER = 572,
+    F16IMAGE2DMS = 573,
+    F16IMAGE2DMSARRAY = 574,
+    STRUCT = 575,
+    VOID = 576,
+    WHILE = 577,
+    IDENTIFIER = 578,
+    TYPE_NAME = 579,
+    FLOATCONSTANT = 580,
+    DOUBLECONSTANT = 581,
+    INT16CONSTANT = 582,
+    UINT16CONSTANT = 583,
+    INT32CONSTANT = 584,
+    UINT32CONSTANT = 585,
+    INTCONSTANT = 586,
+    UINTCONSTANT = 587,
+    INT64CONSTANT = 588,
+    UINT64CONSTANT = 589,
+    BOOLCONSTANT = 590,
+    FLOAT16CONSTANT = 591,
+    LEFT_OP = 592,
+    RIGHT_OP = 593,
+    INC_OP = 594,
+    DEC_OP = 595,
+    LE_OP = 596,
+    GE_OP = 597,
+    EQ_OP = 598,
+    NE_OP = 599,
+    AND_OP = 600,
+    OR_OP = 601,
+    XOR_OP = 602,
+    MUL_ASSIGN = 603,
+    DIV_ASSIGN = 604,
+    ADD_ASSIGN = 605,
+    MOD_ASSIGN = 606,
+    LEFT_ASSIGN = 607,
+    RIGHT_ASSIGN = 608,
+    AND_ASSIGN = 609,
+    XOR_ASSIGN = 610,
+    OR_ASSIGN = 611,
+    SUB_ASSIGN = 612,
+    LEFT_PAREN = 613,
+    RIGHT_PAREN = 614,
+    LEFT_BRACKET = 615,
+    RIGHT_BRACKET = 616,
+    LEFT_BRACE = 617,
+    RIGHT_BRACE = 618,
+    DOT = 619,
+    COMMA = 620,
+    COLON = 621,
+    EQUAL = 622,
+    SEMICOLON = 623,
+    BANG = 624,
+    DASH = 625,
+    TILDE = 626,
+    PLUS = 627,
+    STAR = 628,
+    SLASH = 629,
+    PERCENT = 630,
+    LEFT_ANGLE = 631,
+    RIGHT_ANGLE = 632,
+    VERTICAL_BAR = 633,
+    CARET = 634,
+    AMPERSAND = 635,
+    QUESTION = 636,
+    INVARIANT = 637,
+    PRECISE = 638,
+    HIGH_PRECISION = 639,
+    MEDIUM_PRECISION = 640,
+    LOW_PRECISION = 641,
+    PRECISION = 642,
+    PACKED = 643,
+    RESOURCE = 644,
+    SUPERP = 645
   };
 #endif
 
@@ -348,7 +441,7 @@
 typedef union YYSTYPE YYSTYPE;
 union YYSTYPE
 {
-#line 68 "MachineIndependent/glslang.y" /* yacc.c:1909  */
+#line 70 "MachineIndependent/glslang.y" /* yacc.c:1909  */
 
     struct {
         glslang::TSourceLoc loc;
@@ -370,6 +463,7 @@
             TIntermNode* intermNode;
             glslang::TIntermNodePair nodePair;
             glslang::TIntermTyped* intermTypedNode;
+            glslang::TAttributes* attributes;
         };
         union {
             glslang::TPublicType type;
@@ -382,7 +476,7 @@
         };
     } interm;
 
-#line 386 "MachineIndependent/glslang_tab.cpp.h" /* yacc.c:1909  */
+#line 480 "MachineIndependent/glslang_tab.cpp.h" /* yacc.c:1909  */
 };
 # define YYSTYPE_IS_TRIVIAL 1
 # define YYSTYPE_IS_DECLARED 1
diff --git a/glslang/MachineIndependent/intermOut.cpp b/glslang/MachineIndependent/intermOut.cpp
index 7e15392..4d6ad04 100644
--- a/glslang/MachineIndependent/intermOut.cpp
+++ b/glslang/MachineIndependent/intermOut.cpp
@@ -1,6 +1,7 @@
 //
 // Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
 // Copyright (C) 2012-2016 LunarG, Inc.
+// Copyright (C) 2017 ARM Limited.
 //
 // All rights reserved.
 //
@@ -224,48 +225,192 @@
     case EOpPreIncrement:   out.debug << "Pre-Increment";        break;
     case EOpPreDecrement:   out.debug << "Pre-Decrement";        break;
 
+    // * -> bool
+    case EOpConvInt8ToBool:    out.debug << "Convert int8_t to bool";  break;
+    case EOpConvUint8ToBool:   out.debug << "Convert uint8_t to bool"; break;
+    case EOpConvInt16ToBool:   out.debug << "Convert int16_t to bool"; break;
+    case EOpConvUint16ToBool:  out.debug << "Convert uint16_t to bool";break;
     case EOpConvIntToBool:     out.debug << "Convert int to bool";     break;
     case EOpConvUintToBool:    out.debug << "Convert uint to bool";    break;
-    case EOpConvFloatToBool:   out.debug << "Convert float to bool";   break;
-    case EOpConvDoubleToBool:  out.debug << "Convert double to bool";  break;
     case EOpConvInt64ToBool:   out.debug << "Convert int64 to bool";   break;
     case EOpConvUint64ToBool:  out.debug << "Convert uint64 to bool";  break;
-    case EOpConvIntToFloat:    out.debug << "Convert int to float";    break;
-    case EOpConvUintToFloat:   out.debug << "Convert uint to float";   break;
-    case EOpConvDoubleToFloat: out.debug << "Convert double to float"; break;
-    case EOpConvInt64ToFloat:  out.debug << "Convert int64 to float";  break;
-    case EOpConvUint64ToFloat: out.debug << "Convert uint64 to float"; break;
-    case EOpConvBoolToFloat:   out.debug << "Convert bool to float";   break;
-    case EOpConvUintToInt:     out.debug << "Convert uint to int";     break;
-    case EOpConvFloatToInt:    out.debug << "Convert float to int";    break;
-    case EOpConvDoubleToInt:   out.debug << "Convert double to int";   break;
-    case EOpConvBoolToInt:     out.debug << "Convert bool to int";     break;
-    case EOpConvInt64ToInt:    out.debug << "Convert int64 to int";    break;
-    case EOpConvUint64ToInt:   out.debug << "Convert uint64 to int";   break;
-    case EOpConvIntToUint:     out.debug << "Convert int to uint";     break;
-    case EOpConvFloatToUint:   out.debug << "Convert float to uint";   break;
-    case EOpConvDoubleToUint:  out.debug << "Convert double to uint";  break;
+    case EOpConvFloat16ToBool: out.debug << "Convert float16_t to bool";   break;
+    case EOpConvFloatToBool:   out.debug << "Convert float to bool";   break;
+    case EOpConvDoubleToBool:  out.debug << "Convert double to bool";  break;
+
+    // bool -> *
+    case EOpConvBoolToInt8:    out.debug << "Convert bool to int8_t";  break;
+    case EOpConvBoolToUint8:   out.debug << "Convert bool to uint8_t"; break;
+    case EOpConvBoolToInt16:   out.debug << "Convert bool to in16t_t"; break;
+    case EOpConvBoolToUint16:  out.debug << "Convert bool to uint16_t";break;
+    case EOpConvBoolToInt:     out.debug << "Convert bool to int"  ;   break;
     case EOpConvBoolToUint:    out.debug << "Convert bool to uint";    break;
-    case EOpConvInt64ToUint:   out.debug << "Convert int64 to uint";   break;
-    case EOpConvUint64ToUint:  out.debug << "Convert uint64 to uint";  break;
+    case EOpConvBoolToInt64:   out.debug << "Convert bool to int64"; break;
+    case EOpConvBoolToUint64:  out.debug << "Convert bool to uint64";break;
+    case EOpConvBoolToFloat16: out.debug << "Convert bool to float16_t";   break;
+    case EOpConvBoolToFloat:   out.debug << "Convert bool to float";   break;
+    case EOpConvBoolToDouble:  out.debug << "Convert bool to double";   break;
+
+    // int8_t -> (u)int*
+    case EOpConvInt8ToInt16:   out.debug << "Convert int8_t to int16_t";break;
+    case EOpConvInt8ToInt:     out.debug << "Convert int8_t to int";    break;
+    case EOpConvInt8ToInt64:   out.debug << "Convert int8_t to int64";   break;
+    case EOpConvInt8ToUint8:   out.debug << "Convert int8_t to uint8_t";break;
+    case EOpConvInt8ToUint16:  out.debug << "Convert int8_t to uint16_t";break;
+    case EOpConvInt8ToUint:    out.debug << "Convert int8_t to uint";    break;
+    case EOpConvInt8ToUint64:  out.debug << "Convert int8_t to uint64";   break;
+
+    // uint8_t -> (u)int*
+    case EOpConvUint8ToInt8:    out.debug << "Convert uint8_t to int8_t";break;
+    case EOpConvUint8ToInt16:   out.debug << "Convert uint8_t to int16_t";break;
+    case EOpConvUint8ToInt:     out.debug << "Convert uint8_t to int";    break;
+    case EOpConvUint8ToInt64:   out.debug << "Convert uint8_t to int64";   break;
+    case EOpConvUint8ToUint16:  out.debug << "Convert uint8_t to uint16_t";break;
+    case EOpConvUint8ToUint:    out.debug << "Convert uint8_t to uint";    break;
+    case EOpConvUint8ToUint64:  out.debug << "Convert uint8_t to uint64";   break;
+
+    // int8_t -> float*
+    case EOpConvInt8ToFloat16:  out.debug << "Convert int8_t to float16_t";break;
+    case EOpConvInt8ToFloat:    out.debug << "Convert int8_t to float";    break;
+    case EOpConvInt8ToDouble:   out.debug << "Convert int8_t to double";   break;
+
+    // uint8_t -> float*
+    case EOpConvUint8ToFloat16: out.debug << "Convert uint8_t to float16_t";break;
+    case EOpConvUint8ToFloat:   out.debug << "Convert uint8_t to float";    break;
+    case EOpConvUint8ToDouble:  out.debug << "Convert uint8_t to double";   break;
+
+    // int16_t -> (u)int*
+    case EOpConvInt16ToInt8:    out.debug << "Convert int16_t to int8_t";break;
+    case EOpConvInt16ToInt:     out.debug << "Convert int16_t to int";    break;
+    case EOpConvInt16ToInt64:   out.debug << "Convert int16_t to int64";   break;
+    case EOpConvInt16ToUint8:   out.debug << "Convert int16_t to uint8_t";break;
+    case EOpConvInt16ToUint16:  out.debug << "Convert int16_t to uint16_t";break;
+    case EOpConvInt16ToUint:    out.debug << "Convert int16_t to uint";    break;
+    case EOpConvInt16ToUint64:  out.debug << "Convert int16_t to uint64";   break;
+
+    // int16_t -> float*
+    case EOpConvInt16ToFloat16:  out.debug << "Convert int16_t to float16_t";break;
+    case EOpConvInt16ToFloat:    out.debug << "Convert int16_t to float";    break;
+    case EOpConvInt16ToDouble:   out.debug << "Convert int16_t to double";   break;
+
+    // uint16_t -> (u)int*
+    case EOpConvUint16ToInt8:    out.debug << "Convert uint16_t to int8_t";break;
+    case EOpConvUint16ToInt16:   out.debug << "Convert uint16_t to int16_t";break;
+    case EOpConvUint16ToInt:     out.debug << "Convert uint16_t to int";    break;
+    case EOpConvUint16ToInt64:   out.debug << "Convert uint16_t to int64";   break;
+    case EOpConvUint16ToUint8:   out.debug << "Convert uint16_t to uint8_t";break;
+    case EOpConvUint16ToUint:    out.debug << "Convert uint16_t to uint";    break;
+    case EOpConvUint16ToUint64:  out.debug << "Convert uint16_t to uint64";   break;
+
+    // uint16_t -> float*
+    case EOpConvUint16ToFloat16: out.debug << "Convert uint16_t to float16_t";break;
+    case EOpConvUint16ToFloat:   out.debug << "Convert uint16_t to float";    break;
+    case EOpConvUint16ToDouble:  out.debug << "Convert uint16_t to double";   break;
+
+    // int32_t -> (u)int*
+    case EOpConvIntToInt8:    out.debug << "Convert int to int8_t";break;
+    case EOpConvIntToInt16:   out.debug << "Convert int to int16_t";break;
+    case EOpConvIntToInt64:   out.debug << "Convert int to int64";   break;
+    case EOpConvIntToUint8:   out.debug << "Convert int to uint8_t";break;
+    case EOpConvIntToUint16:  out.debug << "Convert int to uint16_t";break;
+    case EOpConvIntToUint:    out.debug << "Convert int to uint";    break;
+    case EOpConvIntToUint64:  out.debug << "Convert int to uint64";   break;
+
+    // int32_t -> float*
+    case EOpConvIntToFloat16:  out.debug << "Convert int to float16_t";break;
+    case EOpConvIntToFloat:    out.debug << "Convert int to float";    break;
     case EOpConvIntToDouble:   out.debug << "Convert int to double";   break;
-    case EOpConvUintToDouble:  out.debug << "Convert uint to double";  break;
-    case EOpConvFloatToDouble: out.debug << "Convert float to double"; break;
-    case EOpConvBoolToDouble:  out.debug << "Convert bool to double";  break;
-    case EOpConvInt64ToDouble: out.debug << "Convert int64 to double"; break;
-    case EOpConvUint64ToDouble: out.debug << "Convert uint64 to double";  break;
-    case EOpConvBoolToInt64:   out.debug << "Convert bool to int64";   break;
-    case EOpConvIntToInt64:    out.debug << "Convert int to int64";    break;
+
+    // uint32_t -> (u)int*
+    case EOpConvUintToInt8:    out.debug << "Convert uint to int8_t";break;
+    case EOpConvUintToInt16:   out.debug << "Convert uint to int16_t";break;
+    case EOpConvUintToInt:     out.debug << "Convert uint to int";break;
     case EOpConvUintToInt64:   out.debug << "Convert uint to int64";   break;
-    case EOpConvFloatToInt64:  out.debug << "Convert float to int64";  break;
-    case EOpConvDoubleToInt64: out.debug << "Convert double to int64"; break;
-    case EOpConvUint64ToInt64: out.debug << "Convert uint64 to int64"; break;
-    case EOpConvBoolToUint64:  out.debug << "Convert bool to uint64";  break;
-    case EOpConvIntToUint64:   out.debug << "Convert int to uint64";   break;
-    case EOpConvUintToUint64:  out.debug << "Convert uint to uint64";  break;
+    case EOpConvUintToUint8:   out.debug << "Convert uint to uint8_t";break;
+    case EOpConvUintToUint16:  out.debug << "Convert uint to uint16_t";break;
+    case EOpConvUintToUint64:  out.debug << "Convert uint to uint64";   break;
+
+    // uint32_t -> float*
+    case EOpConvUintToFloat16: out.debug << "Convert uint to float16_t";break;
+    case EOpConvUintToFloat:   out.debug << "Convert uint to float";    break;
+    case EOpConvUintToDouble:  out.debug << "Convert uint to double";   break;
+
+    // int64 -> (u)int*
+    case EOpConvInt64ToInt8:    out.debug << "Convert int64 to int8_t";  break;
+    case EOpConvInt64ToInt16:   out.debug << "Convert int64 to int16_t"; break;
+    case EOpConvInt64ToInt:     out.debug << "Convert int64 to int";   break;
+    case EOpConvInt64ToUint8:   out.debug << "Convert int64 to uint8_t";break;
+    case EOpConvInt64ToUint16:  out.debug << "Convert int64 to uint16_t";break;
+    case EOpConvInt64ToUint:    out.debug << "Convert int64 to uint";    break;
+    case EOpConvInt64ToUint64:  out.debug << "Convert int64 to uint64";   break;
+
+     // int64 -> float*
+    case EOpConvInt64ToFloat16:  out.debug << "Convert int64 to float16_t";break;
+    case EOpConvInt64ToFloat:    out.debug << "Convert int64 to float";    break;
+    case EOpConvInt64ToDouble:   out.debug << "Convert int64 to double";   break;
+
+    // uint64 -> (u)int*
+    case EOpConvUint64ToInt8:    out.debug << "Convert uint64 to int8_t";break;
+    case EOpConvUint64ToInt16:   out.debug << "Convert uint64 to int16_t";break;
+    case EOpConvUint64ToInt:     out.debug << "Convert uint64 to int";    break;
+    case EOpConvUint64ToInt64:   out.debug << "Convert uint64 to int64";   break;
+    case EOpConvUint64ToUint8:   out.debug << "Convert uint64 to uint8_t";break;
+    case EOpConvUint64ToUint16:  out.debug << "Convert uint64 to uint16";    break;
+    case EOpConvUint64ToUint:    out.debug << "Convert uint64 to uint";   break;
+
+    // uint64 -> float*
+    case EOpConvUint64ToFloat16: out.debug << "Convert uint64 to float16_t";break;
+    case EOpConvUint64ToFloat:   out.debug << "Convert uint64 to float";    break;
+    case EOpConvUint64ToDouble:  out.debug << "Convert uint64 to double";   break;
+
+    // float16_t -> int*
+    case EOpConvFloat16ToInt8:  out.debug << "Convert float16_t to int8_t"; break;
+    case EOpConvFloat16ToInt16: out.debug << "Convert float16_t to int16_t"; break;
+    case EOpConvFloat16ToInt:   out.debug << "Convert float16_t to int"; break;
+    case EOpConvFloat16ToInt64: out.debug << "Convert float16_t to int64"; break;
+
+    // float16_t -> uint*
+    case EOpConvFloat16ToUint8:  out.debug << "Convert float16_t to uint8_t"; break;
+    case EOpConvFloat16ToUint16: out.debug << "Convert float16_t to uint16_t"; break;
+    case EOpConvFloat16ToUint:   out.debug << "Convert float16_t to uint"; break;
+    case EOpConvFloat16ToUint64: out.debug << "Convert float16_t to uint64"; break;
+
+    // float16_t -> float*
+    case EOpConvFloat16ToFloat:  out.debug << "Convert float16_t to float"; break;
+    case EOpConvFloat16ToDouble: out.debug << "Convert float16_t to double"; break;
+
+    // float32 -> float*
+    case EOpConvFloatToFloat16: out.debug << "Convert float to float16_t"; break;
+    case EOpConvFloatToDouble:  out.debug << "Convert float to double"; break;
+
+    // float32_t -> int*
+    case EOpConvFloatToInt8:  out.debug << "Convert float to int8_t"; break;
+    case EOpConvFloatToInt16: out.debug << "Convert float to int16_t"; break;
+    case EOpConvFloatToInt:   out.debug << "Convert float to int"; break;
+    case EOpConvFloatToInt64: out.debug << "Convert float to int64"; break;
+
+    // float32_t -> uint*
+    case EOpConvFloatToUint8:  out.debug << "Convert float to uint8_t"; break;
+    case EOpConvFloatToUint16: out.debug << "Convert float to uint16_t"; break;
+    case EOpConvFloatToUint:   out.debug << "Convert float to uint"; break;
     case EOpConvFloatToUint64: out.debug << "Convert float to uint64"; break;
+
+    // double -> float*
+    case EOpConvDoubleToFloat16: out.debug << "Convert double to float16_t"; break;
+    case EOpConvDoubleToFloat:   out.debug << "Convert double to float"; break;
+
+    // double -> int*
+    case EOpConvDoubleToInt8:  out.debug << "Convert double to int8_t"; break;
+    case EOpConvDoubleToInt16: out.debug << "Convert double to int16_t"; break;
+    case EOpConvDoubleToInt:   out.debug << "Convert double to int"; break;
+    case EOpConvDoubleToInt64: out.debug << "Convert double to int64"; break;
+
+    // float32_t -> uint*
+    case EOpConvDoubleToUint8:  out.debug << "Convert double to uint8_t"; break;
+    case EOpConvDoubleToUint16: out.debug << "Convert double to uint16_t"; break;
+    case EOpConvDoubleToUint:   out.debug << "Convert double to uint"; break;
     case EOpConvDoubleToUint64: out.debug << "Convert double to uint64"; break;
-    case EOpConvInt64ToUint64: out.debug << "Convert uint64 to uint64"; break;
+
 
     case EOpRadians:        out.debug << "radians";              break;
     case EOpDegrees:        out.debug << "degrees";              break;
@@ -309,12 +454,10 @@
     case EOpDoubleBitsToUint64: out.debug << "doubleBitsToUint64"; break;
     case EOpInt64BitsToDouble:  out.debug << "int64BitsToDouble";  break;
     case EOpUint64BitsToDouble: out.debug << "uint64BitsToDouble"; break;
-#ifdef AMD_EXTENSIONS
     case EOpFloat16BitsToInt16:  out.debug << "float16BitsToInt16";  break;
     case EOpFloat16BitsToUint16: out.debug << "float16BitsToUint16"; break;
     case EOpInt16BitsToFloat16:  out.debug << "int16BitsToFloat16";  break;
     case EOpUint16BitsToFloat16: out.debug << "uint16BitsToFloat16"; break;
-#endif
 
     case EOpPackSnorm2x16:  out.debug << "packSnorm2x16";        break;
     case EOpUnpackSnorm2x16:out.debug << "unpackSnorm2x16";      break;
@@ -322,6 +465,12 @@
     case EOpUnpackUnorm2x16:out.debug << "unpackUnorm2x16";      break;
     case EOpPackHalf2x16:   out.debug << "packHalf2x16";         break;
     case EOpUnpackHalf2x16: out.debug << "unpackHalf2x16";       break;
+    case EOpPack16:           out.debug << "pack16";                 break;
+    case EOpPack32:           out.debug << "pack32";                 break;
+    case EOpPack64:           out.debug << "pack64";                 break;
+    case EOpUnpack32:         out.debug << "unpack32";               break;
+    case EOpUnpack16:         out.debug << "unpack16";               break;
+    case EOpUnpack8:          out.debug << "unpack8";               break;
 
     case EOpPackSnorm4x8:     out.debug << "PackSnorm4x8";       break;
     case EOpUnpackSnorm4x8:   out.debug << "UnpackSnorm4x8";     break;
@@ -335,7 +484,6 @@
     case EOpPackUint2x32:     out.debug << "packUint2x32";       break;
     case EOpUnpackUint2x32:   out.debug << "unpackUint2x32";     break;
 
-#ifdef AMD_EXTENSIONS
     case EOpPackInt2x16:      out.debug << "packInt2x16";        break;
     case EOpUnpackInt2x16:    out.debug << "unpackInt2x16";      break;
     case EOpPackUint2x16:     out.debug << "packUint2x16";       break;
@@ -345,10 +493,8 @@
     case EOpUnpackInt4x16:    out.debug << "unpackInt4x16";      break;
     case EOpPackUint4x16:     out.debug << "packUint4x16";       break;
     case EOpUnpackUint4x16:   out.debug << "unpackUint4x16";     break;
-
     case EOpPackFloat2x16:    out.debug << "packFloat2x16";      break;
     case EOpUnpackFloat2x16:  out.debug << "unpackFloat2x16";    break;
-#endif
 
     case EOpLength:         out.debug << "length";               break;
     case EOpNormalize:      out.debug << "normalize";            break;
@@ -402,6 +548,82 @@
     case EOpAllInvocations:         out.debug << "allInvocations";        break;
     case EOpAllInvocationsEqual:    out.debug << "allInvocationsEqual";   break;
 
+    case EOpSubgroupElect:                   out.debug << "subgroupElect";                   break;
+    case EOpSubgroupAll:                     out.debug << "subgroupAll";                     break;
+    case EOpSubgroupAny:                     out.debug << "subgroupAny";                     break;
+    case EOpSubgroupAllEqual:                out.debug << "subgroupAllEqual";                break;
+    case EOpSubgroupBroadcast:               out.debug << "subgroupBroadcast";               break;
+    case EOpSubgroupBroadcastFirst:          out.debug << "subgroupBroadcastFirst";          break;
+    case EOpSubgroupBallot:                  out.debug << "subgroupBallot";                  break;
+    case EOpSubgroupInverseBallot:           out.debug << "subgroupInverseBallot";           break;
+    case EOpSubgroupBallotBitExtract:        out.debug << "subgroupBallotBitExtract";        break;
+    case EOpSubgroupBallotBitCount:          out.debug << "subgroupBallotBitCount";          break;
+    case EOpSubgroupBallotInclusiveBitCount: out.debug << "subgroupBallotInclusiveBitCount"; break;
+    case EOpSubgroupBallotExclusiveBitCount: out.debug << "subgroupBallotExclusiveBitCount"; break;
+    case EOpSubgroupBallotFindLSB:           out.debug << "subgroupBallotFindLSB";           break;
+    case EOpSubgroupBallotFindMSB:           out.debug << "subgroupBallotFindMSB";           break;
+    case EOpSubgroupShuffle:                 out.debug << "subgroupShuffle";                 break;
+    case EOpSubgroupShuffleXor:              out.debug << "subgroupShuffleXor";              break;
+    case EOpSubgroupShuffleUp:               out.debug << "subgroupShuffleUp";               break;
+    case EOpSubgroupShuffleDown:             out.debug << "subgroupShuffleDown";             break;
+    case EOpSubgroupAdd:                     out.debug << "subgroupAdd";                     break;
+    case EOpSubgroupMul:                     out.debug << "subgroupMul";                     break;
+    case EOpSubgroupMin:                     out.debug << "subgroupMin";                     break;
+    case EOpSubgroupMax:                     out.debug << "subgroupMax";                     break;
+    case EOpSubgroupAnd:                     out.debug << "subgroupAnd";                     break;
+    case EOpSubgroupOr:                      out.debug << "subgroupOr";                      break;
+    case EOpSubgroupXor:                     out.debug << "subgroupXor";                     break;
+    case EOpSubgroupInclusiveAdd:            out.debug << "subgroupInclusiveAdd";            break;
+    case EOpSubgroupInclusiveMul:            out.debug << "subgroupInclusiveMul";            break;
+    case EOpSubgroupInclusiveMin:            out.debug << "subgroupInclusiveMin";            break;
+    case EOpSubgroupInclusiveMax:            out.debug << "subgroupInclusiveMax";            break;
+    case EOpSubgroupInclusiveAnd:            out.debug << "subgroupInclusiveAnd";            break;
+    case EOpSubgroupInclusiveOr:             out.debug << "subgroupInclusiveOr";             break;
+    case EOpSubgroupInclusiveXor:            out.debug << "subgroupInclusiveXor";            break;
+    case EOpSubgroupExclusiveAdd:            out.debug << "subgroupExclusiveAdd";            break;
+    case EOpSubgroupExclusiveMul:            out.debug << "subgroupExclusiveMul";            break;
+    case EOpSubgroupExclusiveMin:            out.debug << "subgroupExclusiveMin";            break;
+    case EOpSubgroupExclusiveMax:            out.debug << "subgroupExclusiveMax";            break;
+    case EOpSubgroupExclusiveAnd:            out.debug << "subgroupExclusiveAnd";            break;
+    case EOpSubgroupExclusiveOr:             out.debug << "subgroupExclusiveOr";             break;
+    case EOpSubgroupExclusiveXor:            out.debug << "subgroupExclusiveXor";            break;
+    case EOpSubgroupClusteredAdd:            out.debug << "subgroupClusteredAdd";            break;
+    case EOpSubgroupClusteredMul:            out.debug << "subgroupClusteredMul";            break;
+    case EOpSubgroupClusteredMin:            out.debug << "subgroupClusteredMin";            break;
+    case EOpSubgroupClusteredMax:            out.debug << "subgroupClusteredMax";            break;
+    case EOpSubgroupClusteredAnd:            out.debug << "subgroupClusteredAnd";            break;
+    case EOpSubgroupClusteredOr:             out.debug << "subgroupClusteredOr";             break;
+    case EOpSubgroupClusteredXor:            out.debug << "subgroupClusteredXor";            break;
+    case EOpSubgroupQuadBroadcast:           out.debug << "subgroupQuadBroadcast";           break;
+    case EOpSubgroupQuadSwapHorizontal:      out.debug << "subgroupQuadSwapHorizontal";      break;
+    case EOpSubgroupQuadSwapVertical:        out.debug << "subgroupQuadSwapVertical";        break;
+    case EOpSubgroupQuadSwapDiagonal:        out.debug << "subgroupQuadSwapDiagonal";        break;
+
+#ifdef NV_EXTENSIONS
+    case EOpSubgroupPartition:                          out.debug << "subgroupPartitionNV";                          break;
+    case EOpSubgroupPartitionedAdd:                     out.debug << "subgroupPartitionedAddNV";                     break;
+    case EOpSubgroupPartitionedMul:                     out.debug << "subgroupPartitionedMulNV";                     break;
+    case EOpSubgroupPartitionedMin:                     out.debug << "subgroupPartitionedMinNV";                     break;
+    case EOpSubgroupPartitionedMax:                     out.debug << "subgroupPartitionedMaxNV";                     break;
+    case EOpSubgroupPartitionedAnd:                     out.debug << "subgroupPartitionedAndNV";                     break;
+    case EOpSubgroupPartitionedOr:                      out.debug << "subgroupPartitionedOrNV";                      break;
+    case EOpSubgroupPartitionedXor:                     out.debug << "subgroupPartitionedXorNV";                     break;
+    case EOpSubgroupPartitionedInclusiveAdd:            out.debug << "subgroupPartitionedInclusiveAddNV";            break;
+    case EOpSubgroupPartitionedInclusiveMul:            out.debug << "subgroupPartitionedInclusiveMulNV";            break;
+    case EOpSubgroupPartitionedInclusiveMin:            out.debug << "subgroupPartitionedInclusiveMinNV";            break;
+    case EOpSubgroupPartitionedInclusiveMax:            out.debug << "subgroupPartitionedInclusiveMaxNV";            break;
+    case EOpSubgroupPartitionedInclusiveAnd:            out.debug << "subgroupPartitionedInclusiveAndNV";            break;
+    case EOpSubgroupPartitionedInclusiveOr:             out.debug << "subgroupPartitionedInclusiveOrNV";             break;
+    case EOpSubgroupPartitionedInclusiveXor:            out.debug << "subgroupPartitionedInclusiveXorNV";            break;
+    case EOpSubgroupPartitionedExclusiveAdd:            out.debug << "subgroupPartitionedExclusiveAddNV";            break;
+    case EOpSubgroupPartitionedExclusiveMul:            out.debug << "subgroupPartitionedExclusiveMulNV";            break;
+    case EOpSubgroupPartitionedExclusiveMin:            out.debug << "subgroupPartitionedExclusiveMinNV";            break;
+    case EOpSubgroupPartitionedExclusiveMax:            out.debug << "subgroupPartitionedExclusiveMaxNV";            break;
+    case EOpSubgroupPartitionedExclusiveAnd:            out.debug << "subgroupPartitionedExclusiveAndNV";            break;
+    case EOpSubgroupPartitionedExclusiveOr:             out.debug << "subgroupPartitionedExclusiveOrNV";             break;
+    case EOpSubgroupPartitionedExclusiveXor:            out.debug << "subgroupPartitionedExclusiveXorNV";            break;
+#endif
+
     case EOpClip:                   out.debug << "clip";                  break;
     case EOpIsFinite:               out.debug << "isfinite";              break;
     case EOpLog10:                  out.debug << "log10";                 break;
@@ -434,62 +656,11 @@
 
     case EOpMbcnt:                  out.debug << "mbcnt";                       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;
-    case EOpConvUintToFloat16:      out.debug << "Convert uint to float16";     break;
-    case EOpConvFloatToFloat16:     out.debug << "Convert float to float16";    break;
-    case EOpConvDoubleToFloat16:    out.debug << "Convert double to float16";   break;
-    case EOpConvInt64ToFloat16:     out.debug << "Convert int64 to float16";    break;
-    case EOpConvUint64ToFloat16:    out.debug << "Convert uint64 to float16";   break;
-    case EOpConvFloat16ToBool:      out.debug << "Convert float16 to bool";     break;
-    case EOpConvFloat16ToInt:       out.debug << "Convert float16 to int";      break;
-    case EOpConvFloat16ToUint:      out.debug << "Convert float16 to uint";     break;
-    case EOpConvFloat16ToFloat:     out.debug << "Convert float16 to float";    break;
-    case EOpConvFloat16ToDouble:    out.debug << "Convert float16 to double";   break;
-    case EOpConvFloat16ToInt64:     out.debug << "Convert float16 to int64";    break;
-    case EOpConvFloat16ToUint64:    out.debug << "Convert float16 to uint64";   break;
-
-    case EOpConvBoolToInt16:        out.debug << "Convert bool to int16";       break;
-    case EOpConvIntToInt16:         out.debug << "Convert int to int16";        break;
-    case EOpConvUintToInt16:        out.debug << "Convert uint to int16";       break;
-    case EOpConvFloatToInt16:       out.debug << "Convert float to int16";      break;
-    case EOpConvDoubleToInt16:      out.debug << "Convert double to int16";     break;
-    case EOpConvFloat16ToInt16:     out.debug << "Convert float16 to int16";    break;
-    case EOpConvInt64ToInt16:       out.debug << "Convert int64 to int16";      break;
-    case EOpConvUint64ToInt16:      out.debug << "Convert uint64 to int16";     break;
-    case EOpConvUint16ToInt16:      out.debug << "Convert uint16 to int16";     break;
-    case EOpConvInt16ToBool:        out.debug << "Convert int16 to bool";       break;
-    case EOpConvInt16ToInt:         out.debug << "Convert int16 to int";        break;
-    case EOpConvInt16ToUint:        out.debug << "Convert int16 to uint";       break;
-    case EOpConvInt16ToFloat:       out.debug << "Convert int16 to float";      break;
-    case EOpConvInt16ToDouble:      out.debug << "Convert int16 to double";     break;
-    case EOpConvInt16ToFloat16:     out.debug << "Convert int16 to float16";    break;
-    case EOpConvInt16ToInt64:       out.debug << "Convert int16 to int64";      break;
-    case EOpConvInt16ToUint64:      out.debug << "Convert int16 to uint64";     break;
-
-    case EOpConvBoolToUint16:       out.debug << "Convert bool to uint16";      break;
-    case EOpConvIntToUint16:        out.debug << "Convert int to uint16";       break;
-    case EOpConvUintToUint16:       out.debug << "Convert uint to uint16";      break;
-    case EOpConvFloatToUint16:      out.debug << "Convert float to uint16";     break;
-    case EOpConvDoubleToUint16:     out.debug << "Convert double to uint16";    break;
-    case EOpConvFloat16ToUint16:    out.debug << "Convert float16 to uint16";   break;
-    case EOpConvInt64ToUint16:      out.debug << "Convert int64 to uint16";     break;
-    case EOpConvUint64ToUint16:     out.debug << "Convert uint64 to uint16";    break;
-    case EOpConvInt16ToUint16:      out.debug << "Convert int16 to uint16";     break;
-    case EOpConvUint16ToBool:       out.debug << "Convert uint16 to bool";      break;
-    case EOpConvUint16ToInt:        out.debug << "Convert uint16 to int";       break;
-    case EOpConvUint16ToUint:       out.debug << "Convert uint16 to uint";      break;
-    case EOpConvUint16ToFloat:      out.debug << "Convert uint16 to float";     break;
-    case EOpConvUint16ToDouble:     out.debug << "Convert uint16 to double";    break;
-    case EOpConvUint16ToFloat16:    out.debug << "Convert uint16 to float16";   break;
-    case EOpConvUint16ToInt64:      out.debug << "Convert uint16 to int64";     break;
-    case EOpConvUint16ToUint64:     out.debug << "Convert uint16 to uint64";    break;
+    case EOpCubeFaceIndex:          out.debug << "cubeFaceIndex";               break;
+    case EOpCubeFaceCoord:          out.debug << "cubeFaceCoord";               break;
 #endif
 
     case EOpSubpassLoad:   out.debug << "subpassLoad";   break;
@@ -537,23 +708,30 @@
     case EOpConstructBVec2: out.debug << "Construct bvec2"; break;
     case EOpConstructBVec3: out.debug << "Construct bvec3"; break;
     case EOpConstructBVec4: out.debug << "Construct bvec4"; break;
+    case EOpConstructInt8:   out.debug << "Construct int8_t";   break;
+    case EOpConstructI8Vec2: out.debug << "Construct i8vec2"; break;
+    case EOpConstructI8Vec3: out.debug << "Construct i8vec3"; break;
+    case EOpConstructI8Vec4: out.debug << "Construct i8vec4"; break;
     case EOpConstructInt:   out.debug << "Construct int";   break;
     case EOpConstructIVec2: out.debug << "Construct ivec2"; break;
     case EOpConstructIVec3: out.debug << "Construct ivec3"; break;
     case EOpConstructIVec4: out.debug << "Construct ivec4"; break;
+    case EOpConstructUint8:    out.debug << "Construct uint8_t";    break;
+    case EOpConstructU8Vec2:   out.debug << "Construct u8vec2";   break;
+    case EOpConstructU8Vec3:   out.debug << "Construct u8vec3";   break;
+    case EOpConstructU8Vec4:   out.debug << "Construct u8vec4";   break;
     case EOpConstructUint:    out.debug << "Construct uint";    break;
     case EOpConstructUVec2:   out.debug << "Construct uvec2";   break;
     case EOpConstructUVec3:   out.debug << "Construct uvec3";   break;
     case EOpConstructUVec4:   out.debug << "Construct uvec4";   break;
-    case EOpConstructInt64:   out.debug << "Construct int64_t"; break;
+    case EOpConstructInt64:   out.debug << "Construct int64"; break;
     case EOpConstructI64Vec2: out.debug << "Construct i64vec2"; break;
     case EOpConstructI64Vec3: out.debug << "Construct i64vec3"; break;
     case EOpConstructI64Vec4: out.debug << "Construct i64vec4"; break;
-    case EOpConstructUint64:  out.debug << "Construct uint64_t"; break;
+    case EOpConstructUint64:  out.debug << "Construct uint64"; break;
     case EOpConstructU64Vec2: out.debug << "Construct u64vec2"; break;
     case EOpConstructU64Vec3: out.debug << "Construct u64vec3"; break;
     case EOpConstructU64Vec4: out.debug << "Construct u64vec4"; break;
-#ifdef AMD_EXTENSIONS
     case EOpConstructInt16:   out.debug << "Construct int16_t"; break;
     case EOpConstructI16Vec2: out.debug << "Construct i16vec2"; break;
     case EOpConstructI16Vec3: out.debug << "Construct i16vec3"; break;
@@ -562,7 +740,6 @@
     case EOpConstructU16Vec2: out.debug << "Construct u16vec2"; break;
     case EOpConstructU16Vec3: out.debug << "Construct u16vec3"; break;
     case EOpConstructU16Vec4: out.debug << "Construct u16vec4"; break;
-#endif
     case EOpConstructMat2x2:  out.debug << "Construct mat2";    break;
     case EOpConstructMat2x3:  out.debug << "Construct mat2x3";  break;
     case EOpConstructMat2x4:  out.debug << "Construct mat2x4";  break;
@@ -608,7 +785,6 @@
     case EOpConstructBMat4x2: out.debug << "Construct bmat4x2"; break;
     case EOpConstructBMat4x3: out.debug << "Construct bmat4x3"; break;
     case EOpConstructBMat4x4: out.debug << "Construct bmat4";   break;
-#ifdef AMD_EXTENSIONS
     case EOpConstructFloat16:   out.debug << "Construct float16_t"; break;
     case EOpConstructF16Vec2:   out.debug << "Construct f16vec2";   break;
     case EOpConstructF16Vec3:   out.debug << "Construct f16vec3";   break;
@@ -622,7 +798,6 @@
     case EOpConstructF16Mat4x2: out.debug << "Construct f16mat4x2"; break;
     case EOpConstructF16Mat4x3: out.debug << "Construct f16mat4x3"; break;
     case EOpConstructF16Mat4x4: out.debug << "Construct f16mat4";   break;
-#endif
     case EOpConstructStruct:  out.debug << "Construct structure";  break;
     case EOpConstructTextureSampler: out.debug << "Construct combined texture-sampler"; break;
 
@@ -791,10 +966,67 @@
     case EOpGenMul:                     out.debug << "mul";                   break;
 
     case EOpAllMemoryBarrierWithGroupSync:    out.debug << "AllMemoryBarrierWithGroupSync";    break;
-    case EOpGroupMemoryBarrierWithGroupSync: out.debug << "GroupMemoryBarrierWithGroupSync"; break;
+    case EOpDeviceMemoryBarrier:              out.debug << "DeviceMemoryBarrier";              break;
+    case EOpDeviceMemoryBarrierWithGroupSync: out.debug << "DeviceMemoryBarrierWithGroupSync"; break;
     case EOpWorkgroupMemoryBarrier:           out.debug << "WorkgroupMemoryBarrier";           break;
     case EOpWorkgroupMemoryBarrierWithGroupSync: out.debug << "WorkgroupMemoryBarrierWithGroupSync"; break;
 
+    case EOpSubgroupBarrier:                 out.debug << "subgroupBarrier"; break;
+    case EOpSubgroupMemoryBarrier:           out.debug << "subgroupMemoryBarrier"; break;
+    case EOpSubgroupMemoryBarrierBuffer:     out.debug << "subgroupMemoryBarrierBuffer"; break;
+    case EOpSubgroupMemoryBarrierImage:      out.debug << "subgroupMemoryBarrierImage";   break;
+    case EOpSubgroupMemoryBarrierShared:     out.debug << "subgroupMemoryBarrierShared"; break;
+    case EOpSubgroupElect:                   out.debug << "subgroupElect"; break;
+    case EOpSubgroupAll:                     out.debug << "subgroupAll"; break;
+    case EOpSubgroupAny:                     out.debug << "subgroupAny"; break;
+    case EOpSubgroupAllEqual:                out.debug << "subgroupAllEqual"; break;
+    case EOpSubgroupBroadcast:               out.debug << "subgroupBroadcast"; break;
+    case EOpSubgroupBroadcastFirst:          out.debug << "subgroupBroadcastFirst"; break;
+    case EOpSubgroupBallot:                  out.debug << "subgroupBallot"; break;
+    case EOpSubgroupInverseBallot:           out.debug << "subgroupInverseBallot"; break;
+    case EOpSubgroupBallotBitExtract:        out.debug << "subgroupBallotBitExtract"; break;
+    case EOpSubgroupBallotBitCount:          out.debug << "subgroupBallotBitCount"; break;
+    case EOpSubgroupBallotInclusiveBitCount: out.debug << "subgroupBallotInclusiveBitCount"; break;
+    case EOpSubgroupBallotExclusiveBitCount: out.debug << "subgroupBallotExclusiveBitCount"; break;
+    case EOpSubgroupBallotFindLSB:           out.debug << "subgroupBallotFindLSB"; break;
+    case EOpSubgroupBallotFindMSB:           out.debug << "subgroupBallotFindMSB"; break;
+    case EOpSubgroupShuffle:                 out.debug << "subgroupShuffle"; break;
+    case EOpSubgroupShuffleXor:              out.debug << "subgroupShuffleXor"; break;
+    case EOpSubgroupShuffleUp:               out.debug << "subgroupShuffleUp"; break;
+    case EOpSubgroupShuffleDown:             out.debug << "subgroupShuffleDown"; break;
+    case EOpSubgroupAdd:                     out.debug << "subgroupAdd"; break;
+    case EOpSubgroupMul:                     out.debug << "subgroupMul"; break;
+    case EOpSubgroupMin:                     out.debug << "subgroupMin"; break;
+    case EOpSubgroupMax:                     out.debug << "subgroupMax"; break;
+    case EOpSubgroupAnd:                     out.debug << "subgroupAnd"; break;
+    case EOpSubgroupOr:                      out.debug << "subgroupOr"; break;
+    case EOpSubgroupXor:                     out.debug << "subgroupXor"; break;
+    case EOpSubgroupInclusiveAdd:            out.debug << "subgroupInclusiveAdd"; break;
+    case EOpSubgroupInclusiveMul:            out.debug << "subgroupInclusiveMul"; break;
+    case EOpSubgroupInclusiveMin:            out.debug << "subgroupInclusiveMin"; break;
+    case EOpSubgroupInclusiveMax:            out.debug << "subgroupInclusiveMax"; break;
+    case EOpSubgroupInclusiveAnd:            out.debug << "subgroupInclusiveAnd"; break;
+    case EOpSubgroupInclusiveOr:             out.debug << "subgroupInclusiveOr"; break;
+    case EOpSubgroupInclusiveXor:            out.debug << "subgroupInclusiveXor"; break;
+    case EOpSubgroupExclusiveAdd:            out.debug << "subgroupExclusiveAdd"; break;
+    case EOpSubgroupExclusiveMul:            out.debug << "subgroupExclusiveMul"; break;
+    case EOpSubgroupExclusiveMin:            out.debug << "subgroupExclusiveMin"; break;
+    case EOpSubgroupExclusiveMax:            out.debug << "subgroupExclusiveMax"; break;
+    case EOpSubgroupExclusiveAnd:            out.debug << "subgroupExclusiveAnd"; break;
+    case EOpSubgroupExclusiveOr:             out.debug << "subgroupExclusiveOr"; break;
+    case EOpSubgroupExclusiveXor:            out.debug << "subgroupExclusiveXor"; break;
+    case EOpSubgroupClusteredAdd:            out.debug << "subgroupClusteredAdd"; break;
+    case EOpSubgroupClusteredMul:            out.debug << "subgroupClusteredMul"; break;
+    case EOpSubgroupClusteredMin:            out.debug << "subgroupClusteredMin"; break;
+    case EOpSubgroupClusteredMax:            out.debug << "subgroupClusteredMax"; break;
+    case EOpSubgroupClusteredAnd:            out.debug << "subgroupClusteredAnd"; break;
+    case EOpSubgroupClusteredOr:             out.debug << "subgroupClusteredOr"; break;
+    case EOpSubgroupClusteredXor:            out.debug << "subgroupClusteredXor"; break;
+    case EOpSubgroupQuadBroadcast:           out.debug << "subgroupQuadBroadcast"; break;
+    case EOpSubgroupQuadSwapHorizontal:      out.debug << "subgroupQuadSwapHorizontal"; break;
+    case EOpSubgroupQuadSwapVertical:        out.debug << "subgroupQuadSwapVertical"; break;
+    case EOpSubgroupQuadSwapDiagonal:        out.debug << "subgroupQuadSwapDiagonal"; break;
+
     case EOpSubpassLoad:   out.debug << "subpassLoad";   break;
     case EOpSubpassLoadMS: out.debug << "subpassLoadMS"; break;
 
@@ -816,7 +1048,15 @@
     OutputTreeText(out, node, depth);
 
     out.debug << "Test condition and select";
-    out.debug << " (" << node->getCompleteString() << ")\n";
+    out.debug << " (" << node->getCompleteString() << ")";
+
+    if (node->getShortCircuit() == false)
+        out.debug << ": no shortcircuit";
+    if (node->getFlatten())
+        out.debug << ": Flatten";
+    if (node->getDontFlatten())
+        out.debug << ": DontFlatten";
+    out.debug << "\n";
 
     ++depth;
 
@@ -861,9 +1101,7 @@
             break;
         case EbtFloat:
         case EbtDouble:
-#ifdef AMD_EXTENSIONS
         case EbtFloat16:
-#endif
             {
                 const double value = constUnion[i].getDConst();
                 // Print infinities and NaNs in a portable way.
@@ -883,6 +1121,42 @@
                 }
             }
             break;
+        case EbtInt8:
+            {
+                const int maxSize = 300;
+                char buf[maxSize];
+                snprintf(buf, maxSize, "%d (%s)", constUnion[i].getI8Const(), "const int8_t");
+
+                out.debug << buf << "\n";
+            }
+            break;
+        case EbtUint8:
+            {
+                const int maxSize = 300;
+                char buf[maxSize];
+                snprintf(buf, maxSize, "%u (%s)", constUnion[i].getU8Const(), "const uint8_t");
+
+                out.debug << buf << "\n";
+            }
+            break;
+        case EbtInt16:
+            {
+                const int maxSize = 300;
+                char buf[maxSize];
+                snprintf(buf, maxSize, "%d (%s)", constUnion[i].getI16Const(), "const int16_t");
+
+                out.debug << buf << "\n";
+            }
+            break;
+        case EbtUint16:
+            {
+                const int maxSize = 300;
+                char buf[maxSize];
+                snprintf(buf, maxSize, "%u (%s)", constUnion[i].getU16Const(), "const uint16_t");
+
+                out.debug << buf << "\n";
+            }
+            break;
         case EbtInt:
             {
                 const int maxSize = 300;
@@ -919,26 +1193,6 @@
                 out.debug << buf << "\n";
             }
             break;
-#ifdef AMD_EXTENSIONS
-        case EbtInt16:
-            {
-                const int maxSize = 300;
-                char buf[maxSize];
-                snprintf(buf, maxSize, "%d (%s)", constUnion[i].getIConst(), "const int16_t");
-
-                out.debug << buf << "\n";
-            }
-            break;
-        case EbtUint16:
-            {
-                const int maxSize = 300;
-                char buf[maxSize];
-                snprintf(buf, maxSize, "%u (%s)", constUnion[i].getUConst(), "const uint16_t");
-
-                out.debug << buf << "\n";
-            }
-            break;
-#endif
         default:
             out.info.message(EPrefixInternalError, "Unknown constant", node->getLoc());
             break;
@@ -978,7 +1232,17 @@
     out.debug << "Loop with condition ";
     if (! node->testFirst())
         out.debug << "not ";
-    out.debug << "tested first\n";
+    out.debug << "tested first";
+
+    if (node->getUnroll())
+        out.debug << ": Unroll";
+    if (node->getDontUnroll())
+        out.debug << ": DontUnroll";
+    if (node->getLoopDependency()) {
+        out.debug << ": Dependency ";
+        out.debug << node->getLoopDependency();
+    }
+    out.debug << "\n";
 
     ++depth;
 
@@ -1039,7 +1303,13 @@
     TInfoSink& out = infoSink;
 
     OutputTreeText(out, node, depth);
-    out.debug << "switch\n";
+    out.debug << "switch";
+
+    if (node->getFlatten())
+        out.debug << ": Flatten";
+    if (node->getDontFlatten())
+        out.debug << ": DontFlatten";
+    out.debug << "\n";
 
     OutputTreeText(out, node, depth);
     out.debug << "condition\n";
diff --git a/glslang/MachineIndependent/iomapper.cpp b/glslang/MachineIndependent/iomapper.cpp
index a7d9d91..ad22353 100644
--- a/glslang/MachineIndependent/iomapper.cpp
+++ b/glslang/MachineIndependent/iomapper.cpp
@@ -353,7 +353,9 @@
 {
     TDefaultIoResolverBase(const TIntermediate &intermediate) :
         intermediate(intermediate),
-        nextUniformLocation(0)
+        nextUniformLocation(0),
+        nextInputLocation(0),
+        nextOutputLocation(0)
     { }
 
     int getBaseBinding(TResourceType res, unsigned int set) const {
@@ -429,7 +431,9 @@
 
         // no locations added if already present, a built-in variable, a block, or an opaque
         if (type.getQualifier().hasLocation() || type.isBuiltIn() ||
-            type.getBasicType() == EbtBlock || type.containsOpaque())
+            type.getBasicType() == EbtBlock ||
+            type.getBasicType() == EbtAtomicUint ||
+            (type.containsOpaque() && intermediate.getSpv().openGl == 0))
             return -1;
 
         // no locations on blocks of built-in variables
@@ -440,13 +444,17 @@
                 return -1;
         }
 
-        return nextUniformLocation++;
+        int location = nextUniformLocation;
+
+        nextUniformLocation += TIntermediate::computeTypeUniformLocationSize(type);
+
+        return location;
     }
     bool validateInOut(EShLanguage /*stage*/, const char* /*name*/, const TType& /*type*/, bool /*is_live*/) override
     {
         return true;
     }
-    int resolveInOutLocation(EShLanguage /*stage*/, const char* /*name*/, const TType& type, bool /*is_live*/) override
+    int resolveInOutLocation(EShLanguage stage, const char* /*name*/, const TType& type, bool /*is_live*/) override
     {
         // kick out of not doing this
         if (!doAutoLocationMapping())
@@ -464,14 +472,15 @@
                 return -1;
         }
 
-        // Placeholder.
-        // TODO: It would be nice to flesh this out using 
-        // intermediate->computeTypeLocationSize(type), or functions that call it like
-        // intermediate->addUsedLocation()
-        // These in turn would want the intermediate, which is not available here, but
-        // is available in many places, and a lot of copying from it could be saved if
-        // it were just available.
-        return 0;
+        // point to the right input or output location counter
+        int& nextLocation = type.getQualifier().isPipeInput() ? nextInputLocation : nextOutputLocation;
+
+        // Placeholder. This does not do proper cross-stage lining up, nor
+        // work with mixed location/no-location declarations.
+        int location = nextLocation;
+        nextLocation += TIntermediate::computeTypeLocationSize(type, stage);
+
+        return location;
     }
     int resolveInOutComponent(EShLanguage /*stage*/, const char* /*name*/, const TType& /*type*/, bool /*is_live*/) override
     {
@@ -492,6 +501,8 @@
 protected:
     const TIntermediate &intermediate;
     int nextUniformLocation;
+    int nextInputLocation;
+    int nextOutputLocation;
 
     // Return descriptor set specific base if there is one, and the generic base otherwise.
     int selectBaseBinding(int base, int descriptorSetBase) const {
@@ -593,7 +604,7 @@
 /********************************************************************************
 The following IO resolver maps types in HLSL register space, as follows:
 
-t – for shader resource views (SRV)
+t - for shader resource views (SRV)
    TEXTURE1D
    TEXTURE1DARRAY
    TEXTURE2D
@@ -608,7 +619,7 @@
    BUFFER
    TBUFFER
     
-s – for samplers
+s - for samplers
    SAMPLER
    SAMPLER1D
    SAMPLER2D
@@ -617,7 +628,7 @@
    SAMPLERSTATE
    SAMPLERCOMPARISONSTATE
 
-u – for unordered access views (UAV)
+u - for unordered access views (UAV)
    RWBYTEADDRESSBUFFER
    RWSTRUCTUREDBUFFER
    APPENDSTRUCTUREDBUFFER
@@ -629,7 +640,7 @@
    RWTEXTURE2DARRAY
    RWTEXTURE3D
 
-b – for constant buffer views (CBV)
+b - for constant buffer views (CBV)
    CBUFFER
    CONSTANTBUFFER
  ********************************************************************************/
diff --git a/glslang/MachineIndependent/linkValidate.cpp b/glslang/MachineIndependent/linkValidate.cpp
index 9ca1557..c540ae6 100644
--- a/glslang/MachineIndependent/linkValidate.cpp
+++ b/glslang/MachineIndependent/linkValidate.cpp
@@ -1,5 +1,6 @@
 //
 // Copyright (C) 2013 LunarG, Inc.
+// Copyright (C) 2017 ARM Limited.
 //
 // All rights reserved.
 //
@@ -267,10 +268,13 @@
 // Recursively merge the implicit array sizes through the objects' respective type trees.
 void TIntermediate::mergeImplicitArraySizes(TType& type, const TType& unitType)
 {
-    if (type.isImplicitlySizedArray() && unitType.isArray()) {
-        int newImplicitArraySize = unitType.isImplicitlySizedArray() ? unitType.getImplicitArraySize() : unitType.getOuterArraySize();
-        if (newImplicitArraySize > type.getImplicitArraySize ())
-            type.setImplicitArraySize(newImplicitArraySize);
+    if (type.isUnsizedArray()) {
+        if (unitType.isUnsizedArray()) {
+            type.updateImplicitArraySize(unitType.getImplicitArraySize());
+            if (unitType.isArrayVariablyIndexed())
+                type.setArrayVariablyIndexed();
+        } else if (unitType.isSizedArray())
+            type.changeOuterArraySize(unitType.getOuterArraySize());
     }
 
     // Type mismatches are caught and reported after this, just be careful for now.
@@ -293,8 +297,13 @@
 
     // Types have to match
     if (symbol.getType() != unitSymbol.getType()) {
-        error(infoSink, "Types must match:");
-        writeTypeComparison = true;
+        // but, we make an exception if one is an implicit array and the other is sized
+        if (! (symbol.getType().isArray() && unitSymbol.getType().isArray() &&
+                symbol.getType().sameElementType(unitSymbol.getType()) &&
+                (symbol.getType().isUnsizedArray() || unitSymbol.getType().isUnsizedArray()))) {
+            error(infoSink, "Types must match:");
+            writeTypeComparison = true;
+        }
     }
 
     // Qualifiers have to (almost) match
@@ -510,7 +519,9 @@
         virtual void visitSymbol(TIntermSymbol* symbol)
         {
             // Implicitly size arrays.
-            symbol->getWritableType().adoptImplicitArraySizes();
+            // If an unsized array is left as unsized, it effectively
+            // becomes run-time sized.
+            symbol->getWritableType().adoptImplicitArraySizes(false);
         }
     } finalLinkTraverser;
 
@@ -765,7 +776,7 @@
 
     int size;
     if (qualifier.isUniformOrBuffer()) {
-        if (type.isExplicitlySizedArray())
+        if (type.isSizedArray())
             size = type.getCumulativeArraySize();
         else
             size = 1;
@@ -773,9 +784,9 @@
         // Strip off the outer array dimension for those having an extra one.
         if (type.isArray() && qualifier.isArrayedIo(language)) {
             TType elementType(type, 0);
-            size = computeTypeLocationSize(elementType);
+            size = computeTypeLocationSize(elementType, language);
         } else
-            size = computeTypeLocationSize(type);
+            size = computeTypeLocationSize(type, language);
     }
 
     // Locations, and components within locations.
@@ -836,8 +847,8 @@
         // combine location and component ranges
         TIoRange range(locationRange, componentRange, type.getBasicType(), qualifier.hasIndex() ? qualifier.layoutIndex : 0);
 
-        // check for collisions, except for vertex inputs on desktop
-        if (! (profile != EEsProfile && language == EShLangVertex && qualifier.isPipeInput()))
+        // check for collisions, except for vertex inputs on desktop targeting OpenGL
+        if (! (profile != EEsProfile && language == EShLangVertex && qualifier.isPipeInput()) || spvVersion.vulkan > 0)
             collision = checkLocationRange(set, range, type, typeCollision);
 
         if (collision < 0)
@@ -907,18 +918,18 @@
 
 // Recursively figure out how many locations are used up by an input or output type.
 // Return the size of type, as measured by "locations".
-int TIntermediate::computeTypeLocationSize(const TType& type) const
+int TIntermediate::computeTypeLocationSize(const TType& type, EShLanguage stage)
 {
     // "If the declared input is an array of size n and each element takes m locations, it will be assigned m * n
     // consecutive locations..."
     if (type.isArray()) {
         // TODO: perf: this can be flattened by using getCumulativeArraySize(), and a deref that discards all arrayness
+        // TODO: are there valid cases of having an unsized array with a location?  If so, running this code too early.
         TType elementType(type, 0);
-        if (type.isImplicitlySizedArray()) {
-            // TODO: are there valid cases of having an implicitly-sized array with a location?  If so, running this code too early.
-            return computeTypeLocationSize(elementType);
-        } else
-            return type.getOuterArraySize() * computeTypeLocationSize(elementType);
+        if (type.isSizedArray())
+            return type.getOuterArraySize() * computeTypeLocationSize(elementType, stage);
+        else
+            return computeTypeLocationSize(elementType, stage);
     }
 
     // "The locations consumed by block and structure members are determined by applying the rules above
@@ -927,7 +938,7 @@
         int size = 0;
         for (int member = 0; member < (int)type.getStruct()->size(); ++member) {
             TType memberType(type, member);
-            size += computeTypeLocationSize(memberType);
+            size += computeTypeLocationSize(memberType, stage);
         }
         return size;
     }
@@ -941,7 +952,7 @@
     if (type.isScalar())
         return 1;
     if (type.isVector()) {
-        if (language == EShLangVertex && type.getQualifier().isPipeInput())
+        if (stage == EShLangVertex && type.getQualifier().isPipeInput())
             return 1;
         if (type.getBasicType() == EbtDouble && type.getVectorSize() > 2)
             return 2;
@@ -954,13 +965,44 @@
     // for an n-element array of m-component vectors..."
     if (type.isMatrix()) {
         TType columnType(type, 0);
-        return type.getMatrixCols() * computeTypeLocationSize(columnType);
+        return type.getMatrixCols() * computeTypeLocationSize(columnType, stage);
     }
 
     assert(0);
     return 1;
 }
 
+// Same as computeTypeLocationSize but for uniforms
+int TIntermediate::computeTypeUniformLocationSize(const TType& type)
+{
+    // "Individual elements of a uniform array are assigned
+    // consecutive locations with the first element taking location
+    // location."
+    if (type.isArray()) {
+        // TODO: perf: this can be flattened by using getCumulativeArraySize(), and a deref that discards all arrayness
+        TType elementType(type, 0);
+        if (type.isSizedArray()) {
+            return type.getOuterArraySize() * computeTypeUniformLocationSize(elementType);
+        } else {
+            // TODO: are there valid cases of having an implicitly-sized array with a location?  If so, running this code too early.
+            return computeTypeUniformLocationSize(elementType);
+        }
+    }
+
+    // "Each subsequent inner-most member or element gets incremental
+    // locations for the entire structure or array."
+    if (type.isStruct()) {
+        int size = 0;
+        for (int member = 0; member < (int)type.getStruct()->size(); ++member) {
+            TType memberType(type, member);
+            size += computeTypeUniformLocationSize(memberType);
+        }
+        return size;
+    }
+
+    return 1;
+}
+
 // Accumulate xfb buffer ranges and check for collisions as the accumulation is done.
 //
 // Returns < 0 if no collision, >= 0 if collision and the value returned is a colliding value.
@@ -1005,7 +1047,7 @@
 
     if (type.isArray()) {
         // TODO: perf: this can be flattened by using getCumulativeArraySize(), and a deref that discards all arrayness
-        assert(type.isExplicitlySizedArray());
+        assert(type.isSizedArray());
         TType elementType(type, 0);
         return type.getOuterArraySize() * computeTypeXfbSize(elementType, containsDouble);
     }
@@ -1064,11 +1106,11 @@
     case EbtInt64:
     case EbtUint64:
     case EbtDouble:  size = 8; return 8;
-#ifdef AMD_EXTENSIONS
-    case EbtInt16:
-    case EbtUint16:
     case EbtFloat16: size = 2; return 2;
-#endif
+    case EbtInt8:
+    case EbtUint8:   size = 1; return 1;
+    case EbtInt16:
+    case EbtUint16:  size = 2; return 2;
     default:         size = 4; return 4;
     }
 }
@@ -1197,6 +1239,8 @@
     if (type.isVector()) {
         int scalarAlign = getBaseAlignmentScalar(type, size);
         switch (type.getVectorSize()) {
+        case 1: // HLSL has this, GLSL does not
+            return scalarAlign;
         case 2:
             size *= 2;
             return 2 * scalarAlign;
diff --git a/glslang/MachineIndependent/localintermediate.h b/glslang/MachineIndependent/localintermediate.h
index 8495395..17e0765 100644
--- a/glslang/MachineIndependent/localintermediate.h
+++ b/glslang/MachineIndependent/localintermediate.h
@@ -1,6 +1,7 @@
 //
 // Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
 // Copyright (C) 2016 LunarG, Inc.
+// Copyright (C) 2017 ARM Limited.
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without
@@ -78,7 +79,7 @@
         assert(i < MaxSwizzleSelectors);
         return components[i];
     }
-    
+
 private:
     int size_;
     selectorType components[MaxSwizzleSelectors];
@@ -209,7 +210,7 @@
 class TIntermediate {
 public:
     explicit TIntermediate(EShLanguage l, int v = 0, EProfile p = ENoProfile) :
-        implicitThisName("@this"),
+        implicitThisName("@this"), implicitCounterName("@count"),
         language(l), source(EShSourceNone), profile(p), version(v), treeRoot(0),
         numEntryPoints(0), numErrors(0), numPushConstants(0), recursive(false),
         invocations(TQualifier::layoutNotSet), vertices(TQualifier::layoutNotSet),
@@ -217,6 +218,7 @@
         pixelCenterInteger(false), originUpperLeft(false),
         vertexSpacing(EvsNone), vertexOrder(EvoNone), pointMode(false), earlyFragmentTests(false),
         postDepthCoverage(false), depthLayout(EldNone), depthReplacing(false),
+        hlslFunctionality1(false),
         blendEquations(0), xfbMode(false), multiStream(false),
 #ifdef NV_EXTENSIONS
         layoutOverrideCoverage(false),
@@ -224,6 +226,7 @@
 #endif
         autoMapBindings(false),
         autoMapLocations(false),
+        invertY(false),
         flattenUniformArrays(false),
         useUnknownFormat(false),
         hlslOffsets(false),
@@ -271,7 +274,7 @@
 
     unsigned int getShiftBinding(TResourceType res) const { return shiftBinding[res]; }
 
-    void setShiftBindingForSet(TResourceType res, unsigned int set, unsigned int shift)
+    void setShiftBindingForSet(TResourceType res, unsigned int shift, unsigned int set)
     {
         if (shift == 0) // ignore if there's no shift: it's a no-op.
             return;
@@ -281,8 +284,8 @@
         const char* name = getResourceName(res);
         if (name != nullptr) {
             processes.addProcess(name);
-            processes.addArgument(set);
             processes.addArgument(shift);
+            processes.addArgument(set);
         }
     }
 
@@ -317,6 +320,14 @@
             processes.addProcess("auto-map-locations");
     }
     bool getAutoMapLocations() const { return autoMapLocations; }
+    void setInvertY(bool invert)
+    {
+        invertY = invert;
+        if (invertY)
+            processes.addProcess("invert-y");
+    }
+    bool getInvertY() const { return invertY; }
+
     void setFlattenUniformArrays(bool flatten)
     {
         flattenUniformArrays = flatten;
@@ -352,6 +363,13 @@
     }
     bool usingHlslIoMapping() { return hlslIoMapping; }
 
+    template<class T> T addCounterBufferName(const T& name) const { return name + implicitCounterName; }
+    bool hasCounterBufferName(const TString& name) const {
+        size_t len = strlen(implicitCounterName);
+        return name.size() > len &&
+               name.compare(name.size() - len, len, implicitCounterName) == 0;
+    }
+
     void setTextureSamplerTransformMode(EShTextureSamplerTransformMode mode) { textureSamplerTransformMode = mode; }
 
     void setVersion(int v) { version = v; }
@@ -369,7 +387,7 @@
             processes.addProcess("client opengl100");
 
         // target-environment processes
-        if (spvVersion.vulkan == 100)
+        if (spvVersion.vulkan > 0)
             processes.addProcess("target-env vulkan1.0");
         else if (spvVersion.vulkan > 0)
             processes.addProcess("target-env vulkanUnknown");
@@ -394,6 +412,7 @@
     TIntermSymbol* addSymbol(const TType&, const TSourceLoc&);
     TIntermSymbol* addSymbol(const TIntermSymbol&);
     TIntermTyped* addConversion(TOperator, const TType&, TIntermTyped*) const;
+    std::tuple<TIntermTyped*, TIntermTyped*> addConversion(TOperator op, TIntermTyped* node0, TIntermTyped* node1) const;
     TIntermTyped* addUniShapeConversion(TOperator, const TType&, TIntermTyped*);
     void addBiShapeConversion(TOperator, TIntermTyped*& lhsNode, TIntermTyped*& rhsNode);
     TIntermTyped* addShapeConversion(const TType&, TIntermTyped*);
@@ -403,6 +422,11 @@
     TIntermTyped* addUnaryMath(TOperator, TIntermTyped* child, TSourceLoc);
     TIntermTyped* addBuiltInFunctionCall(const TSourceLoc& line, TOperator, bool unary, TIntermNode*, const TType& returnType);
     bool canImplicitlyPromote(TBasicType from, TBasicType to, TOperator op = EOpNull) const;
+    bool isIntegralPromotion(TBasicType from, TBasicType to) const;
+    bool isFPPromotion(TBasicType from, TBasicType to) const;
+    bool isIntegralConversion(TBasicType from, TBasicType to) const;
+    bool isFPConversion(TBasicType from, TBasicType to) const;
+    bool isFPIntegralConversion(TBasicType from, TBasicType to) const;
     TOperator mapTypeToConstructorOp(const TType&) const;
     TIntermAggregate* growAggregate(TIntermNode* left, TIntermNode* right);
     TIntermAggregate* growAggregate(TIntermNode* left, TIntermNode* right, const TSourceLoc&);
@@ -411,27 +435,27 @@
     TIntermAggregate* makeAggregate(const TSourceLoc&);
     TIntermTyped* setAggregateOperator(TIntermNode*, TOperator, const TType& type, TSourceLoc);
     bool areAllChildConst(TIntermAggregate* aggrNode);
-    TIntermTyped* addSelection(TIntermTyped* cond, TIntermNodePair code, const TSourceLoc&, TSelectionControl = ESelectionControlNone);
-    TIntermTyped* addSelection(TIntermTyped* cond, TIntermTyped* trueBlock, TIntermTyped* falseBlock, const TSourceLoc&, TSelectionControl = ESelectionControlNone);
+    TIntermSelection* addSelection(TIntermTyped* cond, TIntermNodePair code, const TSourceLoc&);
+    TIntermTyped* addSelection(TIntermTyped* cond, TIntermTyped* trueBlock, TIntermTyped* falseBlock, const TSourceLoc&);
     TIntermTyped* addComma(TIntermTyped* left, TIntermTyped* right, const TSourceLoc&);
     TIntermTyped* addMethod(TIntermTyped*, const TType&, const TString*, const TSourceLoc&);
     TIntermConstantUnion* addConstantUnion(const TConstUnionArray&, const TType&, const TSourceLoc&, bool literal = false) const;
+    TIntermConstantUnion* addConstantUnion(signed char, const TSourceLoc&, bool literal = false) const;
+    TIntermConstantUnion* addConstantUnion(unsigned char, const TSourceLoc&, bool literal = false) const;
+    TIntermConstantUnion* addConstantUnion(signed short, const TSourceLoc&, bool literal = false) const;
+    TIntermConstantUnion* addConstantUnion(unsigned short, const TSourceLoc&, bool literal = false) const;
     TIntermConstantUnion* addConstantUnion(int, const TSourceLoc&, bool literal = false) const;
     TIntermConstantUnion* addConstantUnion(unsigned int, const TSourceLoc&, bool literal = false) const;
     TIntermConstantUnion* addConstantUnion(long long, const TSourceLoc&, bool literal = false) const;
     TIntermConstantUnion* addConstantUnion(unsigned long long, const TSourceLoc&, bool literal = false) const;
-#ifdef AMD_EXTENSIONS
-    TIntermConstantUnion* addConstantUnion(short, const TSourceLoc&, bool literal = false) const;
-    TIntermConstantUnion* addConstantUnion(unsigned short, const TSourceLoc&, bool literal = false) const;
-    
-#endif
     TIntermConstantUnion* addConstantUnion(bool, const TSourceLoc&, bool literal = false) const;
     TIntermConstantUnion* addConstantUnion(double, TBasicType, const TSourceLoc&, bool literal = false) const;
     TIntermConstantUnion* addConstantUnion(const TString*, const TSourceLoc&, bool literal = false) const;
     TIntermTyped* promoteConstantUnion(TBasicType, TIntermConstantUnion*) const;
     bool parseConstTree(TIntermNode*, TConstUnionArray, TOperator, const TType&, bool singleConstantParam = false);
-    TIntermLoop* addLoop(TIntermNode*, TIntermTyped*, TIntermTyped*, bool testFirst, const TSourceLoc&, TLoopControl = ELoopControlNone);
-    TIntermAggregate* addForLoop(TIntermNode*, TIntermNode*, TIntermTyped*, TIntermTyped*, bool testFirst, const TSourceLoc&, TLoopControl = ELoopControlNone);
+    TIntermLoop* addLoop(TIntermNode*, TIntermTyped*, TIntermTyped*, bool testFirst, const TSourceLoc&);
+    TIntermAggregate* addForLoop(TIntermNode*, TIntermNode*, TIntermTyped*, TIntermTyped*, bool testFirst,
+        const TSourceLoc&, TIntermLoop*&);
     TIntermBranch* addBranch(TOperator, const TSourceLoc&);
     TIntermBranch* addBranch(TOperator, TIntermTyped*, const TSourceLoc&);
     template<typename selectorType> TIntermTyped* addSwizzle(TSwizzleSelectors<selectorType>&, const TSourceLoc&);
@@ -443,9 +467,6 @@
     TIntermUnary* addUnaryNode(TOperator op, TIntermTyped* child, TSourceLoc) const;
     TIntermUnary* addUnaryNode(TOperator op, TIntermTyped* child, TSourceLoc, const TType&) const;
 
-    // Add conversion from node's type to given basic type.
-    TIntermTyped* convertToBasicType(TOperator op, TBasicType basicType, TIntermTyped* node) const;
-
     // Constant folding (in Constant.cpp)
     TIntermTyped* fold(TIntermAggregate* aggrNode);
     TIntermTyped* foldConstructor(TIntermAggregate* aggrNode);
@@ -551,6 +572,9 @@
     void setDepthReplacing() { depthReplacing = true; }
     bool isDepthReplacing() const { return depthReplacing; }
 
+    void setHlslFunctionality1() { hlslFunctionality1 = true; }
+    bool getHlslFunctionality1() const { return hlslFunctionality1; }
+
     void addBlendEquation(TBlendEquationShift b) { blendEquations |= (1 << b); }
     unsigned int getBlendEquations() const { return blendEquations; }
 
@@ -565,7 +589,8 @@
     int checkLocationRange(int set, const TIoRange& range, const TType&, bool& typeCollision);
     int addUsedOffsets(int binding, int offset, int numOffsets);
     bool addUsedConstantId(int id);
-    int computeTypeLocationSize(const TType&) const;
+    static int computeTypeLocationSize(const TType&, EShLanguage);
+    static int computeTypeUniformLocationSize(const TType&);
 
     bool setXfbBufferStride(int buffer, unsigned stride)
     {
@@ -574,6 +599,7 @@
         xfbBuffers[buffer].stride = stride;
         return true;
     }
+    unsigned getXfbStride(int buffer) const { return xfbBuffers[buffer].stride; }
     int addXfbBufferOffset(const TType&);
     unsigned int computeTypeXfbSize(const TType&, bool& containsDouble) const;
     static int getBaseAlignmentScalar(const TType&, int& size);
@@ -593,7 +619,7 @@
         return semanticNameSet.insert(name).first->c_str();
     }
 
-    void setSourceFile(const char* file) { sourceFile = file; }
+    void setSourceFile(const char* file) { if (file != nullptr) sourceFile = file; }
     const std::string& getSourceFile() const { return sourceFile; }
     void addSourceText(const char* text) { sourceText = sourceText + text; }
     const std::string& getSourceText() const { return sourceText; }
@@ -609,6 +635,7 @@
     bool needsLegalization() const { return needToLegalize; }
 
     const char* const implicitThisName;
+    const char* const implicitCounterName;
 
 protected:
     TIntermSymbol* addSymbol(int Id, const TString&, const TType&, const TConstUnionArray&, TIntermTyped* subtree, const TSourceLoc&);
@@ -624,6 +651,7 @@
     TIntermSequence& findLinkerObjects() const;
     bool userOutputUsed() const;
     bool isSpecializationOperation(const TIntermOperator&) const;
+    bool isNonuniformPropagating(TOperator) const;
     bool promoteUnary(TIntermUnary&);
     bool promoteBinary(TIntermBinary&);
     void addSymbolLinkageNode(TIntermAggregate*& linkage, TSymbolTable&, const TString&);
@@ -632,6 +660,10 @@
     void pushSelector(TIntermSequence&, const TMatrixSelector&, const TSourceLoc&);
     bool specConstantPropagates(const TIntermTyped&, const TIntermTyped&);
     void performTextureUpgradeAndSamplerRemovalTransformation(TIntermNode* root);
+    bool isConversionAllowed(TOperator op, TIntermTyped* node) const;
+    TIntermUnary* createConversion(TBasicType convertTo, TIntermTyped* node) const;
+    std::tuple<TBasicType, TBasicType> getConversionDestinatonType(TBasicType type0, TBasicType type1, TOperator op) const;
+    bool extensionRequested(const char *extension) const {return requestedExtensions.find(extension) != requestedExtensions.end();}
     static const char* getResourceName(TResourceType);
 
     const EShLanguage language;  // stage, known at construction time
@@ -639,8 +671,8 @@
     std::string entryPointName;
     std::string entryPointMangledName;
 
-    EProfile profile;
-    int version;
+    EProfile profile;                           // source profile
+    int version;                                // source version
     SpvVersion spvVersion;
     TIntermNode* treeRoot;
     std::set<std::string> requestedExtensions;  // cumulation of all enabled or required extensions; not connected to what subset of the shader used them
@@ -664,6 +696,7 @@
     bool postDepthCoverage;
     TLayoutDepth depthLayout;
     bool depthReplacing;
+    bool hlslFunctionality1;
     int blendEquations;        // an 'or'ing of masks of shifts of TBlendEquationShift
     bool xfbMode;
     bool multiStream;
@@ -682,6 +715,7 @@
     std::vector<std::string> resourceSetBinding;
     bool autoMapBindings;
     bool autoMapLocations;
+    bool invertY;
     bool flattenUniformArrays;
     bool useUnknownFormat;
     bool hlslOffsets;
diff --git a/glslang/MachineIndependent/parseVersions.h b/glslang/MachineIndependent/parseVersions.h
index 5f26b43..b2aaa39 100755
--- a/glslang/MachineIndependent/parseVersions.h
+++ b/glslang/MachineIndependent/parseVersions.h
@@ -1,5 +1,6 @@
 //
 // Copyright (C) 2016 Google, Inc.
+// Copyright (C) 2017 ARM Limited.
 //
 // All rights reserved.
 //
@@ -77,11 +78,16 @@
     virtual void updateExtensionBehavior(int line, const char* const extension, const char* behavior);
     virtual void fullIntegerCheck(const TSourceLoc&, const char* op);
     virtual void doubleCheck(const TSourceLoc&, const char* op);
-#ifdef AMD_EXTENSIONS
-    virtual void int16Check(const TSourceLoc& loc, const char* op, bool builtIn = false);
     virtual void float16Check(const TSourceLoc&, const char* op, bool builtIn = false);
+#ifdef AMD_EXTENSIONS
+    virtual void float16OpaqueCheck(const TSourceLoc&, const char* op, bool builtIn = false);
 #endif
     virtual void int64Check(const TSourceLoc&, const char* op, bool builtIn = false);
+    virtual void explicitInt8Check(const TSourceLoc&, const char* op, bool builtIn = false);
+    virtual void explicitInt16Check(const TSourceLoc&, const char* op, bool builtIn = false);
+    virtual void explicitInt32Check(const TSourceLoc&, const char* op, bool builtIn = false);
+    virtual void explicitFloat32Check(const TSourceLoc&, const char* op, bool builtIn = false);
+    virtual void explicitFloat64Check(const TSourceLoc&, const char* op, bool builtIn = false);
     virtual void spvRemoved(const TSourceLoc&, const char* op);
     virtual void vulkanRemoved(const TSourceLoc&, const char* op);
     virtual void requireVulkan(const TSourceLoc&, const char* op);
@@ -113,6 +119,7 @@
     bool relaxedErrors()    const { return (messages & EShMsgRelaxedErrors) != 0; }
     bool suppressWarnings() const { return (messages & EShMsgSuppressWarnings) != 0; }
     bool isReadingHLSL()    const { return (messages & EShMsgReadHlsl) == EShMsgReadHlsl; }
+    bool hlslEnable16BitTypes() const { return (messages & EShMsgHlslEnable16BitTypes) != 0; }
 
     TInfoSink& infoSink;
 
diff --git a/glslang/MachineIndependent/preprocessor/Pp.cpp b/glslang/MachineIndependent/preprocessor/Pp.cpp
index aeb42a0..8048fa5 100644
--- a/glslang/MachineIndependent/preprocessor/Pp.cpp
+++ b/glslang/MachineIndependent/preprocessor/Pp.cpp
@@ -731,12 +731,10 @@
     TSourceLoc loc = ppToken->loc;
 
     while (token != '\n' && token != EndOfInput) {
-        if (token == PpAtomConstInt   || token == PpAtomConstUint   ||
+        if (token == PpAtomConstInt16 || token == PpAtomConstUint16 ||
+            token == PpAtomConstInt   || token == PpAtomConstUint   ||
             token == PpAtomConstInt64 || token == PpAtomConstUint64 ||
-#ifdef AMD_EXTENSIONS
-            token == PpAtomConstInt16 || token == PpAtomConstUint16 ||
             token == PpAtomConstFloat16 ||
-#endif
             token == PpAtomConstFloat || token == PpAtomConstDouble) {
                 message.append(ppToken->name);
         } else if (token == PpAtomIdentifier || token == PpAtomConstString) {
@@ -775,9 +773,7 @@
 #endif
         case PpAtomConstFloat:
         case PpAtomConstDouble:
-#ifdef AMD_EXTENSIONS
         case PpAtomConstFloat16:
-#endif
             tokens.push_back(ppToken->name);
             break;
         default:
@@ -1157,7 +1153,6 @@
     }
 
     MacroSymbol* macro = macroAtom == 0 ? nullptr : lookupMacroDef(macroAtom);
-    int token;
     int depth = 0;
 
     // no recursive expansions
@@ -1179,13 +1174,12 @@
     TSourceLoc loc = ppToken->loc;  // in case we go to the next line before discovering the error
     in->mac = macro;
     if (macro->args.size() > 0 || macro->emptyArgs) {
-        token = scanToken(ppToken);
+        int token = scanToken(ppToken);
         if (newLineOkay) {
             while (token == '\n')
                 token = scanToken(ppToken);
         }
         if (token != '(') {
-            parseContext.ppError(loc, "expected '(' following", "macro expansion", atomStrings.getString(macroAtom));
             UngetToken(token, ppToken);
             delete in;
             return 0;
diff --git a/glslang/MachineIndependent/preprocessor/PpScanner.cpp b/glslang/MachineIndependent/preprocessor/PpScanner.cpp
index b58bbee..f4eaf57 100644
--- a/glslang/MachineIndependent/preprocessor/PpScanner.cpp
+++ b/glslang/MachineIndependent/preprocessor/PpScanner.cpp
@@ -1,6 +1,7 @@
 //
 // Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
 // Copyright (C) 2013 LunarG, Inc.
+// Copyright (C) 2017 ARM Limited.
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without
@@ -103,17 +104,6 @@
 {
     bool HasDecimalOrExponent = false;
     int isDouble = 0;
-    bool generateFloat16 = false;
-    bool acceptFloat16 = parseContext.intermediate.getSource() == EShSourceHlsl;
-    bool isFloat16 = false;
-    bool requireHF = false;
-#ifdef AMD_EXTENSIONS
-    if (parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_half_float)) {
-        acceptFloat16 = true;
-        generateFloat16 = true;
-        requireHF = true;
-    }
-#endif
 
     const auto saveName = [&](int ch) {
         if (len <= MaxTokenLength)
@@ -128,7 +118,7 @@
         ch = getChar();
 
         // 1.#INF or -1.#INF
-        if (parseContext.intermediate.getSource() == EShSourceHlsl && ch == '#') {
+        if (ch == '#' && (ifdepth > 0 || parseContext.intermediate.getSource() == EShSourceHlsl)) {
             if ((len <  2) ||
                 (len == 2 && ppToken->name[0] != '1') ||
                 (len == 3 && ppToken->name[1] != '1' && !(ppToken->name[0] == '-' || ppToken->name[0] == '+')) ||
@@ -182,28 +172,13 @@
     }
 
     // Suffix:
-
+    bool isFloat16 = false;
     if (ch == 'l' || ch == 'L') {
-        parseContext.doubleCheck(ppToken->loc, "double floating-point suffix");
-        if (! HasDecimalOrExponent)
+        if (ifdepth == 0 && parseContext.intermediate.getSource() == EShSourceGlsl)
+            parseContext.doubleCheck(ppToken->loc, "double floating-point suffix");
+        if (ifdepth == 0 && !HasDecimalOrExponent)
             parseContext.ppError(ppToken->loc, "float literal needs a decimal point or exponent", "", "");
-        int ch2 = getChar();
-        if (ch2 != 'f' && ch2 != 'F') {
-            ungetChar();
-            ungetChar();
-        } else {
-            saveName(ch);
-            saveName(ch2);
-            isDouble = 1;
-        }
-    } else if (acceptFloat16 && (ch == 'h' || ch == 'H')) {
-#ifdef AMD_EXTENSIONS
-        if (generateFloat16)
-            parseContext.float16Check(ppToken->loc, "half floating-point suffix");
-#endif
-        if (!HasDecimalOrExponent)
-            parseContext.ppError(ppToken->loc, "float literal needs a decimal point or exponent", "", "");
-        if (requireHF) {
+        if (parseContext.intermediate.getSource() == EShSourceGlsl) {
             int ch2 = getChar();
             if (ch2 != 'f' && ch2 != 'F') {
                 ungetChar();
@@ -211,17 +186,37 @@
             } else {
                 saveName(ch);
                 saveName(ch2);
-                isFloat16 = generateFloat16;
+                isDouble = 1;
             }
-        } else {
+        } else if (parseContext.intermediate.getSource() == EShSourceHlsl) {
             saveName(ch);
-            isFloat16 = generateFloat16;
+            isDouble = 1;
+        }
+    } else if (ch == 'h' || ch == 'H') {
+        if (ifdepth == 0 && parseContext.intermediate.getSource() == EShSourceGlsl)
+            parseContext.float16Check(ppToken->loc, "half floating-point suffix");
+        if (ifdepth == 0 && !HasDecimalOrExponent)
+            parseContext.ppError(ppToken->loc, "float literal needs a decimal point or exponent", "", "");
+        if (parseContext.intermediate.getSource() == EShSourceGlsl) {
+            int ch2 = getChar();
+            if (ch2 != 'f' && ch2 != 'F') {
+                ungetChar();
+                ungetChar();
+            } else {
+                saveName(ch);
+                saveName(ch2);
+                isFloat16 = true;
+            }
+        } else if (parseContext.intermediate.getSource() == EShSourceHlsl) {
+            saveName(ch);
+            isFloat16 = true;
         }
     } else if (ch == 'f' || ch == 'F') {
-        parseContext.profileRequires(ppToken->loc,  EEsProfile, 300, nullptr, "floating-point suffix");
-        if (! parseContext.relaxedErrors())
+        if (ifdepth == 0)
+            parseContext.profileRequires(ppToken->loc,  EEsProfile, 300, nullptr, "floating-point suffix");
+        if (ifdepth == 0 && !parseContext.relaxedErrors())
             parseContext.profileRequires(ppToken->loc, ~EEsProfile, 120, nullptr, "floating-point suffix");
-        if (! HasDecimalOrExponent)
+        if (ifdepth == 0 && !HasDecimalOrExponent)
             parseContext.ppError(ppToken->loc, "float literal needs a decimal point or exponent", "", "");
         saveName(ch);
     } else
@@ -333,19 +328,23 @@
     int ch = 0;
     int ii = 0;
     unsigned long long ival = 0;
-    bool enableInt64 = pp->parseContext.version >= 450 && pp->parseContext.extensionTurnedOn(E_GL_ARB_gpu_shader_int64);
-#ifdef AMD_EXTENSIONS
-    bool enableInt16 = pp->parseContext.version >= 450 && pp->parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_int16);
-#endif
-    bool acceptHalf = pp->parseContext.intermediate.getSource() == EShSourceHlsl;
-#ifdef AMD_EXTENSIONS
-    if (pp->parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_half_float))
-        acceptHalf = true;
-#endif
-
     const auto floatingPointChar = [&](int ch) { return ch == '.' || ch == 'e' || ch == 'E' ||
                                                                      ch == 'f' || ch == 'F' ||
-                                                     (acceptHalf && (ch == 'h' || ch == 'H')); };
+                                                                     ch == 'h' || ch == 'H'; };
+
+    static const char* const Int64_Extensions[] = {
+        E_GL_ARB_gpu_shader_int64,
+        E_GL_KHX_shader_explicit_arithmetic_types,
+        E_GL_KHX_shader_explicit_arithmetic_types_int64 };
+    static const int Num_Int64_Extensions = sizeof(Int64_Extensions) / sizeof(Int64_Extensions[0]);
+
+    static const char* const Int16_Extensions[] = {
+#ifdef AMD_EXTENSIONS
+        E_GL_AMD_gpu_shader_int16,
+#endif
+        E_GL_KHX_shader_explicit_arithmetic_types,
+        E_GL_KHX_shader_explicit_arithmetic_types_int16 };
+    static const int Num_Int16_Extensions = sizeof(Int16_Extensions) / sizeof(Int16_Extensions[0]);
 
     ppToken->ival = 0;
     ppToken->i64val = 0;
@@ -409,9 +408,7 @@
 
                 bool isUnsigned = false;
                 bool isInt64 = false;
-#ifdef AMD_EXTENSIONS
                 bool isInt16 = false;
-#endif
                 ppToken->name[len++] = (char)ch;
                 ch = getch();
                 if ((ch >= '0' && ch <= '9') ||
@@ -420,7 +417,7 @@
 
                     ival = 0;
                     do {
-                        if (len < MaxTokenLength && (ival <= 0x0fffffffu || (enableInt64 && ival <= 0x0fffffffffffffffull))) {
+                        if (len < MaxTokenLength && ival <= 0x0fffffffffffffffull) {
                             ppToken->name[len++] = (char)ch;
                             if (ch >= '0' && ch <= '9') {
                                 ii = ch - '0';
@@ -453,33 +450,31 @@
                         ppToken->name[len++] = (char)ch;
                     isUnsigned = true;
 
-                    if (enableInt64) {
-                        int nextCh = getch();
-                        if ((ch == 'u' && nextCh == 'l') || (ch == 'U' && nextCh == 'L')) {
-                            if (len < MaxTokenLength)
-                                ppToken->name[len++] = (char)nextCh;
-                            isInt64 = true;
-                        } else
-                            ungetch();
-                    }
+                    int nextCh = getch();
+                    if (nextCh == 'l' || nextCh == 'L') {
+                        if (len < MaxTokenLength)
+                            ppToken->name[len++] = (char)nextCh;
+                        isInt64 = true;
+                    } else
+                        ungetch();
 
 #ifdef AMD_EXTENSIONS
-                    if (enableInt16) {
-                        int nextCh = getch();
-                        if ((ch == 'u' && nextCh == 's') || (ch == 'U' && nextCh == 'S')) {
-                            if (len < MaxTokenLength)
-                                ppToken->name[len++] = (char)nextCh;
-                            isInt16 = true;
-                        } else
-                            ungetch();
-                    }
+                    nextCh = getch();
+                    if ((nextCh == 's' || nextCh == 'S') &&
+                            pp->parseContext.intermediate.getSource() == EShSourceGlsl) {
+                        if (len < MaxTokenLength)
+                            ppToken->name[len++] = (char)nextCh;
+                        isInt16 = true;
+                    } else
+                        ungetch();
 #endif
-                } else if (enableInt64 && (ch == 'l' || ch == 'L')) {
+                } else if (ch == 'l' || ch == 'L') {
                     if (len < MaxTokenLength)
                         ppToken->name[len++] = (char)ch;
                     isInt64 = true;
 #ifdef AMD_EXTENSIONS
-                } else if (enableInt16 && (ch == 's' || ch == 'S')) {
+                } else if ((ch == 's' || ch == 'S') &&
+                           pp->parseContext.intermediate.getSource() == EShSourceGlsl) {
                     if (len < MaxTokenLength)
                         ppToken->name[len++] = (char)ch;
                     isInt16 = true;
@@ -488,15 +483,29 @@
                     ungetch();
                 ppToken->name[len] = '\0';
 
-                if (isInt64) {
+                if (isInt64 && pp->parseContext.intermediate.getSource() == EShSourceGlsl) {
+                    if (pp->ifdepth == 0) {
+                        pp->parseContext.requireProfile(ppToken->loc, ~EEsProfile,
+                                                        "64-bit hexadecimal literal");
+                        pp->parseContext.profileRequires(ppToken->loc, ~EEsProfile, 0,
+                            Num_Int64_Extensions, Int64_Extensions, "64-bit hexadecimal literal");
+                    }
                     ppToken->i64val = ival;
                     return isUnsigned ? PpAtomConstUint64 : PpAtomConstInt64;
-#ifdef AMD_EXTENSIONS
                 } else if (isInt16) {
+                    if (pp->ifdepth == 0) {
+                        if (pp->parseContext.intermediate.getSource() == EShSourceGlsl) {
+                            pp->parseContext.requireProfile(ppToken->loc, ~EEsProfile,
+                                                             "16-bit hexadecimal literal");
+                            pp->parseContext.profileRequires(ppToken->loc, ~EEsProfile, 0,
+                                Num_Int16_Extensions, Int16_Extensions, "16-bit hexadecimal literal");
+                        }
+                    }
                     ppToken->ival = (int)ival;
                     return isUnsigned ? PpAtomConstUint16 : PpAtomConstInt16;
-#endif
                 } else {
+                    if (ival > 0xffffffffu && !AlreadyComplained)
+                        pp->parseContext.ppError(ppToken->loc, "hexadecimal literal too big", "", "");
                     ppToken->ival = (int)ival;
                     return isUnsigned ? PpAtomConstUint : PpAtomConstInt;
                 }
@@ -505,9 +514,7 @@
 
                 bool isUnsigned = false;
                 bool isInt64 = false;
-#ifdef AMD_EXTENSIONS
                 bool isInt16 = false;
-#endif
                 bool octalOverflow = false;
                 bool nonOctal = false;
                 ival = 0;
@@ -520,7 +527,7 @@
                         pp->parseContext.ppError(ppToken->loc, "numeric literal too long", "", "");
                         AlreadyComplained = 1;
                     }
-                    if (ival <= 0x1fffffffu || (enableInt64 && ival <= 0x1fffffffffffffffull)) {
+                    if (ival <= 0x1fffffffffffffffull) {
                         ii = ch - '0';
                         ival = (ival << 3) | ii;
                     } else
@@ -553,33 +560,31 @@
                         ppToken->name[len++] = (char)ch;
                     isUnsigned = true;
 
-                    if (enableInt64) {
-                        int nextCh = getch();
-                        if ((ch == 'u' && nextCh == 'l') || (ch == 'U' && nextCh == 'L')) {
-                            if (len < MaxTokenLength)
-                                ppToken->name[len++] = (char)nextCh;
-                            isInt64 = true;
-                        } else
-                            ungetch();
-                    }
+                    int nextCh = getch();
+                    if (nextCh == 'l' || nextCh == 'L') {
+                        if (len < MaxTokenLength)
+                            ppToken->name[len++] = (char)nextCh;
+                        isInt64 = true;
+                    } else
+                        ungetch();
 
 #ifdef AMD_EXTENSIONS
-                    if (enableInt16) {
-                        int nextCh = getch();
-                        if ((ch == 'u' && nextCh == 's') || (ch == 'U' && nextCh == 'S')) {
-                            if (len < MaxTokenLength)
-                                ppToken->name[len++] = (char)nextCh;
-                            isInt16 = true;
-                        } else
-                            ungetch();
-                    }
+                    nextCh = getch();
+                    if ((nextCh == 's' || nextCh == 'S') && 
+                                pp->parseContext.intermediate.getSource() == EShSourceGlsl) {
+                        if (len < MaxTokenLength)
+                            ppToken->name[len++] = (char)nextCh;
+                        isInt16 = true;
+                    } else
+                        ungetch();
 #endif
-                } else if (enableInt64 && (ch == 'l' || ch == 'L')) {
+                } else if (ch == 'l' || ch == 'L') {
                     if (len < MaxTokenLength)
                         ppToken->name[len++] = (char)ch;
                     isInt64 = true;
 #ifdef AMD_EXTENSIONS
-                } else if (enableInt16 && (ch == 's' || ch == 'S')) {
+                } else if ((ch == 's' || ch == 'S') && 
+                                pp->parseContext.intermediate.getSource() == EShSourceGlsl) {
                     if (len < MaxTokenLength)
                         ppToken->name[len++] = (char)ch;
                     isInt16 = true;
@@ -588,17 +593,32 @@
                     ungetch();
                 ppToken->name[len] = '\0';
 
+                if (!isInt64 && ival > 0xffffffffu)
+                    octalOverflow = true;
+
                 if (octalOverflow)
                     pp->parseContext.ppError(ppToken->loc, "octal literal too big", "", "");
 
-                if (isInt64) {
+                if (isInt64 && pp->parseContext.intermediate.getSource() == EShSourceGlsl) {
+                    if (pp->ifdepth == 0) {
+                        pp->parseContext.requireProfile(ppToken->loc, ~EEsProfile,
+                                                        "64-bit octal literal");
+                        pp->parseContext.profileRequires(ppToken->loc, ~EEsProfile, 0,
+                            Num_Int64_Extensions, Int64_Extensions, "64-bit octal literal");
+                    }
                     ppToken->i64val = ival;
                     return isUnsigned ? PpAtomConstUint64 : PpAtomConstInt64;
-#ifdef AMD_EXTENSIONS
                 } else if (isInt16) {
+                    if (pp->ifdepth == 0) {
+                        if (pp->parseContext.intermediate.getSource() == EShSourceGlsl) {
+                            pp->parseContext.requireProfile(ppToken->loc, ~EEsProfile,
+                                                            "16-bit octal literal");
+                            pp->parseContext.profileRequires(ppToken->loc, ~EEsProfile, 0,
+                                Num_Int16_Extensions, Int16_Extensions, "16-bit octal literal");
+                        }
+                    }
                     ppToken->ival = (int)ival;
                     return isUnsigned ? PpAtomConstUint16 : PpAtomConstInt16;
-#endif
                 } else {
                     ppToken->ival = (int)ival;
                     return isUnsigned ? PpAtomConstUint : PpAtomConstInt;
@@ -625,41 +645,37 @@
                 int numericLen = len;
                 bool isUnsigned = false;
                 bool isInt64 = false;
-#ifdef AMD_EXTENSIONS
                 bool isInt16 = false;
-#endif
                 if (ch == 'u' || ch == 'U') {
                     if (len < MaxTokenLength)
                         ppToken->name[len++] = (char)ch;
                     isUnsigned = true;
 
-                    if (enableInt64) {
-                        int nextCh = getch();
-                        if ((ch == 'u' && nextCh == 'l') || (ch == 'U' && nextCh == 'L')) {
-                            if (len < MaxTokenLength)
-                                ppToken->name[len++] = (char)nextCh;
-                            isInt64 = true;
-                        } else
-                            ungetch();
-                    }
+                    int nextCh = getch();
+                    if (nextCh == 'l' || nextCh == 'L') {
+                        if (len < MaxTokenLength)
+                            ppToken->name[len++] = (char)nextCh;
+                        isInt64 = true;
+                    } else
+                        ungetch();
 
 #ifdef AMD_EXTENSIONS
-                    if (enableInt16) {
-                        int nextCh = getch();
-                        if ((ch == 'u' && nextCh == 's') || (ch == 'U' && nextCh == 'S')) {
-                            if (len < MaxTokenLength)
-                                ppToken->name[len++] = (char)nextCh;
-                            isInt16 = true;
-                        } else
-                            ungetch();
-                    }
+                    nextCh = getch();
+                    if ((nextCh == 's' || nextCh == 'S') &&
+                                pp->parseContext.intermediate.getSource() == EShSourceGlsl) {
+                        if (len < MaxTokenLength)
+                            ppToken->name[len++] = (char)nextCh;
+                        isInt16 = true;
+                    } else
+                        ungetch();
 #endif
-                } else if (enableInt64 && (ch == 'l' || ch == 'L')) {
+                } else if (ch == 'l' || ch == 'L') {
                     if (len < MaxTokenLength)
                         ppToken->name[len++] = (char)ch;
                     isInt64 = true;
 #ifdef AMD_EXTENSIONS
-                } else if (enableInt16 && (ch == 's' || ch == 'S')) {
+                } else if ((ch == 's' || ch == 'S') &&
+                                pp->parseContext.intermediate.getSource() == EShSourceGlsl) {
                     if (len < MaxTokenLength)
                         ppToken->name[len++] = (char)ch;
                     isInt16 = true;
@@ -673,19 +689,15 @@
                 const unsigned remainderMaxInt = 0xFFFFFFFFu - 10 * oneTenthMaxInt;
                 const unsigned long long oneTenthMaxInt64  = 0xFFFFFFFFFFFFFFFFull / 10;
                 const unsigned long long remainderMaxInt64 = 0xFFFFFFFFFFFFFFFFull - 10 * oneTenthMaxInt64;
-#ifdef AMD_EXTENSIONS
                 const unsigned short oneTenthMaxInt16  = 0xFFFFu / 10;
                 const unsigned short remainderMaxInt16 = 0xFFFFu - 10 * oneTenthMaxInt16;
-#endif
                 for (int i = 0; i < numericLen; i++) {
                     ch = ppToken->name[i] - '0';
                     bool overflow = false;
                     if (isInt64)
                         overflow = (ival > oneTenthMaxInt64 || (ival == oneTenthMaxInt64 && (unsigned long long)ch > remainderMaxInt64));
-#ifdef AMD_EXTENSIONS
                     else if (isInt16)
                         overflow = (ival > oneTenthMaxInt16 || (ival == oneTenthMaxInt16 && (unsigned short)ch > remainderMaxInt16));
-#endif
                     else
                         overflow = (ival > oneTenthMaxInt || (ival == oneTenthMaxInt && (unsigned)ch > remainderMaxInt));
                     if (overflow) {
@@ -696,14 +708,24 @@
                         ival = ival * 10 + ch;
                 }
 
-                if (isInt64) {
+                if (isInt64 && pp->parseContext.intermediate.getSource() == EShSourceGlsl) {
+                    if (pp->ifdepth == 0) {
+                        pp->parseContext.requireProfile(ppToken->loc, ~EEsProfile,
+                                                        "64-bit literal");
+                        pp->parseContext.profileRequires(ppToken->loc, ~EEsProfile, 0,
+                            Num_Int64_Extensions, Int64_Extensions, "64-bit literal");
+                    }
                     ppToken->i64val = ival;
                     return isUnsigned ? PpAtomConstUint64 : PpAtomConstInt64;
-#ifdef AMD_EXTENSIONS
                 } else if (isInt16) {
+                    if (pp->ifdepth == 0 && pp->parseContext.intermediate.getSource() == EShSourceGlsl) {
+                        pp->parseContext.requireProfile(ppToken->loc, ~EEsProfile,
+                                                        "16-bit  literal");
+                        pp->parseContext.profileRequires(ppToken->loc, ~EEsProfile, 0,
+                            Num_Int16_Extensions, Int16_Extensions, "16-bit literal");
+                    }
                     ppToken->ival = (int)ival;
                     return isUnsigned ? PpAtomConstUint16 : PpAtomConstInt16;
-#endif
                 } else {
                     ppToken->ival = (int)ival;
                     return isUnsigned ? PpAtomConstUint : PpAtomConstInt;
@@ -953,19 +975,15 @@
         case PpAtomConstFloat:
         case PpAtomConstInt64:
         case PpAtomConstUint64:
-#ifdef AMD_EXTENSIONS
         case PpAtomConstInt16:
         case PpAtomConstUint16:
-#endif
         case PpAtomConstDouble:
-#ifdef AMD_EXTENSIONS
         case PpAtomConstFloat16:
-#endif
             if (ppToken.name[0] == '\0')
                 continue;
             break;
         case PpAtomConstString:
-            if (parseContext.intermediate.getSource() != EShSourceHlsl) {
+            if (ifdepth == 0 && parseContext.intermediate.getSource() != EShSourceHlsl) {
                 // HLSL allows string literals.
                 parseContext.ppError(ppToken.loc, "string literals not supported", "\"\"", "");
                 continue;
diff --git a/glslang/MachineIndependent/preprocessor/PpTokens.cpp b/glslang/MachineIndependent/preprocessor/PpTokens.cpp
index bc145e2..31e0d1f 100644
--- a/glslang/MachineIndependent/preprocessor/PpTokens.cpp
+++ b/glslang/MachineIndependent/preprocessor/PpTokens.cpp
@@ -147,9 +147,7 @@
 #endif
     case PpAtomConstFloat:
     case PpAtomConstDouble:
-#ifdef AMD_EXTENSIONS
     case PpAtomConstFloat16:
-#endif
         str = ppToken->name;
         while (*str) {
             putSubtoken(*str);
@@ -187,9 +185,7 @@
     case PpAtomIdentifier:
     case PpAtomConstFloat:
     case PpAtomConstDouble:
-#ifdef AMD_EXTENSIONS
     case PpAtomConstFloat16:
-#endif
     case PpAtomConstInt:
     case PpAtomConstUint:
     case PpAtomConstInt64:
@@ -219,9 +215,7 @@
             break;
         case PpAtomConstFloat:
         case PpAtomConstDouble:
-#ifdef AMD_EXTENSIONS
         case PpAtomConstFloat16:
-#endif
             ppToken->dval = atof(ppToken->name);
             break;
         case PpAtomConstInt:
diff --git a/glslang/MachineIndependent/preprocessor/PpTokens.h b/glslang/MachineIndependent/preprocessor/PpTokens.h
index d56df57..7b0f815 100644
--- a/glslang/MachineIndependent/preprocessor/PpTokens.h
+++ b/glslang/MachineIndependent/preprocessor/PpTokens.h
@@ -127,10 +127,8 @@
     PpAtomConstUint,
     PpAtomConstInt64,
     PpAtomConstUint64,
-#ifdef AMD_EXTENSIONS
     PpAtomConstInt16,
     PpAtomConstUint16,
-#endif
     PpAtomConstFloat,
     PpAtomConstDouble,
     PpAtomConstFloat16,
diff --git a/glslang/MachineIndependent/reflection.cpp b/glslang/MachineIndependent/reflection.cpp
index 50fb602..4818b10 100644
--- a/glslang/MachineIndependent/reflection.cpp
+++ b/glslang/MachineIndependent/reflection.cpp
@@ -415,6 +415,36 @@
                 case EsdBuffer:
                     return GL_SAMPLER_BUFFER;
                 }
+#ifdef AMD_EXTENSIONS
+            case EbtFloat16:
+                switch ((int)sampler.dim) {
+                case Esd1D:
+                    switch ((int)sampler.shadow) {
+                    case false: return sampler.arrayed ? GL_FLOAT16_SAMPLER_1D_ARRAY_AMD : GL_FLOAT16_SAMPLER_1D_AMD;
+                    case true:  return sampler.arrayed ? GL_FLOAT16_SAMPLER_1D_ARRAY_SHADOW_AMD : GL_FLOAT16_SAMPLER_1D_SHADOW_AMD;
+                    }
+                case Esd2D:
+                    switch ((int)sampler.ms) {
+                    case false:
+                        switch ((int)sampler.shadow) {
+                        case false: return sampler.arrayed ? GL_FLOAT16_SAMPLER_2D_ARRAY_AMD : GL_FLOAT16_SAMPLER_2D_AMD;
+                        case true:  return sampler.arrayed ? GL_FLOAT16_SAMPLER_2D_ARRAY_SHADOW_AMD : GL_FLOAT16_SAMPLER_2D_SHADOW_AMD;
+                        }
+                    case true:      return sampler.arrayed ? GL_FLOAT16_SAMPLER_2D_MULTISAMPLE_ARRAY_AMD : GL_FLOAT16_SAMPLER_2D_MULTISAMPLE_AMD;
+                    }
+                case Esd3D:
+                    return GL_FLOAT16_SAMPLER_3D_AMD;
+                case EsdCube:
+                    switch ((int)sampler.shadow) {
+                    case false: return sampler.arrayed ? GL_FLOAT16_SAMPLER_CUBE_MAP_ARRAY_AMD : GL_FLOAT16_SAMPLER_CUBE_AMD;
+                    case true:  return sampler.arrayed ? GL_FLOAT16_SAMPLER_CUBE_MAP_ARRAY_SHADOW_AMD : GL_FLOAT16_SAMPLER_CUBE_SHADOW_AMD;
+                    }
+                case EsdRect:
+                    return sampler.shadow ? GL_FLOAT16_SAMPLER_2D_RECT_SHADOW_AMD : GL_FLOAT16_SAMPLER_2D_RECT_AMD;
+                case EsdBuffer:
+                    return GL_FLOAT16_SAMPLER_BUFFER_AMD;
+                }
+#endif
             case EbtInt:
                 switch ((int)sampler.dim) {
                 case Esd1D:
@@ -477,6 +507,26 @@
                 case EsdBuffer:
                     return GL_IMAGE_BUFFER;
                 }
+#ifdef AMD_EXTENSIONS
+            case EbtFloat16:
+                switch ((int)sampler.dim) {
+                case Esd1D:
+                    return sampler.arrayed ? GL_FLOAT16_IMAGE_1D_ARRAY_AMD : GL_FLOAT16_IMAGE_1D_AMD;
+                case Esd2D:
+                    switch ((int)sampler.ms) {
+                    case false:     return sampler.arrayed ? GL_FLOAT16_IMAGE_2D_ARRAY_AMD : GL_FLOAT16_IMAGE_2D_AMD;
+                    case true:      return sampler.arrayed ? GL_FLOAT16_IMAGE_2D_MULTISAMPLE_ARRAY_AMD : GL_FLOAT16_IMAGE_2D_MULTISAMPLE_AMD;
+                    }
+                case Esd3D:
+                    return GL_FLOAT16_IMAGE_3D_AMD;
+                case EsdCube:
+                    return sampler.arrayed ? GL_FLOAT16_IMAGE_CUBE_MAP_ARRAY_AMD : GL_FLOAT16_IMAGE_CUBE_AMD;
+                case EsdRect:
+                    return GL_FLOAT16_IMAGE_2D_RECT_AMD;
+                case EsdBuffer:
+                    return GL_FLOAT16_IMAGE_BUFFER_AMD;
+                }
+#endif
             case EbtInt:
                 switch ((int)sampler.dim) {
                 case Esd1D:
@@ -716,11 +766,11 @@
 }
 
 // build counter block index associations for buffers
-void TReflection::buildCounterIndices()
+void TReflection::buildCounterIndices(const TIntermediate& intermediate)
 {
     // search for ones that have counters
     for (int i = 0; i < int(indexToUniformBlock.size()); ++i) {
-        const TString counterName(indexToUniformBlock[i].name + "@count");
+        const TString counterName(intermediate.addCounterBufferName(indexToUniformBlock[i].name));
         const int index = getIndex(counterName);
 
         if (index >= 0)
@@ -752,7 +802,7 @@
         function->traverse(&it);
     }
 
-    buildCounterIndices();
+    buildCounterIndices(intermediate);
 
     return true;
 }
diff --git a/glslang/MachineIndependent/reflection.h b/glslang/MachineIndependent/reflection.h
index fedfbe8..bf233e3 100644
--- a/glslang/MachineIndependent/reflection.h
+++ b/glslang/MachineIndependent/reflection.h
@@ -156,7 +156,7 @@
 protected:
     friend class glslang::TReflectionTraverser;
 
-    void buildCounterIndices();
+    void buildCounterIndices(const TIntermediate&);
     void buildAttributeReflection(EShLanguage, const TIntermediate&);
 
     // Need a TString hash: typedef std::unordered_map<TString, int> TNameToIndex;
diff --git a/glslang/OSDependent/Unix/ossource.cpp b/glslang/OSDependent/Unix/ossource.cpp
index 24b77e1..f59bbce 100644
--- a/glslang/OSDependent/Unix/ossource.cpp
+++ b/glslang/OSDependent/Unix/ossource.cpp
@@ -43,6 +43,9 @@
 #include <assert.h>
 #include <errno.h>
 #include <stdint.h>
+#include <cstdio>
+#include <sys/time.h>
+#include <sys/resource.h>
 
 namespace glslang {
 
@@ -184,8 +187,18 @@
   pthread_mutex_unlock(&gMutex);
 }
 
+// #define DUMP_COUNTERS
+
 void OS_DumpMemoryCounters()
 {
+#ifdef DUMP_COUNTERS
+    struct rusage usage;
+
+    if (getrusage(RUSAGE_SELF, &usage) == 0)
+        printf("Working set size: %ld\n", usage.ru_maxrss * 1024);
+#else
+    printf("Recompile with DUMP_COUNTERS defined to see counters.\n");
+#endif
 }
 
 } // end namespace glslang
diff --git a/glslang/Public/ShaderLang.h b/glslang/Public/ShaderLang.h
index f0990ad..911fc31 100644
--- a/glslang/Public/ShaderLang.h
+++ b/glslang/Public/ShaderLang.h
@@ -67,16 +67,20 @@
     extern "C" {
 #endif
 
+// This should always increase, as some paths to do not consume
+// a more major number.
+// It should increment by one when new functionality is added.
+#define GLSLANG_MINOR_VERSION 6
+
 //
-// Driver must call this first, once, before doing any other
-// compiler/linker operations.
+// Call before doing any other compiler/linker operations.
 //
 // (Call once per process, not once per thread.)
 //
 SH_IMPORT_EXPORT int ShInitialize();
 
 //
-// Driver should call this at process shutdown.
+// Call this at process shutdown to clean up memory.
 //
 SH_IMPORT_EXPORT int __fastcall ShFinalize();
 
@@ -120,9 +124,23 @@
 
 typedef enum {
     EShTargetNone,
-    EshTargetSpv,
+    EShTargetSpv,                 // preferred spelling
+    EshTargetSpv = EShTargetSpv,  // legacy spelling
 } EShTargetLanguage;
 
+typedef enum {
+    EShTargetVulkan_1_0 = (1 << 22),
+    EShTargetVulkan_1_1 = (1 << 22) | (1 << 12),
+    EShTargetOpenGL_450 = 450,
+} EShTargetClientVersion;
+
+typedef EShTargetClientVersion EshTargetClientVersion;
+
+typedef enum {
+    EShTargetSpv_1_0 = (1 << 16),
+    EShTargetSpv_1_3 = (1 << 16) | (3 << 8),
+} EShTargetLanguageVersion;
+
 struct TInputLanguage {
     EShSource languageFamily; // redundant information with other input, this one overrides when not EShSourceNone
     EShLanguage stage;        // redundant information with other input, this one overrides when not EShSourceNone
@@ -132,12 +150,13 @@
 
 struct TClient {
     EShClient client;
-    int version;              // version of client itself (not the client's input dialect)
+    EShTargetClientVersion version;   // version of client itself (not the client's input dialect)
 };
 
 struct TTarget {
     EShTargetLanguage language;
-    unsigned int version;     // the version to target, if SPIR-V, defined by "word 1" of the SPIR-V binary header
+    EShTargetLanguageVersion version; // version to target, if SPIR-V, defined by "word 1" of the SPIR-V header
+    bool hlslFunctionality1;          // can target hlsl_functionality1 extension(s)
 };
 
 // All source/client/target versions and settings.
@@ -195,6 +214,8 @@
     EShMsgKeepUncalled     = (1 << 8),  // for testing, don't eliminate uncalled functions
     EShMsgHlslOffsets      = (1 << 9),  // allow block offsets to follow HLSL rules instead of GLSL rules
     EShMsgDebugInfo        = (1 << 10), // save debug information
+    EShMsgHlslEnable16BitTypes  = (1 << 11), // enable use of 16-bit types in SPIR-V for HLSL
+    EShMsgHlslLegalization  = (1 << 12), // enable HLSL Legalization messages
 };
 
 //
@@ -290,7 +311,7 @@
 // Deferred-Lowering C++ Interface
 // -----------------------------------
 //
-// Below is a new alternate C++ interface that might potentially replace the above
+// Below is a new alternate C++ interface, which deprecates the above
 // opaque handle-based interface.
 //
 // The below is further designed to handle multiple compilation units per stage, where
@@ -335,11 +356,15 @@
     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.
-// Optionally use setPreamble() to set a special shader string that will be
-// processed before all others but won't affect the validity of #version.
+// Make one TShader per shader that you will link into a program. Then
+//  - provide the shader through setStrings() or setStringsWithLengths()
+//  - optionally call setEnv*(), see below for more detail
+//  - optionally use setPreamble() to set a special shader string that will be
+//    processed before all others but won't affect the validity of #version
+//  - call parse(): source language and target environment must be selected
+//    either by correct setting of EShMessages sent to parse(), or by
+//    explicitly calling setEnv*()
+//  - query the info logs
 //
 // N.B.: Does not yet support having the same TShader instance being linked into
 // multiple programs.
@@ -368,16 +393,20 @@
     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 setShiftBindingForSet(TResourceType res, unsigned int base, unsigned int set);
     void setResourceSetBinding(const std::vector<std::string>& base);
     void setAutoMapBindings(bool map);
     void setAutoMapLocations(bool map);
+    void setInvertY(bool invert);
     void setHlslIoMapping(bool hlslIoMap);
     void setFlattenUniformArrays(bool flatten);
     void setNoStorageFormat(bool useUnknownFormat);
     void setTextureSamplerTransformMode(EShTextureSamplerTransformMode mode);
 
-    // For setting up the environment (initialized in the constructor):
+    // For setting up the environment (cleared to nothingness in the constructor).
+    // These must be called so that parsing is done for the right source language and
+    // target environment, either indirectly through TranslateEnvironment() based on
+    // EShMessages et. al., or directly by the user.
     void setEnvInput(EShSource lang, EShLanguage envStage, EShClient client, int version)
     {
         environment.input.languageFamily = lang;
@@ -385,16 +414,18 @@
         environment.input.dialect = client;
         environment.input.dialectVersion = version;
     }
-    void setEnvClient(EShClient client, int version)
+    void setEnvClient(EShClient client, EShTargetClientVersion version)
     {
         environment.client.client = client;
         environment.client.version = version;
     }
-    void setEnvTarget(EShTargetLanguage lang, unsigned int version)
+    void setEnvTarget(EShTargetLanguage lang, EShTargetLanguageVersion version)
     {
         environment.target.language = lang;
         environment.target.version = version;
     }
+    void setEnvTargetHlslFunctionality1() { environment.target.hlslFunctionality1 = true; }
+    bool getEnvTargetHlslFunctionality1() const { return environment.target.hlslFunctionality1; }
 
     // Interface to #include handlers.
     //
@@ -640,6 +671,7 @@
     int getUniformBlockSize(int blockIndex) const;         // can be used for glGetActiveUniformBlockiv(UNIFORM_BLOCK_DATA_SIZE)
     int getUniformIndex(const char* name) const;           // can be used for glGetUniformIndices()
     int getUniformBinding(int index) const;                // returns the binding number
+    int getUniformBlockBinding(int index) const;           // returns the block binding number
     int getUniformBlockIndex(int index) const;             // can be used for glGetActiveUniformsiv(GL_UNIFORM_BLOCK_INDEX)
     int getUniformBlockCounterIndex(int index) const;      // returns block index of associated counter.
     int getUniformType(int index) const;                   // can be used for glGetActiveUniformsiv(GL_UNIFORM_TYPE)
diff --git a/gtests/AST.FromFile.cpp b/gtests/AST.FromFile.cpp
index 14545d1..701db46 100644
--- a/gtests/AST.FromFile.cpp
+++ b/gtests/AST.FromFile.cpp
@@ -41,13 +41,27 @@
 
 using CompileToAstTest = GlslangTest<::testing::TestWithParam<std::string>>;
 
+#ifdef NV_EXTENSIONS
+using CompileToAstTestNV = GlslangTest<::testing::TestWithParam<std::string>>;
+#endif
+
 TEST_P(CompileToAstTest, FromFile)
 {
     loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(),
-                            Source::GLSL, Semantics::OpenGL,
+                            Source::GLSL, Semantics::OpenGL, glslang::EShTargetVulkan_1_0,
                             Target::AST);
 }
 
+#ifdef NV_EXTENSIONS
+// Compiling GLSL to SPIR-V under OpenGL semantics (NV extensions enabled).
+TEST_P(CompileToAstTestNV, FromFile)
+{
+    loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(),
+                            Source::GLSL, Semantics::OpenGL, glslang::EShTargetVulkan_1_0,
+                            Target::AST);
+}
+#endif
+
 // clang-format off
 INSTANTIATE_TEST_CASE_P(
     Glsl, CompileToAstTest,
@@ -84,6 +98,8 @@
         "cppBad2.vert",
         "cppComplexExpr.vert",
         "cppDeepNest.frag",
+        "cppPassMacroName.frag",
+        "cppRelaxSkipTokensErrors.vert",
         "badChars.frag",
         "pointCoord.frag",
         "array.frag",
@@ -105,6 +121,7 @@
         "310.tese",
         "310implicitSizeArrayError.vert",
         "310AofA.vert",
+        "310runtimeArray.vert",
         "320.comp",
         "320.vert",
         "320.geom",
@@ -115,6 +132,7 @@
         "330comp.frag",
         "constErrors.frag",
         "constFold.frag",
+        "constFoldIntMin.frag",
         "errors.frag",
         "forwardRef.frag",
         "uint.frag",
@@ -182,10 +200,13 @@
         "loopsArtificial.frag",
         "matrix.frag",
         "matrix2.frag",
+        "mixedArrayDecls.frag",
+        "nonuniform.frag",
         "newTexture.frag",
         "Operations.frag",
         "overlongLiteral.frag",
         "prepost.frag",
+        "runtimeArray.vert",
         "simpleFunctionCall.frag",
         "structAssignment.frag",
         "structDeref.frag",
@@ -208,9 +229,20 @@
         "precise.tesc",
         "precise_struct_block.vert",
         "maxClipDistances.vert",
+        "findFunction.frag",
     })),
     FileNameAsCustomTestSuffix
 );
+
+#ifdef NV_EXTENSIONS
+INSTANTIATE_TEST_CASE_P(
+    Glsl, CompileToAstTestNV,
+    ::testing::ValuesIn(std::vector<std::string>({
+        "nvShaderNoperspectiveInterpolation.frag",
+    })),
+    FileNameAsCustomTestSuffix
+);
+#endif
 // clang-format on
 
 }  // anonymous namespace
diff --git a/gtests/Config.FromFile.cpp b/gtests/Config.FromFile.cpp
index a6e93dc..f3a2772 100644
--- a/gtests/Config.FromFile.cpp
+++ b/gtests/Config.FromFile.cpp
@@ -97,7 +97,7 @@
 INSTANTIATE_TEST_CASE_P(
     Glsl, ConfigTest,
     ::testing::ValuesIn(std::vector<TestCaseSpec>({
-        {"specExamples.vert", "baseResults/test.conf", "specExamples.vert.out", (EShMessages)(EShMsgAST | EShMsgCascadingErrors)},
+        {"specExamples.vert", "baseResults/test.conf", "specExamplesConf.vert.out", (EShMessages)(EShMsgAST | EShMsgCascadingErrors)},
         {"100Limits.vert", "100.conf", "100LimitsConf.vert.out", EShMsgCascadingErrors},
     })),
 );
diff --git a/gtests/Hlsl.FromFile.cpp b/gtests/Hlsl.FromFile.cpp
index 9d97fdf..79e9592 100644
--- a/gtests/Hlsl.FromFile.cpp
+++ b/gtests/Hlsl.FromFile.cpp
@@ -58,6 +58,7 @@
 }
 
 using HlslCompileTest = GlslangTest<::testing::TestWithParam<FileNameEntryPointPair>>;
+using HlslVulkan1_1CompileTest = GlslangTest<::testing::TestWithParam<FileNameEntryPointPair>>;
 using HlslCompileAndFlattenTest = GlslangTest<::testing::TestWithParam<FileNameEntryPointPair>>;
 using HlslLegalizeTest = GlslangTest<::testing::TestWithParam<FileNameEntryPointPair>>;
 
@@ -66,8 +67,15 @@
 TEST_P(HlslCompileTest, FromFile)
 {
     loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam().fileName,
-                            Source::HLSL, Semantics::Vulkan,
-                            Target::BothASTAndSpv, GetParam().entryPoint);
+                            Source::HLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_0,
+                            Target::BothASTAndSpv, true, GetParam().entryPoint);
+}
+
+TEST_P(HlslVulkan1_1CompileTest, FromFile)
+{
+    loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam().fileName,
+                            Source::HLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_1,
+                            Target::BothASTAndSpv, true, GetParam().entryPoint);
 }
 
 TEST_P(HlslCompileAndFlattenTest, FromFile)
@@ -82,9 +90,9 @@
 TEST_P(HlslLegalizeTest, FromFile)
 {
     loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam().fileName,
-                            Source::HLSL, Semantics::Vulkan,
-                            Target::Spv, GetParam().entryPoint,
-                            "/baseLegalResults/", false);
+                            Source::HLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_0,
+                            Target::Spv, true, GetParam().entryPoint,
+                            "/baseLegalResults/", true);
 }
 
 // clang-format off
@@ -108,6 +116,7 @@
         {"hlsl.calculatelod.dx10.frag", "main"},
         {"hlsl.calculatelodunclamped.dx10.frag", "main"},
         {"hlsl.cast.frag", "PixelShaderFunction"},
+        {"hlsl.cbuffer-identifier.vert", "main"},
         {"hlsl.charLit.vert", "main"},
         {"hlsl.clip.frag", "main"},
         {"hlsl.clipdistance-1.frag", "main"},
@@ -132,6 +141,7 @@
         {"hlsl.clipdistance-8.vert", "main"},
         {"hlsl.clipdistance-9.frag", "main"},
         {"hlsl.clipdistance-9.vert", "main"},
+        {"hlsl.color.hull.tesc", "main"},
         {"hlsl.comparison.vec.frag", "main"},
         {"hlsl.conditional.frag", "PixelShaderFunction"},
         {"hlsl.constantbuffer.frag", "main"},
@@ -172,6 +182,7 @@
         {"hlsl.getdimensions.dx10.vert", "main"},
         {"hlsl.getsampleposition.dx10.frag", "main"},
         {"hlsl.global-const-init.frag", "main"},
+        {"hlsl.gs-hs-mix.tesc", "HSMain"},
         {"hlsl.domain.1.tese", "main"},
         {"hlsl.domain.2.tese", "main"},
         {"hlsl.domain.3.tese", "main"},
@@ -186,6 +197,7 @@
         {"hlsl.hull.ctrlpt-2.tesc", "main"},
         {"hlsl.identifier.sample.frag", "main"},
         {"hlsl.if.frag", "PixelShaderFunction"},
+        {"hlsl.imagefetch-subvec4.comp", "main"},
         {"hlsl.implicitBool.frag", "main"},
         {"hlsl.inf.vert", "main"},
         {"hlsl.inoutquals.frag", "main"},
@@ -209,6 +221,7 @@
         {"hlsl.intrinsics.promote.down.frag", "main"},
         {"hlsl.intrinsics.promote.outputs.frag", "main"},
         {"hlsl.layout.frag", "main"},
+        {"hlsl.layoutOverride.vert", "main"},
         {"hlsl.load.2dms.dx10.frag", "main"},
         {"hlsl.load.array.dx10.frag", "main"},
         {"hlsl.load.basic.dx10.frag", "main"},
@@ -237,18 +250,21 @@
         {"hlsl.matrixSwizzle.vert", "ShaderFunction"},
         {"hlsl.memberFunCall.frag", "main"},
         {"hlsl.mintypes.frag", "main"},
+        {"hlsl.mul-truncate.frag", "main"},
         {"hlsl.multiEntry.vert", "RealEntrypoint"},
         {"hlsl.multiReturn.frag", "main"},
         {"hlsl.matrixindex.frag", "main"},
         {"hlsl.nonstaticMemberFunction.frag", "main"},
         {"hlsl.numericsuffixes.frag", "main"},
-        {"hlsl.numthreads.comp", "main_aux1"},
+        {"hlsl.numthreads.comp", "main_aux2"},
         {"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.PointSize.geom", "main"},
+        {"hlsl.PointSize.vert", "main"},
         {"hlsl.pp.vert", "main"},
         {"hlsl.pp.line.frag", "main"},
         {"hlsl.precise.frag", "main"},
@@ -297,7 +313,9 @@
         {"hlsl.semicolons.frag", "main"},
         {"hlsl.shapeConv.frag", "main"},
         {"hlsl.shapeConvRet.frag", "main"},
+        {"hlsl.snorm.uav.comp", "main"},
         {"hlsl.staticMemberFunction.frag", "main"},
+        {"hlsl.store.rwbyteaddressbuffer.type.comp", "main"},
         {"hlsl.stringtoken.frag", "main"},
         {"hlsl.string.frag", "main"},
         {"hlsl.struct.split-1.vert", "main"},
@@ -326,6 +344,7 @@
         {"hlsl.structStructName.frag", "main"},
         {"hlsl.subpass.frag", "main"},
         {"hlsl.synthesizeInput.frag", "main"},
+        {"hlsl.texturebuffer.frag", "main"},
         {"hlsl.texture.struct.frag", "main"},
         {"hlsl.texture.subvec4.frag", "main"},
         {"hlsl.this.frag", "main"},
@@ -366,6 +385,22 @@
 
 // clang-format off
 INSTANTIATE_TEST_CASE_P(
+    ToSpirv, HlslVulkan1_1CompileTest,
+    ::testing::ValuesIn(std::vector<FileNameEntryPointPair>{
+        {"hlsl.wavebroadcast.comp", "CSMain"},
+        {"hlsl.waveprefix.comp", "CSMain"},
+        {"hlsl.wavequad.comp", "CSMain"},
+        {"hlsl.wavequery.comp", "CSMain"},
+        {"hlsl.wavequery.frag", "PixelShaderFunction"},
+        {"hlsl.wavereduction.comp", "CSMain"},
+        {"hlsl.wavevote.comp", "CSMain"},
+    }),
+    FileNameAsCustomTestSuffix
+);
+// clang-format on
+
+// clang-format off
+INSTANTIATE_TEST_CASE_P(
     ToSpirv, HlslCompileAndFlattenTest,
     ::testing::ValuesIn(std::vector<FileNameEntryPointPair>{
         {"hlsl.array.flatten.frag", "main"},
@@ -375,7 +410,7 @@
 );
 // clang-format on
 
-#ifdef ENABLE_OPT
+#if ENABLE_OPT
 // clang-format off
 INSTANTIATE_TEST_CASE_P(
     ToSpirv, HlslLegalizeTest,
@@ -384,7 +419,10 @@
         {"hlsl.flattenOpaque.frag", "main"},
         {"hlsl.flattenOpaqueInit.vert", "main"},
         {"hlsl.flattenOpaqueInitMix.vert", "main"},
-        {"hlsl.flattenSubset.frag", "main"}
+        {"hlsl.flattenSubset.frag", "main"},
+        {"hlsl.flattenSubset2.frag", "main"},
+        {"hlsl.partialFlattenLocal.vert", "main"},
+        {"hlsl.partialFlattenMixed.vert", "main"}
     }),
     FileNameAsCustomTestSuffix
 );
diff --git a/gtests/Link.FromFile.Vk.cpp b/gtests/Link.FromFile.Vk.cpp
index 6e1969a..0a616d8 100644
--- a/gtests/Link.FromFile.Vk.cpp
+++ b/gtests/Link.FromFile.Vk.cpp
@@ -52,6 +52,7 @@
     GlslangResult result;
 
     // Compile each input shader file.
+    bool success = true;
     std::vector<std::unique_ptr<glslang::TShader>> shaders;
     for (size_t i = 0; i < fileCount; ++i) {
         std::string contents;
@@ -61,7 +62,7 @@
                 new glslang::TShader(GetShaderStage(GetSuffix(fileNames[i]))));
         auto* shader = shaders.back().get();
         shader->setAutoMapLocations(true);
-        compile(shader, contents, "", controls);
+        success &= compile(shader, contents, "", controls);
         result.shaderResults.push_back(
             {fileNames[i], shader->getInfoLog(), shader->getInfoDebugLog()});
     }
@@ -69,10 +70,25 @@
     // Link all of them.
     glslang::TProgram program;
     for (const auto& shader : shaders) program.addShader(shader.get());
-    program.link(controls);
+    success &= program.link(controls);
     result.linkingOutput = program.getInfoLog();
     result.linkingError = program.getInfoDebugLog();
 
+    if (success && (controls & EShMsgSpvRules)) {
+        spv::SpvBuildLogger logger;
+        std::vector<uint32_t> spirv_binary;
+        glslang::SpvOptions options;
+        options.disableOptimizer = true;
+        glslang::GlslangToSpv(*program.getIntermediate(shaders.front()->getStage()),
+                                spirv_binary, &logger, &options);
+
+        std::ostringstream disassembly_stream;
+        spv::Parameterize();
+        spv::Disassemble(disassembly_stream, spirv_binary);
+        result.spirvWarningsErrors = logger.getAllMessages();
+        result.spirv = disassembly_stream.str();
+    }
+
     std::ostringstream stream;
     outputResultToStream(&stream, result, controls);
 
diff --git a/gtests/Spv.FromFile.cpp b/gtests/Spv.FromFile.cpp
old mode 100644
new mode 100755
index 9e1f068..4b1ff46
--- a/gtests/Spv.FromFile.cpp
+++ b/gtests/Spv.FromFile.cpp
@@ -63,6 +63,7 @@
 }
 
 using CompileVulkanToSpirvTest = GlslangTest<::testing::TestWithParam<std::string>>;
+using CompileVulkan1_1ToSpirvTest = GlslangTest<::testing::TestWithParam<std::string>>;
 using CompileOpenGLToSpirvTest = GlslangTest<::testing::TestWithParam<std::string>>;
 using VulkanSemantics = GlslangTest<::testing::TestWithParam<std::string>>;
 using OpenGLSemantics = GlslangTest<::testing::TestWithParam<std::string>>;
@@ -82,7 +83,14 @@
 TEST_P(CompileVulkanToSpirvTest, FromFile)
 {
     loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(),
-                            Source::GLSL, Semantics::Vulkan,
+                            Source::GLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_0,
+                            Target::Spv);
+}
+
+TEST_P(CompileVulkan1_1ToSpirvTest, FromFile)
+{
+    loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(),
+                            Source::GLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_1,
                             Target::Spv);
 }
 
@@ -91,7 +99,7 @@
 TEST_P(CompileOpenGLToSpirvTest, FromFile)
 {
     loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(),
-                            Source::GLSL, Semantics::OpenGL,
+                            Source::GLSL, Semantics::OpenGL, glslang::EShTargetVulkan_1_0,
                             Target::Spv);
 }
 
@@ -100,8 +108,8 @@
 TEST_P(VulkanSemantics, FromFile)
 {
     loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(),
-                            Source::GLSL, Semantics::Vulkan,
-                            Target::Spv);
+                            Source::GLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_0,
+                            Target::Spv, false);
 }
 
 // GLSL-level Vulkan semantics test. Expected to error out before generating
@@ -109,15 +117,15 @@
 TEST_P(OpenGLSemantics, FromFile)
 {
     loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(),
-                            Source::GLSL, Semantics::OpenGL,
-                            Target::Spv);
+                            Source::GLSL, Semantics::OpenGL, glslang::EShTargetVulkan_1_0,
+                            Target::Spv, false);
 }
 
 // GLSL-level Vulkan semantics test that need to see the AST for validation.
 TEST_P(VulkanAstSemantics, FromFile)
 {
     loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(),
-                            Source::GLSL, Semantics::Vulkan,
+                            Source::GLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_0,
                             Target::AST);
 }
 
@@ -157,19 +165,19 @@
 TEST_P(CompileVulkanToSpirvTestAMD, FromFile)
 {
     loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(),
-                            Source::GLSL, Semantics::Vulkan,
+                            Source::GLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_0,
                             Target::Spv);
 }
 #endif
 
 #ifdef NV_EXTENSIONS
-// Compiling GLSL to SPIR-V under Vulkan semantics (AMD extensions enabled).
+// Compiling GLSL to SPIR-V under Vulkan semantics (NV extensions enabled).
 // Expected to successfully generate SPIR-V.
 TEST_P(CompileVulkanToSpirvTestNV, FromFile)
 {
     loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(),
-        Source::GLSL, Semantics::Vulkan,
-        Target::Spv);
+                            Source::GLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_0,
+                            Target::Spv);
 }
 #endif
 
@@ -189,6 +197,7 @@
         // Test looping constructs.
         // No tests yet for making sure break and continue from a nested loop
         // goes to the innermost target.
+        "spv.barrier.vert",
         "spv.do-simple.vert",
         "spv.do-while-continue-break.vert",
         "spv.for-complex-condition.vert",
@@ -232,16 +241,17 @@
         "spv.bool.vert",
         "spv.boolInBlock.frag",
         "spv.branch-return.vert",
+        "spv.builtInXFB.vert",
         "spv.conditionalDiscard.frag",
+        "spv.constStruct.vert",
+        "spv.controlFlowAttributes.frag",
         "spv.conversion.frag",
         "spv.dataOut.frag",
         "spv.dataOutIndirect.frag",
         "spv.dataOutIndirect.vert",
         "spv.deepRvalue.frag",
         "spv.depthOut.frag",
-        "spv.deviceGroup.frag",
         "spv.discard-dce.frag",
-        "spv.drawParams.vert",
         "spv.doWhileLoop.frag",
         "spv.earlyReturnDiscard.frag",
         "spv.extPostDepthCoverage.frag",
@@ -249,6 +259,7 @@
         "spv.flowControl.frag",
         "spv.forLoop.frag",
         "spv.forwardFun.frag",
+        "spv.fullyCovered.frag",
         "spv.functionCall.frag",
         "spv.functionNestedOpaque.vert",
         "spv.functionSemantics.frag",
@@ -268,10 +279,10 @@
         "spv.merge-unreachable.frag",
         "spv.multiStruct.comp",
         "spv.multiStructFuncall.frag",
-        "spv.multiView.frag",
         "spv.newTexture.frag",
         "spv.noDeadDecorations.vert",
         "spv.nonSquare.vert",
+        "spv.nonuniform.frag",
         "spv.noWorkgroup.comp",
         "spv.offsets.frag",
         "spv.Operations.frag",
@@ -280,6 +291,9 @@
         "spv.precisionNonESSamp.frag",
         "spv.prepost.frag",
         "spv.qualifiers.vert",
+        "spv.sample.frag",
+        "spv.sampleId.frag",
+        "spv.samplePosition.frag",
         "spv.sampleMaskOverrideCoverage.frag",
         "spv.shaderBallot.comp",
         "spv.shaderDrawParams.vert",
@@ -308,6 +322,7 @@
         "spv.variableArrayIndex.frag",
         "spv.varyingArray.frag",
         "spv.varyingArrayIndirect.frag",
+        "spv.vecMatConstruct.frag",
         "spv.voidFunction.frag",
         "spv.whileLoop.frag",
         "spv.AofA.frag",
@@ -324,6 +339,44 @@
         "spv.storageBuffer.vert",
         "spv.precise.tese",
         "spv.precise.tesc",
+        "spv.vulkan100.subgroupArithmetic.comp",
+        "spv.vulkan100.subgroupPartitioned.comp",
+        "spv.xfb.vert",
+        "spv.xfb2.vert",
+        "spv.xfb3.vert",
+    })),
+    FileNameAsCustomTestSuffix
+);
+
+// clang-format off
+INSTANTIATE_TEST_CASE_P(
+    Glsl, CompileVulkan1_1ToSpirvTest,
+    ::testing::ValuesIn(std::vector<std::string>({
+        "spv.deviceGroup.frag",
+        "spv.drawParams.vert",
+        "spv.int8.frag",
+        "spv.vulkan110.int16.frag",
+        "spv.int32.frag",
+        "spv.explicittypes.frag",
+        "spv.float32.frag",
+        "spv.float64.frag",
+        "spv.multiView.frag",
+        "spv.subgroup.frag",
+        "spv.subgroup.geom",
+        "spv.subgroup.tesc",
+        "spv.subgroup.tese",
+        "spv.subgroup.vert",
+        "spv.subgroupArithmetic.comp",
+        "spv.subgroupBasic.comp",
+        "spv.subgroupBallot.comp",
+        "spv.subgroupClustered.comp",
+        "spv.subgroupClusteredNeg.comp",
+        "spv.subgroupPartitioned.comp",
+        "spv.subgroupShuffle.comp",
+        "spv.subgroupShuffleRelative.comp",
+        "spv.subgroupQuad.comp",
+        "spv.subgroupVote.comp",
+        "spv.vulkan110.storageBuffer.vert",
     })),
     FileNameAsCustomTestSuffix
 );
@@ -367,6 +420,7 @@
         "spv.460.comp",
         "spv.atomic.comp",
         "spv.glFragColor.frag",
+        "spv.rankShift.comp",
         "spv.specConst.vert",
         "spv.OVR_multiview.vert",
     })),
@@ -408,8 +462,10 @@
     Glsl, CompileVulkanToSpirvTestAMD,
     ::testing::ValuesIn(std::vector<std::string>({
         "spv.float16.frag",
+        "spv.float16Fetch.frag",
         "spv.imageLoadStoreLod.frag",
         "spv.int16.frag",
+        "spv.int16.amd.frag",
         "spv.shaderBallotAMD.comp",
         "spv.shaderFragMaskAMD.frag",
         "spv.textureGatherBiasLod.frag",
diff --git a/gtests/TestFixture.cpp b/gtests/TestFixture.cpp
index db2b81d..77bada5 100644
--- a/gtests/TestFixture.cpp
+++ b/gtests/TestFixture.cpp
@@ -100,6 +100,8 @@
             break;
     }
 
+    result = static_cast<EShMessages>(result | EShMsgHlslLegalization);
+
     return result;
 }
 
diff --git a/gtests/TestFixture.h b/gtests/TestFixture.h
index 2dac99b..a58978d 100644
--- a/gtests/TestFixture.h
+++ b/gtests/TestFixture.h
@@ -70,7 +70,7 @@
 // Enum for shader compilation semantics.
 enum class Semantics {
     OpenGL,
-    Vulkan,
+    Vulkan
 };
 
 // Enum for compilation target.
@@ -197,17 +197,40 @@
     GlslangResult compileAndLink(
             const std::string shaderName, const std::string& code,
             const std::string& entryPointName, EShMessages controls,
+            glslang::EShTargetClientVersion clientTargetVersion,
             bool flattenUniformArrays = false,
             EShTextureSamplerTransformMode texSampTransMode = EShTexSampTransKeep,
-            bool disableOptimizer = true)
+            bool enableOptimizer = false,
+            bool automap = true)
     {
-        const EShLanguage kind = GetShaderStage(GetSuffix(shaderName));
+        const EShLanguage stage = GetShaderStage(GetSuffix(shaderName));
 
-        glslang::TShader shader(kind);
-        shader.setAutoMapLocations(true);
+        glslang::TShader shader(stage);
+        if (automap) {
+            shader.setAutoMapLocations(true);
+            shader.setAutoMapBindings(true);
+        }
         shader.setTextureSamplerTransformMode(texSampTransMode);
         shader.setFlattenUniformArrays(flattenUniformArrays);
 
+        if (controls & EShMsgSpvRules) {
+            if (controls & EShMsgVulkanRules) {
+                shader.setEnvInput((controls & EShMsgReadHlsl) ? glslang::EShSourceHlsl
+                                                               : glslang::EShSourceGlsl,
+                                    stage, glslang::EShClientVulkan, 100);
+                shader.setEnvClient(glslang::EShClientVulkan, clientTargetVersion);
+                shader.setEnvTarget(glslang::EShTargetSpv,
+                        clientTargetVersion == glslang::EShTargetVulkan_1_1 ? glslang::EShTargetSpv_1_3
+                                                                            : glslang::EShTargetSpv_1_0);
+            } else {
+                shader.setEnvInput((controls & EShMsgReadHlsl) ? glslang::EShSourceHlsl
+                                                               : glslang::EShSourceGlsl,
+                                    stage, glslang::EShClientOpenGL, 100);
+                shader.setEnvClient(glslang::EShClientOpenGL, clientTargetVersion);
+                shader.setEnvTarget(glslang::EshTargetSpv, glslang::EShTargetSpv_1_0);
+            }
+        }
+
         bool success = compile(&shader, code, entryPointName, controls);
 
         glslang::TProgram program;
@@ -219,8 +242,8 @@
         if (success && (controls & EShMsgSpvRules)) {
             std::vector<uint32_t> spirv_binary;
             glslang::SpvOptions options;
-            options.disableOptimizer = disableOptimizer;
-            glslang::GlslangToSpv(*program.getIntermediate(kind),
+            options.disableOptimizer = !enableOptimizer;
+            glslang::GlslangToSpv(*program.getIntermediate(stage),
                                   spirv_binary, &logger, &options);
 
             std::ostringstream disassembly_stream;
@@ -251,9 +274,9 @@
             bool autoMapBindings,
             bool flattenUniformArrays)
     {
-        const EShLanguage kind = GetShaderStage(GetSuffix(shaderName));
+        const EShLanguage stage = GetShaderStage(GetSuffix(shaderName));
 
-        glslang::TShader shader(kind);
+        glslang::TShader shader(stage);
         shader.setShiftSamplerBinding(baseSamplerBinding);
         shader.setShiftTextureBinding(baseTextureBinding);
         shader.setShiftImageBinding(baseImageBinding);
@@ -275,7 +298,7 @@
 
         if (success && (controls & EShMsgSpvRules)) {
             std::vector<uint32_t> spirv_binary;
-            glslang::GlslangToSpv(*program.getIntermediate(kind),
+            glslang::GlslangToSpv(*program.getIntermediate(stage),
                                   spirv_binary, &logger);
 
             std::ostringstream disassembly_stream;
@@ -299,9 +322,10 @@
             const std::string& entryPointName, EShMessages controls,
             const unsigned int remapOptions = spv::spirvbin_t::NONE)
     {
-        const EShLanguage kind = GetShaderStage(GetSuffix(shaderName));
+        const EShLanguage stage = GetShaderStage(GetSuffix(shaderName));
 
-        glslang::TShader shader(kind);
+        glslang::TShader shader(stage);
+        shader.setAutoMapBindings(true);
         shader.setAutoMapLocations(true);
 
         bool success = compile(&shader, code, entryPointName, controls);
@@ -314,7 +338,7 @@
 
         if (success && (controls & EShMsgSpvRules)) {
             std::vector<uint32_t> spirv_binary;
-            glslang::GlslangToSpv(*program.getIntermediate(kind),
+            glslang::GlslangToSpv(*program.getIntermediate(stage),
                                   spirv_binary, &logger);
 
             spv::spirvbin_t(0 /*verbosity*/).remap(spirv_binary, remapOptions);
@@ -383,10 +407,12 @@
                                  const std::string& testName,
                                  Source source,
                                  Semantics semantics,
+                                 glslang::EShTargetClientVersion clientTargetVersion,
                                  Target target,
+                                 bool automap = true,
                                  const std::string& entryPointName="",
                                  const std::string& baseDir="/baseResults/",
-                                 const bool disableOptimizer = true)
+                                 const bool enableOptimizer = false)
     {
         const std::string inputFname = testDir + "/" + testName;
         const std::string expectedOutputFname =
@@ -396,8 +422,11 @@
         tryLoadFile(inputFname, "input", &input);
         tryLoadFile(expectedOutputFname, "expected output", &expectedOutput);
 
-        const EShMessages controls = DeriveOptions(source, semantics, target);
-        GlslangResult result = compileAndLink(testName, input, entryPointName, controls, false, EShTexSampTransKeep, disableOptimizer);
+        EShMessages controls = DeriveOptions(source, semantics, target);
+        if (enableOptimizer)
+            controls = static_cast<EShMessages>(controls & ~EShMsgHlslLegalization);
+        GlslangResult result = compileAndLink(testName, input, entryPointName, controls, clientTargetVersion, false,
+                                              EShTexSampTransKeep, enableOptimizer, automap);
 
         // Generate the hybrid output in the way of glslangValidator.
         std::ostringstream stream;
@@ -423,7 +452,8 @@
         tryLoadFile(expectedOutputFname, "expected output", &expectedOutput);
 
         const EShMessages controls = DeriveOptions(source, semantics, target);
-        GlslangResult result = compileAndLink(testName, input, entryPointName, controls, true);
+        GlslangResult result = compileAndLink(testName, input, entryPointName, controls,
+                                              glslang::EShTargetVulkan_1_0, true);
 
         // Generate the hybrid output in the way of glslangValidator.
         std::ostringstream stream;
@@ -592,7 +622,9 @@
         tryLoadFile(expectedOutputFname, "expected output", &expectedOutput);
 
         const EShMessages controls = DeriveOptions(source, semantics, target);
-        GlslangResult result = compileAndLink(testName, input, entryPointName, controls, false, EShTexSampTransUpgradeTextureRemoveSampler);
+        GlslangResult result = compileAndLink(testName, input, entryPointName, controls,
+                                              glslang::EShTargetVulkan_1_0, false,
+                                              EShTexSampTransUpgradeTextureRemoveSampler);
 
         // Generate the hybrid output in the way of glslangValidator.
         std::ostringstream stream;
diff --git a/gtests/main.cpp b/gtests/main.cpp
index 35f30db..9cd06d1 100644
--- a/gtests/main.cpp
+++ b/gtests/main.cpp
@@ -54,7 +54,7 @@
             glslangtest::GlobalTestSettings.updateMode = true;
         }
         if (std::string("--test-root") == argv[i]) {
-            // Allow the user set the tets root directory.  This is useful
+            // Allow the user set the test root directory.  This is useful
             // for testing with files from another source tree.
             if (i + 1 < argc) {
                 glslangtest::GlobalTestSettings.testRoot = argv[i + 1];
@@ -64,6 +64,11 @@
                 return 1;
             }
         }
+        if (std::string("--help") == argv[i]) {
+            printf("\nExtra options:\n\n");
+            printf("  --update-mode\n      Update the golden results for the tests.\n");
+            printf("  --test-root <arg>\n      Specify the test root directory (useful for testing with\n      files from another source tree).\n");
+        }
     }
 
     const int result = RUN_ALL_TESTS();
diff --git a/hlsl/CMakeLists.txt b/hlsl/CMakeLists.txt
index 98dfad7..a3b643f 100755
--- a/hlsl/CMakeLists.txt
+++ b/hlsl/CMakeLists.txt
@@ -17,10 +17,14 @@
     hlslGrammar.h
     hlslParseables.h)
 
-add_library(HLSL STATIC ${SOURCES} ${HEADERS})
+add_library(HLSL ${LIB_TYPE} ${SOURCES} ${HEADERS})
 set_property(TARGET HLSL PROPERTY FOLDER hlsl)
 set_property(TARGET HLSL PROPERTY POSITION_INDEPENDENT_CODE ON)
 
+if(WIN32 AND BUILD_SHARED_LIBS)
+    set_target_properties(HLSL PROPERTIES PREFIX "")
+endif()
+
 if(WIN32)
     source_group("Source" FILES ${SOURCES} ${HEADERS})
 endif(WIN32)
diff --git a/hlsl/hlslAttributes.cpp b/hlsl/hlslAttributes.cpp
index fccf6c1..261cec3 100644
--- a/hlsl/hlslAttributes.cpp
+++ b/hlsl/hlslAttributes.cpp
@@ -34,151 +34,73 @@
 //
 
 #include "hlslAttributes.h"
-#include <cstdlib>
-#include <cctype>
-#include <algorithm>
+#include "hlslParseHelper.h"
 
 namespace glslang {
     // Map the given string to an attribute enum from TAttributeType,
     // or EatNone if invalid.
-    TAttributeType TAttributeMap::attributeFromName(const TString& nameSpace, const TString& name)
+    TAttributeType HlslParseContext::attributeFromName(const TString& nameSpace, const TString& name) const
     {
-        // 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")
+        if (nameSpace == "vk") {
+            if (name == "input_attachment_index")
                 return EatInputAttachment;
-            else if (lowername == "location")
+            else if (name == "location")
                 return EatLocation;
-            else if (lowername == "binding")
+            else if (name == "binding")
                 return EatBinding;
-            else if (lowername == "global_cbuffer_binding")
+            else if (name == "global_cbuffer_binding")
                 return EatGlobalBinding;
-        } else if (lowernameSpace.size() > 0)
+            else if (name == "builtin")
+                return EatBuiltIn;
+            else if (name == "constant_id")
+                return EatConstantId;
+            else if (name == "push_constant")
+                return EatPushConstant;
+        } else if (nameSpace.size() > 0)
             return EatNone;
 
         // handle names with no namespace
 
-        if (lowername == "allow_uav_condition")
+        if (name == "allow_uav_condition")
             return EatAllow_uav_condition;
-        else if (lowername == "branch")
+        else if (name == "branch")
             return EatBranch;
-        else if (lowername == "call")
+        else if (name == "call")
             return EatCall;
-        else if (lowername == "domain")
+        else if (name == "domain")
             return EatDomain;
-        else if (lowername == "earlydepthstencil")
+        else if (name == "earlydepthstencil")
             return EatEarlyDepthStencil;
-        else if (lowername == "fastopt")
+        else if (name == "fastopt")
             return EatFastOpt;
-        else if (lowername == "flatten")
+        else if (name == "flatten")
             return EatFlatten;
-        else if (lowername == "forcecase")
+        else if (name == "forcecase")
             return EatForceCase;
-        else if (lowername == "instance")
+        else if (name == "instance")
             return EatInstance;
-        else if (lowername == "maxtessfactor")
+        else if (name == "maxtessfactor")
             return EatMaxTessFactor;
-        else if (lowername == "maxvertexcount")
+        else if (name == "maxvertexcount")
             return EatMaxVertexCount;
-        else if (lowername == "numthreads")
+        else if (name == "numthreads")
             return EatNumThreads;
-        else if (lowername == "outputcontrolpoints")
+        else if (name == "outputcontrolpoints")
             return EatOutputControlPoints;
-        else if (lowername == "outputtopology")
+        else if (name == "outputtopology")
             return EatOutputTopology;
-        else if (lowername == "partitioning")
+        else if (name == "partitioning")
             return EatPartitioning;
-        else if (lowername == "patchconstantfunc")
+        else if (name == "patchconstantfunc")
             return EatPatchConstantFunc;
-        else if (lowername == "unroll")
+        else if (name == "unroll")
             return EatUnroll;
-        else if (lowername == "loop")
+        else if (name == "loop")
             return EatLoop;
         else
             return EatNone;
     }
 
-    // Look up entry, inserting if it's not there, and if name is a valid attribute name
-    // as known by attributeFromName.
-    TAttributeType TAttributeMap::setAttribute(const TString& nameSpace, const TString* name, TIntermAggregate* value)
-    {
-        if (name == nullptr)
-            return EatNone;
-
-        const TAttributeType attr = attributeFromName(nameSpace, *name);
-
-        if (attr != EatNone)
-            attributes[attr] = value;
-
-        return attr;
-    }
-
-    // Look up entry (const version), and return aggregate node.  This cannot change the map.
-    const TIntermAggregate* TAttributeMap::operator[](TAttributeType attr) const
-    {
-        const auto entry = attributes.find(attr);
-
-        return (entry == attributes.end()) ? nullptr : entry->second;
-    }
-
-    // True if entry exists in map (even if value is nullptr)
-    bool TAttributeMap::contains(TAttributeType attr) const
-    {
-        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 1fdb4ba..b1cc037 100644
--- a/hlsl/hlslAttributes.h
+++ b/hlsl/hlslAttributes.h
@@ -38,88 +38,22 @@
 
 #include <unordered_map>
 #include <functional>
+
+#include "../glslang/MachineIndependent/attribute.h"
+#include "../glslang/MachineIndependent/SymbolTable.h"
 #include "hlslScanContext.h"
-#include "../glslang/Include/Common.h"
 
 namespace glslang {
-    enum TAttributeType {
-        EatNone,
-        EatAllow_uav_condition,
-        EatBranch,
-        EatCall,
-        EatDomain,
-        EatEarlyDepthStencil,
-        EatFastOpt,
-        EatFlatten,
-        EatForceCase,
-        EatInstance,
-        EatMaxTessFactor,
-        EatNumThreads,
-        EatMaxVertexCount,
-        EatOutputControlPoints,
-        EatOutputTopology,
-        EatPartitioning,
-        EatPatchConstantFunc,
-        EatPatchSize,
-        EatUnroll,
-        EatLoop,
-        EatBinding,
-        EatGlobalBinding,
-        EatLocation,
-        EatInputAttachment
-    };
-}
-
-namespace std {
-    // Allow use of TAttributeType enum in hash_map without calling code having to cast.
-    template <> struct hash<glslang::TAttributeType> {
-        std::size_t operator()(glslang::TAttributeType attr) const {
-            return std::hash<int>()(int(attr));
-        }
-    };
-} // end namespace std
-
-namespace glslang {
-    class TIntermAggregate;
-
-    class TAttributeMap {
-    public:
-        // Search for and potentially add the attribute into the map.  Return the
-        // attribute type enum for it, if found, else EatNone.
-        TAttributeType setAttribute(const TString& nameSpace, const TString* name, TIntermAggregate* value);
-
-        // Const lookup: search for (but do not modify) the attribute in the map.
-        const TIntermAggregate* operator[](TAttributeType) const;
-
-        // 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& nameSpace, const TString& name);
-
-        std::unordered_map<TAttributeType, TIntermAggregate*> attributes;
-    };
 
     class TFunctionDeclarator {
     public:
         TFunctionDeclarator() : function(nullptr), body(nullptr) { }
         TSourceLoc loc;
         TFunction* function;
-        TAttributeMap attributes;
+        TAttributes attributes;
         TVector<HlslToken>* body;
     };
 
 } // end namespace glslang
 
-
 #endif // HLSLATTRIBUTES_H_
diff --git a/hlsl/hlslGrammar.cpp b/hlsl/hlslGrammar.cpp
index 515922e..cb05877 100755
--- a/hlsl/hlslGrammar.cpp
+++ b/hlsl/hlslGrammar.cpp
@@ -376,11 +376,9 @@
 
     bool forbidDeclarators = (peekTokenClass(EHTokCBuffer) || peekTokenClass(EHTokTBuffer));
     // fully_specified_type
-    if (! acceptFullySpecifiedType(declaredType, nodeList))
+    if (! acceptFullySpecifiedType(declaredType, nodeList, declarator.attributes, forbidDeclarators))
         return false;
 
-    parseContext.transferTypeAttributes(declarator.attributes, declaredType);
-
     // cbuffer and tbuffer end with the closing '}'.
     // No semicolon is included.
     if (forbidDeclarators)
@@ -398,6 +396,9 @@
         if (peekTokenClass(EHTokLeftParen)) {
             // looks like function parameters
 
+            // merge in the attributes into the return type
+            parseContext.transferTypeAttributes(token.loc, declarator.attributes, declaredType, true);
+
             // Potentially rename shader entry point function.  No-op most of the time.
             parseContext.renameShaderFunction(fullName);
 
@@ -425,32 +426,30 @@
                 parseContext.handleFunctionDeclarator(declarator.loc, *declarator.function, true);
             }
         } else {
-            // A variable declaration. Fix the storage qualifier if it's a global.
+            // A variable declaration.
+
+            // merge in the attributes, the first time around, into the shared type
+            if (! declarator_list)
+                parseContext.transferTypeAttributes(token.loc, declarator.attributes, declaredType);
+
+            // Fix the storage qualifier if it's a global.
             if (declaredType.getQualifier().storage == EvqTemporary && parseContext.symbolTable.atGlobalLevel())
                 declaredType.getQualifier().storage = EvqUniform;
 
+            // recognize array_specifier
+            TArraySizes* arraySizes = nullptr;
+            acceptArraySpecifier(arraySizes);
+
             // We can handle multiple variables per type declaration, so
             // the number of types can expand when arrayness is different.
             TType variableType;
             variableType.shallowCopy(declaredType);
 
-            // recognize array_specifier
-            TArraySizes* arraySizes = nullptr;
-            acceptArraySpecifier(arraySizes);
-
-            // Fix arrayness in the variableType
-            if (declaredType.isImplicitlySizedArray()) {
-                // Because "int[] a = int[2](...), b = int[3](...)" makes two arrays a and b
-                // of different sizes, for this case sharing the shallow copy of arrayness
-                // with the parseType oversubscribes it, so get a deep copy of the arrayness.
-                variableType.newArraySizes(declaredType.getArraySizes());
-            }
-            if (arraySizes || variableType.isArray()) {
-                // In the most general case, arrayness is potentially coming both from the
-                // declared type and from the variable: "int[] a[];" or just one or the other.
-                // Merge it all to the variableType, so all arrayness is part of the variableType.
-                parseContext.arrayDimMerge(variableType, arraySizes);
-            }
+            // In the most general case, arrayness is potentially coming both from the
+            // declared type and from the variable: "int[] a[];" or just one or the other.
+            // Merge it all to the variableType, so all arrayness is part of the variableType.
+            variableType.transferArraySizes(arraySizes);
+            variableType.copyArrayInnerSizes(declaredType.getArraySizes());
 
             // samplers accept immediate sampler state
             if (variableType.getBasicType() == EbtSampler) {
@@ -478,8 +477,9 @@
                 if (typedefDecl)
                     parseContext.declareTypedef(idToken.loc, *fullName, variableType);
                 else if (variableType.getBasicType() == EbtBlock) {
-                    parseContext.declareBlock(idToken.loc, variableType, fullName,
-                                              variableType.isArray() ? &variableType.getArraySizes() : nullptr);
+                    if (expressionNode)
+                        parseContext.error(idToken.loc, "buffer aliasing not yet supported", "block initializer", "");
+                    parseContext.declareBlock(idToken.loc, variableType, fullName);
                     parseContext.declareStructBufferCounter(idToken.loc, variableType, *fullName);
                 } else {
                     if (variableType.getQualifier().storage == EvqUniform && ! variableType.containsOpaque()) {
@@ -536,12 +536,16 @@
 bool HlslGrammar::acceptControlDeclaration(TIntermNode*& node)
 {
     node = nullptr;
+    TAttributes attributes;
 
     // fully_specified_type
     TType type;
-    if (! acceptFullySpecifiedType(type))
+    if (! acceptFullySpecifiedType(type, attributes))
         return false;
 
+    if (attributes.size() > 0)
+        parseContext.warn(token.loc, "attributes don't apply to control declaration", "", "");
+
     // filter out type casts
     if (peekTokenClass(EHTokLeftParen)) {
         recedeToken();
@@ -577,12 +581,12 @@
 //      : type_specifier
 //      | type_qualifier type_specifier
 //
-bool HlslGrammar::acceptFullySpecifiedType(TType& type)
+bool HlslGrammar::acceptFullySpecifiedType(TType& type, const TAttributes& attributes)
 {
     TIntermNode* nodeList = nullptr;
-    return acceptFullySpecifiedType(type, nodeList);
+    return acceptFullySpecifiedType(type, nodeList, attributes);
 }
-bool HlslGrammar::acceptFullySpecifiedType(TType& type, TIntermNode*& nodeList)
+bool HlslGrammar::acceptFullySpecifiedType(TType& type, TIntermNode*& nodeList, const TAttributes& attributes, bool forbidDeclarators)
 {
     // type_qualifier
     TQualifier qualifier;
@@ -601,11 +605,18 @@
 
         return false;
     }
+
     if (type.getBasicType() == EbtBlock) {
         // the type was a block, which set some parts of the qualifier
         parseContext.mergeQualifiers(type.getQualifier(), qualifier);
+    
+        // merge in the attributes
+        parseContext.transferTypeAttributes(token.loc, attributes, type);
+
         // further, it can create an anonymous instance of the block
-        if (peek() != EHTokIdentifier)
+        // (cbuffer and tbuffer don't consume the next identifier, and
+        // should set forbidDeclarators)
+        if (forbidDeclarators || peek() != EHTokIdentifier)
             parseContext.declareBlock(loc, type);
     } else {
         // Some qualifiers are set when parsing the type.  Merge those with
@@ -624,7 +635,7 @@
         if (type.isBuiltIn())
             qualifier.builtIn = type.getQualifier().builtIn;
 
-        type.getQualifier()    = qualifier;
+        type.getQualifier() = qualifier;
     }
 
     return true;
@@ -1016,7 +1027,7 @@
 
     TArraySizes* arraySizes = new TArraySizes;
     arraySizes->addInnerSize(size->getAsConstantUnion()->getConstArray()[0].getIConst());
-    type.newArraySizes(*arraySizes);
+    type.transferArraySizes(arraySizes);
     type.getQualifier().builtIn = patchType;
 
     if (! acceptTokenClass(EHTokRightAngle)) {
@@ -1357,14 +1368,15 @@
 }
 bool HlslGrammar::acceptType(TType& type, TIntermNode*& nodeList)
 {
-    // Basic types for min* types, broken out here in case of future
-    // changes, e.g, to use native halfs.
-    static const TBasicType min16float_bt = EbtFloat;
-    static const TBasicType min10float_bt = EbtFloat;
-    static const TBasicType half_bt       = EbtFloat;
-    static const TBasicType min16int_bt   = EbtInt;
-    static const TBasicType min12int_bt   = EbtInt;
-    static const TBasicType min16uint_bt  = EbtUint;
+    // Basic types for min* types, use native halfs if the option allows them.
+    bool enable16BitTypes = parseContext.hlslEnable16BitTypes();
+
+    const TBasicType min16float_bt = enable16BitTypes ? EbtFloat16 : EbtFloat;
+    const TBasicType min10float_bt = enable16BitTypes ? EbtFloat16 : EbtFloat;
+    const TBasicType half_bt       = enable16BitTypes ? EbtFloat16 : EbtFloat;
+    const TBasicType min16int_bt   = enable16BitTypes ? EbtInt16   : EbtInt;
+    const TBasicType min12int_bt   = enable16BitTypes ? EbtInt16   : EbtInt;
+    const TBasicType min16uint_bt  = enable16BitTypes ? EbtUint16  : EbtUint;
 
     // Some types might have turned into identifiers. Take the hit for checking
     // when this has happened.
@@ -1378,6 +1390,23 @@
         }
     }
 
+    bool isUnorm = false;
+    bool isSnorm = false;
+
+    // Accept snorm and unorm.  Presently, this is ignored, save for an error check below.
+    switch (peek()) {
+    case EHTokUnorm:
+        isUnorm = true;
+        advanceToken();  // eat the token
+        break;
+    case EHTokSNorm:
+        isSnorm = true;
+        advanceToken();  // eat the token
+        break;
+    default:
+        break;
+    }
+
     switch (peek()) {
     case EHTokVector:
         return acceptVectorTemplateType(type);
@@ -1453,6 +1482,10 @@
         return acceptStructBufferType(type);
         break;
 
+    case EHTokTextureBuffer:
+        return acceptTextureBufferType(type);
+        break;
+
     case EHTokConstantBuffer:
         return acceptConstantBufferType(type);
 
@@ -1549,6 +1582,10 @@
         new(&type) TType(EbtUint, EvqTemporary, 4);
         break;
 
+    case EHTokUint64:
+        new(&type) TType(EbtUint64);
+        break;
+
     case EHTokBool:
         new(&type) TType(EbtBool);
         break;
@@ -1968,6 +2005,11 @@
 
     advanceToken();
 
+    if ((isUnorm || isSnorm) && !type.isFloatingDomain()) {
+        parseContext.error(token.loc, "unorm and snorm only valid in floating point domain", "", "");
+        return false;
+    }
+
     return true;
 }
 
@@ -2003,10 +2045,18 @@
 
     // Now known to be one of CBUFFER, TBUFFER, CLASS, or STRUCT
 
-    // IDENTIFIER
+
+    // IDENTIFIER.  It might also be a keyword which can double as an identifier.
+    // For example:  'cbuffer ConstantBuffer' or 'struct ConstantBuffer' is legal.
+    // 'cbuffer int' is also legal, and 'struct int' appears rejected only because
+    // it attempts to redefine the 'int' type.
+    const char* idString = getTypeString(peek());
     TString structName = "";
-    if (peekTokenClass(EHTokIdentifier)) {
-        structName = *token.string;
+    if (peekTokenClass(EHTokIdentifier) || idString != nullptr) {
+        if (idString != nullptr)
+            structName = *idString;
+        else
+            structName = *token.string;
         advanceToken();
     }
 
@@ -2127,6 +2177,43 @@
     }
 }
 
+// texture_buffer
+//    : TEXTUREBUFFER LEFT_ANGLE type RIGHT_ANGLE
+bool HlslGrammar::acceptTextureBufferType(TType& type)
+{
+    if (! acceptTokenClass(EHTokTextureBuffer))
+        return false;
+
+    if (! acceptTokenClass(EHTokLeftAngle)) {
+        expected("left angle bracket");
+        return false;
+    }
+    
+    TType templateType;
+    if (! acceptType(templateType)) {
+        expected("type");
+        return false;
+    }
+
+    if (! acceptTokenClass(EHTokRightAngle)) {
+        expected("right angle bracket");
+        return false;
+    }
+
+    templateType.getQualifier().storage = EvqBuffer;
+    templateType.getQualifier().readonly = true;
+
+    TType blockType(templateType.getWritableStruct(), "", templateType.getQualifier());
+
+    blockType.getQualifier().storage = EvqBuffer;
+    blockType.getQualifier().readonly = true;
+
+    type.shallowCopy(blockType);
+
+    return true;
+}
+
+
 // struct_buffer
 //    : APPENDSTRUCTUREDBUFFER
 //    | BYTEADDRESSBUFFER
@@ -2199,9 +2286,9 @@
 
     // Create an unsized array out of that type.
     // TODO: does this work if it's already an array type?
-    TArraySizes unsizedArray;
-    unsizedArray.addInnerSize(UnsizedArraySize);
-    templateType->newArraySizes(unsizedArray);
+    TArraySizes* unsizedArray = new TArraySizes;
+    unsizedArray->addInnerSize(UnsizedArraySize);
+    templateType->transferArraySizes(unsizedArray);
     templateType->getQualifier().storage = storage;
 
     // field name is canonical for all structbuffers
@@ -2231,8 +2318,8 @@
 //      : struct_declaration SEMI_COLON struct_declaration SEMI_COLON ...
 //
 // struct_declaration
-//      : fully_specified_type struct_declarator COMMA struct_declarator ...
-//      | fully_specified_type IDENTIFIER function_parameters post_decls compound_statement // member-function definition
+//      : attributes fully_specified_type struct_declarator COMMA struct_declarator ...
+//      | attributes fully_specified_type IDENTIFIER function_parameters post_decls compound_statement // member-function definition
 //
 // struct_declarator
 //      : IDENTIFIER post_decls
@@ -2251,15 +2338,22 @@
             break;
 
         // struct_declaration
-    
+
+        // attributes
+        TAttributes attributes;
+        acceptAttributes(attributes);
+
         bool declarator_list = false;
 
         // fully_specified_type
         TType memberType;
-        if (! acceptFullySpecifiedType(memberType, nodeList)) {
+        if (! acceptFullySpecifiedType(memberType, nodeList, attributes)) {
             expected("member type");
             return false;
         }
+        
+        // merge in the attributes
+        parseContext.transferTypeAttributes(token.loc, attributes, memberType);
 
         // struct_declarator COMMA struct_declarator ...
         bool functionDefinitionAccepted = false;
@@ -2292,7 +2386,7 @@
                 TArraySizes* arraySizes = nullptr;
                 acceptArraySpecifier(arraySizes);
                 if (arraySizes)
-                    typeList->back().type->newArraySizes(*arraySizes);
+                    typeList->back().type->transferArraySizes(arraySizes);
 
                 acceptPostDecls(member.type->getQualifier());
 
@@ -2456,15 +2550,16 @@
 bool HlslGrammar::acceptParameterDeclaration(TFunction& function)
 {
     // attributes
-    TAttributeMap attributes;
+    TAttributes attributes;
     acceptAttributes(attributes);
 
     // fully_specified_type
     TType* type = new TType;
-    if (! acceptFullySpecifiedType(*type))
+    if (! acceptFullySpecifiedType(*type, attributes))
         return false;
 
-    parseContext.transferTypeAttributes(attributes, *type);
+    // merge in the attributes
+    parseContext.transferTypeAttributes(token.loc, attributes, *type);
 
     // identifier
     HlslToken idToken;
@@ -2474,12 +2569,12 @@
     TArraySizes* arraySizes = nullptr;
     acceptArraySpecifier(arraySizes);
     if (arraySizes) {
-        if (arraySizes->isImplicit()) {
-            parseContext.error(token.loc, "function parameter array cannot be implicitly sized", "", "");
+        if (arraySizes->hasUnsized()) {
+            parseContext.error(token.loc, "function parameter requires array size", "[]", "");
             return false;
         }
 
-        type->newArraySizes(*arraySizes);
+        type->transferArraySizes(arraySizes);
     }
 
     // post_decls
@@ -2555,6 +2650,8 @@
 //
 bool HlslGrammar::acceptParenExpression(TIntermTyped*& expression)
 {
+    expression = nullptr;
+
     // LEFT_PAREN
     if (! acceptTokenClass(EHTokLeftParen))
         expected("(");
@@ -2848,7 +2945,7 @@
             TArraySizes* arraySizes = nullptr;
             acceptArraySpecifier(arraySizes);
             if (arraySizes != nullptr)
-                castType.newArraySizes(*arraySizes);
+                castType.transferArraySizes(arraySizes);
             TSourceLoc loc = token.loc;
             if (acceptTokenClass(EHTokRightParen)) {
                 // We've matched "(type)" now, get the expression to cast
@@ -2965,6 +3062,8 @@
         }
         if (! peekTokenClass(EHTokLeftParen)) {
             node = parseContext.handleVariable(idToken.loc, fullName);
+            if (node == nullptr)
+                return false;
         } else if (acceptFunctionCall(idToken.loc, *fullName, node, nullptr)) {
             // function_call (nothing else to do yet)
         } else {
@@ -3175,6 +3274,9 @@
     case EHTokUintConstant:
         node = intermediate.addConstantUnion(token.u, token.loc, true);
         break;
+    case EHTokFloat16Constant:
+        node = intermediate.addConstantUnion(token.d, EbtFloat16, token.loc, true);
+        break;
     case EHTokFloatConstant:
         node = intermediate.addConstantUnion(token.d, EbtFloat, token.loc, true);
         break;
@@ -3298,7 +3400,7 @@
     statement = nullptr;
 
     // attributes
-    TAttributeMap attributes;
+    TAttributes attributes;
     acceptAttributes(attributes);
 
     // attributed_statement
@@ -3370,7 +3472,7 @@
 //      | PATCHCONSTANTFUNC
 //      | NUMTHREADS LEFT_PAREN x_size, y_size,z z_size RIGHT_PAREN
 //
-void HlslGrammar::acceptAttributes(TAttributeMap& attributes)
+void HlslGrammar::acceptAttributes(TAttributes& attributes)
 {
     // For now, accept the [ XXX(X) ] syntax, but drop all but
     // numthreads, which is used to set the CS local size.
@@ -3441,9 +3543,16 @@
             return;
         }
 
-        // Add any values we found into the attribute map.  This accepts
-        // (and ignores) values not mapping to a known TAttributeType;
-        attributes.setAttribute(nameSpace, attributeToken.string, expressions);
+        // Add any values we found into the attribute map.
+        if (attributeToken.string != nullptr) {
+            TAttributeType attributeType = parseContext.attributeFromName(nameSpace, *attributeToken.string);
+            if (attributeType == EatNone)
+                parseContext.warn(attributeToken.loc, "unrecognized attribute", attributeToken.string->c_str(), "");
+            else {
+                TAttributeArgs attributeArgs = { attributeType, expressions };
+                attributes.push_back(attributeArgs);
+            }
+        }
     } while (true);
 }
 
@@ -3451,12 +3560,10 @@
 //      : IF LEFT_PAREN expression RIGHT_PAREN statement
 //      : IF LEFT_PAREN expression RIGHT_PAREN statement ELSE statement
 //
-bool HlslGrammar::acceptSelectionStatement(TIntermNode*& statement, const TAttributeMap& attributes)
+bool HlslGrammar::acceptSelectionStatement(TIntermNode*& statement, const TAttributes& attributes)
 {
     TSourceLoc loc = token.loc;
 
-    const TSelectionControl control = parseContext.handleSelectionControl(attributes);
-
     // IF
     if (! acceptTokenClass(EHTokIf))
         return false;
@@ -3494,7 +3601,9 @@
     }
 
     // Put the pieces together
-    statement = intermediate.addSelection(condition, thenElse, loc, control);
+    statement = intermediate.addSelection(condition, thenElse, loc);
+    parseContext.handleSelectionAttributes(loc, statement->getAsSelectionNode(), attributes);
+
     parseContext.popScope();
     --parseContext.controlFlowNestingLevel;
 
@@ -3504,13 +3613,11 @@
 // switch_statement
 //      : SWITCH LEFT_PAREN expression RIGHT_PAREN compound_statement
 //
-bool HlslGrammar::acceptSwitchStatement(TIntermNode*& statement, const TAttributeMap& attributes)
+bool HlslGrammar::acceptSwitchStatement(TIntermNode*& statement, const TAttributes& attributes)
 {
     // SWITCH
     TSourceLoc loc = token.loc;
 
-    const TSelectionControl control = parseContext.handleSelectionControl(attributes);
-
     if (! acceptTokenClass(EHTokSwitch))
         return false;
 
@@ -3530,7 +3637,8 @@
     --parseContext.controlFlowNestingLevel;
 
     if (statementOkay)
-        statement = parseContext.addSwitch(loc, switchExpression, statement ? statement->getAsAggregate() : nullptr, control);
+        statement = parseContext.addSwitch(loc, switchExpression, statement ? statement->getAsAggregate() : nullptr,
+                                           attributes);
 
     parseContext.popSwitchSequence();
     parseContext.popScope();
@@ -3544,7 +3652,7 @@
 //      | FOR LEFT_PAREN for_init_statement for_rest_statement RIGHT_PAREN statement
 //
 // Non-speculative, only call if it needs to be found; WHILE or DO or FOR already seen.
-bool HlslGrammar::acceptIterationStatement(TIntermNode*& statement, const TAttributeMap& attributes)
+bool HlslGrammar::acceptIterationStatement(TIntermNode*& statement, const TAttributes& attributes)
 {
     TSourceLoc loc = token.loc;
     TIntermTyped* condition = nullptr;
@@ -3554,9 +3662,8 @@
 
     //  WHILE or DO or FOR
     advanceToken();
-    
-    const TLoopControl control = parseContext.handleLoopControl(attributes);
 
+    TIntermLoop* loopNode = nullptr;
     switch (loop) {
     case EHTokWhile:
         // so that something declared in the condition is scoped to the lifetime
@@ -3582,9 +3689,9 @@
         parseContext.popScope();
         --parseContext.controlFlowNestingLevel;
 
-        statement = intermediate.addLoop(statement, condition, nullptr, true, loc, control);
-
-        return true;
+        loopNode = intermediate.addLoop(statement, condition, nullptr, true, loc);
+        statement = loopNode;
+        break;
 
     case EHTokDo:
         parseContext.nestLooping();  // this only needs to work right if no errors
@@ -3603,7 +3710,6 @@
         }
 
         // LEFT_PAREN condition RIGHT_PAREN
-        TIntermTyped* condition;
         if (! acceptParenExpression(condition))
             return false;
         condition = parseContext.convertConditionalExpression(loc, condition);
@@ -3616,9 +3722,9 @@
         parseContext.unnestLooping();
         --parseContext.controlFlowNestingLevel;
 
-        statement = intermediate.addLoop(statement, condition, 0, false, loc, control);
-
-        return true;
+        loopNode = intermediate.addLoop(statement, condition, 0, false, loc);
+        statement = loopNode;
+        break;
 
     case EHTokFor:
     {
@@ -3660,18 +3766,21 @@
             return false;
         }
 
-        statement = intermediate.addForLoop(statement, initNode, condition, iterator, true, loc, control);
+        statement = intermediate.addForLoop(statement, initNode, condition, iterator, true, loc, loopNode);
 
         parseContext.popScope();
         parseContext.unnestLooping();
         --parseContext.controlFlowNestingLevel;
 
-        return true;
+        break;
     }
 
     default:
         return false;
     }
+
+    parseContext.handleLoopAttributes(loc, loopNode, attributes);
+    return true;
 }
 
 // jump_statement
@@ -3699,9 +3808,17 @@
     switch (jump) {
     case EHTokContinue:
         statement = intermediate.addBranch(EOpContinue, token.loc);
+        if (parseContext.loopNestingLevel == 0) {
+            expected("loop");
+            return false;
+        }
         break;
     case EHTokBreak:
         statement = intermediate.addBranch(EOpBreak, token.loc);
+        if (parseContext.loopNestingLevel == 0 && parseContext.switchSequenceStack.size() == 0) {
+            expected("loop or switch");
+            return false;
+        }
         break;
     case EHTokDiscard:
         statement = intermediate.addBranch(EOpKill, token.loc);
@@ -3993,6 +4110,8 @@
     case EHTokMin10float: return "min10float";
     case EHTokMin16int:   return "min16int";
     case EHTokMin12int:   return "min12int";
+    case EHTokConstantBuffer: return "ConstantBuffer";
+    case EHTokLayout:     return "layout";
     default:
         return nullptr;
     }
diff --git a/hlsl/hlslGrammar.h b/hlsl/hlslGrammar.h
index f0adfa0..046f795 100755
--- a/hlsl/hlslGrammar.h
+++ b/hlsl/hlslGrammar.h
@@ -43,7 +43,6 @@
 
 namespace glslang {
 
-    class TAttributeMap;
     class TFunctionDeclarator;
 
     // Should just be the grammar aspect of HLSL.
@@ -71,8 +70,8 @@
         bool acceptControlDeclaration(TIntermNode*& node);
         bool acceptSamplerDeclarationDX9(TType&);
         bool acceptSamplerState();
-        bool acceptFullySpecifiedType(TType&);
-        bool acceptFullySpecifiedType(TType&, TIntermNode*& nodeList);
+        bool acceptFullySpecifiedType(TType&, const TAttributes&);
+        bool acceptFullySpecifiedType(TType&, TIntermNode*& nodeList, const TAttributes&, bool forbidDeclarators = false);
         bool acceptQualifier(TQualifier&);
         bool acceptLayoutQualifierList(TQualifier&);
         bool acceptType(TType&);
@@ -89,6 +88,7 @@
         bool acceptTextureType(TType&);
         bool acceptSubpassInputType(TType&);
         bool acceptStructBufferType(TType&);
+        bool acceptTextureBufferType(TType&);
         bool acceptConstantBufferType(TType&);
         bool acceptStruct(TType&, TIntermNode*& nodeList);
         bool acceptStructDeclarationList(TTypeList*&, TIntermNode*& nodeList, TVector<TFunctionDeclarator>&);
@@ -116,10 +116,10 @@
         bool acceptScopedCompoundStatement(TIntermNode*&);
         bool acceptStatement(TIntermNode*&);
         bool acceptNestedStatement(TIntermNode*&);
-        void acceptAttributes(TAttributeMap&);
-        bool acceptSelectionStatement(TIntermNode*&, const TAttributeMap&);
-        bool acceptSwitchStatement(TIntermNode*&, const TAttributeMap&);
-        bool acceptIterationStatement(TIntermNode*&, const TAttributeMap&);
+        void acceptAttributes(TAttributes&);
+        bool acceptSelectionStatement(TIntermNode*&, const TAttributes&);
+        bool acceptSwitchStatement(TIntermNode*&, const TAttributes&);
+        bool acceptIterationStatement(TIntermNode*&, const TAttributes&);
         bool acceptJumpStatement(TIntermNode*&);
         bool acceptCaseLabel(TIntermNode*&);
         bool acceptDefaultLabel(TIntermNode*&);
diff --git a/hlsl/hlslParseHelper.cpp b/hlsl/hlslParseHelper.cpp
index 01b9cc3..ef45da1 100755
--- a/hlsl/hlslParseHelper.cpp
+++ b/hlsl/hlslParseHelper.cpp
@@ -1,6 +1,6 @@
 //
-// Copyright (C) 2016 Google, Inc.
-// Copyright (C) 2016 LunarG, Inc.
+// Copyright (C) 2017 Google, Inc.
+// Copyright (C) 2017 LunarG, Inc.
 //
 // All rights reserved.
 //
@@ -65,10 +65,10 @@
     entryPointFunction(nullptr),
     entryPointFunctionBody(nullptr),
     gsStreamOutput(nullptr),
-    clipDistanceInput(nullptr),
-    cullDistanceInput(nullptr),
     clipDistanceOutput(nullptr),
-    cullDistanceOutput(nullptr)
+    cullDistanceOutput(nullptr),
+    clipDistanceInput(nullptr),
+    cullDistanceInput(nullptr)
 {
     globalUniformDefaults.clear();
     globalUniformDefaults.layoutMatrix = ElmRowMajor;
@@ -550,6 +550,13 @@
             warn(loc, "unknown pack_matrix pragma value", tokens[2].c_str(), "");
             globalUniformDefaults.layoutMatrix = globalBufferDefaults.layoutMatrix = ElmRowMajor;
         }
+        return;
+    }
+
+    // Handle once
+    if (lowerTokens[0] == "once") {
+        warn(loc, "not implemented", "#pragma once", "");
+        return;
     }
 }
 
@@ -822,7 +829,12 @@
     } else {
         // at least one of base and index is variable...
 
-        if (base->getAsSymbolNode() && wasFlattened(base)) {
+        if (index->getQualifier().isFrontEndConstant())
+            checkIndex(loc, base->getType(), indexValue);
+
+        if (base->getType().isScalarOrVec1())
+            result = base;
+        else if (base->getAsSymbolNode() && wasFlattened(base)) {
             if (index->getQualifier().storage != EvqConst)
                 error(loc, "Invalid variable index to flattened array", base->getAsSymbolNode()->getName().c_str(), "");
 
@@ -830,14 +842,13 @@
             flattened = (result != base);
         } else {
             if (index->getQualifier().isFrontEndConstant()) {
-                if (base->getType().isImplicitlySizedArray())
-                    updateImplicitArraySize(loc, base, indexValue);
+                if (base->getType().isUnsizedArray())
+                    base->getWritableType().updateImplicitArraySize(indexValue + 1);
                 else
                     checkIndex(loc, base->getType(), indexValue);
                 result = intermediate.addIndex(EOpIndexDirect, base, index, loc);
-            } else {
+            } else
                 result = intermediate.addIndex(EOpIndexIndirect, base, index, loc);
-            }
         }
     }
 
@@ -1096,7 +1107,7 @@
     TVariable* ioVar = makeInternalVariable(baseName + "." + memberType.getFieldName(), memberType);
 
     if (arraySizes != nullptr && !memberType.isArray())
-        ioVar->getWritableType().newArraySizes(*arraySizes);
+        ioVar->getWritableType().copyArraySizes(*arraySizes);
 
     splitBuiltIns[tInterstageIoData(memberType.getQualifier().builtIn, outerQualifier.storage)] = ioVar;
     if (!isClipOrCullDistance(ioVar->getType()))
@@ -1160,7 +1171,7 @@
         return (type.isArray() && intermediate.getFlattenUniformArrays() && topLevel) ||
                (type.isStruct() && type.containsOpaque());
     default:
-        return type.isStruct() && type.containsOpaque();
+        return false;
     };
 }
 
@@ -1247,7 +1258,7 @@
             // inherited locations must be auto bumped, not replicated
             if (flattenData.nextLocation != TQualifier::layoutLocationEnd) {
                 memberVariable->getWritableType().getQualifier().layoutLocation = flattenData.nextLocation;
-                flattenData.nextLocation += intermediate.computeTypeLocationSize(memberVariable->getType());
+                flattenData.nextLocation += intermediate.computeTypeLocationSize(memberVariable->getType(), language);
                 nextOutLocation = std::max(nextOutLocation, flattenData.nextLocation);
             }
         }
@@ -1292,7 +1303,7 @@
                                                 name + "." + dereferencedType.getFieldName(),
                                                 linkage, outerQualifier,
                                                 builtInArraySizes == nullptr && dereferencedType.isArray()
-                                                                       ? &dereferencedType.getArraySizes()
+                                                                       ? dereferencedType.getArraySizes()
                                                                        : builtInArraySizes);
             flattenData.offsets[pos++] = mpos;
         }
@@ -1309,7 +1320,7 @@
                                    TFlattenData& flattenData, TString name, bool linkage,
                                    const TQualifier& outerQualifier)
 {
-    assert(type.isArray() && !type.isImplicitlySizedArray());
+    assert(type.isSizedArray());
 
     const int size = type.getOuterArraySize();
     const TType dereferencedType(type, 0);
@@ -1503,9 +1514,9 @@
     // Alter or set array size as needed.
     if (requiredArraySize > 0) {
         if (!type.isArray() || type.getOuterArraySize() != requiredArraySize) {
-            TArraySizes arraySizes;
-            arraySizes.addInnerSize(requiredArraySize);
-            type.newArraySizes(arraySizes);
+            TArraySizes* arraySizes = new TArraySizes;
+            arraySizes->addInnerSize(requiredArraySize);
+            type.transferArraySizes(arraySizes);
         }
     }
 }
@@ -1527,9 +1538,9 @@
                     int size;
                     if (type.isArray() && qualifier.isArrayedIo(language)) {
                         TType elementType(type, 0);
-                        size = intermediate.computeTypeLocationSize(elementType);
+                        size = intermediate.computeTypeLocationSize(elementType, language);
                     } else
-                        size = intermediate.computeTypeLocationSize(type);
+                        size = intermediate.computeTypeLocationSize(type, language);
 
                     if (qualifier.storage == EvqVaryingIn) {
                         variable.getWritableType().getQualifier().layoutLocation = nextInLocation;
@@ -1599,7 +1610,7 @@
     if (! hasStructBuffCounter(*param.type))
         return;
 
-    const TString counterBlockName(getStructBuffCounterName(*param.name));
+    const TString counterBlockName(intermediate.addCounterBufferName(*param.name));
 
     TType counterType;
     counterBufferType(loc, counterType);
@@ -1620,7 +1631,7 @@
 // Returns an aggregate of parameter-symbol nodes.
 //
 TIntermAggregate* HlslParseContext::handleFunctionDefinition(const TSourceLoc& loc, TFunction& function,
-                                                             const TAttributeMap& attributes,
+                                                             const TAttributes& attributes,
                                                              TIntermNode*& entryPointTree)
 {
     currentCaller = function.getMangledName();
@@ -1717,169 +1728,218 @@
 }
 
 // Handle all [attrib] attribute for the shader entry point
-void HlslParseContext::handleEntryPointAttributes(const TSourceLoc& loc, const TAttributeMap& attributes)
+void HlslParseContext::handleEntryPointAttributes(const TSourceLoc& loc, const TAttributes& attributes)
 {
-    // Handle entry-point function attributes
-    const TIntermAggregate* numThreads = attributes[EatNumThreads];
-    if (numThreads != nullptr) {
-        const TIntermSequence& sequence = numThreads->getSequence();
-
-        for (int lid = 0; lid < int(sequence.size()); ++lid)
-            intermediate.setLocalSize(lid, sequence[lid]->getAsConstantUnion()->getConstArray()[0].getIConst());
-    }
-
-    // MaxVertexCount
-    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", "", "");
+    for (auto it = attributes.begin(); it != attributes.end(); ++it) {
+        switch (it->name) {
+        case EatNumThreads:
+        {
+            const TIntermSequence& sequence = it->args->getSequence();
+            for (int lid = 0; lid < int(sequence.size()); ++lid)
+                intermediate.setLocalSize(lid, sequence[lid]->getAsConstantUnion()->getConstArray()[0].getIConst());
+            break;
         }
-    }
+        case EatMaxVertexCount:
+        {
+            int maxVertexCount;
 
-    // Handle [patchconstantfunction("...")]
-    if (attributes.contains(EatPatchConstantFunc)) {
-        TString pcfName;
-        if (! attributes.getString(EatPatchConstantFunc, pcfName, 0, false)) {
-            error(loc, "invalid patch constant function", "", "");
-        } else {
-            patchConstantFunctionName = pcfName;
+            if (! it->getInt(maxVertexCount)) {
+                error(loc, "invalid maxvertexcount", "", "");
+            } else {
+                if (! intermediate.setVertices(maxVertexCount))
+                    error(loc, "cannot change previously set maxvertexcount attribute", "", "");
+            }
+            break;
         }
-    }
-
-    // Handle [domain("...")]
-    if (attributes.contains(EatDomain)) {
-        TString domainStr;
-        if (! attributes.getString(EatDomain, domainStr)) {
-            error(loc, "invalid domain", "", "");
-        } else {
-            TLayoutGeometry domain = ElgNone;
-
-            if (domainStr == "tri") {
-                domain = ElgTriangles;
-            } else if (domainStr == "quad") {
-                domain = ElgQuads;
-            } else if (domainStr == "isoline") {
-                domain = ElgIsolines;
+        case EatPatchConstantFunc:
+        {
+            TString pcfName;
+            if (! it->getString(pcfName, 0, false)) {
+                error(loc, "invalid patch constant function", "", "");
             } else {
-                error(loc, "unsupported domain type", domainStr.c_str(), "");
+                patchConstantFunctionName = pcfName;
             }
-
-            if (language == EShLangTessEvaluation) {
-                if (! intermediate.setInputPrimitive(domain))
-                    error(loc, "cannot change previously set domain", TQualifier::getGeometryString(domain), "");
-            } else {
-                if (! intermediate.setOutputPrimitive(domain))
-                    error(loc, "cannot change previously set domain", TQualifier::getGeometryString(domain), "");
-            }
+            break;
         }
-    }
-
-    // Handle [outputtopology("...")]
-    if (attributes.contains(EatOutputTopology)) {
-        TString topologyStr;
-        if (! attributes.getString(EatOutputTopology, topologyStr)) {
-            error(loc, "invalid outputtopology", "", "");
-        } else {
-            TVertexOrder vertexOrder = EvoNone;
-            TLayoutGeometry primitive = ElgNone;
-
-            if (topologyStr == "point") {
-                intermediate.setPointMode();
-            } else if (topologyStr == "line") {
-                primitive = ElgIsolines;
-            } else if (topologyStr == "triangle_cw") {
-                vertexOrder = EvoCw;
-                primitive = ElgTriangles;
-            } else if (topologyStr == "triangle_ccw") {
-                vertexOrder = EvoCcw;
-                primitive = ElgTriangles;
+        case EatDomain:
+        {
+            // Handle [domain("...")]
+            TString domainStr;
+            if (! it->getString(domainStr)) {
+                error(loc, "invalid domain", "", "");
             } else {
-                error(loc, "unsupported outputtopology type", topologyStr.c_str(), "");
-            }
+                TLayoutGeometry domain = ElgNone;
 
-            if (vertexOrder != EvoNone) {
-                if (! intermediate.setVertexOrder(vertexOrder)) {
-                    error(loc, "cannot change previously set outputtopology",
-                          TQualifier::getVertexOrderString(vertexOrder), "");
+                if (domainStr == "tri") {
+                    domain = ElgTriangles;
+                } else if (domainStr == "quad") {
+                    domain = ElgQuads;
+                } else if (domainStr == "isoline") {
+                    domain = ElgIsolines;
+                } else {
+                    error(loc, "unsupported domain type", domainStr.c_str(), "");
+                }
+
+                if (language == EShLangTessEvaluation) {
+                    if (! intermediate.setInputPrimitive(domain))
+                        error(loc, "cannot change previously set domain", TQualifier::getGeometryString(domain), "");
+                } else {
+                    if (! intermediate.setOutputPrimitive(domain))
+                        error(loc, "cannot change previously set domain", TQualifier::getGeometryString(domain), "");
                 }
             }
-            if (primitive != ElgNone)
-                intermediate.setOutputPrimitive(primitive);
+            break;
         }
-    }
-
-    // Handle [partitioning("...")]
-    if (attributes.contains(EatPartitioning)) {
-        TString partitionStr;
-        if (! attributes.getString(EatPartitioning, partitionStr)) {
-            error(loc, "invalid partitioning", "", "");
-        } else {
-            TVertexSpacing partitioning = EvsNone;
-                
-            if (partitionStr == "integer") {
-                partitioning = EvsEqual;
-            } else if (partitionStr == "fractional_even") {
-                partitioning = EvsFractionalEven;
-            } else if (partitionStr == "fractional_odd") {
-                partitioning = EvsFractionalOdd;
-                //} else if (partition == "pow2") { // TODO: currently nothing to map this to.
+        case EatOutputTopology:
+        {
+            // Handle [outputtopology("...")]
+            TString topologyStr;
+            if (! it->getString(topologyStr)) {
+                error(loc, "invalid outputtopology", "", "");
             } else {
-                error(loc, "unsupported partitioning type", partitionStr.c_str(), "");
-            }
+                TVertexOrder vertexOrder = EvoNone;
+                TLayoutGeometry primitive = ElgNone;
 
-            if (! intermediate.setVertexSpacing(partitioning))
-                error(loc, "cannot change previously set partitioning",
-                      TQualifier::getVertexSpacingString(partitioning), "");
+                if (topologyStr == "point") {
+                    intermediate.setPointMode();
+                } else if (topologyStr == "line") {
+                    primitive = ElgIsolines;
+                } else if (topologyStr == "triangle_cw") {
+                    vertexOrder = EvoCw;
+                    primitive = ElgTriangles;
+                } else if (topologyStr == "triangle_ccw") {
+                    vertexOrder = EvoCcw;
+                    primitive = ElgTriangles;
+                } else {
+                    error(loc, "unsupported outputtopology type", topologyStr.c_str(), "");
+                }
+
+                if (vertexOrder != EvoNone) {
+                    if (! intermediate.setVertexOrder(vertexOrder)) {
+                        error(loc, "cannot change previously set outputtopology",
+                              TQualifier::getVertexOrderString(vertexOrder), "");
+                    }
+                }
+                if (primitive != ElgNone)
+                    intermediate.setOutputPrimitive(primitive);
+            }
+            break;
         }
-    }
+        case EatPartitioning:
+        {
+            // Handle [partitioning("...")]
+            TString partitionStr;
+            if (! it->getString(partitionStr)) {
+                error(loc, "invalid partitioning", "", "");
+            } else {
+                TVertexSpacing partitioning = EvsNone;
+                
+                if (partitionStr == "integer") {
+                    partitioning = EvsEqual;
+                } else if (partitionStr == "fractional_even") {
+                    partitioning = EvsFractionalEven;
+                } else if (partitionStr == "fractional_odd") {
+                    partitioning = EvsFractionalOdd;
+                    //} else if (partition == "pow2") { // TODO: currently nothing to map this to.
+                } else {
+                    error(loc, "unsupported partitioning type", partitionStr.c_str(), "");
+                }
 
-    // Handle [outputcontrolpoints("...")]
-    if (attributes.contains(EatOutputControlPoints)) {
-        int ctrlPoints;
-        if (! attributes.getInt(EatOutputControlPoints, ctrlPoints)) {
-            error(loc, "invalid outputcontrolpoints", "", "");
-        } else {
-            if (! intermediate.setVertices(ctrlPoints)) {
-                error(loc, "cannot change previously set outputcontrolpoints attribute", "", "");
+                if (! intermediate.setVertexSpacing(partitioning))
+                    error(loc, "cannot change previously set partitioning",
+                          TQualifier::getVertexSpacingString(partitioning), "");
             }
+            break;
+        }
+        case EatOutputControlPoints:
+        {
+            // Handle [outputcontrolpoints("...")]
+            int ctrlPoints;
+            if (! it->getInt(ctrlPoints)) {
+                error(loc, "invalid outputcontrolpoints", "", "");
+            } else {
+                if (! intermediate.setVertices(ctrlPoints)) {
+                    error(loc, "cannot change previously set outputcontrolpoints attribute", "", "");
+                }
+            }
+            break;
+        }
+        case EatBuiltIn:
+        case EatLocation:
+            // tolerate these because of dual use of entrypoint and type attributes
+            break;
+        default:
+            warn(loc, "attribute does not apply to entry point", "", "");
+            break;
         }
     }
 }
 
 // Update the given type with any type-like attribute information in the
 // attributes.
-void HlslParseContext::transferTypeAttributes(const TAttributeMap& attributes, TType& type)
+void HlslParseContext::transferTypeAttributes(const TSourceLoc& loc, const TAttributes& attributes, TType& type,
+    bool allowEntry)
 {
-    // location
+    if (attributes.size() == 0)
+        return;
+
     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;
+    TString builtInString;
+    for (auto it = attributes.begin(); it != attributes.end(); ++it) {
+        switch (it->name) {
+        case EatLocation:
+            // location
+            if (it->getInt(value))
+                type.getQualifier().layoutLocation = value;
+            break;
+        case EatBinding:
+            // binding
+            if (it->getInt(value)) {
+                type.getQualifier().layoutBinding = value;
+                type.getQualifier().layoutSet = 0;
+            }
+            // set
+            if (it->getInt(value, 1))
+                type.getQualifier().layoutSet = value;
+            break;
+        case EatGlobalBinding:
+            // global cbuffer binding
+            if (it->getInt(value))
+                globalUniformBinding = value;
+            // global cbuffer binding
+            if (it->getInt(value, 1))
+                globalUniformSet = value;
+            break;
+        case EatInputAttachment:
+            // input attachment
+            if (it->getInt(value))
+                type.getQualifier().layoutAttachment = value;
+            break;
+        case EatBuiltIn:
+            // PointSize built-in
+            if (it->getString(builtInString, 0, false)) {
+                if (builtInString == "PointSize")
+                    type.getQualifier().builtIn = EbvPointSize;
+            }
+            break;
+        case EatPushConstant:
+            // push_constant
+            type.getQualifier().layoutPushConstant = true;
+            break;
+        case EatConstantId:
+            // specialization constant
+            if (it->getInt(value)) {
+                TSourceLoc loc;
+                loc.init();
+                setSpecConstantId(loc, type.getQualifier(), value);
+            }
+            break;
+        default:
+            if (! allowEntry)
+                warn(loc, "attribute does not apply to a type", "", "");
+            break;
+        }
     }
-
-    // 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;
 }
 
 //
@@ -1915,7 +1975,7 @@
 // a subtree that creates the entry point.
 //
 TIntermNode* HlslParseContext::transformEntryPoint(const TSourceLoc& loc, TFunction& userFunction,
-                                                   const TAttributeMap& attributes)
+                                                   const TAttributes& attributes)
 {
     // Return true if this is a tessellation patch constant function input to a domain shader.
     const auto isDsPcfInput = [this](const TType& type) {
@@ -2215,9 +2275,9 @@
             outputType.shallowCopy(function.getType());
 
             // vertices has necessarily already been set when handling entry point attributes.
-            TArraySizes arraySizes;
-            arraySizes.addInnerSize(intermediate.getVertices());
-            outputType.newArraySizes(arraySizes);
+            TArraySizes* arraySizes = new TArraySizes;
+            arraySizes->addInnerSize(intermediate.getVertices());
+            outputType.transferArraySizes(arraySizes);
 
             clearUniformInputOutput(function.getWritableType().getQualifier());
             returnValue = makeIoVariable("@entryPointOutput", outputType, EvqVaryingOut);
@@ -2291,6 +2351,63 @@
         arguments = newArg;
 }
 
+// Position may require special handling: we can optionally invert Y.
+// See: https://github.com/KhronosGroup/glslang/issues/1173
+//      https://github.com/KhronosGroup/glslang/issues/494
+TIntermTyped* HlslParseContext::assignPosition(const TSourceLoc& loc, TOperator op,
+                                               TIntermTyped* left, TIntermTyped* right)
+{
+    // If we are not asked for Y inversion, use a plain old assign.
+    if (!intermediate.getInvertY())
+        return intermediate.addAssign(op, left, right, loc);
+
+    // If we get here, we should invert Y.
+    TIntermAggregate* assignList = nullptr;
+
+    // If this is a complex rvalue, we don't want to dereference it many times.  Create a temporary.
+    TVariable* rhsTempVar = nullptr;
+    rhsTempVar = makeInternalVariable("@position", right->getType());
+    rhsTempVar->getWritableType().getQualifier().makeTemporary();
+
+    {
+        TIntermTyped* rhsTempSym = intermediate.addSymbol(*rhsTempVar, loc);
+        assignList = intermediate.growAggregate(assignList,
+                                                intermediate.addAssign(EOpAssign, rhsTempSym, right, loc), loc);
+    }
+
+    // pos.y = -pos.y
+    {
+        const int Y = 1;
+
+        TIntermTyped* tempSymL = intermediate.addSymbol(*rhsTempVar, loc);
+        TIntermTyped* tempSymR = intermediate.addSymbol(*rhsTempVar, loc);
+        TIntermTyped* index = intermediate.addConstantUnion(Y, loc);
+
+        TIntermTyped* lhsElement = intermediate.addIndex(EOpIndexDirect, tempSymL, index, loc);
+        TIntermTyped* rhsElement = intermediate.addIndex(EOpIndexDirect, tempSymR, index, loc);
+
+        const TType derefType(right->getType(), 0);
+    
+        lhsElement->setType(derefType);
+        rhsElement->setType(derefType);
+
+        TIntermTyped* yNeg = intermediate.addUnaryMath(EOpNegative, rhsElement, loc);
+
+        assignList = intermediate.growAggregate(assignList, intermediate.addAssign(EOpAssign, lhsElement, yNeg, loc));
+    }
+
+    // Assign the rhs temp (now with Y inversion) to the final output
+    {
+        TIntermTyped* rhsTempSym = intermediate.addSymbol(*rhsTempVar, loc);
+        assignList = intermediate.growAggregate(assignList, intermediate.addAssign(op, left, rhsTempSym, loc));
+    }
+
+    assert(assignList != nullptr);
+    assignList->setOperator(EOpSequence);
+
+    return assignList;
+}
+    
 // Clip and cull distance require special handling due to a semantic mismatch.  In HLSL,
 // these can be float scalar, float vector, or arrays of float scalar or float vector.
 // In SPIR-V, they are arrays of scalar floats in all cases.  We must copy individual components
@@ -2397,11 +2514,11 @@
         clipCullType.getQualifier() = clipCullNode->getType().getQualifier();
 
         // Create required array dimension
-        TArraySizes arraySizes;
+        TArraySizes* arraySizes = new TArraySizes;
         if (isImplicitlyArrayed)
-            arraySizes.addInnerSize(requiredOuterArraySize);
-        arraySizes.addInnerSize(requiredInnerArraySize);
-        clipCullType.newArraySizes(arraySizes);
+            arraySizes->addInnerSize(requiredOuterArraySize);
+        arraySizes->addInnerSize(requiredInnerArraySize);
+        clipCullType.transferArraySizes(arraySizes);
 
         // Obtain symbol name: we'll use that for the symbol we introduce.
         TIntermSymbol* sym = clipCullNode->getAsSymbolNode();
@@ -2556,6 +2673,12 @@
                wasSplit(binaryNode->getLeft());
     };
 
+    // Return true if this stage assigns clip position with potentially inverted Y
+    const auto assignsClipPos = [this](const TIntermTyped* node) -> bool {
+        return node->getType().getQualifier().builtIn == EbvPosition &&
+               (language == EShLangVertex || language == EShLangGeometry || language == EShLangTessEvaluation);
+    };
+
     const bool isSplitLeft    = wasSplit(left) || indexesSplit(left);
     const bool isSplitRight   = wasSplit(right) || indexesSplit(right);
 
@@ -2571,6 +2694,9 @@
 
             const int semanticId = (isOutput ? left : right)->getType().getQualifier().layoutLocation;
             return assignClipCullDistance(loc, op, semanticId, left, right);
+        } else if (assignsClipPos(left)) {
+            // Position can require special handling: see comment above assignPosition
+            return assignPosition(loc, op, left, right);
         }
 
         return intermediate.addAssign(op, left, right, loc);
@@ -2655,13 +2781,23 @@
             // copy from interstage IO built-in if needed
             subTree = intermediate.addSymbol(*builtInVar);
 
-            // Arrayness of builtIn symbols isn't handled by the normal recursion:
-            // it's been extracted and moved to the built-in.
-            if (subTree->getType().isArray() && !arrayElement.empty()) {
-                const TType splitDerefType(subTree->getType(), arrayElement.back());
-                subTree = intermediate.addIndex(EOpIndexDirect, subTree,
-                                                intermediate.addConstantUnion(arrayElement.back(), loc), loc);
-                subTree->setType(splitDerefType);
+            if (subTree->getType().isArray()) {
+                // Arrayness of builtIn symbols isn't handled by the normal recursion:
+                // it's been extracted and moved to the built-in.
+                if (!arrayElement.empty()) {
+                    const TType splitDerefType(subTree->getType(), arrayElement.back());
+                    subTree = intermediate.addIndex(EOpIndexDirect, subTree,
+                                                    intermediate.addConstantUnion(arrayElement.back(), loc), loc);
+                    subTree->setType(splitDerefType);
+                } else if (splitNode->getAsOperator() != nullptr && (splitNode->getAsOperator()->getOp() == EOpIndexIndirect)) {
+                    // This might also be a stage with arrayed outputs, in which case there's an index
+                    // operation we should transfer to the output builtin.
+
+                    const TType splitDerefType(subTree->getType(), 0);
+                    subTree = intermediate.addIndex(splitNode->getAsOperator()->getOp(), subTree,
+                                                    splitNode->getAsBinaryNode()->getRight(), loc);
+                    subTree->setType(splitDerefType);
+                }
             }
         } else if (flattened && !shouldFlatten(derefType, isLeft ? leftStorage : rightStorage, false)) {
             if (isLeft)
@@ -2782,7 +2918,10 @@
                                                                               subSplitLeft, subSplitRight);
 
                     assignList = intermediate.growAggregate(assignList, clipCullAssign, loc);
-
+                } else if (assignsClipPos(subSplitLeft)) {
+                    // Position can require special handling: see comment above assignPosition
+                    TIntermTyped* positionAssign = assignPosition(loc, op, subSplitLeft, subSplitRight);
+                    assignList = intermediate.growAggregate(assignList, positionAssign, loc);
                 } else if (!shouldFlattenSubsetLeft && !shouldFlattenSubsetRight &&
                            !typeL.containsBuiltIn() && !typeR.containsBuiltIn()) {
                     // If this is the final flattening (no nested types below to flatten)
@@ -3025,8 +3164,8 @@
 void HlslParseContext::counterBufferType(const TSourceLoc& loc, TType& type)
 {
     // Counter type
-    TType* counterType = new TType(EbtInt, EvqBuffer);
-    counterType->setFieldName("@count");
+    TType* counterType = new TType(EbtUint, EvqBuffer);
+    counterType->setFieldName(intermediate.implicitCounterName);
 
     TTypeList* blockStruct = new TTypeList;
     TTypeLoc  member = { counterType, loc };
@@ -3039,12 +3178,6 @@
     shareStructBufferType(type);
 }
 
-// knowledge of how to construct block name, in one place instead of N places.
-TString HlslParseContext::getStructBuffCounterName(const TString& blockName) const
-{
-    return blockName + "@count";
-}
-
 // declare counter for a structured buffer type
 void HlslParseContext::declareStructBufferCounter(const TSourceLoc& loc, const TType& bufferType, const TString& name)
 {
@@ -3058,9 +3191,9 @@
     TType blockType;
     counterBufferType(loc, blockType);
 
-    TString* blockName = new TString(getStructBuffCounterName(name));
+    TString* blockName = new TString(intermediate.addCounterBufferName(name));
 
-    // Counter buffer does not have its own counter buffer.  TODO: there should be a better way to track this.
+    // Counter buffer is not yet in use
     structBufferCounter[*blockName] = false;
 
     shareStructBufferType(blockType);
@@ -3074,7 +3207,7 @@
     if (buffer == nullptr || ! isStructBufferType(buffer->getType()))
         return nullptr;
 
-    const TString counterBlockName(getStructBuffCounterName(buffer->getAsSymbolNode()->getName()));
+    const TString counterBlockName(intermediate.addCounterBufferName(buffer->getAsSymbolNode()->getName()));
 
     // Mark the counter as being used
     structBufferCounter[counterBlockName] = true;
@@ -3083,11 +3216,10 @@
     TIntermTyped* index = intermediate.addConstantUnion(0, loc); // index to counter inside block struct
 
     TIntermTyped* counterMember = intermediate.addIndex(EOpIndexDirectStruct, counterVar, index, loc);
-    counterMember->setType(TType(EbtInt));
+    counterMember->setType(TType(EbtUint));
     return counterMember;
 }
 
-
 //
 // Decompose structure buffer methods into AST
 //
@@ -3117,7 +3249,7 @@
     // Some methods require a hidden internal counter, obtained via getStructBufferCounter().
     // This lambda adds something to it and returns the old value.
     const auto incDecCounter = [&](int incval) -> TIntermTyped* {
-        TIntermTyped* incrementValue = intermediate.addConstantUnion(incval, loc, true);
+        TIntermTyped* incrementValue = intermediate.addConstantUnion(static_cast<unsigned int>(incval), loc, true);
         TIntermTyped* counter = getStructBufferCounter(loc, bufferObj); // obtain the counter member
 
         if (counter == nullptr)
@@ -3213,7 +3345,13 @@
                 const TOperator idxOp = (offsetIdx->getQualifier().storage == EvqConst) ? EOpIndexDirect
                                                                                         : EOpIndexIndirect;
 
-                vec = intermediate.growAggregate(vec, intermediate.addIndex(idxOp, argArray, offsetIdx, loc));
+                TIntermTyped* indexVal = intermediate.addIndex(idxOp, argArray, offsetIdx, loc);
+
+                TType derefType(argArray->getType(), 0);
+                derefType.getQualifier().makeTemporary();
+                indexVal->setType(derefType);
+
+                vec = intermediate.growAggregate(vec, indexVal);
             }
 
             vec->setType(TType(argArray->getBasicType(), EvqTemporary, size));
@@ -3238,7 +3376,7 @@
 
             // Index into the array to find the item being loaded.
             // Byte address buffers index in bytes (only multiples of 4 permitted... not so much a byte address
-            // buffer then, but that's what it calls itself.
+            // buffer then, but that's what it calls itself).
 
             int size = 0;
 
@@ -3274,8 +3412,17 @@
                                                                                         : EOpIndexIndirect;
 
                 TIntermTyped* lValue = intermediate.addIndex(idxOp, argArray, offsetIdx, loc);
-                TIntermTyped* rValue = (size == 1) ? argValue :
-                    intermediate.addIndex(EOpIndexDirect, argValue, idxConst, loc);
+                const TType derefType(argArray->getType(), 0);
+                lValue->setType(derefType);
+
+                TIntermTyped* rValue;
+                if (size == 1) {
+                    rValue = argValue;
+                } else {
+                    rValue = intermediate.addIndex(EOpIndexDirect, argValue, idxConst, loc);
+                    const TType indexType(argValue->getType(), 0);
+                    rValue->setType(indexType);
+                }
                     
                 TIntermTyped* assign = intermediate.addAssign(EOpAssign, lValue, rValue, loc); 
 
@@ -3297,16 +3444,16 @@
             TIntermAggregate* body = nullptr;
 
             // Length output:
-            if (argArray->getType().isRuntimeSizedArray()) {
-                TIntermTyped* lengthCall = intermediate.addBuiltInFunctionCall(loc, EOpArrayLength, true, argArray,
-                                                                               argNumItems->getType());
-                TIntermTyped* assign = intermediate.addAssign(EOpAssign, argNumItems, lengthCall, loc);
-                body = intermediate.growAggregate(body, assign, loc);
-            } else {
+            if (argArray->getType().isSizedArray()) {
                 const int length = argArray->getType().getOuterArraySize();
                 TIntermTyped* assign = intermediate.addAssign(EOpAssign, argNumItems,
                                                               intermediate.addConstantUnion(length, loc, true), loc);
                 body = intermediate.growAggregate(body, assign, loc);
+            } else {
+                TIntermTyped* lengthCall = intermediate.addBuiltInFunctionCall(loc, EOpArrayLength, true, argArray,
+                                                                               argNumItems->getType());
+                TIntermTyped* assign = intermediate.addAssign(EOpAssign, argNumItems, lengthCall, loc);
+                body = intermediate.growAggregate(body, assign, loc);
             }
 
             // Stride output:
@@ -3467,9 +3614,9 @@
     TType retType(EbtFloat, EvqConst, 2);
 
     if (numSamples != 1) {
-        TArraySizes arraySizes;
-        arraySizes.addInnerSize(numSamples);
-        retType.newArraySizes(arraySizes);
+        TArraySizes* arraySizes = new TArraySizes;
+        arraySizes->addInnerSize(numSamples);
+        retType.transferArraySizes(arraySizes);
     }
 
     return new TIntermConstantUnion(*values, retType);
@@ -4166,9 +4313,9 @@
             // we construct an array from the separate args.
             if (hasOffset4) {
                 TType arrayType(EbtInt, EvqTemporary, 2);
-                TArraySizes arraySizes;
-                arraySizes.addInnerSize(4);
-                arrayType.newArraySizes(arraySizes);
+                TArraySizes* arraySizes = new TArraySizes;
+                arraySizes->addInnerSize(4);
+                arrayType.transferArraySizes(arraySizes);
 
                 TIntermAggregate* initList = new TIntermAggregate(EOpNull);
 
@@ -4407,6 +4554,22 @@
         return imageAggregate != nullptr && imageAggregate->getOp() == EOpImageLoad;
     };
 
+    const auto lookupBuiltinVariable = [&](const char* name, TBuiltInVariable builtin, TType& type) -> TIntermTyped* {
+        TSymbol* symbol = symbolTable.find(name);
+        if (nullptr == symbol) {
+            type.getQualifier().builtIn = builtin;
+
+            TVariable* variable = new TVariable(new TString(name), type);
+
+            symbolTable.insert(*variable);
+
+            symbol = symbolTable.find(name);
+            assert(symbol && "Inserted symbol could not be found!");
+        }
+
+        return intermediate.addSymbol(*(symbol->getAsVariable()), loc);
+    };
+
     // HLSL intrinsics can be pass through to native AST opcodes, or decomposed here to existing AST
     // opcodes for compatibility with existing software stacks.
     static const bool decomposeHlslIntrinsics = true;
@@ -4652,6 +4815,7 @@
                 } else {
                     // Set the matching operator.  Since output is absent, this is all we need to do.
                     node->getAsAggregate()->setOperator(atomicOp);
+                    node->setType(atomic->getType());
                 }
             }
 
@@ -4963,7 +5127,65 @@
 
             break;
         }
-        
+    case EOpWaveGetLaneCount:
+        {
+            // Mapped to gl_SubgroupSize builtin (We preprend @ to the symbol
+            // so that it inhabits the symbol table, but has a user-invalid name
+            // in-case some source HLSL defined the symbol also).
+            TType type(EbtUint, EvqVaryingIn);
+            node = lookupBuiltinVariable("@gl_SubgroupSize", EbvSubgroupSize2, type);
+            break;
+        }
+    case EOpWaveGetLaneIndex:
+        {
+            // Mapped to gl_SubgroupInvocationID builtin (We preprend @ to the
+            // symbol so that it inhabits the symbol table, but has a
+            // user-invalid name in-case some source HLSL defined the symbol
+            // also).
+            TType type(EbtUint, EvqVaryingIn);
+            node = lookupBuiltinVariable("@gl_SubgroupInvocationID", EbvSubgroupInvocation2, type);
+            break;
+        }
+    case EOpWaveActiveCountBits:
+        {
+            // Mapped to subgroupBallotBitCount(subgroupBallot()) builtin
+
+            // uvec4 type.
+            TType uvec4Type(EbtUint, EvqTemporary, 4);
+
+            // Get the uvec4 return from subgroupBallot().
+            TIntermTyped* res = intermediate.addBuiltInFunctionCall(loc,
+                EOpSubgroupBallot, true, arguments, uvec4Type);
+
+            // uint type.
+            TType uintType(EbtUint, EvqTemporary);
+
+            node = intermediate.addBuiltInFunctionCall(loc,
+                EOpSubgroupBallotBitCount, true, res, uintType);
+
+            break;
+        }
+    case EOpWavePrefixCountBits:
+        {
+            // Mapped to subgroupBallotInclusiveBitCount(subgroupBallot())
+            // builtin
+
+            // uvec4 type.
+            TType uvec4Type(EbtUint, EvqTemporary, 4);
+
+            // Get the uvec4 return from subgroupBallot().
+            TIntermTyped* res = intermediate.addBuiltInFunctionCall(loc,
+                EOpSubgroupBallot, true, arguments, uvec4Type);
+
+            // uint type.
+            TType uintType(EbtUint, EvqTemporary);
+
+            node = intermediate.addBuiltInFunctionCall(loc,
+                EOpSubgroupBallotInclusiveBitCount, true, res, uintType);
+
+            break;
+        }
+
     default:
         break; // most pass through unchanged
     }
@@ -5008,6 +5230,12 @@
         bool builtIn = false;
         int thisDepth = 0;
 
+        // For mat mul, the situation is unusual: we have to compare vector sizes to mat row or col sizes,
+        // and clamp the opposite arg.  Since that's complex, we farm it off to a separate method.
+        // It doesn't naturally fall out of processing an argument at a time in isolation.
+        if (function->getName() == "mul")
+            addGenMulArgumentConversion(loc, *function, arguments);
+
         TIntermAggregate* aggregate = arguments ? arguments->getAsAggregate() : nullptr;
 
         // TODO: this needs improvement: there's no way at present to look up a signature in
@@ -5170,6 +5398,83 @@
 }
 
 //
+// HLSL allows mismatched dimensions on vec*mat, mat*vec, vec*vec, and mat*mat.  This is a
+// situation not well suited to resolution in intrinsic selection, but we can do so here, since we
+// can look at both arguments insert explicit shape changes if required.
+//
+void HlslParseContext::addGenMulArgumentConversion(const TSourceLoc& loc, TFunction& call, TIntermTyped*& args)
+{
+    TIntermAggregate* argAggregate = args ? args->getAsAggregate() : nullptr;
+
+    if (argAggregate == nullptr || argAggregate->getSequence().size() != 2) {
+        // It really ought to have two arguments.
+        error(loc, "expected: mul arguments", "", "");
+        return;
+    }
+
+    TIntermTyped* arg0 = argAggregate->getSequence()[0]->getAsTyped();
+    TIntermTyped* arg1 = argAggregate->getSequence()[1]->getAsTyped();
+
+    if (arg0->isVector() && arg1->isVector()) {
+        // For:
+        //    vec * vec: it's handled during intrinsic selection, so while we could do it here,
+        //               we can also ignore it, which is easier.
+    } else if (arg0->isVector() && arg1->isMatrix()) {
+        // vec * mat: we clamp the vec if the mat col is smaller, else clamp the mat col.
+        if (arg0->getVectorSize() < arg1->getMatrixCols()) {
+            // vec is smaller, so truncate larger mat dimension
+            const TType truncType(arg1->getBasicType(), arg1->getQualifier().storage, arg1->getQualifier().precision,
+                                  0, arg0->getVectorSize(), arg1->getMatrixRows());
+            arg1 = addConstructor(loc, arg1, truncType);
+        } else if (arg0->getVectorSize() > arg1->getMatrixCols()) {
+            // vec is larger, so truncate vec to mat size
+            const TType truncType(arg0->getBasicType(), arg0->getQualifier().storage, arg0->getQualifier().precision,
+                                  arg1->getMatrixCols());
+            arg0 = addConstructor(loc, arg0, truncType);
+        }
+    } else if (arg0->isMatrix() && arg1->isVector()) {
+        // mat * vec: we clamp the vec if the mat col is smaller, else clamp the mat col.
+        if (arg1->getVectorSize() < arg0->getMatrixRows()) {
+            // vec is smaller, so truncate larger mat dimension
+            const TType truncType(arg0->getBasicType(), arg0->getQualifier().storage, arg0->getQualifier().precision,
+                                  0, arg0->getMatrixCols(), arg1->getVectorSize());
+            arg0 = addConstructor(loc, arg0, truncType);
+        } else if (arg1->getVectorSize() > arg0->getMatrixRows()) {
+            // vec is larger, so truncate vec to mat size
+            const TType truncType(arg1->getBasicType(), arg1->getQualifier().storage, arg1->getQualifier().precision,
+                                  arg0->getMatrixRows());
+            arg1 = addConstructor(loc, arg1, truncType);
+        }
+    } else if (arg0->isMatrix() && arg1->isMatrix()) {
+        // mat * mat: we clamp the smaller inner dimension to match the other matrix size.
+        // Remember, HLSL Mrc = GLSL/SPIRV Mcr.
+        if (arg0->getMatrixRows() > arg1->getMatrixCols()) {
+            const TType truncType(arg0->getBasicType(), arg0->getQualifier().storage, arg0->getQualifier().precision,
+                                  0, arg0->getMatrixCols(), arg1->getMatrixCols());
+            arg0 = addConstructor(loc, arg0, truncType);
+        } else if (arg0->getMatrixRows() < arg1->getMatrixCols()) {
+            const TType truncType(arg1->getBasicType(), arg1->getQualifier().storage, arg1->getQualifier().precision,
+                                  0, arg0->getMatrixRows(), arg1->getMatrixRows());
+            arg1 = addConstructor(loc, arg1, truncType);
+        }
+    } else {
+        // It's something with scalars: we'll just leave it alone.  Function selection will handle it
+        // downstream.
+    }
+
+    // Warn if we altered one of the arguments
+    if (arg0 != argAggregate->getSequence()[0] || arg1 != argAggregate->getSequence()[1])
+        warn(loc, "mul() matrix size mismatch", "", "");
+
+    // Put arguments back.  (They might be unchanged, in which case this is harmless).
+    argAggregate->getSequence()[0] = arg0;
+    argAggregate->getSequence()[1] = arg1;
+
+    call[0].type = &arg0->getWritableType();
+    call[1].type = &arg1->getWritableType();
+}
+
+//
 // Add any needed implicit conversions for function-call arguments to input parameters.
 //
 void HlslParseContext::addInputArgumentConversions(const TFunction& function, TIntermTyped*& arguments)
@@ -5434,12 +5739,11 @@
                 TType counterType;
                 counterBufferType(loc, counterType);
 
-                const TString counterBlockName(getStructBuffCounterName(blockSym->getName()));
+                const TString counterBlockName(intermediate.addCounterBufferName(blockSym->getName()));
 
                 TVariable* variable = makeInternalVariable(counterBlockName, counterType);
 
-                // Mark this buffer as requiring a counter block.  TODO: there should be a better
-                // way to track it.
+                // Mark this buffer's counter block as being in use
                 structBufferCounter[counterBlockName] = true;
 
                 TIntermSymbol* sym = intermediate.addSymbol(*variable, loc);
@@ -5681,7 +5985,8 @@
         break;
     }
 
-    qualifier.builtIn = builtIn;
+    if (qualifier.builtIn == EbvNone)
+        qualifier.builtIn = builtIn;
     qualifier.semanticName = intermediate.addSemanticName(upperCase);
 }
 
@@ -5760,7 +6065,10 @@
     case 'c':
     case 's':
     case 'u':
-        qualifier.layoutBinding = regNumber + subComponent;
+        // if nothing else has set the binding, do so now
+        // (other mechanisms override this one)
+        if (!qualifier.hasBinding())
+            qualifier.layoutBinding = regNumber + subComponent;
 
         // This handles per-register layout sets numbers.  For the global mode which sets
         // every symbol to the same value, see setLinkageLayoutSets().
@@ -5794,7 +6102,9 @@
         return true;
     };
 
-    if (spaceDesc) {
+    // if nothing else has set the set, do so now
+    // (other mechanisms override this one)
+    if (spaceDesc && !qualifier.hasSet()) {
         if (! crackSpace()) {
             error(loc, "expected spaceN", "register", "");
             return;
@@ -5988,7 +6298,7 @@
     bool arrayArg = false;
     for (int arg = 0; arg < function.getParamCount(); ++arg) {
         if (function[arg].type->isArray()) {
-            if (! function[arg].type->isExplicitlySizedArray()) {
+            if (function[arg].type->isUnsizedArray()) {
                 // Can't construct from an unsized array.
                 error(loc, "array argument must be sized", "constructor", "");
                 return true;
@@ -6023,11 +6333,10 @@
             return true;
         }
 
-        if (type.isImplicitlySizedArray()) {
+        if (type.isUnsizedArray()) {
             // auto adapt the constructor type to the number of arguments
             type.changeOuterArraySize(function.getParamCount());
-        } else if (type.getOuterArraySize() != function.getParamCount() &&
-                   type.computeNumComponents() > size) {
+        } else if (type.getOuterArraySize() != function.getParamCount() && type.computeNumComponents() > size) {
             error(loc, "array constructor needs one argument per array element", "constructor", "");
             return true;
         }
@@ -6036,21 +6345,21 @@
             // Types have to match, but we're still making the type.
             // Finish making the type, and the comparison is done later
             // when checking for conversion.
-            TArraySizes& arraySizes = type.getArraySizes();
+            TArraySizes& arraySizes = *type.getArraySizes();
 
             // At least the dimensionalities have to match.
             if (! function[0].type->isArray() ||
-                arraySizes.getNumDims() != function[0].type->getArraySizes().getNumDims() + 1) {
+                arraySizes.getNumDims() != function[0].type->getArraySizes()->getNumDims() + 1) {
                 error(loc, "array constructor argument not correct type to construct array element", "constructor", "");
                 return true;
             }
 
-            if (arraySizes.isInnerImplicit()) {
+            if (arraySizes.isInnerUnsized()) {
                 // "Arrays of arrays ..., and the size for any dimension is optional"
                 // That means we need to adopt (from the first argument) the other array sizes into the type.
                 for (int d = 1; d < arraySizes.getNumDims(); ++d) {
                     if (arraySizes.getDimSize(d) == UnsizedArraySize) {
-                        arraySizes.setDimSize(d, function[0].type->getArraySizes().getDimSize(d - 1));
+                        arraySizes.setDimSize(d, function[0].type->getArraySizes()->getDimSize(d - 1));
                     }
                 }
             }
@@ -6245,6 +6554,7 @@
     MERGE_SINGLETON(readonly);
     MERGE_SINGLETON(writeonly);
     MERGE_SINGLETON(specConstant);
+    MERGE_SINGLETON(nonUniform);
 }
 
 // used to flatten the sampler type space into a single dimension
@@ -6300,7 +6610,7 @@
 //
 void HlslParseContext::arraySizeRequiredCheck(const TSourceLoc& loc, const TArraySizes& arraySizes)
 {
-    if (arraySizes.isImplicit())
+    if (arraySizes.hasUnsized())
         error(loc, "array size required", "", "");
 }
 
@@ -6314,20 +6624,6 @@
     }
 }
 
-// Merge array dimensions listed in 'sizes' onto the type's array dimensions.
-//
-// From the spec: "vec4[2] a[3]; // size-3 array of size-2 array of vec4"
-//
-// That means, the 'sizes' go in front of the 'type' as outermost sizes.
-// 'type' is the type part of the declaration (to the left)
-// 'sizes' is the arrayness tagged on the identifier (to the right)
-//
-void HlslParseContext::arrayDimMerge(TType& type, const TArraySizes* sizes)
-{
-    if (sizes)
-        type.addArrayOuterSizes(*sizes);
-}
-
 //
 // Do all the semantic checking for declaring or redeclaring an array, with and
 // without a size, and make the right changes to the symbol table.
@@ -6374,7 +6670,7 @@
     // redeclareBuiltinVariable() should have already done the copyUp()
     TType& existingType = symbol->getWritableType();
 
-    if (existingType.isExplicitlySizedArray()) {
+    if (existingType.isSizedArray()) {
         // be more lenient for input arrays to geometry shaders and tessellation control outputs,
         // where the redeclaration is the same size
         return;
@@ -6383,52 +6679,6 @@
     existingType.updateArraySizes(type);
 }
 
-void HlslParseContext::updateImplicitArraySize(const TSourceLoc& loc, TIntermNode *node, int index)
-{
-    // maybe there is nothing to do...
-    TIntermTyped* typedNode = node->getAsTyped();
-    if (typedNode->getType().getImplicitArraySize() > index)
-        return;
-
-    // something to do...
-
-    // Figure out what symbol to lookup, as we will use its type to edit for the size change,
-    // as that type will be shared through shallow copies for future references.
-    TSymbol* symbol = nullptr;
-    int blockIndex = -1;
-    const TString* lookupName = nullptr;
-    if (node->getAsSymbolNode())
-        lookupName = &node->getAsSymbolNode()->getName();
-    else if (node->getAsBinaryNode()) {
-        const TIntermBinary* deref = node->getAsBinaryNode();
-        // This has to be the result of a block dereference, unless it's bad shader code
-        // If it's a uniform block, then an error will be issued elsewhere, but
-        // return early now to avoid crashing later in this function.
-        if (! deref->getLeft()->getAsSymbolNode() || deref->getLeft()->getBasicType() != EbtBlock ||
-            deref->getLeft()->getType().getQualifier().storage == EvqUniform ||
-            deref->getRight()->getAsConstantUnion() == nullptr)
-            return;
-
-        blockIndex = deref->getRight()->getAsConstantUnion()->getConstArray()[0].getIConst();
-
-        lookupName = &deref->getLeft()->getAsSymbolNode()->getName();
-        if (IsAnonymous(*lookupName))
-            lookupName = &(*deref->getLeft()->getType().getStruct())[blockIndex].type->getFieldName();
-    }
-
-    // Lookup the symbol, should only fail if shader code is incorrect
-    symbol = symbolTable.find(*lookupName);
-    if (symbol == nullptr)
-        return;
-
-    if (symbol->getAsFunction()) {
-        error(loc, "array variable name expected", symbol->getName().c_str(), "");
-        return;
-    }
-
-    symbol->getWritableType().setImplicitArraySize(index + 1);
-}
-
 //
 // Enforce non-initializer type/qualifier rules.
 //
@@ -6492,7 +6742,7 @@
 //
 TType* HlslParseContext::getStructBufferContentType(const TType& type) const
 {
-    if (type.getBasicType() != EbtBlock)
+    if (type.getBasicType() != EbtBlock || type.getQualifier().storage != EvqBuffer)
         return nullptr;
 
     const int memberCount = (int)type.getStruct()->size();
@@ -6500,7 +6750,7 @@
 
     TType* contentType = (*type.getStruct())[memberCount-1].type;
 
-    return contentType->isRuntimeSizedArray() ? contentType : nullptr;
+    return contentType->isUnsizedArray() ? contentType : nullptr;
 }
 
 //
@@ -6848,15 +7098,7 @@
         return;
     }
     if (id == "constant_id") {
-        requireSpv(loc, "constant_id");
-        if (value >= (int)TQualifier::layoutSpecConstantIdEnd) {
-            error(loc, "specialization-constant id is too large", id.c_str(), "");
-        } else {
-            qualifier.layoutSpecConstantId = value;
-            qualifier.specConstant = true;
-            if (! intermediate.addUsedConstantId(value))
-                error(loc, "specialization-constant id already used", id.c_str(), "");
-        }
+        setSpecConstantId(loc, qualifier, value);
         return;
     }
 
@@ -6951,6 +7193,19 @@
     error(loc, "there is no such layout identifier for this stage taking an assigned value", id.c_str(), "");
 }
 
+void HlslParseContext::setSpecConstantId(const TSourceLoc& loc, TQualifier& qualifier, int value)
+{
+    if (value >= (int)TQualifier::layoutSpecConstantIdEnd) {
+        error(loc, "specialization-constant id is too large", "constant_id", "");
+    } else {
+        qualifier.layoutSpecConstantId = value;
+        qualifier.specConstant = true;
+        if (! intermediate.addUsedConstantId(value))
+            error(loc, "specialization-constant id already used", "constant_id", "");
+    }
+    return;
+}
+
 // Merge any layout qualifier information from src into dst, leaving everything else in dst alone
 //
 // "More than one layout qualifier may appear in a single declaration.
@@ -7015,6 +7270,7 @@
     }
 }
 
+
 //
 // Look up a function name in the symbol table, and make sure it is a function.
 //
@@ -7199,8 +7455,8 @@
             }
         };
 
-        return std::abs(linearize(to2.getBasicType()) - linearize(from.getBasicType())) <
-               std::abs(linearize(to1.getBasicType()) - linearize(from.getBasicType()));
+        return abs(linearize(to2.getBasicType()) - linearize(from.getBasicType())) <
+               abs(linearize(to1.getBasicType()) - linearize(from.getBasicType()));
     };
 
     // for ambiguity reporting
@@ -7623,8 +7879,7 @@
     }
 
     // Fix outer arrayness if variable is unsized, getting size from the initializer
-    if (initializer->getType().isExplicitlySizedArray() &&
-        variable->getType().isImplicitlySizedArray())
+    if (initializer->getType().isSizedArray() && variable->getType().isUnsizedArray())
         variable->getWritableType().changeOuterArraySize(initializer->getType().getOuterArraySize());
 
     // Inner arrayness can also get set by an initializer
@@ -7633,8 +7888,10 @@
         variable->getType().getArraySizes()->getNumDims()) {
         // adopt unsized sizes from the initializer's sizes
         for (int d = 1; d < variable->getType().getArraySizes()->getNumDims(); ++d) {
-            if (variable->getType().getArraySizes()->getDimSize(d) == UnsizedArraySize)
-                variable->getWritableType().getArraySizes().setDimSize(d, initializer->getType().getArraySizes()->getDimSize(d));
+            if (variable->getType().getArraySizes()->getDimSize(d) == UnsizedArraySize) {
+                variable->getWritableType().getArraySizes()->setDimSize(d,
+                    initializer->getType().getArraySizes()->getDimSize(d));
+            }
         }
     }
 
@@ -7721,20 +7978,20 @@
         // Later on, initializer execution code will deal with array size logic.
         TType arrayType;
         arrayType.shallowCopy(type);                     // sharing struct stuff is fine
-        arrayType.newArraySizes(*type.getArraySizes());  // but get a fresh copy of the array information, to edit below
+        arrayType.copyArraySizes(*type.getArraySizes()); // but get a fresh copy of the array information, to edit below
 
         // edit array sizes to fill in unsized dimensions
-        if (type.isImplicitlySizedArray())
+        if (type.isUnsizedArray())
             arrayType.changeOuterArraySize((int)initList->getSequence().size());
 
         // set unsized array dimensions that can be derived from the initializer's first element
         if (arrayType.isArrayOfArrays() && initList->getSequence().size() > 0) {
             TIntermTyped* firstInit = initList->getSequence()[0]->getAsTyped();
             if (firstInit->getType().isArray() &&
-                arrayType.getArraySizes().getNumDims() == firstInit->getType().getArraySizes()->getNumDims() + 1) {
-                for (int d = 1; d < arrayType.getArraySizes().getNumDims(); ++d) {
-                    if (arrayType.getArraySizes().getDimSize(d) == UnsizedArraySize)
-                        arrayType.getArraySizes().setDimSize(d, firstInit->getType().getArraySizes()->getDimSize(d - 1));
+                arrayType.getArraySizes()->getNumDims() == firstInit->getType().getArraySizes()->getNumDims() + 1) {
+                for (int d = 1; d < arrayType.getArraySizes()->getNumDims(); ++d) {
+                    if (arrayType.getArraySizes()->getDimSize(d) == UnsizedArraySize)
+                        arrayType.getArraySizes()->setDimSize(d, firstInit->getType().getArraySizes()->getDimSize(d - 1));
                 }
             }
         }
@@ -7999,6 +8256,22 @@
     // First, convert types as needed.
     //
     switch (op) {
+    case EOpConstructF16Vec2:
+    case EOpConstructF16Vec3:
+    case EOpConstructF16Vec4:
+    case EOpConstructF16Mat2x2:
+    case EOpConstructF16Mat2x3:
+    case EOpConstructF16Mat2x4:
+    case EOpConstructF16Mat3x2:
+    case EOpConstructF16Mat3x3:
+    case EOpConstructF16Mat3x4:
+    case EOpConstructF16Mat4x2:
+    case EOpConstructF16Mat4x3:
+    case EOpConstructF16Mat4x4:
+    case EOpConstructFloat16:
+        basicOp = EOpConstructFloat16;
+        break;
+
     case EOpConstructVec2:
     case EOpConstructVec3:
     case EOpConstructVec4:
@@ -8031,6 +8304,13 @@
         basicOp = EOpConstructDouble;
         break;
 
+    case EOpConstructI16Vec2:
+    case EOpConstructI16Vec3:
+    case EOpConstructI16Vec4:
+    case EOpConstructInt16:
+        basicOp = EOpConstructInt16;
+        break;
+
     case EOpConstructIVec2:
     case EOpConstructIVec3:
     case EOpConstructIVec4:
@@ -8047,6 +8327,13 @@
         basicOp = EOpConstructInt;
         break;
 
+    case EOpConstructU16Vec2:
+    case EOpConstructU16Vec3:
+    case EOpConstructU16Vec4:
+    case EOpConstructUint16:
+        basicOp = EOpConstructUint16;
+        break;
+
     case EOpConstructUVec2:
     case EOpConstructUVec3:
     case EOpConstructUVec4:
@@ -8196,7 +8483,7 @@
 //
 // Do everything needed to add an interface block.
 //
-void HlslParseContext::declareBlock(const TSourceLoc& loc, TType& type, const TString* instanceName, TArraySizes* arraySizes)
+void HlslParseContext::declareBlock(const TSourceLoc& loc, TType& type, const TString* instanceName)
 {
     assert(type.getWritableStruct() != nullptr);
 
@@ -8324,8 +8611,8 @@
     const TString& interfaceName = (instanceName && !instanceName->empty()) ? *instanceName : type.getTypeName();
 
     TType blockType(&typeList, interfaceName, type.getQualifier());
-    if (arraySizes)
-        blockType.newArraySizes(*arraySizes);
+    if (type.isArray())
+        blockType.transferArraySizes(type.getArraySizes());
 
     // Add the variable, as anonymous or named instanceName.
     // Make an anonymous variable if no name was provided.
@@ -8343,7 +8630,7 @@
         return;
     }
 
-	// Save it in the AST for linker use.
+    // Save it in the AST for linker use.
     if (symbolTable.atGlobalLevel())
         trackLinkage(variable);
 }
@@ -8386,7 +8673,7 @@
                     memberQualifier.layoutComponent = 0;
                 }
                 nextLocation = memberQualifier.layoutLocation +
-                               intermediate.computeTypeLocationSize(*typeList[member].type);
+                               intermediate.computeTypeLocationSize(*typeList[member].type, language);
             }
         }
     }
@@ -8559,6 +8846,11 @@
 //
 bool HlslParseContext::handleOutputGeometry(const TSourceLoc& loc, const TLayoutGeometry& geometry)
 {
+    // If this is not a geometry shader, ignore.  It might be a mixed shader including several stages.
+    // Since that's an OK situation, return true for success.
+    if (language != EShLangGeometry)
+        return true;
+
     switch (geometry) {
     case ElgPoints:
     case ElgLineStrip:
@@ -8577,29 +8869,75 @@
 }
 
 //
-// Selection hints
+// Selection attributes
 //
-TSelectionControl HlslParseContext::handleSelectionControl(const TAttributeMap& attributes) const
+void HlslParseContext::handleSelectionAttributes(const TSourceLoc& loc, TIntermSelection* selection,
+    const TAttributes& attributes)
 {
-    if (attributes.contains(EatFlatten))
-        return ESelectionControlFlatten;
-    else if (attributes.contains(EatBranch))
-        return ESelectionControlDontFlatten;
-    else
-        return ESelectionControlNone;
+    if (selection == nullptr)
+        return;
+
+    for (auto it = attributes.begin(); it != attributes.end(); ++it) {
+        switch (it->name) {
+        case EatFlatten:
+            selection->setFlatten();
+            break;
+        case EatBranch:
+            selection->setDontFlatten();
+            break;
+        default:
+            warn(loc, "attribute does not apply to a selection", "", "");
+            break;
+        }
+    }
 }
 
 //
-// Loop hints
+// Switch attributes
 //
-TLoopControl HlslParseContext::handleLoopControl(const TAttributeMap& attributes) const
+void HlslParseContext::handleSwitchAttributes(const TSourceLoc& loc, TIntermSwitch* selection,
+    const TAttributes& attributes)
 {
-    if (attributes.contains(EatUnroll))
-        return ELoopControlUnroll;
-    else if (attributes.contains(EatLoop))
-        return ELoopControlDontUnroll;
-    else
-        return ELoopControlNone;
+    if (selection == nullptr)
+        return;
+
+    for (auto it = attributes.begin(); it != attributes.end(); ++it) {
+        switch (it->name) {
+        case EatFlatten:
+            selection->setFlatten();
+            break;
+        case EatBranch:
+            selection->setDontFlatten();
+            break;
+        default:
+            warn(loc, "attribute does not apply to a switch", "", "");
+            break;
+        }
+    }
+}
+
+//
+// Loop attributes
+//
+void HlslParseContext::handleLoopAttributes(const TSourceLoc& loc, TIntermLoop* loop,
+    const TAttributes& attributes)
+{
+    if (loop == nullptr)
+        return;
+
+    for (auto it = attributes.begin(); it != attributes.end(); ++it) {
+        switch (it->name) {
+        case EatUnroll:
+            loop->setUnroll();
+            break;
+        case EatLoop:
+            loop->setDontUnroll();
+            break;
+        default:
+            warn(loc, "attribute does not apply to a loop", "", "");
+            break;
+        }
+    }
 }
 
 //
@@ -8744,7 +9082,7 @@
 // into a switch node.
 //
 TIntermNode* HlslParseContext::addSwitch(const TSourceLoc& loc, TIntermTyped* expression,
-                                         TIntermAggregate* lastStatements, TSelectionControl control)
+                                         TIntermAggregate* lastStatements, const TAttributes& attributes)
 {
     wrapupSwitchSubsequence(lastStatements, nullptr);
 
@@ -8771,7 +9109,7 @@
 
     TIntermSwitch* switchNode = new TIntermSwitch(expression, body);
     switchNode->setLoc(loc);
-    switchNode->setSelectionControl(control);
+    handleSwitchAttributes(loc, switchNode, attributes);
 
     return switchNode;
 }
@@ -8893,7 +9231,7 @@
     case EbvVertexIndex:
         return language == EShLangVertex;
     case EbvPrimitiveId:
-        return language == EShLangGeometry || language == EShLangFragment;
+        return language == EShLangGeometry || language == EShLangFragment || language == EShLangTessControl;
     case EbvTessLevelInner:
     case EbvTessLevelOuter:
         return language == EShLangTessEvaluation;
@@ -8939,9 +9277,9 @@
         return language == EShLangFragment;
     case EbvLayer:
     case EbvViewportIndex:
-        return language == EShLangGeometry;
+        return language == EShLangGeometry || language == EShLangVertex;
     case EbvPrimitiveId:
-        return language == EShLangGeometry || language == EShLangTessControl || language == EShLangTessEvaluation;
+        return language == EShLangGeometry;
     case EbvTessLevelInner:
     case EbvTessLevelOuter:
         return language == EShLangTessControl;
@@ -9005,11 +9343,17 @@
         qualifier.patch = false;
 
     switch (qualifier.builtIn) {
+    case EbvFragDepth:
+        intermediate.setDepthReplacing();
+        intermediate.setDepth(EldAny);
+        break;
     case EbvFragDepthGreater:
+        intermediate.setDepthReplacing();
         intermediate.setDepth(EldGreater);
         qualifier.builtIn = EbvFragDepth;
         break;
     case EbvFragDepthLesser:
+        intermediate.setDepthReplacing();
         intermediate.setDepth(EldLess);
         qualifier.builtIn = EbvFragDepth;
         break;
@@ -9239,7 +9583,7 @@
         const TType& type = *patchConstantFunction[param].type;
         const TBuiltInVariable biType = patchConstantFunction[param].getDeclaredBuiltIn();
 
-        return type.isArray() && !type.isRuntimeSizedArray() && biType == EbvOutputPatch;
+        return type.isSizedArray() && biType == EbvOutputPatch;
     };
     
     // We will perform these steps.  Each is in a scoped block for separation: they could
@@ -9542,7 +9886,8 @@
 }
 
 // Finalization step: remove unused buffer blocks from linkage (we don't know until the
-// shader is entirely compiled)
+// shader is entirely compiled).
+// Preserve order of remaining symbols.
 void HlslParseContext::removeUnusedStructBufferCounters()
 {
     const auto endIt = std::remove_if(linkageSymbols.begin(), linkageSymbols.end(),
@@ -9589,7 +9934,7 @@
 
     // 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())
+    if (intermediate.needsLegalization() && (messages & EShMsgHlslLegalization))
         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 c1752f1..b16a8c2 100755
--- a/hlsl/hlslParseHelper.h
+++ b/hlsl/hlslParseHelper.h
@@ -38,12 +38,12 @@
 
 #include "../glslang/MachineIndependent/parseVersions.h"
 #include "../glslang/MachineIndependent/ParseHelper.h"
+#include "../glslang/MachineIndependent/attribute.h"
 
 #include <array>
 
 namespace glslang {
 
-class TAttributeMap; // forward declare
 class TFunctionDeclarator;
 
 class HlslParseContext : public TParseContextBase {
@@ -80,10 +80,10 @@
     bool isBuiltInMethod(const TSourceLoc&, TIntermTyped* base, const TString& field);
     void assignToInterface(TVariable& variable);
     void handleFunctionDeclarator(const TSourceLoc&, TFunction& function, bool prototype);
-    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&);
+    TIntermAggregate* handleFunctionDefinition(const TSourceLoc&, TFunction&, const TAttributes&, TIntermNode*& entryPointTree);
+    TIntermNode* transformEntryPoint(const TSourceLoc&, TFunction&, const TAttributes&);
+    void handleEntryPointAttributes(const TSourceLoc&, const TAttributes&);
+    void transferTypeAttributes(const TSourceLoc&, const TAttributes&, TType&, bool allowEntry = false);
     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);
@@ -93,6 +93,7 @@
     TIntermTyped* handleAssignToMatrixSwizzle(const TSourceLoc&, TOperator, TIntermTyped* left, TIntermTyped* right);
     TIntermTyped* handleFunctionCall(const TSourceLoc&, TFunction*, TIntermTyped*);
     TIntermAggregate* assignClipCullDistance(const TSourceLoc&, TOperator, int semanticId, TIntermTyped* left, TIntermTyped* right);
+    TIntermTyped* assignPosition(const TSourceLoc&, TOperator, TIntermTyped* left, TIntermTyped* right);
     void decomposeIntrinsic(const TSourceLoc&, TIntermTyped*& node, TIntermNode* arguments);
     void decomposeSampleMethods(const TSourceLoc&, TIntermTyped*& node, TIntermNode* arguments);
     void decomposeStructBufferMethods(const TSourceLoc&, TIntermTyped*& node, TIntermNode* arguments);
@@ -125,7 +126,6 @@
     void arraySizeCheck(const TSourceLoc&, TIntermTyped* expr, TArraySize&);
     void arraySizeRequiredCheck(const TSourceLoc&, const TArraySizes&);
     void structArrayCheck(const TSourceLoc&, const TType& structure);
-    void arrayDimMerge(TType& type, const TArraySizes* sizes);
     bool voidErrorCheck(const TSourceLoc&, const TString&, TBasicType);
     void globalQualifierFix(const TSourceLoc&, TQualifier&);
     bool structQualifierErrorCheck(const TSourceLoc&, const TPublicType& pType);
@@ -137,10 +137,12 @@
 
     void setLayoutQualifier(const TSourceLoc&, TQualifier&, TString&);
     void setLayoutQualifier(const TSourceLoc&, TQualifier&, TString&, const TIntermTyped*);
+    void setSpecConstantId(const TSourceLoc&, TQualifier&, int value);
     void mergeObjectLayoutQualifiers(TQualifier& dest, const TQualifier& src, bool inheritOnly);
     void checkNoShaderLayouts(const TSourceLoc&, const TShaderQualifiers&);
 
     const TFunction* findFunction(const TSourceLoc& loc, TFunction& call, bool& builtIn, int& thisDepth, TIntermTyped*& args);
+    void addGenMulArgumentConversion(const TSourceLoc& loc, TFunction& call, TIntermTyped*& args);
     void declareTypedef(const TSourceLoc&, const TString& identifier, const TType&);
     void declareStruct(const TSourceLoc&, TString& structName, TType&);
     TSymbol* lookupUserType(const TString&, TType&);
@@ -151,7 +153,7 @@
     TIntermTyped* convertArray(TIntermTyped*, const TType&);
     TIntermTyped* constructAggregate(TIntermNode*, const TType&, int, const TSourceLoc&);
     TIntermTyped* constructBuiltIn(const TType&, TOperator, TIntermTyped*, const TSourceLoc&, bool subset);
-    void declareBlock(const TSourceLoc&, TType&, const TString* instanceName = 0, TArraySizes* arraySizes = 0);
+    void declareBlock(const TSourceLoc&, TType&, const TString* instanceName = 0);
     void declareStructBufferCounter(const TSourceLoc& loc, const TType& bufferType, const TString& name);
     void fixBlockLocations(const TSourceLoc&, TQualifier&, TTypeList&, bool memberWithLocation, bool memberWithoutLocation);
     void fixBlockXfbOffsets(TQualifier&, TTypeList&);
@@ -160,9 +162,7 @@
     void addQualifierToExisting(const TSourceLoc&, TQualifier, TIdentifierList&);
     void updateStandaloneQualifierDefaults(const TSourceLoc&, const TPublicType&);
     void wrapupSwitchSubsequence(TIntermAggregate* statements, TIntermNode* branchNode);
-    TIntermNode* addSwitch(const TSourceLoc&, TIntermTyped* expression, TIntermAggregate* body, TSelectionControl control);
-
-    void updateImplicitArraySize(const TSourceLoc&, TIntermNode*, int index);
+    TIntermNode* addSwitch(const TSourceLoc&, TIntermTyped* expression, TIntermAggregate* body, const TAttributes&);
 
     void nestLooping()       { ++loopNestingLevel; }
     void unnestLooping()     { --loopNestingLevel; }
@@ -200,10 +200,11 @@
     bool handleInputGeometry(const TSourceLoc&, const TLayoutGeometry& geometry);
 
     // Determine selection control from attributes
-    TSelectionControl handleSelectionControl(const TAttributeMap& attributes) const;
+    void handleSelectionAttributes(const TSourceLoc& loc, TIntermSelection*, const TAttributes& attributes);
+    void handleSwitchAttributes(const TSourceLoc& loc, TIntermSwitch*, const TAttributes& attributes);
 
     // Determine loop control from attributes
-    TLoopControl handleLoopControl(const TAttributeMap& attributes) const;
+    void handleLoopAttributes(const TSourceLoc& loc, TIntermLoop*, const TAttributes& attributes);
 
     // Share struct buffer deep types
     void shareStructBufferType(TType&);
@@ -214,6 +215,8 @@
     // Obtain the sampler return type of the given sampler in retType.
     void getTextureReturnType(const TSampler& sampler, TType& retType) const;
 
+    TAttributeType attributeFromName(const TString& nameSpace, const TString& name) const;
+
 protected:
     struct TFlattenData {
         TFlattenData() : nextBinding(TQualifier::layoutBindingEnd),
@@ -399,7 +402,7 @@
     // may fit in TSampler::structReturnIndex.
     TVector<TTypeList*> textureReturnStruct;
     
-    TMap<TString, bool> structBufferCounter;
+    TMap<TString, bool> structBufferCounter;  // true if counter buffer is in use
 
     // The built-in interstage IO map considers e.g, EvqPosition on input and output separately, so that we
     // can build the linkage correctly if position appears on both sides.  Otherwise, multiple positions
diff --git a/hlsl/hlslParseables.cpp b/hlsl/hlslParseables.cpp
index bae9e6e..cc847ae 100755
--- a/hlsl/hlslParseables.cpp
+++ b/hlsl/hlslParseables.cpp
@@ -259,6 +259,8 @@
         case 'D': s += "double";                              break;
         case 'I': s += "int";                                 break;
         case 'U': s += "uint";                                break;
+        case 'L': s += "int64_t";                             break;
+        case 'M': s += "uint64_t";                            break;
         case 'B': s += "bool";                                break;
         case 'S': s += "sampler";                             break;
         case 's': s += "SamplerComparisonState";              break;
@@ -544,7 +546,7 @@
     // orderKey can be:
     //   S = scalar, V = vector, M = matrix, - = void
     // typekey can be:
-    //   D = double, F = float, U = uint, I = int, B = bool, S = sampler, s = shadowSampler
+    //   D = double, F = float, U = uint, I = int, B = bool, S = sampler, s = shadowSampler, M = uint64_t, L = int64_t
     // An empty order or type key repeats the first one.  E.g: SVM,, means 3 args each of SVM.
     // '>' as first letter of order creates an output parameter
     // '<' as first letter of order creates an input parameter
@@ -580,8 +582,8 @@
         { "asdouble",                         "V2",    "D",       "V2,",            "UI,",           EShLangAll,    false },
         { "asfloat",                          nullptr, "F",       "SVM",            "BFIU",          EShLangAll,    false },
         { "asin",                             nullptr, nullptr,   "SVM",            "F",             EShLangAll,    false },
-        { "asint",                            nullptr, "I",       "SVM",            "FU",            EShLangAll,    false },
-        { "asuint",                           nullptr, "U",       "SVM",            "FU",            EShLangAll,    false },
+        { "asint",                            nullptr, "I",       "SVM",            "FIU",           EShLangAll,    false },
+        { "asuint",                           nullptr, "U",       "SVM",            "FIU",           EShLangAll,    false },
         { "atan",                             nullptr, nullptr,   "SVM",            "F",             EShLangAll,    false },
         { "atan2",                            nullptr, nullptr,   "SVM,",           "F,",            EShLangAll,    false },
         { "ceil",                             nullptr, nullptr,   "SVM",            "F",             EShLangAll,    false },
@@ -902,6 +904,35 @@
         { "DecrementCounter",                 nullptr, nullptr,   "-",              "-",              EShLangAll,   true },
         { "Consume",                          nullptr, nullptr,   "-",              "-",              EShLangAll,   true },
 
+        // SM 6.0
+
+        { "WaveIsFirstLane",                  "S",     "B",       "-",              "-",              EShLangPSCS,  false},
+        { "WaveGetLaneCount",                 "S",     "U",       "-",              "-",              EShLangPSCS,  false},
+        { "WaveGetLaneIndex",                 "S",     "U",       "-",              "-",              EShLangPSCS,  false},
+        { "WaveActiveAnyTrue",                "S",     "B",       "S",              "B",              EShLangPSCS,  false},
+        { "WaveActiveAllTrue",                "S",     "B",       "S",              "B",              EShLangPSCS,  false},
+        { "WaveActiveBallot",                 "V4",    "U",       "S",              "B",              EShLangPSCS,  false},
+        { "WaveReadLaneAt",                   nullptr, nullptr,   "SV,S",           "DFUI,U",         EShLangPSCS,  false},
+        { "WaveReadLaneFirst",                nullptr, nullptr,   "SV",             "DFUI",           EShLangPSCS,  false},
+        { "WaveActiveAllEqual",               "S",     "B",       "SV",             "DFUI",           EShLangPSCS,  false},
+        { "WaveActiveAllEqualBool",           "S",     "B",       "S",              "B",              EShLangPSCS,  false},
+        { "WaveActiveCountBits",              "S",     "U",       "S",              "B",              EShLangPSCS,  false},
+        
+        { "WaveActiveSum",                    nullptr, nullptr,   "SV",             "DFUI",           EShLangPSCS,  false},
+        { "WaveActiveProduct",                nullptr, nullptr,   "SV",             "DFUI",           EShLangPSCS,  false},
+        { "WaveActiveBitAnd",                 nullptr, nullptr,   "SV",             "DFUI",           EShLangPSCS,  false},
+        { "WaveActiveBitOr",                  nullptr, nullptr,   "SV",             "DFUI",           EShLangPSCS,  false},
+        { "WaveActiveBitXor",                 nullptr, nullptr,   "SV",             "DFUI",           EShLangPSCS,  false},
+        { "WaveActiveMin",                    nullptr, nullptr,   "SV",             "DFUI",           EShLangPSCS,  false},
+        { "WaveActiveMax",                    nullptr, nullptr,   "SV",             "DFUI",           EShLangPSCS,  false},
+        { "WavePrefixSum",                    nullptr, nullptr,   "SV",             "DFUI",           EShLangPSCS,  false},
+        { "WavePrefixProduct",                nullptr, nullptr,   "SV",             "DFUI",           EShLangPSCS,  false},
+        { "WavePrefixCountBits",              "S",     "U",       "S",              "B",              EShLangPSCS,  false},
+        { "QuadReadAcrossX",                  nullptr, nullptr,   "SV",             "DFUI",           EShLangPSCS,  false},
+        { "QuadReadAcrossY",                  nullptr, nullptr,   "SV",             "DFUI",           EShLangPSCS,  false},
+        { "QuadReadAcrossDiagonal",           nullptr, nullptr,   "SV",             "DFUI",           EShLangPSCS,  false},
+        { "QuadReadLaneAt",                   nullptr, nullptr,   "SV,S",           "DFUI,U",         EShLangPSCS,  false},
+
         // Methods for subpass input objects
         { "SubpassLoad",                      "V4",    nullptr,   "[",              "FIU",            EShLangPS,    true },
         { "SubpassLoad",                      "V4",    nullptr,   "],S",            "FIU,I",          EShLangPS,    true },
@@ -1087,8 +1118,8 @@
     symbolTable.relateToOperator("ddy_fine",                    EOpDPdyFine);
     symbolTable.relateToOperator("degrees",                     EOpDegrees);
     symbolTable.relateToOperator("determinant",                 EOpDeterminant);
-    symbolTable.relateToOperator("DeviceMemoryBarrier",         EOpGroupMemoryBarrier);
-    symbolTable.relateToOperator("DeviceMemoryBarrierWithGroupSync", EOpGroupMemoryBarrierWithGroupSync); // ...
+    symbolTable.relateToOperator("DeviceMemoryBarrier",         EOpDeviceMemoryBarrier);
+    symbolTable.relateToOperator("DeviceMemoryBarrierWithGroupSync", EOpDeviceMemoryBarrierWithGroupSync);
     symbolTable.relateToOperator("distance",                    EOpDistance);
     symbolTable.relateToOperator("dot",                         EOpDot);
     symbolTable.relateToOperator("dst",                         EOpDst);
@@ -1244,6 +1275,33 @@
     symbolTable.relateToOperator(BUILTIN_PREFIX "Append",                      EOpMethodAppend);
     symbolTable.relateToOperator(BUILTIN_PREFIX "RestartStrip",                EOpMethodRestartStrip);
 
+    // Wave ops
+    symbolTable.relateToOperator("WaveIsFirstLane",                            EOpSubgroupElect);
+    symbolTable.relateToOperator("WaveGetLaneCount",                           EOpWaveGetLaneCount);
+    symbolTable.relateToOperator("WaveGetLaneIndex",                           EOpWaveGetLaneIndex);
+    symbolTable.relateToOperator("WaveActiveAnyTrue",                          EOpSubgroupAny);
+    symbolTable.relateToOperator("WaveActiveAllTrue",                          EOpSubgroupAll);
+    symbolTable.relateToOperator("WaveActiveBallot",                           EOpSubgroupBallot);
+    symbolTable.relateToOperator("WaveReadLaneFirst",                          EOpSubgroupBroadcastFirst);
+    symbolTable.relateToOperator("WaveReadLaneAt",                             EOpSubgroupShuffle);
+    symbolTable.relateToOperator("WaveActiveAllEqual",                         EOpSubgroupAllEqual);
+    symbolTable.relateToOperator("WaveActiveAllEqualBool",                     EOpSubgroupAllEqual);
+    symbolTable.relateToOperator("WaveActiveCountBits",                        EOpWaveActiveCountBits);
+    symbolTable.relateToOperator("WaveActiveSum",                              EOpSubgroupAdd);
+    symbolTable.relateToOperator("WaveActiveProduct",                          EOpSubgroupMul);
+    symbolTable.relateToOperator("WaveActiveBitAnd",                           EOpSubgroupAnd);
+    symbolTable.relateToOperator("WaveActiveBitOr",                            EOpSubgroupOr);
+    symbolTable.relateToOperator("WaveActiveBitXor",                           EOpSubgroupXor);
+    symbolTable.relateToOperator("WaveActiveMin",                              EOpSubgroupMin);
+    symbolTable.relateToOperator("WaveActiveMax",                              EOpSubgroupMax);
+    symbolTable.relateToOperator("WavePrefixSum",                              EOpSubgroupInclusiveAdd);
+    symbolTable.relateToOperator("WavePrefixProduct",                          EOpSubgroupInclusiveMul);
+    symbolTable.relateToOperator("WavePrefixCountBits",                        EOpWavePrefixCountBits);
+    symbolTable.relateToOperator("QuadReadAcrossX",                            EOpSubgroupQuadSwapHorizontal);
+    symbolTable.relateToOperator("QuadReadAcrossY",                            EOpSubgroupQuadSwapVertical);
+    symbolTable.relateToOperator("QuadReadAcrossDiagonal",                     EOpSubgroupQuadSwapDiagonal);
+    symbolTable.relateToOperator("QuadReadLaneAt",                             EOpSubgroupQuadBroadcast);
+
     // 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 c16fdfa..28a66bb 100755
--- a/hlsl/hlslScanContext.cpp
+++ b/hlsl/hlslScanContext.cpp
@@ -143,6 +143,7 @@
     (*KeywordMap)["bool"] =                    EHTokBool;
     (*KeywordMap)["int"] =                     EHTokInt;
     (*KeywordMap)["uint"] =                    EHTokUint;
+    (*KeywordMap)["uint64_t"] =                EHTokUint64;
     (*KeywordMap)["dword"] =                   EHTokDword;
     (*KeywordMap)["half"] =                    EHTokHalf;
     (*KeywordMap)["float"] =                   EHTokFloat;
@@ -345,6 +346,7 @@
     (*KeywordMap)["RWByteAddressBuffer"] =     EHTokRWByteAddressBuffer;
     (*KeywordMap)["RWStructuredBuffer"] =      EHTokRWStructuredBuffer;
     (*KeywordMap)["StructuredBuffer"] =        EHTokStructuredBuffer;
+    (*KeywordMap)["TextureBuffer"] =           EHTokTextureBuffer;
 
     (*KeywordMap)["class"] =                   EHTokClass;
     (*KeywordMap)["struct"] =                  EHTokStruct;
@@ -548,6 +550,7 @@
 
         case PpAtomConstInt:           parserToken->i = ppToken.ival;       return EHTokIntConstant;
         case PpAtomConstUint:          parserToken->i = ppToken.ival;       return EHTokUintConstant;
+        case PpAtomConstFloat16:       parserToken->d = ppToken.dval;       return EHTokFloat16Constant;
         case PpAtomConstFloat:         parserToken->d = ppToken.dval;       return EHTokFloatConstant;
         case PpAtomConstDouble:        parserToken->d = ppToken.dval;       return EHTokDoubleConstant;
         case PpAtomIdentifier:
@@ -564,10 +567,15 @@
         case EndOfInput:               return EHTokNone;
 
         default:
-            char buf[2];
-            buf[0] = (char)token;
-            buf[1] = 0;
-            parseContext.error(loc, "unexpected token", buf, "");
+            if (token < PpAtomMaxSingle) {
+                char buf[2];
+                buf[0] = (char)token;
+                buf[1] = 0;
+                parseContext.error(loc, "unexpected token", buf, "");
+            } else if (tokenText[0] != 0)
+                parseContext.error(loc, "unexpected token", tokenText, "");
+            else
+                parseContext.error(loc, "unexpected token", "", "");
             break;
         }
     } while (true);
@@ -644,6 +652,7 @@
     case EHTokBool:
     case EHTokInt:
     case EHTokUint:
+    case EHTokUint64:
     case EHTokDword:
     case EHTokHalf:
     case EHTokFloat:
@@ -829,6 +838,7 @@
     case EHTokRWByteAddressBuffer:
     case EHTokRWStructuredBuffer:
     case EHTokStructuredBuffer:
+    case EHTokTextureBuffer:
     case EHTokSubpassInput:
     case EHTokSubpassInputMS:
         return keyword;
diff --git a/hlsl/hlslTokens.h b/hlsl/hlslTokens.h
index 1c827bf..4426bcc 100755
--- a/hlsl/hlslTokens.h
+++ b/hlsl/hlslTokens.h
@@ -95,6 +95,7 @@
     EHTokBool,
     EHTokInt,
     EHTokUint,
+    EHTokUint64,
     EHTokDword,
     EHTokHalf,
     EHTokFloat,
@@ -283,6 +284,7 @@
     EHTokRWByteAddressBuffer,
     EHTokRWStructuredBuffer,
     EHTokStructuredBuffer,
+    EHTokTextureBuffer,
 
     // variable, user type, ...
     EHTokIdentifier,
@@ -296,6 +298,7 @@
     EHTokConstantBuffer,
 
     // constant
+    EHTokFloat16Constant,
     EHTokFloatConstant,
     EHTokDoubleConstant,
     EHTokIntConstant,
diff --git a/known_good.json b/known_good.json
index 87cc63d..a053d91 100644
--- a/known_good.json
+++ b/known_good.json
@@ -5,14 +5,14 @@
       "site" : "github",
       "subrepo" : "KhronosGroup/SPIRV-Tools",
       "subdir" : "External/spirv-tools",
-      "commit" : "5834719fc17d4735fce0102738b87b70255cfd5f"
+      "commit" : "26a698c34788bb69123a1f3789970a16cf4d9641"
     },
     {
       "name" : "spirv-tools/external/spirv-headers",
       "site" : "github",
       "subrepo" : "KhronosGroup/SPIRV-Headers",
       "subdir" : "External/spirv-tools/external/spirv-headers",
-      "commit" : "061097878467b8e040fbf153a837d844ef9f9f96"
+      "commit" : "12f8de9f04327336b699b1b80aa390ae7f9ddbf4"
     }
   ]
 }
diff --git a/known_good_khr.json b/known_good_khr.json
new file mode 100644
index 0000000..083e771
--- /dev/null
+++ b/known_good_khr.json
@@ -0,0 +1,18 @@
+{
+  "commits" : [
+    {
+      "name" : "spirv-tools",
+      "site" : "gitlab",
+      "subrepo" : "spirv/spirv-tools",
+      "subdir" : "External/spirv-tools",
+      "commit" : "d4e2c2eaa6fd2e9f9cd218ea9add9b0c8ae759ba"
+    },
+    {
+      "name" : "spirv-tools/external/spirv-headers",
+      "site" : "gitlab",
+      "subrepo" : "spirv/SPIRV-Headers",
+      "subdir" : "External/spirv-tools/external/spirv-headers",
+      "commit" : "4082a777bd5df31ed45acf40e64263094e85ed2e"
+    }
+  ]
+}
diff --git a/make-revision b/make-revision
index 492e437..a89ff08 100755
--- a/make-revision
+++ b/make-revision
@@ -1,10 +1,6 @@
 #!/bin/sh
 (
 echo "// This header is generated by the make-revision script."
-echo "// For the version, it uses the latest git tag followed by the number of commits."
-echo "// For the date, it uses the current date (when then script is run)."
-
 echo
-echo \#define GLSLANG_REVISION \"`git describe --tags --abbrev=0`.`git log --oneline | wc -l`\"
-echo \#define GLSLANG_DATE \"`date +%d-%b-%Y`\"
+echo \#define GLSLANG_PATCH_LEVEL `git log --oneline | wc -l`
 ) > glslang/Include/revision.h
diff --git a/update_glslang_sources.py b/update_glslang_sources.py
index b2988f9..550bc2b 100755
--- a/update_glslang_sources.py
+++ b/update_glslang_sources.py
@@ -28,8 +28,12 @@
 
 KNOWN_GOOD_FILE = 'known_good.json'
 
+SITE_TO_KNOWN_GOOD_FILE = { 'github' : 'known_good.json',
+                            'gitlab' : 'known_good_khr.json' }
+
 # Maps a site name to its hostname.
-SITE_TO_HOST = { 'github' : 'github.com' }
+SITE_TO_HOST = { 'github' : 'https://github.com/',
+                 'gitlab' : 'git@gitlab.khronos.org:' }
 
 VERBOSE = True
 
@@ -82,14 +86,11 @@
         self.subdir = json['subdir'] if ('subdir' in json) else '.'
         self.commit = json['commit']
 
-    def GetUrl(self, style='https'):
+    def GetUrl(self):
         """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,
+        return '{host}{subrepo}'.format(
                     host=host,
-                    sep=sep,
                     subrepo=self.subrepo)
 
     def AddRemote(self):
@@ -120,9 +121,10 @@
         command_output(['git', 'checkout', self.commit], self.subdir)
 
 
-def GetGoodCommits():
+def GetGoodCommits(site):
     """Returns the latest list of GoodCommit objects."""
-    with open(KNOWN_GOOD_FILE) as known_good:
+    known_good_file = SITE_TO_KNOWN_GOOD_FILE[site]
+    with open(known_good_file) as known_good:
         return [GoodCommit(c) for c in json.loads(known_good.read())['commits']]
 
 
@@ -130,10 +132,12 @@
     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 \'.\'.")
+    parser.add_argument('--site', dest='site', default='github',
+                        help="Set git server site. Default is github.")
 
     args = parser.parse_args()
 
-    commits = GetGoodCommits()
+    commits = GetGoodCommits(args.site)
 
     distutils.dir_util.mkpath(args.dir)
     print('Change directory to {d}'.format(d=args.dir))
@@ -141,7 +145,7 @@
 
     # 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)):
+    for c in sorted(commits, key=lambda x: x.subdir):
         print('Get {n}\n'.format(n=c.name))
         c.Checkout()
     sys.exit(0)